在 CentOS 上通过 SFTP + chroot 限制用户只能访问指定目录(不能 SSH 登录、不能越界),通常使用 OpenSSH 内置的 internal-sftp 即可,不需要额外装 FTP 服务。
下面给你一套最常用、最稳妥的做法。
useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
mkdir -p /sftp/sftpuser
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
⚠️ 关键点:
mkdir /sftp/sftpuser/upload
chown sftpuser:sftpuser /sftp/sftpuser/upload
编辑 SSH 配置:
vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp
(CentOS 默认是 sftp-server,建议改成 internal-sftp)
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果你要 限制一组用户:
Match Group sftp
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
(需要 groupadd sftp 并把用户加入)
systemctl restart sshd
sftp sftpuser@服务器IP
✅ 成功现象:
/sftp/sftpusercd /原因通常是:
查看日志:
journalctl -u sshd -f
setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /sftp
如果你愿意,我可以:
直接说你的使用场景即可。