在 CentOS 上限制 SFTP 用户只能访问指定目录(不能 SSH 登录、不能访问其他目录),通常使用的是 OpenSSH 自带的 chroot + internal-sftp 方案。下面给你一个标准、可用的配置流程。
internal-sftpChrootDirectory 限制根目录useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
⚠️ Chroot 目录必须由 root 拥有,且其他用户不能有写权限
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload
编辑配置文件:
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果是多个用户:
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
sftp> pwd
Remote working directory: /
sftp> ls
upload
✅ 只能看到 /upload
❌ 不能访问 /etc、/root 等
原因:
解决:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
ChrootDirectory /data/sftp/share
但目录仍必须是 root 拥有
upload 子目录给用户写setfacl -R -m u:sftpuser:rwx /data/sftp/share/upload
✅ 推荐方案:internal-sftp + ChrootDirectory
✅ 安全、无需额外软件
✅ CentOS 7 / 8 / Stream 均适用
如果你需要:
可以继续问我。