Bashスクリプトでパスワードハッシュを確認しますか?

Bashスクリプトでパスワードハッシュを確認しますか?

関連Linux Mintのrootパスワードはなぜ私のユーザーパスワードですか?

私のMint 17.3ボックスにはrootパスワードが設定されているようです。パスワードハッシュ/etc/shadow(で始まる$6$...)が表示されます。このパスワードハッシュを私の(既知の)ユーザーパスワードと比較したいと思います。

su -何らかの理由で(接続された質問で)あなたが使用しないと信じていません私のものパスワード、パスワード。

既知のハッシュと既知のパスワードを比較して一致することを確認する簡単な方法(bashなど)はありますか?

答え1

/etc/shadow2番目と3番目の文字の間に使用された塩を見つけます。$通常8つあります。

mkpasswd -m sha-512 -S <salt>リクエストに応じて使用する必要があると思われるパスワードを使用して入力してください。$6$<salt>$接頭辞付きのハッシュ値を出力します。

答え2

crypt(3)最後に、最初の引数としてパスワードを使用し、2番目の引数としてハッシュ()を使用して(GNU libcを含むLinux MintなどのGNUシステムで)関数を呼び出す必要があります。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すべてのライブラリから関数を呼び出すこともできます。したがって、システム関数を呼び出すもう1つの方法は次のとおりですcrypt()(標準モジュールの1つのように実行する必要はなく、モジュールに独自の別々の実装があるというcrypt印象を受けました)。cryptcrypt()

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。 (自動ログインを有効にしてもダイアログボックスを閉じると、他のユーザーとしてログインするように求められます。)

関連情報