在 CentOS 上配置 SFTP 权限,常见做法是使用 OpenSSH 自带的 SFTP(内部 SFTP) 并配合 chroot 限制目录,这样既安全又不需要额外安装 FTP 服务。
下面按最常见场景给你一套完整、可用的配置方案。
sshd)useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
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
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果你有多个用户,可以用:
Match Group sftp
CentOS 默认开启 SELinux,否则 SFTP 会失败。
setsebool -P ssh_chroot_rw_homedirs on
如仍报错,可临时测试:
setenforce 0
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
cd upload
put test.txt
原因:
✅ 正确:
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
原因:
✅ 正确:
chown sftpuser:sftpuser /sftp/sftpuser/upload
journalctl -u sshd
# 或
tail -f /var/log/secure
Match Group sftpmount --bindauditd如果你愿意,可以告诉我:
我可以给你定制配置示例。