温馨提示×

CentOS如何设置SFTP权限

小樊
33
2026-08-18 22:05:55
栏目: 智能运维

在 CentOS 上设置 SFTP 权限,通常目标是:
✅ 用户只能通过 SFTP 访问
✅ 不能 SSH 登录
✅ 限制在特定目录(如 /data/sftp/用户名
✅ 禁止访问系统其他目录

下面给你一套 最常用、最安全的做法(基于 OpenSSH + Chroot)


一、前提条件

  • CentOS 7 / 8 / Stream
  • 使用 OpenSSH 自带 SFTP(推荐)
  • 目录结构要符合 Chroot 要求

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


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

1️⃣ 创建用户

useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
  • /sbin/nologin:禁止 SSH 登录
  • 仅允许 SFTP

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

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
chmod 755 /data/sftp/sftpuser/upload

四、配置 SSH(关键步骤)

4️⃣ 编辑 SSH 配置

vim /etc/ssh/sshd_config

5️⃣ 确认或添加以下内容

Subsystem sftp internal-sftp

6️⃣ 在文件末尾添加:

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

✅ 这样该用户 只能 SFTP,不能 SSH


五、重启 SSH 服务

systemctl restart sshd

六、测试 SFTP 登录

sftp sftpuser@服务器IP

✅ 成功后应只能看到:

sftp> pwd
Remote working directory: /

❌ 无法访问 /etc/root 等系统目录


七、常见问题排查

❌ 登录失败(常见原因)

  1. Chroot 目录不是 root 拥有
  2. Chroot 目录权限不是 755
  3. SELinux 未放行

SELinux 放行(如启用)

setsebool -P ssh_chroot_rw_homedirs on

查看 SELinux 状态:

getenforce

八、多个 SFTP 用户(推荐方式)

使用用户组(更优雅)

groupadd sftpusers
usermod -aG sftpusers sftpuser

sshd_config 改为:

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

目录结构:

/data/sftp/user1
/data/sftp/user2

九、权限总结(非常重要)

目录 拥有者 权限
Chroot 根目录 root:root 755
上传目录 sftpuser:sftpuser 755 或 775

十、如果你需要

  • ✅ 多用户隔离
  • ✅ 只读 / 只写
  • ✅ 日志审计
  • ✅ 使用密钥登录
  • ✅ 搭配 Nginx / FTP 场景

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

0