Ste*_*ski 44 security users ssh
我的一些 Linux 和 FreeBSD 系统有几十个用户。工作人员将使用这些“ssh 网关”节点通过 SSH 连接到其他内部服务器。
我们担心其中一些人使用未加密的私人 SSH 密钥(没有密码的密钥。这很糟糕,因为如果破解者在这台机器上获得了对他们帐户的访问权限,他们可以窃取私钥,现在可以访问到任何使用相同密钥的机器。出于安全原因,我们要求所有用户使用密码来加密他们的私有 SSH 密钥。
如何判断私钥是否未加密(例如,不包含密码)?是否有不同的方法可以在 ASCII 装甲钥匙和非 ASCII 装甲钥匙上执行此操作?
更新:
澄清一下,假设我在机器上拥有超级用户访问权限,并且我可以读取每个人的私钥。
cod*_*ead 59
好吧,带有空密码短语的 OpenSSH 私钥实际上并未加密。
加密的私钥在私钥文件中如此声明。例如:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,7BD2F97F977F71FC
BT8CqbQa7nUrtrmMfK2okQLtspAsZJu0ql5LFMnLdTvTj5Sgow7rlGmee5wVuqCI
/clilpIuXtVDH4picQlMcR+pV5Qjkx7BztMscx4RCmcvuWhGeANYgPnav97Tn/zp
...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
所以像
# grep -L ENCRYPTED /home/*/.ssh/id_[rd]sa
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩。
rlp*_*ell 10
我四处寻找这个并没有找到令人满意的答案,但我设法构建了一个,所以......
请注意,如果文件有效,这将更新文件,因此如果您试图不被正在测试其密钥的用户注意到,您可能需要先复制密钥。OTOH,由于您刚刚使用无密码密钥捕获了您的用户,因此您可能不在乎他们是否注意到。:D
$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Key has comment '/home/rlpowell/.ssh/KEYTEST'
Your identification has been saved with the new passphrase.
$ echo $?
0
$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Bad passphrase.
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
如果您有权访问私钥,我想,您可以在没有密码的情况下使用它来针对公钥进行身份验证。如果这有效,您就知道它没有密码。如果有,它会给你一条错误信息。
如果您无权访问私钥,我怀疑您能否检测到这一点。密码短语的目的是“解锁”私钥,它对公钥没有任何作用。
事实上,如果这样做,它会降低系统的安全性。人们可以使用公钥,该公钥可用于尝试进行暴力破解或其他尝试破解密码的攻击。