温馨提示×

centos sftp如何限制目录

小樊
36
2026-09-27 03:40:53
栏目: 智能运维

在 CentOS 上限制 SFTP 用户只能访问指定目录(不能 SSH 登录、不能访问其他目录),通常使用的是 OpenSSH 自带的 chroot + internal-sftp 方案。下面给你一个标准、可用的配置流程。


一、基本思路

  • 使用 internal-sftp
  • 通过 ChrootDirectory 限制根目录
  • 禁止用户 SSH 登录
  • 目录权限必须满足 SSH 安全要求

二、创建 SFTP 用户和目录

1. 创建用户(不允许登录 shell)

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

2. 创建目录结构

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

⚠️ Chroot 目录必须由 root 拥有,且其他用户不能有写权限

3. 创建可写目录

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

三、配置 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 /data/sftp/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

如果是多个用户:

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

四、重启 SSH

systemctl restart sshd

五、测试 SFTP

sftp sftpuser@服务器IP

登录后:

sftp> pwd
Remote working directory: /
sftp> ls
upload

✅ 只能看到 /upload
❌ 不能访问 /etc、/root 等


六、常见问题

1. 登录失败(Permission denied)

原因:

  • Chroot 目录不是 root 拥有
  • 目录权限不是 755

解决:

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

2. 想多个用户共用一个目录?

ChrootDirectory /data/sftp/share

但目录仍必须是 root 拥有


3. 需要更细权限?

  • 用 upload 子目录给用户写
  • 或用 ACL:
setfacl -R -m u:sftpuser:rwx /data/sftp/share/upload

七、总结

✅ 推荐方案:internal-sftp + ChrootDirectory
✅ 安全、无需额外软件
✅ CentOS 7 / 8 / Stream 均适用

如果你需要:

  • 限制 IP
  • 只读 SFTP
  • 多用户不同目录
  • 结合 SELinux

可以继续问我。

0 踩