温馨提示×

centos怎么限制sftp用户权限

小樊
35
2026-09-30 03:23:12
栏目: 智能运维

在 CentOS 上限制 SFTP 用户权限,通常目标是:

  • 用户只能通过 SFTP 登录
  • 不能 SSH 登录
  • 只能访问指定目录
  • 不能访问系统其他目录

下面给你一套最常用、最安全的做法(Chroot + 内部 SFTP)。


一、创建 SFTP 用户和目录

# 创建用户
useradd sftpuser

# 设置密码
passwd sftpuser

# 创建 SFTP 根目录(必须是 root 拥有)
mkdir -p /sftp/sftpuser

# 赋予权限(关键)
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser

⚠️ Chroot 目录必须归属 root,且其他用户不可写


二、创建用户可写目录

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

用户只能在 upload 里上传/修改文件。


三、修改 SSH 配置(核心)

编辑配置文件:

vi /etc/ssh/sshd_config

1️⃣ 注释掉原来的 Subsystem

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

2️⃣ 添加内部 SFTP

Subsystem sftp internal-sftp

3️⃣ 添加 SFTP 用户限制

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

如果有多个用户,可用:

Match Group sftpusers

四、创建 SFTP 用户组(可选,推荐)

groupadd sftpusers
usermod -G sftpusers sftpuser

配置改为:

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

目录结构:

/sftp/sftpuser/

五、禁止 SFTP 用户 SSH 登录

usermod -s /sbin/nologin sftpuser

六、重启 SSH 服务

systemctl restart sshd

七、测试 SFTP

sftp sftpuser@服务器IP

✅ 能登录
✅ 只能看到 /sftp/sftpuser
✅ 只能在 upload 写文件
❌ 不能 ssh sftpuser@ip


八、常见问题

❌ 登录失败:broken pipe

原因:

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

❌ 能登录但无法上传

原因:

  • 在 root 拥有的目录里写文件
  • 必须在子目录(如 upload)

九、进阶(可选)

  • 限制 IP 登录
  • 使用密钥登录(禁止密码)
  • 配合 SELinux
  • 日志审计 /var/log/secure

如果你愿意,可以告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • 是否用云服务器
  • 是否需要 只读 / 多用户 / 多目录

我可以直接给你一套可复制的配置。

0 踩