允许“另一个”用户通过 sshd 在我的服务器上进行个人备份,无需 shell 访问(公钥登录)

允许“另一个”用户通过 sshd 在我的服务器上进行个人备份,无需 shell 访问(公钥登录)

我在家里搭建了一个 Ubuntu 服务器只是为了学习“东西”。我做得有点过头了,我的 SSD 上还有一些空闲空间。我准备给朋友一些空间来在我的计算机上进行备份。他也会给我同样的机会。利润!!

以下是我的系统的要求/设置:

  • 用户只能使用密钥对通过 sshd 登录。这就是我在系统上配置 ssh 的方式。不允许密码访问。

  • 附加用户不应具有 shell 访问权限或以任何方式在我的服务器上执行命令

  • 我只想授予 sshd 对位于 /mnt/copro 中的文件夹的写入和读取权限。他将通过 sshd 使用 duplicati 来进行备份。

一般来说,该文件夹应该可以作为(哑)文件服务器访问,但可以通过 ssh 访问,并且只能使用密钥对进行访问。

我确实做了一些研究,但我没有找到总体令人满意的答案,或者我无法正确组合我在工作解决方案中找到的答案:

因此我的问题是:

  • 如何创建没有 shell 访问权限的用户
  • 我如何允许此类用户读/写访问我选择的文件夹
  • 我在哪里存储该特定用户的私钥

谢谢你的协助。

答案1

我假设您使用 OpenSSH 作为 SSH 服务器,我相信这是 Ubuntu 上的默认设置。

复制品的文档明确表明您实际上只需要 SFTP 访问;这使得这变得更容易。

  1. 您设置了一个Match UserMatch Group部分来/etc/ssh/sshd_config将用户与多个选项相匹配,最关键的ForceCommand是,可能ForceCommand internal-sftp(在某些情况下您可能会使用一个外部 sftp 服务器,这实际上可以是任何命令 - 它也可以用于某些事情)例如,仅git访问。)您很可能还希望阻止各种转发。不幸的是,您必须密切关注 SSH 升级,添加更多内容;最后我检查了你想要的(注意其中一些默认为“否”):
    AllowAgentForwarding no
    AllowTCPForwarding no
    AllowStreamLocalForwarding no
    PermitTTY no
    PermitTunnel no
    PermitUserEnvironment no
    PermitUserRC no
    X11Forwarding no
  1. 首先,从文件系统权限开始。这应该可以保护您的个人文件;$HOME其他用户不应该读取您的内容!

    然而,有很多地方是全局可读的(但你可能并不真正关心用户是否可以阅读/bin/sh;当然他/她可以从你的发行版下载它)。还有一些全局可写目录,例如/tmp.您可以使用 ChrootDirectory 来保护这两个目录,但请注意,chroot 目录需要由 root 拥有并且用户不可写入(否则将是一个巨大的安全问题,并且 sshd 不会允许这样做)。因此,如果您有ChrootDirectory /mnt/copro,那么您需要将其设为0755 root:root,并且内部有一个/mnt/copro/data(或类似的),由用户拥有。出于安全原因,其名称绝对不应该是etc或任何其他常见的顶级目录(binusrlib等)。

  2. 最简单的可能是将授权密钥文件放在用户主目录的正常位置(~/.ssh/authorized_keys,就像任何其他用户一样)。该主目录可能应该位于 之外/mnt/copro,因为如果可能的话,最好不要让受限用户写入自己的主目录$HOME。如果需要,您可以在块AuthorizedKeysFile内部设置替代位置Match

PS:Duplicati 支持其他后端。因此,如果您更熟悉 Apache 等设置,也许您想建议使用 WebDAV。或者您可能拥有大量存储空间并且可以提供 S3 兼容接口等。

答案2

要创建没有 shell 访问权限的用户帐户,

sudo adduser --shell /bin/false mysftpfriend

您应该为 mysftpfriend 创建一个目录和目录结构,并使其可供访问。

sudo mkdir -p /var/mysftpfriends/storage

要授予访问权限,

sudo chown mysftpfriend:mysftpfriend /var/mysftpfriends/storage

只需将 root 设置为对 mysftpfriends 目录具有完全访问权限(所有者和组所有者)即可。

sudo chown root:root /var/mysftpfriends
sudo chmod 0766 /var/mysftpfriends

组成员可以读/写,但不能执行。

现在,要配置仅用于 SFTP 的 SSH,请/etc/ssh/sshd_config在文本编辑器(nano 或 vim)中打开,

sudo nano /etc/ssh/sshd_config

将以下行添加到文件末尾,

Match User mysftpfriend
    ForceCommand internal-sftp
    PasswordAuthentication yes
    ChrootDirectory /var/mysftpfriends
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

保存文件,退出编辑器并重新启动 ssh。

sudo service ssh restart

就这样,现在尝试 ssh 到控制台并测试文件读/写,并确保 sftpfriend 用户无法执行。

sftp mysftpfriend@myserver

全做完了!

相关内容