在 CentOS 上限制 SFTP 用户(比如只能 SFTP、不能 SSH 登录、限制在某个目录内),最常见的做法是使用 OpenSSH 自带的 internal-sftp + Chroot。
下面给你一套实战可用、CentOS 7/8 通用的方案。
# 创建用户
useradd sftpuser
# 设置密码
passwd sftpuser
# 禁止 shell 登录
usermod -s /sbin/nologin sftpuser
⚠️ Chroot 目录必须 root 拥有,且其他用户不可写
mkdir -p /sftp/sftpuser
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
用户实际可写目录:
mkdir /sftp/sftpuser/upload
chown sftpuser:sftpuser /sftp/sftpuser/upload
编辑配置文件:
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
✅ 说明:
ChrootDirectory:限制根目录ForceCommand internal-sftp:只能 SFTPsystemctl restart sshd
sftp sftpuser@服务器IP
✅ 成功
❌ 如果登录后看到 / 实际是 /sftp/sftpuser,说明配置正确
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
groupadd sftpusers
usermod -aG sftpusers sftpuser
Match User sftpuser
AllowUsers sftpuser@192.168.1.0/24
chmod 555 /sftp/sftpuser
❌ fatal: bad ownership or modes for chroot
❌ 能 SSH 登录
ForceCommand internal-sftp如果你愿意,我可以:
直接说你的使用场景就行。