温馨提示×

centos sftp配置中的注意事项

小樊
38
2026-01-02 04:52:31
栏目: 智能运维

CentOS SFTP 配置注意事项

一 基础安全与最小权限

  • 使用internal-sftp替代外部 sftp-server,便于在 chroot 环境中安全运行,并配合 ForceCommand internal-sftp 强制只启用 SFTP。
  • 建议创建专用用户组(如 sftponly),将受限用户加入该组,便于集中管理。
  • 禁止 root 通过 SSH 登录:设置 PermitRootLogin no
  • 禁用不必要的通道与功能:AllowTcpForwarding noX11Forwarding no,减少攻击面。
  • 保护配置文件:/etc/ssh/sshd_config 仅允许 root 写入。
  • 启用并定期检查日志:关注 /var/log/secure(CentOS)或 /var/log/auth.log(部分发行版)中的 SSH/SFTP 登录与操作记录。

二 目录权限与 Chroot 关键点

  • Chroot 根目录(如 ChrootDirectory %h 或自定义目录)必须满足:
    • 该目录及其上级目录的所有者为 root,且不可被用户组写入(避免组写权限导致 chroot 失败)。
    • 目录权限通常设为 755(drwxr-xr-x),严禁对 chroot 根目录赋予用户写权限。
  • 如需可写区域,在 chroot 根下为相应用户创建子目录并赋予其所有权,例如:
    • 目录结构:/data/sftp/%u/{upload,work}
    • 权限示例:chown root:sftp /data/sftp/%u;chmod 755 /data/sftp/%u
    • 可写目录:chown %u:sftp /data/sftp/%u/upload;chmod 755(或 775 视 umask/组协作而定)/data/sftp/%u/upload
  • 常见现象与排查:出现 Permission deniedBroken pipe 多半是 chroot 路径或其上级目录的属主/权限不符合要求,按上述规则修正后再试。

三 网络与端口配置

  • 默认端口为 22/TCP,建议仅对受信任来源开放;如使用 firewalld
    • 放行 SSH:firewall-cmd --permanent --zone=public --add-service=ssh && firewall-cmd --reload
  • 如需新增端口(例如 22345/TCP):
    • /etc/ssh/sshd_config 中增加 Port 22345
    • 若启用 SELinux,执行:semanage port -a -t ssh_port_t -p tcp 22345
    • 在防火墙放行新端口并重启 sshd:firewall-cmd --permanent --add-port=22345/tcp && firewall-cmd --reload
  • 变更配置前先语法检查并平滑重载:sshd -t && systemctl reload sshd;必要时再重启。

四 认证与登录体验优化

  • 优先使用公钥认证(禁用密码或作为多因子之一),提升安全性与自动化能力。
  • 若需限制可登录用户,可在 sshd_config 中使用 AllowUsersAllowGroups 白名单控制。
  • 登录后默认目录不可写时,可让用户在登录后自动进入可写子目录:
    • 在用户级 Match 中加入:ForceCommand internal-sftp -d /upload(登录后直接进入 upload)。

五 变更验证与常见排错

  • 配置语法与生效:
    • 语法检查:sshd -t
    • 平滑重载:systemctl reload sshd(重大变更再 restart)
    • 服务状态:systemctl status sshd
  • 日志排查:
    • 关注 /var/log/secure 的登录失败原因(权限、用户、密钥、端口等)
  • 高频问题速查:
    • Permission denied:检查密码/密钥、以及 chroot 路径的属主与权限链是否满足“root 所有、不可组写”
    • Broken pipe / Couldn’t read packet:多与目录权限或上级目录可写有关,按 chroot 规则修正
    • Chroot 失败:确认 chroot 根及其上级目录均为 root:root 且权限不超过 755,并且用户对其可写目录仅存在于 chroot 内部

0