为 SFTP 用户配置 Chroot

为 SFTP 用户配置 Chroot

我正在尝试配置 SFTP 服务器以进行一些自动备份。我配置了 Ubuntu 14.04 服务器并取得了部分成功。我想要实现的想法是:

  1. 将为每个要备份的特定系统创建一个用户。仅限 SFTP。
  2. 用户将被 Chrooted 并且无法在其主目录之外进行读取或写入。
  3. 一旦登录,用户的主目录将成为“根”。
  4. 用户将能够将文件上传到根目录。(这就是我遇到的问题。)

我使用以下代码片段在 sshd_config 中创建 Chroot,如下所示:

Match Group sftpbackup
   ChrootDirectory /srv/sftpbackup/%u
   X11Forwarding no
   AllowTcpForwarding no
   ForceCommand internal-sftp

然后我根据要求设置 /srv/sftpbackup 的权限。

# ls -l
total 4
drwxr-x--- 3 root sftpbackup 4096 Jan  5 15:29 user1
# 

现在,用户可以登录但无法上传文件(权限被拒绝)。如果我将目录所有权更改为如下所示:

# ls -l
total 4
drwxrwx--- 3 user1 sftpbackup 4096 Jan  5 15:29 user1
# 

然后用户无法登录,从auth.log来看:

sshd[14835]: fatal: bad ownership or modes for chroot directory "/srv/sftpbackup/user1"

似乎如果用户的主目录是 SFTP chroot,则 root 必须拥有该目录,因此必须创建一个子目录以便用户可以写入它。

有没有办法让根目录可写?查看了各种网站,似乎没有办法实现我想要的。但我不太明白让 chroot 目录可由用户写入和让子目录可写之间有什么区别。如果能提供见解,我将不胜感激。

注意:我的目标是创建一个服务器,各种设备都可以在其中存储备份。这些设备将由第三方供应商配置,因此我试图让事情尽可能简单(每个设备一个用户名,登录后所有文件都转到“根目录”)和安全(创建的用户对服务器的权限最小)。如果我的要求有点严格,请原谅。

答案1

Internal-sftp 要求 chrooted 用户主目录驻留在 root 拥有的目录中:

/some/path/root-owned/user-dir1
                     /user-dir2

根目录拥有的目录应具有 555 权限,而用户目录应由根目录创建并归特定用户所有。在子目录中,用户可以执行任何操作,但不能删除或重命名用户目录[12]。

这是内部 sftp 限制。

相关内容