我想将 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