我遵循了互联网上的多个指南,了解如何限制用户,以便他无法更改/查看其主目录之外的文件。
所以我创建了一个用户,我们称他为 john,我还创建了一个名为 sftp 的组,这是他的主要组。我还将他的主目录更新为我希望他被监禁的目录。 (在这种情况下/var/www/
)然后我添加了一些配置行/etc/ssh/sshd_config
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcoForwarding no
没用过这个。 John 能够访问其主目录之外的目录。然后我尝试使其具体化。
Match User john
ChrootDirectory /var/www
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
也不起作用,约翰仍然可以访问所有文件。所以我什至尝试使用这两种配置,但都不起作用。
Johns shell/bin/bash
虽然在一些指南中提到将其设置为/bin/false
or/bin/nologin
但当然我无法与 Filezilla 连接。
发行版是 Ubuntu 14.04。
答案1
更改块中的下一行Match Group sftp
:
ChrootDirectory /var/www/%u
如果您在 /var/www 中创建的目录以用户命名作为目录名称,那么您将能够使用 chroot 到其 /var/www/user-directory 的多个用户。
您还需要检查权限,/var/www/user-name 目录必须具有 root 作为其用户和组,并且具有 755 权限。在该目录中,您需要创建几个目录或您想要的目录(例如输入和输出目录),这些目录应将用户作为所有者,并将组 sftp 作为组,我建议 700 权限或您认为合适的权限。之后,用户应该能够登录并访问目录,并且无法在根目录中写入任何内容,也无法超出 /var/www/user 树。
将 shell 设置为 /bin/false 或 /bin/nologin 将仅允许 sftp 连接,如果您只想进行 sftp 访问,这很有趣,否则用户将能够 ssh 到系统,而您可能不希望这样做。
编辑:顺便说一句,AllowTcoForwarding no
块 sftp 中的行是错误的,请将其修改为正确的行(AllowTc
pForwarding
)以防这不仅仅是这里的拼写错误。