我确实需要一些帮助,我一直试图使用 来监禁用户ubuntu
。
注意事项:
james
是用户sshusers
是团体/home/james/upload/
是我希望锁定用户的目录
sshd_配置:
AllowGroups sshusers
Match Group sshusers
ChrootDirectory /home/%u/upload/
ForceCommand internal-sftp
我关注了 答案在 askubuntu 上,这是我的命令
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
问题:
我收到这个错误
Error: Network error: Software caused connection abort
Error: Could not connect to server
我调查了日志,发现了以下内容:
致命:chroot 目录组件“/home/jame/upload/”的所有权或模式错误
但如果我运行以下命令
sudo chown root /home/james/upload
sudo chmod go-w /home/james/upload
它运行完美,用户可以连接,文件夹被锁定但无法删除文件在目录中
Status: Listing directory /
Status: Directory listing successful
Status: Starting upload of C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm
Command: put "C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm" "test"
Error: /test: open for write: permission denied
Error: File transfer failed
请提供建议,我在谷歌上搜索了很多次,现在所有的链接都是紫色的(已访问:P
)
我正在使用 filezilla 客户端进行测试SFTP
。
答案1
该ChrootDirectory
指令要求 chroot 目录归 拥有root
,且其他任何人都无法写入。因此,您不能将用户限制在某个目录中,并允许用户对该目录进行写入。您可以:
Chroot 到家,上传到upload/
您尝试的第一组命令对于这种情况是正确的:
sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload
但是,选项sshd_config
如下:
Match Group sshusers
ChrootDirectory %h
ForceCommand internal-sftp
(%h
被替换为正在验证的用户的主目录,在/home/%u
大多数情况下相当于。)此外,要限制 中文件夹的可见性,并限制那里的写入权限,请在 的第一个命令中使用和/home/james
的递归选项,并删除权限。修改后的集合将如下所示:chown
chmod
/home/james
read
sudo chown root /home/james -R
sudo chmod go-rwx /home/james -R # Disallow traversing any directory in home
sudo chmod go+x /home/james # Allow traversing this directory
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwx /home/james/upload
现在用户只能访问/home/james/upload
或/upload
。
Chroot 上传,上传至upload/some_directory
与上面的几乎相同,/home/james/
用替换/home/james/upload
,并/home/james/upload
用 替换/home/james/upload/some_directory
。没有特别的好处。
将主目录更改james
为/upload
ChrootDirectory 的通常行为是:“chroot 之后,sshd(8) 将工作目录更改为用户的主目录。”因此我们更改了james
的主目录:
usermod -d /upload user
然后将 设置ChrootDirectory
为/home/%u
。使用第一个选项中的相同限制。
答案2
OpenSSH 中内置的 sftp chroot 机制要求 chroot 目录由 root 拥有(并且用户无法写入)。如果目录是 SMB/CIFS 共享(例如,您必须执行绑定挂载),这可能会很麻烦。
更灵活的解决方案之一是使用 MySecureShell (http://mysecureshell.readthedocs.io/en/latest/)
apt install mysecureshell
它无需修改默认的 OpenSSH 设置即可运行。您只需将 SFTP 用户登录 shell 设置为 mysecureshell,它就会为您处理 ACL/虚拟 chroot。有关详细信息,请参阅文档,
例如,一旦安装了 MySecureShell,您就可以添加一个 SFTP 用户(限制在其主目录中),如下所示,
sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01
从上面来看,用户“sftpuser01”将在 SFTP 会话中虚拟 chroot 到“/home/sftpuser01”。
它还提供了很多灵活的选项,通过配置“/etc/ssh/sftp-config”来控制 ACL、组等。请参阅http://mysecureshell.readthedocs.io/en/latest/configuration.html了解详情。