温馨提示×

CentOS SFTP如何加用户

小樊
49
2026-07-20 10:26:11
栏目: 智能运维

CentOS 上配置 SFTP 用户,常见且安全的做法是:
使用 OpenSSH 自带的 SFTP + 限制用户只能 SFTP,不能 SSH 登录,通常配合 ChrootDirectory 使用。

下面是一套标准、推荐的做法(CentOS 7/8 通用)。


一、创建 SFTP 用户

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

useradd -m -s /sbin/nologin sftpuser
  • -m:创建家目录
  • -s /sbin/nologin:禁止 SSH 登录
  • sftpuser 为用户名,可自行修改

2. 设置密码

passwd sftpuser

二、创建 SFTP 专用目录(关键)

⚠️ ChrootDirectory 必须对 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

三、配置 SSH(最重要的一步)

编辑 SSH 配置:

vim /etc/ssh/sshd_config

1. 确认 SFTP 子系统存在

Subsystem sftp internal-sftp

2. 添加 SFTP 用户限制配置(加到文件末尾)

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

如果你是多个 SFTP 用户,也可以用:

Match Group sftpusers

四、重启 SSH 服务

systemctl restart sshd

五、测试 SFTP 登录

在另一台机器上测试:

sftp sftpuser@服务器IP

✅ 成功示例:

sftp> pwd
Remote working directory: /
sftp> cd upload
sftp> put test.txt

六、常见问题排查

1. 登录失败: broken chroot

bad ownership or modes for chroot directory

✅ 检查:

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

2. SELinux(CentOS 常见)

如果 SELinux 开启,可能导致无法访问。

查看状态:

getenforce

临时关闭测试:

setenforce 0

如果关闭后可用,说明是 SELinux 问题,建议配置:

semanage fcontext -a -t ssh_home_t "/data/sftp/sftpuser(/.*)?"
restorecon -Rv /data/sftp/sftpuser

七、批量 SFTP 用户(推荐方式)

创建用户组

groupadd sftpusers
useradd -m -g sftpusers -s /sbin/nologin user1

sshd_config

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

八、总结(速查表)

项目 说明
用户 shell /sbin/nologin
SFTP 目录 必须是 root 拥有
上传目录 单独创建并赋予用户
SSH 配置 internal-sftp + ChrootDirectory
SELinux 注意影响

如果你需要: ✅ 只允许密钥登录
限制磁盘配额
Web + SFTP 共用目录
Docker 环境 SFTP

可以告诉我你的具体场景,我给你定制方案。

0