相关为什么 Linux Mint 上的 root 密码是我的用户密码?
我的 Mint 17.3 盒子似乎设置了 root 密码:我看到密码哈希/etc/shadow
(以 开头$6$...
)。我想将此密码哈希与我的(已知)用户密码进行比较。
无论出于什么原因,我不相信su -
(在链接的问题中)不使用我的密码,与根密码。
有没有一种简单的方法(例如在 bash 中)将已知的哈希值与已知的密码进行比较并查看它们是否匹配?
答案1
找到 中使用的盐/etc/shadow
,它是第二个和第三个之间的字符$
,通常会有八个。
使用mkpasswd -m sha-512 -S <salt>
,然后在询问时输入您认为应该使用的密码。它将输出带$6$<salt>$
前缀的哈希值。
答案2
最后,您需要从(在 Linux Mint 等 GNU 系统上带有 GNU libc 的)调用该crypt(3)
函数,并将密码作为第一个参数,将哈希值 ( ) 作为第二个参数。libcrypt
$6$...
python
是一个公开该功能的工具,因此您可以执行以下操作:
HASH='$6$...' python2 -c 'import crypt, os, getpass
print(crypt.crypt(getpass.getpass(), os.environ["HASH"]))'
如果输出与哈希值匹配,则密码正确。
$HASH
上面可以是完整的散列(如$6$rounds=1234$somesalt$6eFBNhSgwEwdfZBHueBedpcqaVKGcV2DJy/tQMFd3JL88hwvgTkISJShnOUrbtP1fRs8I9rGIdsgWCoiujxD2/
),也可以是最右边的部分$
,即包括盐和可选的轮数($6$rounds=1234$somesalt$
)。
或者您可以在以下位置进行验证python
:
HASH='$6$...' python2 -c '
import crypt, os, getpass
hash = os.environ["HASH"]
if crypt.crypt(getpass.getpass(), hash) == hash:
print "OK"
else:
print "Wrong password"'
(显然,$HASH
必须包含完整的哈希值)。
通过python
,您还可以使用该ctypes
模块从任意库调用函数。因此,调用系统crypt()
函数的另一种方法(不是您需要像crypt
标准模块之一一样,只是我之前的印象是该crypt
模块有自己单独的crypt()
实现)是这样的:
HASH='$6$...' python2 -c '
from ctypes import *
import os, getpass
l = CDLL("libcrypt.so.1")
l.crypt.restype = c_char_p
print l.crypt(getpass.getpass(), os.environ["HASH"])'
答案3
ssh root@localhost
我想到的是,尽管您的发行版可能完全禁用了 root 的基于密码的登录和/或安装了密钥对;或以 user 身份登录您常用的图形登录屏幕root
。 (即使您启用了自动登录,关闭对话框也可能会要求以其他用户身份登录。)