在 CentOS 上配置 SFTP(SSH File Transfer Protocol) 通常基于 OpenSSH,不需要额外安装 FTP 服务。下面以 CentOS 7 / 8 / Stream 为例,分步骤说明如何配置。
openssh-server检查 SSH 服务:
systemctl status sshd
若未安装:
yum install -y openssh-server
systemctl enable --now sshd
useradd sftpuser
passwd sftpuser
usermod -s /sbin/nologin sftpuser
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
⚠️ 注意:
- Chroot 目录必须由 root 拥有
- 用户只能在其子目录中写文件
编辑配置文件:
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 sftpusers
systemctl restart sshd
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
setsebool -P ssh_chroot_rw_homedirs on
如仍有问题:
restorecon -Rv /data/sftp
sftp sftpuser@服务器IP
连接类型选择 SFTP,端口 22
| 问题 | 原因 |
|---|---|
| broken pipe | Chroot 目录权限不对 |
| 无法写入 | 写目录不是用户拥有 |
| 能 SSH 登录 | 没设置 nologin |
| 登录失败 | sshd 未重启 |
如果你需要 多用户配置 / 公匙登录 / 禁止密码 / Docker SFTP,可以继续问我。