在 CentOS 上配置 SFTP,通常有两种常见需求:
下面我分别说明,你按需要选。
CentOS 默认已安装 OpenSSH,SFTP 一般直接用。
systemctl status sshd
如果没有运行:
systemctl start sshd
systemctl enable sshd
useradd sftpuser
passwd sftpuser
sftp sftpuser@服务器IP
✅ 到这一步,普通 SFTP 就已经可用了。
这是生产环境最常见做法。
useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
⚠️ SFTP 根目录必须是 root 拥有,且其他用户不能有写权限
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload
编辑:
vi /etc/ssh/sshd_config
注释或确认:
#Subsystem sftp /usr/libexec/openssh/sftp-server
添加:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
如果有多个用户,可用:
Match Group sftp
systemctl restart sshd
sftp sftpuser@服务器IP
✅ 只能进 /upload 上传
❌ 不能 SSH 登录
❌ 不能访问系统其他目录
fatal: bad ownership or modes for chroot directory
原因:Chroot 目录不是 root 拥有或权限不对
解决:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
setsebool -P ssh_chroot_rw_homedirs on
| 需求 | 做法 |
|---|---|
| 简单 SFTP | 直接用系统用户 |
| 安全 SFTP | Chroot + internal-sftp |
| 多用户 | 用 Match Group |
如果你告诉我:
我可以给你一份可直接用的完整配置。