CentOS SFTP配置注意事项
小樊
37
2026-01-08 00:32:39
CentOS SFTP配置注意事项
一 基础安全与版本
- 使用internal-sftp替代外部子系统,便于在Chroot环境下工作且更安全;在**/etc/ssh/sshd_config**中设置:Subsystem sftp internal-sftp。
- 建议创建专用用户组(如sftponly)统一管理受限用户,便于批量应用策略。
- 禁止root通过SSH登录:PermitRootLogin no。
- 保持OpenSSH版本较新,至少4.8p1(ChrootDirectory 所需);检查版本:ssh -V。
- 限制危险通道:在受限用户的 Match 段中关闭 X11/端口转发(X11Forwarding no、AllowTcpForwarding no)。
二 目录权限与 Chroot 关键规则
- Chroot 根目录(如**%h或自定义目录)及其所有上级目录的属主必须为 root**,且权限不超过 755;这些目录不允许有组写入权限,否则会触发“所有权或模式错误”。
- 由于 Chroot 根目录通常不可写,需在根下为业务创建可写子目录(如upload),并将其属主设为相应用户,权限建议700/750/755(如需同组写入可用770)。
- 示例:
- chown root:sftp /data/sftp/sftp1 && chmod 755 /data/sftp/sftp1
- mkdir -p /data/sftp/sftp1/upload
- chown sftp1:sftp /data/sftp/sftp1/upload && chmod 750 /data/sftp/sftp1/upload
- 如需登录后直接进入可写目录,可在用户级 Match 中使用:ForceCommand internal-sftp -d /upload。
三 用户与认证配置
- 创建仅用于 SFTP 的系统账号:
- 方式A:useradd -G sftp -s /sbin/nologin sftpuser(禁止 Shell 登录)
- 方式B:useradd -G sftp -s /bin/false sftpuser(同样禁止交互式登录)
- 将用户加入sftponly组,并在sshd_config用 Match Group 应用策略:
- Match Group sftponly
- ChrootDirectory %h
- ForceCommand internal-sftp
- X11Forwarding no
- AllowTcpForwarding no
- 认证失败或权限异常时,优先检查:用户口令、所属组、家目录与可写子目录的属主与权限。
四 网络与端口、服务可用性
- 防火墙放行22/TCP(或自定义端口):firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload;如使用非默认端口(如22345),需同时放行新端口并让 SELinux 识别:semanage port -a -t ssh_port_t -p tcp 22345。
- 确保sshd运行并开机自启:systemctl start sshd && systemctl enable sshd。
- 修改**/etc/ssh/sshd_config后务必语法检查并重启:sshd -t && systemctl restart sshd;排查登录问题查看/var/log/secure**。
五 常见错误与快速排查
- “Permission denied / Broken pipe”:多由 Chroot 根目录或其上级目录属主非 root或存在组写权限导致;按第二部分规则修正后重试。
- “chroot directory … incorrect ownership or modes”:同上,逐层检查到根目录的属主与权限。
- 配置文件语法错误导致服务异常:使用sshd -t验证后再重启;确保 Subsystem 与 Match 段书写正确。
- SELinux 限制:临时 setenforce 0 验证是否为 SELinux 问题,必要时配置相应策略或保持 SELinux 开启并正确设置。