在 CentOS 上设置 SFTP 权限,常见目标是:
下面给你一套最常用、最安全的做法(基于 OpenSSH + Chroot)。
useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
✅
/sbin/nologin:禁止 SSH shell 登录
✅ 仅允许 SFTP
⚠️ Chroot 目录必须归 root 所有,且不能被其他用户写
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload
chmod 755 /data/sftp/sftpuser/upload
✅ 用户只能往 upload 里写文件
✅ 上级目录 root 拥有,防止越权
编辑 SSH 配置文件:
vim /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
如果你有多个用户,可以这样:
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
systemctl restart sshd
sftp sftpuser@服务器IP
✅ 成功应看到:
sftp>
❌ 不能执行 cd /
❌ 不能 SSH 登录
原因:
✅ 正确示例:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
原因:
✅ 解决:
mkdir upload
chown sftpuser:sftpuser upload
setsebool -P ssh_chroot_rw_homedirs on
或者临时关闭 SELinux 测试:
setenforce 0
✅ Chroot 目录 root 拥有,755
✅ 用户目录 用户拥有,可写
✅ SSH 使用 internal-sftp
✅ 用户 shell 设为 /sbin/nologin
如果你需要:
告诉我你的具体需求,我可以给你定制配置。