温馨提示×

centos如何限制sftp目录

小樊
38
2026-09-18 03:26:21
栏目: 智能运维

在 CentOS 上限制 SFTP 用户只能访问指定目录(即 chroot 限制),通常使用 OpenSSH 自带的 internal-sftp + ChrootDirectory 方式。下面以 CentOS 7/8 为例说明。


一、创建 SFTP 用户和目录

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

# 设置密码
passwd sftpuser

二、创建目录结构(非常重要)

Chroot 目录必须由 root 拥有,且其他用户不可写。

# 根 chroot 目录
mkdir -p /sftp/sftpuser

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

# 修改权限
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser

chown sftpuser:sftpuser /sftp/sftpuser/upload

✅ 说明:

  • /sftp/sftpuser:root 拥有,用户不能写
  • /sftp/sftpuser/upload:sftpuser 可写

三、修改 SSH 配置

编辑配置文件:

vi /etc/ssh/sshd_config

1️⃣ 注释或确认以下行

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

2️⃣ 添加 internal-sftp

Subsystem sftp internal-sftp

3️⃣ 添加 SFTP 用户限制

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

如果有多个用户,可用组方式:

Match Group sftp
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp

四、重启 SSH 服务

systemctl restart sshd

五、测试 SFTP 登录

sftp sftpuser@服务器IP

登录后:

  • 根目录是 /
  • 只能看到 /upload
  • 不能访问系统其他目录

六、常见问题

❌ 登录失败(权限错误)

查看日志:

journalctl -u sshd

常见原因:

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

✅ SELinux 修复(如需要)

setsebool -P ssh_chroot_rw_homedirs on

七、扩展(多用户)

groupadd sftp
useradd -g sftp -s /sbin/nologin user1
mkdir -p /sftp/user1/upload
chown root:root /sftp/user1
chown user1:sftp /sftp/user1/upload

如果你需要:

  • 只读 SFTP
  • 限制 IP
  • 配合 vsftpd
  • CentOS Stream / Rocky / Alma

可以告诉我具体需求。

0 踩