将 SFTP 用户限制在其主文件夹中

将 SFTP 用户限制在其主文件夹中

我想将 SFTP 用户限制在他们的主文件夹中,这样他们就不会看到任何其他人的文件夹/主目录。不幸的是,目前所有 SFTP 用户都可以看到其他用户的文件夹。所有帖子和示例都指出了这一点,ChrootDirectory但出于某种原因,我无法让它发挥作用。

$ sudo nano /etc/ssh/sshd_config

Subsystem sftp internal-sftp
Match Group sftp
  ChrootDirectory %h            # The %h causes "Broken pipe" error while trying to login
  ChrootDirectory /var/sftp     # This allows login but all SFTP folders are visible to all user
  X11Forwarding no
  AllowTcpForwarding no
  AllowAgentForwarding no
  PermitTunnel no
  ForceCommand internal-sftp

用户、权限和文件夹

我使用以下命令来创建用户和文件夹。

sudo useradd -m -d /var/sftp/hello -G sftp hello --shell /usr/sbin/nologin

结果

ubuntu@linux:~$ grep hello /etc/passwd
hello:x:1001:1002::/var/sftp/hello:/usr/sbin/nologin

ubuntu@linux:~$ grep world /etc/passwd
world:x:1002:1003::/var/sftp/world:/usr/sbin/nologin

ubuntu@linux:~$ ls -l /var/
drwxr-xr-x  4 root root   4096 May  7 14:48 sftp

ubuntu@linux:~$ ls -l /var/sftp/
drwxr-xr-x 3 hello sftp 4096 May  7 14:01 hello
drwxr-xr-x 2 world sftp 4096 May  7 14:48 world

解决方案

这里的问题是,我必须让root:root拥有我的用户的主文件夹,并在用户的主文件夹下创建另一个文件夹(例如uploads),然后以 的身份拥有它hello|world:sftp。最初主文件夹归 拥有hello|world:sftp

答案1

出于安全原因,用户chroot不应能够创建任意文件(例如/etc/shadow和无数其他文件)。这就是为什么 sshd 强制您夺走 chrooted 目录本身的所有权和写入权限的原因:

chown root:root /var/sftp/hello
chmod o-w       /var/sftp/hello

替代解决方案,没有任何 sshdChrootDirectory取决于用户只有在具有权限的情况下才能列出目录r,而使用它只需要x权限:

chown root:root /var/sftp
chmod o=x       /var/sftp    # implicitly removes rw, sets only x

相关内容