在 CentOS 上设置 SFTP 用户(仅用于 SFTP,禁止 SSH 登录)通常使用 OpenSSH 自带的 internal-sftp,这是最安全、最常用的方式。下面给你一套标准、可生产使用的配置流程。
rpm -qa | grep openssh
如未安装:
yum install -y openssh-server
systemctl enable sshd
systemctl start sshd
useradd -m -s /sbin/nologin sftpuser
设置密码:
passwd sftpuser
⚠️ 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 目录写入文件
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
✅ 说明:
Match User:仅对该用户生效ChrootDirectory:限制根目录ForceCommand internal-sftp:禁止 SSHAllowTcpForwarding no:防止端口转发systemctl restart sshd
sftp sftpuser@localhost
pwd
ls
应看到:
Remote working directory: /
只能在 upload 目录上传文件。
错误日志:
fatal: bad ownership or modes for chroot directory
✅ 解决:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
useradd -m -s /sbin/nologin sftpuser2
mkdir -p /data/sftp/sftpuser2/upload
chown root:root /data/sftp/sftpuser2
chown sftpuser2:sftpuser2 /data/sftp/sftpuser2/upload
✅ 禁用 SSH 登录
✅ 使用密钥认证(可选)
✅ 限制 IP 访问(sshd_config 或防火墙)
✅ 定期审计 /var/log/secure
如果你需要:
可以直接告诉我你的使用场景。