如何锁定 SFTP 用户?

如何锁定 SFTP 用户?

我确实需要一些帮助,我一直试图使用 来监禁用户ubuntu

注意事项:

  1. james是用户
  2. sshusers是团体
  3. /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的递归选项,并删除权限。修改后的集合将如下所示:chownchmod/home/jamesread

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了解详情。

相关内容