在 CentOS 上配置 SFTP(SSH File Transfer Protocol),通常使用 OpenSSH 自带的功能即可,不需要额外安装 FTP 服务。下面我从最常见、最安全的方式开始讲解。
rpm -qa | grep openssh
如果没有安装:
yum install -y openssh-server
启动并设置开机自启:
systemctl enable sshd
systemctl start sshd
useradd sftpuser
passwd sftpuser
sftp sftpuser@服务器IP
✅ 此时 SFTP 已经可用
❗ 该用户 可以登录系统,也可以 SSH 登录(安全性较低)
useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
编辑配置文件:
vi /etc/ssh/sshd_config
在文件末尾添加:
# 启用 SFTP 子系统
Subsystem sftp internal-sftp
# SFTP 用户限制
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory 必须属于 root,且不能被其他用户写
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
创建可写目录:
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
chmod 755 /home/sftpuser/upload
systemctl restart sshd
sftp sftpuser@服务器IP
groupadd sftpusers
useradd -m -g sftpusers -s /sbin/nologin user1
useradd -m -g sftpusers -s /sbin/nologin user2
passwd user1
passwd user2
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /home/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
chown root:root /home/user1
chmod 755 /home/user1
mkdir /home/user1/upload
chown user1:sftpusers /home/user1/upload
检查:
ChrootDirectory 权限internal-sftpfirewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
如果你愿意,我可以帮你:
✅ 写一份 生产环境 SFTP 规范配置
✅ 配置 只允许某个 IP 访问 SFTP
✅ 配置 日志审计
✅ CentOS 7 vs CentOS 8 差异说明
只要告诉我你的使用场景即可。