我很好奇我是否可以将散列的 sha512(?) 密码传递给 sudo 密码提示符,然后以此方式登录到 root。因此它可能看起来像这样:
[user@device ~]$ sudo su -
[sudo] password for user: 'some hashed password from shadow file'
这可能吗?如果可以,有没有简单的方法可以获取此散列密码?
答案1
这将违背存储散列密码的目的。
我确信您知道,但以防万一,哈希算法背后的思想非常简单——您找到一个函数,该函数在一个方向上很容易计算,但在另一个方向上计算起来却非常困难。我们称该函数为hash
。
现在,当您第一次创建密码时,hunter2
系统将运行hash('hunter2')
并将结果存储在影子文件中。
然后,当您登录系统时,您声明您的密码是hunter4
,系统会通过hash('hunter4')
与影子文件中存储的值进行比较来检查这一点。如果哈希值相等,系统将允许您登录,如果不相等,系统将拒绝您。
这样做的好处是,即使有人设法访问您的影子文件,他们仍然不知道您的密码并且无法以您的身份登录,因为虽然他们知道哈希值,但确定产生此哈希值的密码却极其困难。
简而言之,存储的哈希值/etc/shadow
不能替代用户密码。
答案2
不能直接在命令行上,因为 sudo 期望密码是纯文本。
你可以使用--askpass
选项让 sudo 调用辅助程序来获取密码,但尽管它可以阻止密码出现在命令行上,但它仍然需要将明文密码传递给 sudo
您可以以 root 用户身份查看 /etc/shadow 文件来获取散列密码。