
関連Linux Mint のルート パスワードがユーザー パスワードになるのはなぜですか?
私の Mint 17.3 ボックスにはルート パスワードが設定されているようです: にパスワード ハッシュが表示されます/etc/shadow
( で始まります$6$...
)。このパスワード ハッシュを (既知の) ユーザー パスワードと比較したいと思います。
何らかの理由で、私はsu -
(リンクされた質問で)使用しないことを信頼していません私のパスワード、対根パスワード。
既知のハッシュと既知のパスワードを比較し、一致するかどうかを確認する簡単な方法(bash など)はありますか?
答え1
で使用されている塩を見つけてください/etc/shadow
。それは 2 番目と 3 番目の文字の間にあり$
、通常は 8 個あります。
を使用しmkpasswd -m sha-512 -S <salt>
、尋ねられたら、想定されるパスワードを入力します。$6$<salt>$
プレフィックスが付いたハッシュが出力されます。
答え2
最終的には、パスワードを最初の引数として、ハッシュ ( ) を 2 番目の引数として、 (Linux Mint などの GNU システムでは GNU libc に付属)crypt(3)
から関数を呼び出す必要があります。libcrypt
$6$...
python
は、その機能を公開するツールの 1 つであり、次の操作を実行できます。
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()
関数を呼び出す別の方法 ( は標準モジュールの 1 つであるため、そうする必要はありませんが、以前はモジュールに独自の個別の実装が付属している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 のパスワードベースのログインを完全に無効にしているか、キーペアをインストールしているか、または通常のグラフィカル ログイン画面でユーザーとしてログインしている可能性がありroot
ます。(自動ログインが有効になっている場合でも、シャットダウン ダイアログで別のユーザーとしてログインするように提案される場合があります。)