温馨提示×

CentOS如何限制SFTP用户

小樊
41
2026-08-18 21:54:00
栏目: 智能运维

CentOS 上限制 SFTP 用户(如禁止 SSH、只能 SFTP、限制目录、禁止执行命令等),最常用、最安全的方式是使用 internal-sftp + Chroot。下面按推荐方案 → 常见需求 → 常见问题给你一个完整说明。


✅ 一、推荐方案:使用 internal-sftp 限制 SFTP(最常用)

适用场景

  • 用户 只能 SFTP
  • 不能 SSH 登录
  • 只能访问自己的目录
  • 不能执行系统命令(如 lsbash

一、创建 SFTP 用户

# 创建用户
useradd -m sftpuser

# 设置密码
passwd sftpuser

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

⚠️ Chroot 目录必须满足:

  • 属主是 root
  • 权限不能是组或他人可写(最多 755)
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 配置(关键)

编辑:

vi /etc/ssh/sshd_config

1️⃣ 确保启用 sftp

Subsystem sftp internal-sftp

❗ 不要用 /usr/libexec/openssh/sftp-server


2️⃣ 添加 SFTP 用户限制

在文件末尾添加:

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

✅ 含义:

  • ChrootDirectory:限制根目录
  • ForceCommand internal-sftp:禁止 SSH
  • AllowTcpForwarding no:禁止端口转发

五、重启 SSH

systemctl restart sshd

六、测试 SFTP

sftp sftpuser@服务器IP

✅ 成功表现:

  • 登录后根目录是 /
  • 只能看到 upload
  • 无法执行 bashssh

✅ 二、限制多个 SFTP 用户(推荐)

方法 1:按用户组限制(推荐)

groupadd sftpusers
usermod -G sftpusers sftpuser

修改 sshd_config:

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

目录结构:

/data/sftp/
└── user1
    └── upload
└── user2
    └── upload

✅ 三、限制权限(上传 / 下载 / 禁止删除)

1️⃣ 禁止删除文件

chmod 555 /data/sftp/sftpuser/upload

或配合 umask

ForceCommand internal-sftp -u 022

2️⃣ 限制磁盘配额(可选)

yum install quota

然后配置磁盘配额(适合多用户场景)


✅ 四、禁止 SFTP 用户查看其他用户目录

✅ 这是 Chroot 的默认效果

用户登录后:

pwd
/

看不到 /home/etc 等系统目录


✅ 五、常见问题排查

❌ 登录失败:broken pipe / chroot failed

原因:

  • Chroot 目录不是 root 属主
  • Chroot 目录权限 > 755

✅ 解决:

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

❌ sshd 启动失败

sshd -t

查看配置错误


✅ 六、总结(最佳实践)

最安全 SFTP 配置

  • internal-sftp
  • ChrootDirectory
  • ForceCommand internal-sftp
  • 禁止 SSH
  • 限制目录写权限

适合场景

  • 文件上传 / 下载
  • 客户 / 外包 / 运维隔离
  • 替代 FTP

如果你愿意,我可以帮你:

  • ✅ 写一个 完整可直接用的 sshd_config
  • ✅ 给你一个 自动化创建 SFTP 用户的脚本
  • ✅ 区分 CentOS 7 / 8 / Rocky / Alma

只要告诉我你的 CentOS 版本和使用场景 即可。

0