温馨提示×

CentOS SFTP如何设置权限

小樊
45
2026-08-30 01:16:54
栏目: 智能运维

在 CentOS 上设置 SFTP 权限,常见目标是:

  • 允许用户通过 SFTP 登录
  • 禁止 SSH shell 登录
  • 限制用户只能访问自己的目录(不能访问系统其他目录)

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


一、前提条件

  • CentOS 7 / 8 / Stream
  • 使用 OpenSSH(默认已安装)
  • root 身份操作

二、创建 SFTP 用户和目录

1️⃣ 创建 SFTP 用户

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

/sbin/nologin:禁止 SSH shell 登录
✅ 仅允许 SFTP


2️⃣ 创建 SFTP 根目录

⚠️ Chroot 目录必须归 root 所有,且不能被其他用户写

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

3️⃣ 创建可写目录

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

✅ 用户只能往 upload 里写文件
✅ 上级目录 root 拥有,防止越权


三、配置 SSH(关键)

编辑 SSH 配置文件:

vim /etc/ssh/sshd_config

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

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

✅ 成功应看到:

sftp>

❌ 不能执行 cd / ❌ 不能 SSH 登录


六、常见权限错误及解决

❌ 登录失败:broken pipe / chroot failed

原因:

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

✅ 正确示例:

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

❌ 无法上传文件

原因:

  • 没有在 Chroot 目录内创建可写目录

✅ 解决:

mkdir upload
chown sftpuser:sftpuser upload

七、SELinux 相关(如果是 CentOS 7/8)

setsebool -P ssh_chroot_rw_homedirs on

或者临时关闭 SELinux 测试:

setenforce 0

八、总结(记住这 4 点)

✅ Chroot 目录 root 拥有,755
✅ 用户目录 用户拥有,可写
✅ SSH 使用 internal-sftp
✅ 用户 shell 设为 /sbin/nologin


如果你需要:

  • 多用户共用目录
  • 只读 / 只写权限
  • 配合 Nginx / FTP 使用
  • 给某个用户开放部分系统目录

告诉我你的具体需求,我可以给你定制配置。

0