温馨提示×

CentOS如何设置SFTP用户

小樊
46
2026-08-03 23:14:46
栏目: 智能运维

在 CentOS 上设置 SFTP 用户(仅用于 SFTP,禁止 SSH 登录)通常使用 OpenSSH 自带的 internal-sftp,这是最安全、最常用的方式。下面给你一套标准、可生产使用的配置流程


一、环境说明

  • 系统:CentOS 7 / CentOS 8 / Rocky / Alma 均适用
  • 使用 OpenSSH
  • 创建 仅 SFTP 用户,不能 SSH 登录
  • 使用 Chroot 限制用户目录

二、安装 OpenSSH(一般已安装)

rpm -qa | grep openssh

如未安装:

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

三、创建 SFTP 用户

1️⃣ 创建用户(不允许 SSH 登录)

useradd -m -s /sbin/nologin sftpuser

设置密码:

passwd sftpuser

四、创建 SFTP 根目录(Chroot 目录)

⚠️ 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

✅ 用户登录后只能在 upload 目录写入文件


六、配置 SSH(关键步骤)

编辑 SSH 配置文件:

vi /etc/ssh/sshd_config

1️⃣ 确认以下行存在(默认一般都有)

Subsystem sftp internal-sftp

2️⃣ 在文件末尾添加 SFTP 配置

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

✅ 说明:

  • Match User:仅对该用户生效
  • ChrootDirectory:限制根目录
  • ForceCommand internal-sftp:禁止 SSH
  • AllowTcpForwarding no:防止端口转发

七、重启 SSH 服务

systemctl restart sshd

八、测试 SFTP 登录

本地测试

sftp sftpuser@localhost

登录后查看目录

pwd
ls

应看到:

Remote working directory: /

只能在 upload 目录上传文件。


九、常见问题排查

❌ 登录失败(Chroot 目录权限错误)

错误日志:

fatal: bad ownership or modes for chroot directory

✅ 解决:

chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

❌ 无法上传文件

  • 确认上传目录不在 Chroot 根目录
  • 上传目录属主必须是该用户

十、批量创建 SFTP 用户(可选)

useradd -m -s /sbin/nologin sftpuser2
mkdir -p /data/sftp/sftpuser2/upload
chown root:root /data/sftp/sftpuser2
chown sftpuser2:sftpuser2 /data/sftp/sftpuser2/upload

十一、安全建议(生产环境)

✅ 禁用 SSH 登录
✅ 使用密钥认证(可选)
✅ 限制 IP 访问(sshd_config 或防火墙)
✅ 定期审计 /var/log/secure


如果你需要:

  • SFTP + 公钥认证
  • 多用户统一目录
  • 只读 / 只写 SFTP
  • CentOS 9 / Rocky / Alma

可以直接告诉我你的使用场景。

0