我需要一个设置,可以将多个用户文件夹的内容放到 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