SFTP、ChrootDirectory 和多个用户

SFTP、ChrootDirectory 和多个用户

我需要一个设置,可以将多个用户文件夹的内容放到 DMZ 服务器,外部客户端可以从那里下载,协议为 SFTP、Linux、OpenSSH。为了简化管理,我们希望使用单个用户进行上传。

实际工作是ChrootDirectory /home/sftp/在 sshd_config 中定义,设置相应的所有权和模式,并定义主目录,passwd以便用户的工作目录适合。这是我的结构:

/home/sftp/uploader/user1/file1.txt
                   /user2/file2.txt

上传者用户可以写入file1.txt相应file2.txt的文件夹,并且通过将用户文件夹(用户1,用户2)设置为用户的主要组+在文件夹上设置SETGUID,用户甚至可以删除文件(这是必要的)。

唯一的问题:因为/home/sftp/是 chroot 基础目录,用户可以更改 updir 并查看其他用户的文件夹,但由于访问权限而无法更改。

要求:我们希望防止用户更改到 /home/sftp/uploader/ 并查看其他用户的文件夹。我的要求是使用 SFTP,有一个上传用户,并且每个用户都必须对其主目录具有写访问权限。

显然,使用类似的东西不是一个选择,ChrootDirectory %h因为 chroot 路径的每个路径组件都需要具有有限的访问权限,所以据我所知,这是行不通的。

答案1

我通过引入另一个目录级别解决了这个问题:

/srv/sftp/user1/data/file1.txt
          ^^^^^ ^^^^
            | +- 用户主目录
            +------- chroot 目标

OpenSSH 现已配置为 chroot 到目录“user1”,以防止用户脱离自己的目录。用户主目录设置为“/data”,以便用户在 SFTP 登录后的工作目录就是这个。

“user1” 具有 OpenSSH 要求的有限访问权限,该用户对该目录没有写权限。

另一方面,“数据”属于用户并且具有他的主要组以及 SETGUID,以便用户可以在此目录中写入,并且上传用户写入的文件属于正确的组。

答案2

据我了解,我应该在 sshd_config 中为每个用户分别使用 Match user

Match user user1
ChrootDirectory /srv/sftp/user1
Match user user2
ChrootDirectory /srv/sftp/user2
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp

相关内容