温馨提示×

centos sftp chroot如何配

小樊
57
2026-10-03 01:01:20
栏目: 智能运维

在 CentOS 上配置 SFTP chroot(限制用户只能访问指定目录),通常使用 OpenSSH 内置的 internal-sftp + ChrootDirectory,不需要额外安装 vsftpd。

下面以 CentOS 7 / 8 / Stream 为例说明。


一、基本思路

  • 使用 Subsystem sftp internal-sftp
  • 在 sshd_config 中对指定用户/组启用 ChrootDirectory
  • Chroot 目录必须由 root 拥有,且其他用户不可写
  • 用户在 chroot 目录下通过子目录(如 upload)进行读写

二、创建 SFTP 用户和组

# 创建 sftp 组
groupadd sftp

# 创建用户(不允许 shell 登录)
useradd -g sftp -s /sbin/nologin sftpuser

# 设置密码
passwd sftpuser

三、创建目录结构(重点)

mkdir -p /data/sftp/sftpuser
mkdir -p /data/sftp/sftpuser/upload

# 设置所有者
chown root:root /data/sftp/sftpuser
chown sftpuser:sftp /data/sftp/sftpuser/upload

# 设置权限
chmod 755 /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser/upload

✅ 注意

  • /data/sftp/sftpuser 必须是 root:root
  • 用户实际可写目录是 upload

四、配置 SSH(关键)

编辑 SSH 配置:

vi /etc/ssh/sshd_config

1️⃣ 修改或确认 Subsystem

Subsystem sftp internal-sftp

2️⃣ 在文件末尾添加

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

%u 表示用户名,自动对应 /data/sftp/sftpuser


五、重启 SSH 服务

# CentOS 7
systemctl restart sshd

# CentOS 6
service sshd restart

六、测试 SFTP

sftp sftpuser@服务器IP

登录后:

sftp> pwd
Remote working directory: /

sftp> cd upload
sftp> put test.txt

七、常见问题排查

❌ 登录失败 / 闪退

查看日志:

tail -f /var/log/secure

常见错误:

  • chroot directory does not exist
  • chroot directory writable by group/other
  • 目录不是 root 拥有

❌ 无法上传

  • 确认的不是 chroot 根目录
  • 确认 upload 目录归属正确

八、进阶(可选)

  • 多个用户共用一个 chroot
  • 使用密钥登录(禁用密码)
  • SELinux 下需:
    semanage fcontext -a -t ssh_home_t "/data/sftp(/.*)?"
    restorecon -Rv /data/sftp
    

如果你告诉我:

  • CentOS 版本
  • 是否用密钥
  • 是否多用户

我可以给你一份可直接用的配置模板。

0 踩