在 CentOS 上设置 SFTP 权限,通常目标是:
✅ 用户只能通过 SFTP 访问
✅ 不能 SSH 登录
✅ 限制在特定目录(如 /data/sftp/用户名)
✅ 禁止访问系统其他目录
下面给你一套 最常用、最安全的做法(基于 OpenSSH + Chroot)。
⚠️ Chroot 目录 必须由 root 拥有,且其他用户不能写
useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
/sbin/nologin:禁止 SSH 登录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
chmod 755 /data/sftp/sftpuser/upload
vim /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
✅ 这样该用户 只能 SFTP,不能 SSH
systemctl restart sshd
sftp sftpuser@服务器IP
✅ 成功后应只能看到:
sftp> pwd
Remote working directory: /
❌ 无法访问 /etc、/root 等系统目录
setsebool -P ssh_chroot_rw_homedirs on
查看 SELinux 状态:
getenforce
groupadd sftpusers
usermod -aG sftpusers sftpuser
sshd_config 改为:
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
目录结构:
/data/sftp/user1
/data/sftp/user2
| 目录 | 拥有者 | 权限 |
|---|---|---|
| Chroot 根目录 | root:root | 755 |
| 上传目录 | sftpuser:sftpuser | 755 或 775 |
可以直接告诉我你的 使用场景,我可以给你定制方案。