在 CentOS 上配置 SFTP 的 chroot(限制用户只能访问指定目录),通常使用 OpenSSH 自带的 internal-sftp,不依赖 FTP 服务。下面以 CentOS 7/8 为例说明。
Subsystem sftp internal-sftpsshd_config 中使用 Match User/Group + ChrootDirectoryuseradd -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
✅ 说明:
/sftp/sftpuser 必须是 root:root编辑:
vi /etc/ssh/sshd_config
找到并注释或改为:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
在文件末尾添加:
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果是 用户组方式(推荐):
groupadd sftpusers
usermod -G sftpusers sftpuser
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
setsebool -P ssh_chroot_rw_homedirs on
如仍报错,可临时测试:
setenforce 0
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
sftp> ls
upload
sftp> cd /
sftp> ls
✅ 只能看到 /sftp/sftpuser
fatal: bad ownership or modes for chroot directory
✅ 解决:
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
Match GroupChrootDirectory /sftp/%uMatch 中的用户生效如果你需要:
可以继续告诉我你的使用场景。