在 CentOS 上限制 SFTP 用户(如禁止 SSH、只能 SFTP、限制目录、禁止执行命令等),最常用、最安全的方式是使用 internal-sftp + Chroot。下面按推荐方案 → 常见需求 → 常见问题给你一个完整说明。
internal-sftp 限制 SFTP(最常用)ls、bash)# 创建用户
useradd -m sftpuser
# 设置密码
passwd sftpuser
⚠️ Chroot 目录必须满足:
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
编辑:
vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp
❗ 不要用
/usr/libexec/openssh/sftp-server
在文件末尾添加:
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
✅ 含义:
ChrootDirectory:限制根目录ForceCommand internal-sftp:禁止 SSHAllowTcpForwarding no:禁止端口转发systemctl restart sshd
sftp sftpuser@服务器IP
✅ 成功表现:
/uploadbash、sshgroupadd sftpusers
usermod -G sftpusers sftpuser
修改 sshd_config:
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
目录结构:
/data/sftp/
└── user1
└── upload
└── user2
└── upload
chmod 555 /data/sftp/sftpuser/upload
或配合 umask:
ForceCommand internal-sftp -u 022
yum install quota
然后配置磁盘配额(适合多用户场景)
✅ 这是 Chroot 的默认效果
用户登录后:
pwd
/
看不到 /home、/etc 等系统目录
原因:
root 属主✅ 解决:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
sshd -t
查看配置错误
✅ 最安全 SFTP 配置
internal-sftpChrootDirectoryForceCommand internal-sftp✅ 适合场景
如果你愿意,我可以帮你:
只要告诉我你的 CentOS 版本和使用场景 即可。