温馨提示×

CentOS怎么添加SFTP账号

小樊
36
2026-08-18 22:10:57
栏目: 智能运维

CentOS(7/8/Stream 通用) 上添加 SFTP 账号,通常推荐使用 OpenSSH 自带的 SFTP + Chroot 方式,安全且不需要额外安装 FTP 服务。下面给你一套标准、安全、常用的做法。


一、准备工作

确认已安装并启用 SSH:

systemctl status sshd

如未安装(极少情况):

yum install -y openssh-server
systemctl enable sshd
systemctl start sshd

二、创建 SFTP 用户(禁止 SSH 登录)

1️⃣ 创建用户

useradd -m -s /sbin/nologin sftpuser

说明:

  • -m:创建 home 目录
  • -s /sbin/nologin:禁止 SSH 登录(只能 SFTP)

2️⃣ 设置密码

passwd sftpuser

三、配置 SFTP 目录(Chroot 限制)

⚠️ Chroot 目录必须归 root 所有,且不能被其他用户写入

1️⃣ 创建 SFTP 根目录

mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

2️⃣ 创建可写目录

mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload
chmod 755 /data/sftp/sftpuser/upload

四、配置 SSH(关键步骤)

编辑 SSH 配置:

vi /etc/ssh/sshd_config

1️⃣ 确认 SFTP 子系统存在

Subsystem sftp internal-sftp

2️⃣ 在文件末尾添加

Match User sftpuser
    ChrootDirectory /data/sftp/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

✅ 如果允许多个用户,可用:

Match Group sftpusers

五、重启 SSH 服务

systemctl restart sshd

六、测试 SFTP 登录

本地测试

sftp sftpuser@localhost

远程测试

sftp sftpuser@服务器IP

✅ 登录后只能看到 /upload 目录
✅ 不能访问系统其他目录


七、常见问题排查

❌ 登录失败 / 闪退

查看日志:

journalctl -u sshd -f

常见原因:

  • Chroot 目录不是 root 拥有
  • 目录权限不是 755
  • SELinux 未放行

✅ 关闭或放行 SELinux

临时关闭:

setenforce 0

永久(需重启):

sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

八、批量用户方案(推荐)

创建用户组

groupadd sftpusers
usermod -aG sftpusers sftpuser

sshd_config

Match Group sftpusers
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp

目录结构:

/data/sftp/user1
/data/sftp/user2

九、对比总结

方式 推荐度
OpenSSH SFTP + Chroot ✅✅✅✅✅
vsftpd
Pure-FTPd ⚠️

如果你需要:

  • 只允许上传不能下载
  • 多用户隔离
  • 限制磁盘配额
  • 和 Nginx / Java / Docker 配合使用

可以直接告诉我你的使用场景,我可以给你定制方案。

0