温馨提示×

centos sftp如何 chroot限制

小樊
38
2026-09-15 02:23:56
栏目: 智能运维

在 CentOS 上通过 SFTP + chroot 限制用户只能访问指定目录(不能 SSH 登录、不能越界),通常使用 OpenSSH 内置的 internal-sftp 即可,不需要额外装 FTP 服务。

下面给你一套最常用、最稳妥的做法


一、前提说明

  • 系统:CentOS 7 / 8 / Stream
  • 使用:OpenSSH(默认已安装)
  • 目标:
    • 用户只能通过 sftp 登录
    • chroot 到自己的目录
    • 不能执行 shell 命令

二、创建用户和目录

1. 创建用户(禁止 SSH 登录)

useradd -m -s /sbin/nologin sftpuser
passwd sftpuser

2. 创建 chroot 目录

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

⚠️ 关键点

  • chroot 目录 必须属主是 root
  • 权限不能大于 755

3. 创建用户可写目录

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

三、配置 SSH(关键)

编辑 SSH 配置:

vi /etc/ssh/sshd_config

1. 注释或确认这一行存在

Subsystem sftp internal-sftp

(CentOS 默认是 sftp-server,建议改成 internal-sftp)


2. 在文件末尾添加 chroot 配置

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

如果你要 限制一组用户

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

(需要 groupadd sftp 并把用户加入)


四、重启 SSH

systemctl restart sshd

五、测试 SFTP

sftp sftpuser@服务器IP

✅ 成功现象:

  • 只能看到 /sftp/sftpuser
  • 不能 cd /
  • 不能在 upload 以外写文件

六、常见问题(很重要)

❌ 登录失败:broken pipe / chroot failed

原因通常是:

  • Chroot 目录不是 root 拥有
  • 权限 > 755
  • SELinux 阻止

查看日志:

journalctl -u sshd -f

✅ SELinux 处理(CentOS 默认开启)

setsebool -P ssh_chroot_rw_homedirs on
restorecon -Rv /sftp

七、总结要点(记住这 4 条)

  1. Chroot 目录必须 root 拥有
  2. 权限 ≤ 755
  3. 子目录可写,属主给用户
  4. ForceCommand internal-sftp

如果你愿意,我可以:

  • 帮你写 多用户模板
  • 配合 公钥登录
  • 或做成 只读 / 只写 模式

直接说你的使用场景即可。

0