权限位本身就是内容保护的一部分
私钥是文件形式的身份,它的安全性一半靠文件内容、一半靠文件权限与存放位置。连接类工具在读取私钥时会做权限检查:如果文件可被同组或其他用户读写,通常直接拒绝使用,因为这意味着密钥可能已被他人复制。这里有两层要同时满足——客户端接受的权限位,以及存放位置本身是否处在会被同步、备份、打包分发的目录里。后者常被忽略,而它造成泄露的概率反而更高。
基本信息
| 适用对象 | Linux、macOS 与 Windows 上的密钥文件 |
|---|---|
| 推荐权限 | 目录仅属主可访问,私钥文件仅属主可读 |
| 检查点 | 权限位、属主、所在目录的可访问范围 |
| 常见拒绝原因 | 私钥文件对同组或其他用户开放读写 |
| 存放原则 | 只放在需要的机器上,不进入共享目录与版本库 |
存放与权限要点
- 私钥只留在需要发起连接的机器上,不复制到被管理的主机
- 目录整体收紧:目录权限放宽会让目录内文件的实际暴露面扩大
- 避免同步目录:云盘、共享盘、备份目录会被自动分发,等于主动扩散
- 禁止进入版本库:提交后再删除也仍在历史记录里,需要彻底重写历史
- 生成时用更强的口令保护:口令加密后的私钥即使副本外泄也难以直接使用
- 按用途分密钥:一把密钥走天下时,收回某一处就必须停用全部
权限检查与修正
权限检查与修正
ls -l ~/.ssh # 查看目录内文件权限
stat -c '%A %U:%G %n' ~/.ssh/id_ed25519 # 精确查看权限与属主
chmod 700 ~/.ssh # 目录仅属主可进入
chmod 600 ~/.ssh/id_ed25519 # 私钥仅属主可读写
chmod 644 ~/.ssh/id_ed25519.pub # 公钥可公开,权限要求宽松
chmod 600 ~/.ssh/authorized_keys # 服务端侧授权文件同样收紧
ls -ld ~ # 家目录若对他人可写,部分校验会直接失败权限要求对照
| 对象 | 建议权限 | 过宽后果 |
|---|---|---|
| 密钥目录 | 仅属主可访问 | 目录内文件暴露给他人或被拒绝使用 |
| 私钥文件 | 仅属主可读写 | 客户端拒绝使用或密钥被复制 |
| 公钥文件 | 可公开读取 | 无直接影响 |
| 服务端授权文件 | 仅属主可读写 | 被追加公钥后即可登录 |
| 家目录 | 不可被他人写 | 严格校验下密钥被忽略 |
权限检查失败时的报错通常提示忽略密钥或权限过于开放,但不同实现与版本的提示姿势不同。看到「密钥存在却像不存在」,先用统计命令核对权限与属主,再去看客户端的详细输出。
把私钥放进容器镜像或代码仓库是典型的长期隐患:副本一旦存在就无法确定扩散范围,处置上只能整体作废并重建。密钥应以运行时挂载或运行时获取的方式提供。