温馨提示×

centos如何创建sftp账号

小樊
37
2026-09-30 03:24:17
栏目: 智能运维

在 CentOS 上创建 SFTP 账号(仅用于 SFTP,不能 SSH 登录)通常的做法是:
新建系统用户 + 限制到指定目录 + 使用 internal-sftp。

下面以 CentOS 7 / 8 为例,一步步说明。


一、创建 SFTP 用户

# 创建用户
useradd sftpuser

# 设置密码
passwd sftpuser

如果你不想让该用户有系统登录权限(推荐):

usermod -s /sbin/nologin sftpuser

二、创建 SFTP 根目录

⚠️ 重要规则:
SFTP 根目录的上级目录必须是 root 所有,且权限不能大于 755

# 创建目录
mkdir -p /data/sftp/sftpuser

# 设置所有者(必须是 root)
chown root:root /data/sftp
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

# 用户可写目录
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload

三、修改 SSH 配置

编辑 SSH 配置文件:

vi /etc/ssh/sshd_config

1️⃣ 注释掉原 Subsystem(如果有)

# Subsystem sftp /usr/libexec/openssh/sftp-server

2️⃣ 添加 internal-sftp

Subsystem sftp internal-sftp

3️⃣ 添加 SFTP 用户限制

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

✅ 如果是一组用户,可用:

Match Group sftp

四、重启 SSH 服务

systemctl restart sshd

五、测试 SFTP 登录

sftp sftpuser@服务器IP

登录后:

  • 根目录是 /
  • 实际对应服务器路径:/data/sftp/sftpuser
  • 只能在 upload 目录写文件

六、常见问题

1️⃣ 登录报错:

fatal: bad ownership or modes for chroot directory

✅ 原因:Chroot 目录不是 root 所有或权限不对
✅ 解决:

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

2️⃣ 想让多个用户共用一个目录?

groupadd sftp
usermod -G sftp sftpuser
chown root:sftp /data/sftp/sftpuser

3️⃣ 禁用 SSH 登录但允许 SFTP

usermod -s /sbin/nologin sftpuser

如果你需要:

  • ✅ 多用户 SFTP
  • ✅ 限制磁盘配额
  • ✅ 使用密钥登录
  • ✅ Docker / SELinux 环境

可以告诉我你的具体场景,我可以给你更合适的方案。

0 踩