权限决定密钥是否算泄漏
家目录与 .ssh 目录的权限,直接决定同机低权账号能不能读到私钥、能不能往 authorized_keys 里塞自己的公钥。通行做法是家目录 700、.ssh 目录 700、authorized_keys 600,且属主与属组必须正确。OpenSSH 的 StrictModes 默认为 yes,权限不规范会直接拒绝密钥认证,表现为“密钥明明对却登不上”。
基本信息
| 适用平台 | Linux(OpenSSH) |
|---|---|
| 权限口径 | 家目录 700、.ssh 700、authorized_keys 600 |
| 属主要求 | 属主为对应用户,属组为该用户主组 |
| 加固项 | 家目录与密钥文件权限核查 |
| 关键开关 | sshd_config 的 StrictModes yes(默认) |
典型使用场景
- 批量巡检:一次性列出所有家目录与密钥文件权限,找出 777/755 的异常项
- 授权账号加固:运维、部署、跳板账号的家目录价值最高
- 排障定位:密钥登录失败时先查 StrictModes 相关的权限报错
- 离职回收:账号删除前确认家目录中的密钥与历史文件已处置
- 交付验收:新建镜像模板时检查默认家目录权限
核查命令
核查命令
stat -c '%a %U %n' /root /home/* 2>/dev/null # 家目录权限概览
find /home /root -maxdepth 2 -name '.ssh' -exec ls -ld {} \; 2>/dev/null
find /home -maxdepth 3 -name 'authorized_keys' -exec stat -c '%a %n' {} \; 2>/dev/null
find /home /root -maxdepth 3 -name '.ssh' -perm /077 -ls 2>/dev/null # 只列权限过宽项
getfacl -p ~user 2>/dev/null | head -10 # 抽查 ACL 是否额外放宽权限值读法
| 对象 | 建议值 | 异常表现 |
|---|---|---|
| 家目录 | 700 | 755 或 777=同机用户可读私钥与历史 |
| .ssh 目录 | 700 | 过宽等于交出密钥目录的写权限 |
| authorized_keys | 600 | 644 可被他人读取公钥信息 |
| 私钥文件 | 600 | 过宽直接等于密钥泄漏 |
| known_hosts | 600 或 644 | 600 更稳妥,避免被篡改 |
StrictModes yes 时权限不规范会直接拒绝认证:排障先看 /var/log/secure 或 auth.log 里是否出现 bad ownership 或 permissions 提示。
除基础权限外还要看 ACL 与扩展属性:用 getfacl 抽查一次,避免权限看起来合规但被 ACL 放宽。
核查要点
- 先列异常项而不是全量:用 -perm /077 只筛权限过宽的文件
- 特权账号(root、运维、部署)家目录按最高优先级处理
- 改权限精确到文件,避免 chmod -R 把私钥改成连本人也读不了
- 账号停用或离职后清理家目录中的密钥与历史文件
- 把权限核查做成定时任务,输出差异而不是逐台手工看
整体收紧家目录权限前确认应用依赖:部分应用把数据或配置放在用户家目录下,改前先评估影响。