在 CentOS(7/8/Stream 通用) 上添加 SFTP 账号,通常推荐使用 OpenSSH 自带的 SFTP + Chroot 方式,安全且不需要额外安装 FTP 服务。下面给你一套标准、安全、常用的做法。
确认已安装并启用 SSH:
systemctl status sshd
如未安装(极少情况):
yum install -y openssh-server
systemctl enable sshd
systemctl start sshd
useradd -m -s /sbin/nologin sftpuser
说明:
-m:创建 home 目录-s /sbin/nologin:禁止 SSH 登录(只能 SFTP)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
编辑 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 Group sftpusers
systemctl restart sshd
sftp sftpuser@localhost
sftp sftpuser@服务器IP
✅ 登录后只能看到 /upload 目录
✅ 不能访问系统其他目录
查看日志:
journalctl -u sshd -f
常见原因:
755临时关闭:
setenforce 0
永久(需重启):
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
groupadd sftpusers
usermod -aG sftpusers sftpuser
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
目录结构:
/data/sftp/user1
/data/sftp/user2
| 方式 | 推荐度 |
|---|---|
| OpenSSH SFTP + Chroot | ✅✅✅✅✅ |
| vsftpd | ❌ |
| Pure-FTPd | ⚠️ |
如果你需要:
可以直接告诉我你的使用场景,我可以给你定制方案。