温馨提示×

如何限制CentOS SFTP权限

小樊
39
2026-07-08 18:03:25
栏目: 智能运维

在 CentOS 上限制 SFTP 权限,常见且安全的做法是使用 OpenSSH 自带的 internal-sftp + Chroot,而不是给普通 Shell。下面按最常用、最安全的方式一步步说明。


一、目标示例

  • 用户:sftpuser
  • 只能使用 SFTP
  • 不能 SSH 登录
  • 只能访问自己的目录(如 /data/sftp/sftpuser
  • 不能访问系统其他目录

二、安装与确认 OpenSSH

CentOS 7/8 默认已安装:

rpm -qa | grep openssh

如未安装:

yum install -y openssh-server
systemctl enable sshd
systemctl start sshd

三、创建 SFTP 用户(禁止 SSH)

1️⃣ 创建用户

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

/sbin/nologin 禁止 SSH 登录


四、创建 SFTP 根目录(Chroot 目录)

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

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

创建可写目录

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

✅ 用户只能往 upload 写文件


五、配置 SSH(关键步骤)

编辑配置文件:

vim /etc/ssh/sshd_config

1️⃣ 确认 SFTP 子系统

找到或添加:

Subsystem sftp internal-sftp

2️⃣ 添加 SFTP 限制规则(放在文件末尾)

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

如果你要限制多个用户

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

六、重启 SSH 服务

systemctl restart sshd

七、测试 SFTP

sftp sftpuser@服务器IP

✅ 成功
❌ 如果失败,查看日志:

tail -f /var/log/secure

八、常见问题排查

❌ 登录失败:broken pipe / chroot failed

原因:

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

✅ 解决:

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

❌ 无法上传文件

原因:

  • 用户没有写权限

✅ 解决:

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

九、进阶限制(可选)

1️⃣ 限制 IP 登录

Match User sftpuser
    ChrootDirectory /data/sftp/sftpuser
    ForceCommand internal-sftp
    AllowUsers sftpuser@192.168.1.*

2️⃣ 限制 SFTP 用户组

groupadd sftpusers
usermod -aG sftpusers sftpuser
Match Group sftpusers
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp

十、总结(推荐方案 ✅)

最安全、最标准

  • internal-sftp
  • ChrootDirectory
  • /sbin/nologin
  • 目录权限严格控制

如果你需要:

  • 多用户隔离
  • 只读 / 只写
  • 配合 vsftpd / 防火墙
  • SELinux 配置

可以直接告诉我你的使用场景,我可以给你定制方案。

0