SSH 配置与主机密钥的权限
SSH 服务端涉及两类敏感文件:配置文件决定谁能怎么登录,主机私钥决定客户端如何确认「连的确实是这台机器」。两者都有明确的权限要求——属主 root、私钥仅 root 可读。权限放宽的直接后果是:普通用户能改配置来放行自己,或者取走主机私钥用于中间人攻击。sshd 本身会拒绝加载权限过宽的私钥,这属于安全机制的正常表现。
基本信息
| 加固项 | SSH 配置与主机密钥权限 |
|---|---|
| 适用平台 | Linux(OpenSSH 服务端) |
| 风险等级 | 高 |
| 基线 | 配置文件与私钥收紧到仅 root 可读写,公钥可读 |
| 检查对象 | 配置文件与全部主机密钥对 |
典型使用场景
- 基线核查:确认配置与密钥权限全部符合要求
- 故障排查:服务启动失败或客户端提示密钥变更时先看权限
- 事件排查:私钥是否被读取过,是判断中间人风险的前提
- 变更复核:更换或新增主机密钥后逐个确认权限
- 合规测评:远程管理条款要求配置文件权限受控
核查命令
核查命令
stat -c '%a %U:%G %n' /etc/ssh/sshd_config
stat -c '%a %U:%G %n' /etc/ssh/ssh_host_*_key /etc/ssh/ssh_host_*_key.pub
ls -l /etc/ssh/ | head -20 # 检查目录内是否有多余配置文件
sshd -t # 语法校验,权限问题也会在此暴露加固与验证
加固与验证
chown root:root /etc/ssh/sshd_config /etc/ssh/ssh_host_*
chmod 600 /etc/ssh/sshd_config /etc/ssh/ssh_host_*_key
chmod 644 /etc/ssh/ssh_host_*_key.pub
sshd -t && systemctl reload sshd # 先校验再重载
stat -c '%a %U:%G %n' /etc/ssh/ssh_host_ed25519_key # 复核权限基线对照
| 文件 | 基线 | 说明 |
|---|---|---|
| /etc/ssh/sshd_config | 600 root:root | 可写即可放行未授权登录方式 |
| 主机私钥 | 600 root:root | 泄露可用于冒充主机,必须严格限制 |
| 主机公钥 | 644 root:root | 公开信息,可读但不应可写 |
| 目录内多余配置 | 按需保留并收紧 | 被引入的额外配置同样影响登录行为 |
服务会主动拒绝权限过宽的私钥:报错提示权限问题时,这是安全机制而非故障,修复权限后再重载即可,不要用放宽限制的方式绕过。改动前保留一个已登录会话,改完先做语法校验再重载。
两个细节:一是重载不会重新读取全部参数,监听地址与端口之类的改动需要重启服务;二是主机通常同时存在多种算法的密钥对,要逐个核对,遗漏一套等于留一个不受控的入口。
与认证配置一起核查
文件权限只是这条线的一半。完整核查还应确认登录相关的关键参数处于预期状态,例如远程登录方式、是否允许空口令、认证尝试次数等。把权限输出与生效配置输出放在同一份报告里,既能回答「文件受控」,也能回答「行为符合基线」,避免只做一半结论。