温馨提示×

centos怎么限制sftp用户目录

小樊
33
2026-09-11 21:33:09
栏目: 智能运维

在 CentOS 上限制 SFTP 用户只能访问指定目录(不能 SSH 登录、不能越权),最常用、最安全的做法是使用 OpenSSH 自带的 internal-sftp + Chroot

下面按步骤说明(CentOS 7 / 8 / Stream 通用)。


一、创建 SFTP 用户和组

# 创建 sftp 组
groupadd sftp

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

# 设置密码
passwd sftpuser

二、创建并配置 Chroot 目录

⚠️ 重点:Chroot 目录及其父目录必须属主为 root,且其他用户不可写

# 根目录(chroot)
mkdir -p /data/sftp/sftpuser

# 用户实际可写目录
mkdir -p /data/sftp/sftpuser/upload

# 权限设置(非常关键)
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

chown sftpuser:sftp /data/sftp/sftpuser/upload
chmod 755 /data/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 Group sftp
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no
    PermitTunnel no

%u 会自动替换为用户名(sftpuser)


四、重启 SSH 服务

systemctl restart sshd

五、测试 SFTP

sftp sftpuser@服务器IP

✅ 成功表现:

  • 只能看到 /upload
  • 不能 cd /
  • 不能 SSH 登录

六、常见问题

❌ 登录失败:broken pipe / chroot failed

原因:

  • Chroot 目录不是 root:root
  • Chroot 目录有写权限(如 777)

✅ 解决:

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

✅ 想多个用户共用一个目录?

ChrootDirectory /data/sftp

并确保 /data/sftp 属主为 root。


七、可选增强(生产推荐)

  • 使用 SELinux(CentOS 默认开启)
  • 限制 IP 登录
  • 使用 key 登录代替密码
  • 配合 auditd 审计操作

如果你愿意,我可以:

  • 帮你写 一键脚本
  • 配置 多用户不同目录
  • 限制 只读 / 只写
  • 排查你当前的 SSH 配置问题

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

0