有一个类似这样的配置这
AllowUsers sftpu
Match Group sftpg
ChrootDirectory /home/sftp
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
条目passwd
(组 7700 被命名为sftpg
)
sftpu:x:7700:7700::/home/sftp/allu:/bin/false
和allu
目录
drwxrwxr-x 4 guacam sftpg 4096 Sep 16 2019 /home/sftp/allu/
这几乎成功了。chroot有效,但不像那个人说的那样
chroot 之后,sshd(8) 将工作目录更改为用户的主目录
用户登录后的工作目录是/home/sftp
,而不是/home/sftp/allu
,我的猜测是因为/home/sftp/allu
属于guacam
而不是sftpu
(而sftpg
组有权rwx
访问allu
并可以写入。这是因为多个用户应该共享同一个allu
目录)。
除非上面的配置有问题,否则 sshd 子系统中是否有命令可以
- 强制 chdir(在 chroot 之后)转到用户主目录
- 放宽一点访问规则
- ...
同时保持相同的目录树和访问权限?
答案1
sshd 无法将工作目录更改为用户的主目录,因为它不存在。因此它将工作目录设置为/
。
您为该用户分配了主目录/home/sftp/allu
。但随后您将用户 chroot 到/home/sftp
。这意味着相对于 chroot ,该目录位于/allu
!不是/home/sftp/allu
。
您需要知道,chroot 会导致登录用户可以访问的根目录更改为文件系统中的某个较低点,并且所有路径都与该点相关。因此,如果用户必须访问/home/sftp/allu
chroot 目录内部/home/sftp
,那么在实际文件系统外部,目录将是/home/sftp/home/sftp/allu
。