温馨提示×

centos 如何限制 sftp 用户

小樊
50
2026-09-02 22:41:19
栏目: 智能运维

在 CentOS 上限制 SFTP 用户(比如只能 SFTP、不能 SSH 登录、限制在某个目录内),最常见的做法是使用 OpenSSH 自带的 internal-sftp + Chroot

下面给你一套实战可用、CentOS 7/8 通用的方案。


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

# 创建用户
useradd sftpuser

# 设置密码
passwd sftpuser

# 禁止 shell 登录
usermod -s /sbin/nologin sftpuser

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

⚠️ Chroot 目录必须 root 拥有,且其他用户不可写

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

用户实际可写目录:

mkdir /sftp/sftpuser/upload
chown sftpuser:sftpuser /sftp/sftpuser/upload

三、配置 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 /sftp/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

✅ 说明:

  • ChrootDirectory:限制根目录
  • ForceCommand internal-sftp:只能 SFTP
  • 不能 SSH、不能端口转发

四、重启 SSH 服务

systemctl restart sshd

五、测试 SFTP

sftp sftpuser@服务器IP

✅ 成功
❌ 如果登录后看到 / 实际是 /sftp/sftpuser,说明配置正确


六、常见限制增强(可选)

✅ 限制多个用户

Match Group sftpusers
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp
groupadd sftpusers
usermod -aG sftpusers sftpuser

✅ 限制 IP 登录(sshd_config)

Match User sftpuser
    AllowUsers sftpuser@192.168.1.0/24

✅ 只读用户

chmod 555 /sftp/sftpuser

七、排错常见错误

fatal: bad ownership or modes for chroot

  • Chroot 目录必须是 root:root
  • 权限不能大于 755

❌ 能 SSH 登录

  • 检查 ForceCommand internal-sftp

如果你愿意,我可以:

  • 给你 CentOS + SELinux 完整配置
  • 多用户权限隔离
  • Docker / FTP 替代方案

直接说你的使用场景就行。

0