有一个看起来像这样的配置
AllowUsers sftpu
Match Group sftpg
ChrootDirectory /home/sftp
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
条目(组 7700被passwd
命名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
, not /home/sftp/allu
,我的猜测是因为/home/sftp/allu
属于guacam
而不是sftpu
(虽然该sftpg
组可以rwx
访问allu
并且可以写入。那是因为几个用户应该共享同一个allu
目录)。
除非上面的配置有缺陷,否则 sshd 子系统中是否有命令
- 强制 chdir(在 chroot 之后)去用户家
- 放宽一点访问规则
- ...
同时保持相同的目录树和访问?
sshd 无法将工作目录更改为用户的主目录,因为它不存在。因此,它将工作目录设置为
/
.您为该用户分配了主目录
/home/sftp/allu
。但随后您将用户 chroot 到/home/sftp
. 这意味着相对于 chroot,该目录位于/allu
! 不是/home/sftp/allu
。您需要知道 chroot 导致登录用户可以访问的根目录将更改为文件系统中的某个较低点,并且所有路径都是相对于该目录的。因此,如果用户必须访问
/home/sftp/allu
chroot 目录内部/home/sftp
,那么在真实文件系统外部,该目录将是/home/sftp/home/sftp/allu
.