在 CentOS 上配置 SFTP 权限,通常目标是:限制用户只能通过 SFTP 访问指定目录,不能 SSH 登录,并且控制可读/可写权限。下面按常见场景一步步说明。
sftpuser、目录 /data/sftp/sftpuser 为例useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
/sbin/nologin表示不能 SSH 登录,但可用于 SFTP
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
编辑:
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
改为:
Subsystem sftp internal-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
查看状态:
getenforce
如果是 Enforcing,需要:
semanage fcontext -a -t ssh_home_t "/data/sftp(/.*)?"
restorecon -Rv /data/sftp
或临时关闭(不推荐):
setenforce 0
systemctl restart sshd
sftp sftpuser@服务器IP
应只能看到:
/upload
| 需求 | 配置 |
|---|---|
| 只读 | chmod 555 upload |
| 只写 | chmod 733 upload |
| 读写 | chmod 755 upload |
fatal: bad ownership or modes for chroot
✅ 根目录必须是 root:root 且 755
✅ 确认 shell 是 /sbin/nologin
如果你有 多用户 / 多目录 / 只读共享 / 配合 Nginx 等具体需求,可以告诉我,我给你定制配置。