温馨提示×

centos sftp如何配chroot

小樊
42
2026-09-18 03:29:20
栏目: 智能运维

在 CentOS 上配置 SFTP 的 chroot(限制用户只能访问指定目录),通常使用 OpenSSH 自带的 internal-sftp,不依赖 FTP 服务。下面以 CentOS 7/8 为例说明。


一、基本思路

  • 使用 Subsystem sftp internal-sftp
  • 在 sshd_config 中使用 Match User/Group + ChrootDirectory
  • chroot 目录必须 root 拥有且其他用户不可写
  • 用户通过 sftp 登录后只能看到 chroot 目录

二、创建用户和目录

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

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

2. 创建 chroot 根目录

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

3. 创建用户可写目录

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

✅ 说明:

  • /sftp/sftpuser 必须是 root:root
  • 用户不能在 chroot 根目录直接写文件

三、配置 SSH(关键)

编辑:

vi /etc/ssh/sshd_config

1. 修改 sftp subsystem

找到并注释或改为:

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

2. 添加 chroot 配置

在文件末尾添加:

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

如果是 用户组方式(推荐):

groupadd sftpusers
usermod -G sftpusers sftpuser
Match Group sftpusers
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

四、SELinux 处理(CentOS 默认开启)

setsebool -P ssh_chroot_rw_homedirs on

如仍报错,可临时测试:

setenforce 0

五、重启 SSH

systemctl restart sshd

六、测试 SFTP

sftp sftpuser@服务器IP

登录后:

sftp> ls
upload
sftp> cd / 
sftp> ls

✅ 只能看到 /sftp/sftpuser


七、常见问题

1. 登录失败(权限错误)

fatal: bad ownership or modes for chroot directory

✅ 解决:

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

2. 想允许多用户各自目录

  • 用 Match Group
  • ChrootDirectory /sftp/%u

3. 是否影响正常 SSH?

  • 不影响,只对 Match 中的用户生效

如果你需要:

  • 多用户多目录
  • 只读 SFTP
  • 结合公钥登录
  • CentOS Stream / Rocky / Alma

可以继续告诉我你的使用场景。

0 踩