温馨提示×

centos sftp怎样配置权限

小樊
43
2026-10-20 12:37:38
栏目: 智能运维

在 CentOS 上配置 SFTP 权限,通常目标是:限制用户只能通过 SFTP 访问指定目录,不能 SSH 登录,并且控制可读/可写权限。下面按常见场景一步步说明。


一、基本前提

  • CentOS 7 / 8 / Stream 均适用
  • 使用 OpenSSH(默认已安装)
  • 以用户 sftpuser、目录 /data/sftp/sftpuser 为例

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

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

/sbin/nologin 表示不能 SSH 登录,但可用于 SFTP


三、创建 SFTP 根目录(关键权限要求)

⚠️ 重要规则(OpenSSH 强制)

  • SFTP 根目录 必须是 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

四、配置 SSH(核心)

编辑:

vi /etc/ssh/sshd_config

1️⃣ 注释或确认这一行

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

改为:

Subsystem sftp internal-sftp

2️⃣ 添加 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

五、SELinux 配置(CentOS 常见坑)

查看状态:

getenforce

如果是 Enforcing,需要:

semanage fcontext -a -t ssh_home_t "/data/sftp(/.*)?"
restorecon -Rv /data/sftp

或临时关闭(不推荐):

setenforce 0

六、重启 SSH

systemctl restart sshd

七、测试 SFTP

sftp sftpuser@服务器IP

应只能看到:

/upload

八、常见权限方案示例

需求 配置
只读 chmod 555 upload
只写 chmod 733 upload
读写 chmod 755 upload

九、常见问题

❌ 登录失败:

fatal: bad ownership or modes for chroot

✅ 根目录必须是 root:root 且 755

❌ 能 SSH 登录

✅ 确认 shell 是 /sbin/nologin


如果你有 多用户 / 多目录 / 只读共享 / 配合 Nginx 等具体需求,可以告诉我,我给你定制配置。

0 踩