You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SFTP用户Chroot后输入/仍能查看Chroot目录内容的解决需求

SFTP用户Chroot后输入/仍能查看Chroot目录内容的解决需求

我来帮你分析并解决这个问题,先理清楚背后的原因:

你配置的ChrootDirectory /var/www/html/会把用户shiv的SFTP会话根目录映射到系统实际的/var/www/html/,所以当用户在FileZilla里输入/时,本质上是在访问这个Chroot后的根目录(也就是实际的html文件夹)。而ForceCommand internal-sftp -d /Sub_Directory只是设置了用户登录后的默认工作目录,并没有限制用户在Chroot范围内切换目录。再加上html文件夹的权限是root:root 755,普通用户shiv拥有读权限,自然就能列出目录内容,这就是问题的根源。

下面给你两个可行的解决方案,按需选择即可:

方案一:调整Chroot目录权限(推荐,无需修改配置文件)

既然用户只需要访问/Sub_Directory,不需要查看Chroot根目录的内容,我们可以修改/var/www/html/的权限,保留执行权限(让用户能进入子目录)但移除读权限(阻止用户列出目录内容):

chmod 711 /var/www/html/

这样设置后,用户shiv输入/会直接返回“Failed to retrieve directory listing”,但依然能正常访问/Sub_Directory(因为执行权限允许进入子目录),完全符合你的需求。

方案二:修改ChrootDirectory直接指向子目录(更严格的隔离)

如果你想彻底让用户的根目录就是Sub_Directory,可以修改sshd_config里的Match块:

Match User shiv
    ChrootDirectory /var/www/html/Sub_Directory
    ForceCommand internal-sftp
    PasswordAuthentication yes
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

⚠️ 注意:Chroot目录的所有者必须是root:root,且权限不能超过755(不能让用户拥有写权限)。如果用户需要在Sub_Directory里读写文件,你可以在该目录下创建子文件夹,设置为shiv:shiv 755权限,或者把Sub_Directory的权限调整为root:shiv 750(让用户拥有读写权限)。

最后,修改完配置或权限后,记得重启sshd服务让设置生效:

systemctl restart sshd

之后用FileZilla测试,就能看到输入/会报错,用户只能访问你指定的目录了。

备注:内容来源于stack exchange,提问作者Shiv Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:49:29