密钥文件的用户权限
前言
笔者在 github 上配置了 ssh key 用于 git 同步操作,通过 ssh 方式操作 clone 不需要输入 github
的账号密码,在开发设备迁移过程中有很好的体验,同时也能避免泄漏自己的 github 账号跟密码。但是每次迁移后,首次操作 git 必定能收到以下的错误信息:
|
之前为止解决这个问题,一直都很机器式的输入 chmod 600 script_file_path
命令,解决权限问题,完全不明白为什么会遇到以上的报错信息、600
是什么内容。在这里,深入记录一下。
原因
从提示信息中很容易看出,0644
这个权限对于 ssh 私钥文件过于开放了,因此限制了私钥文件的使用。但是 0644
这个权限代表了什么呢?我们在~/.ssh/
目录中敲入一下命令,可以看到对应的结果
|
其中 -rw-r-—r—-@
就是对应文件 private_key 的权限。在 linux 系统中,文件权限总共 10 个字符,在 macOS
系统中,可能会出现 11 个字符,我们将其分为四组:
第一组
其中第一组仅一个字符:
- - 指普通文件
- d 指文件夹
- l 指连接文件
第二、三、四组
第二、三、四组的逻辑都一致,我们将其拆分为三个字符看:r 为读取权限、w 为写入权限、x 为执行权限,**-**
为对应位置不支持该权限,举例:
- rw- 为可读性可写权限,不可执行
- r— 为仅可读权限
- …
而二、三、四组分别对应不同的用户范围,其中:
- 第二组代表创建该文件的用户权限(创建者权限)
- 第三组代表创建者所在的用户组的权限
- 第四组代表其他用户组的权限
@
@ 这个字符是 macOS 系统特有的,代表该文件拥有拓展属性,我们可以在 macOS 中使用 xattr -l $file_path
查看对应文件的拓展属性。
拓展属性属于操作系统特有的,macOS、Windows
都有相关的功能,拓展属性中内容并不会直接记录到文件内容中。在开发过程中用于保存一些与特定文件强相关的持久性数据,非常好用。如文件的下载进度…
解答问题
那,600 跟 rw-r—r—
有什么关系呢?
我们依然将权限分为三组,而每一组的三个字符分别对应二进制中的位数,rw-
可以看成 110,对应的十进制数字就是
6,其他的两组同样的方式操作,即可以转换为方便理解的三位十进制数字了。(上述的 rw-r—r—
对应的十进制表示方式为 644)
回到问题,设置为 600 权限,即代表除了当前用户外,其他的用户都无权查看、编辑、执行该文件。ssh 强制密钥不能被其他用户查看,从而保证密钥的安全性。