ken*_*orb 5 bash permissions umask pipe
我有从变量加载 SSH 密钥的脚本(作为 CI 环境中脚本的一部分),以便不将私有文件保存在公共存储库中,但是ssh-add抱怨权限错误(似乎无法绕过它)。所以我的方法是找到更改动态创建的匿名管道权限的方法。
例如:
$ stat <(:)
File: ‘/dev/fd/63’
Size: 0 Blocks: 0 IO Block: 512 fifo
Device: 397f3928h/964639016d Inode: 818277067 Links: 0
Access: (0660/prw-rw----) Uid: ( 501/ kenorb) Gid: ( 20/ staff)
Access: 2015-10-10 22:33:30.498640000 +0100
Modify: 2015-10-10 22:33:30.498640000 +0100
Change: 2015-10-10 22:33:30.498640000 +0100
Birth: 2015-10-10 22:33:30.498640000 +0100
Run Code Online (Sandbox Code Playgroud)
显示0660许可。我检查了我的umask,似乎与此无关。
这是一个简单的测试(在 OS X 上,默认为 0660):
$ ssh-add <(cat ~/.ssh/id_rsa)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '/dev/fd/63' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Run Code Online (Sandbox Code Playgroud)
在 Linux 上它似乎可以工作,因为它是0500默认设置。这个权限是从哪里控制的?
澄清一下,我不想更改任何文件的权限,因为我想使用匿名管道。
问题是:
如何临时更改管道的权限?
到目前为止,我已经找到了以下使用命名 FIFO 的解决方法:
$ mkfifo -m 600 fifo
$ cat ~/.ssh/id_rsa >fifo | ssh-add fifo
Identity added: fifo (fifo)
Run Code Online (Sandbox Code Playgroud)
其中该选项-m设置 FIFO 权限。