
相關為什麼 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
。 (即使您啟用了自動登錄,關閉對話方塊也可能會要求以其他使用者身分登入。)