ssh配置文件及密钥权限必须严格限制:sshd_config和私钥文件设为600,公钥文件644,清除备份文件并纳入定期巡检。

SSH 配置文件本身的权限设置,是加固中常被忽略却极其关键的一环。如果 /etc/ssh/sshd_config 或主机密钥文件权限过宽,攻击者一旦获得低权限账户,就可能篡改配置、替换密钥,甚至绕过所有认证限制——此时再强的算法和密钥策略也形同虚设。
sshd_config 文件权限必须严格限制
该文件控制整个 SSH 服务行为,任何可写权限都等同于授予攻击者后门入口:
- 推荐权限为 600(即
-rw-------),仅 root 可读写 - 绝对禁止设为 644、664、755 等含 group/other 可读或可写权限的值
- 执行命令修复:
sudo chmod 600 /etc/ssh/sshd_config - 检查是否生效:
ls -l /etc/ssh/sshd_config,确认输出中无r或w出现在后九位的后六位
主机密钥文件权限同样不可放松
密钥文件(如 ssh_host_rsa_key、ssh_host_ed25519_key)泄露等于服务器身份被冒用:
- 私钥文件必须为 600,公钥文件可设为 644(因需被服务读取,但无需写入)
- 常见错误:安装或重生成密钥后未重设权限,导致私钥对组或全局可读
- 批量修复命令:
sudo chmod 600 /etc/ssh/ssh_host_*_key && sudo chmod 644 /etc/ssh/ssh_host_*_key.pub - 特别注意:若使用 SELinux,还需确保上下文正确,可用
ls -Z检查,必要时运行sudo restorecon -Rv /etc/ssh
配置目录与备份文件也要纳入审计范围
很多运维习惯保留 sshd_config.bak 或 sshd_config.old,这些文件若权限宽松,会成为隐蔽入口:
- 扫描并清理非主配置文件:
find /etc/ssh -name "sshd_config.*" -type f ! -name "sshd_config" -ls - 对所有匹配文件统一设为 600:
find /etc/ssh -name "sshd_config.*" -type f ! -name "sshd_config" -exec chmod 600 {} \; - 检查
/etc/ssh/sshd_config.d/目录下所有 drop-in 文件权限,同样要求 600 - 避免在
/etc/ssh/下存放脚本、临时文件或日志,该目录应仅包含服务必需配置与密钥
权限审计不是一次性的操作,建议将其纳入定期安全巡检脚本。每次修改配置前先备份,备份后立即修正权限,形成闭环。不复杂但容易忽略。











