CentOS SFTP配置常见问题与排查要点
一 配置与权限类问题
- 使用 ChrootDirectory 做目录隔离时,指定的目录及其上级目录必须归 root:root,权限不超过 755;否则会出现登录失败或目录无法访问。示例:Chroot 到 /data/sftp/%u 时,需确保 /data/sftp 与 /data/sftp/%u 均为 root 所有且权限合规。为可写目录,通常在 Chroot 下再建子目录(如 upload)并授权给相应用户。
- 认证失败常见于:密码错误或过期、公钥未正确写入 ~/.ssh/authorized_keys、用户 shell 被设为 /sbin/nologin 但 SFTP 仍可用(建议对 SFTP 用户使用 internal-sftp 并禁止 shell 登录)、或 PasswordAuthentication 被关闭。
- 配置语法与生效:确认 /etc/ssh/sshd_config 中 Subsystem sftp 行正确(常见为 internal-sftp 或 /usr/libexec/openssh/sftp-server),修改后执行 systemctl restart sshd 使配置生效。
- 版本兼容:部分旧版本 OpenSSH 不支持新指令,建议升级到至少 4.8p1 以上(可通过 yum update openssh-server 更新)。
二 网络与安全策略类问题
- 防火墙:确保 firewalld 放行 22/TCP(SFTP 基于 SSH),常用命令:firewall-cmd --permanent --add-service=ssh 或 --add-port=22/tcp,随后 firewall-cmd --reload。
- SELinux:处于 enforcing 模式时可能限制 SFTP 访问主目录或 Chroot 目录,可临时 setenforce 0 验证;若确认是 SELinux 导致,建议启用布尔值:setsebool -P sftp_home_dir on,或按需调整策略,而非长期关闭 SELinux。
- 服务状态:确认 sshd 已启动并开机自启(systemctl status/start/enable sshd),否则任何连接都会失败。
三 日志与快速排查步骤
- 查看认证与连接日志:tail -f /var/log/secure,根据报错关键词(如 Permission denied、User root not allowed、fatal: bad ownership)定位是权限、认证还是配置问题。
- 连通性测试:使用 ping 与 telnet 服务器IP 22 检查网络与端口可达性;端口不通优先排查防火墙与安全组。
- 服务与配置:确认 sshd 运行、配置语法无误(必要时回滚最近修改),变更后重启服务。
- 资源与限制:检查系统资源(CPU/内存/带宽)与 MaxStartups 等连接数限制,避免因资源或限制导致新连接被拒绝。
四 一个最小可用的 Chroot SFTP 配置示例
- 创建用户与组:
groupadd sftpusers
useradd -g sftpusers -s /sbin/nologin sftpuser
passwd sftpuser
- 建立目录结构并授权:
mkdir -p /data/sftp/sftpuser/upload
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
chown sftpuser:sftpusers /data/sftp/sftpuser/upload
- 配置 /etc/ssh/sshd_config(在文件末尾添加):
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
- 使配置生效:
systemctl restart sshd
说明:Chroot 目录必须为 root:root 755;可写目录放在其下并授权给相应用户,避免破坏 Chroot 的权限前提。