web-dev-qa-db-ja.com

空のパスワードを確認する方法は?

スクリプトキディによるすべてのssh-loginの試みを見ると、パスワードなしのアカウントが設定されているインターネットに接続されたシステムが台無しになっていると思います。

しかし、Linux/Unixシステムでそのようなアカウント(おそらく壊れたインストーラースクリプト、混乱した管理者、またはこのようなものによって作成されたもの)をチェックする方法は?

最初の概算として、私は次のようなことを考えることができます:

_$ grep '^[^:]\+::' /etc/passwd /etc/shadow
_

空のパスワードですべてのアカウントを印刷しますが、具体的なシステムでは、空のエントリを受け入れるプログラムがないため、このようなアカウントは問題になりません。c.f。パスワード(5):

ただし、/ etc/passwdファイルを読み取る一部のアプリケーションは、パスワードフィールドが空白の場合、アクセスをまったく許可しないことを決定する場合があります。

しかし、パスワードとしてハッシュされたempty文字列(例:crypt(""))はどうですか?

それらをチェックする方法は?

そして、より洗練されたアカウントデータベース(NIS、LDAPなど)が使用されているときにアカウントをチェックする方法は?

5
maxschlepzig

暗号化された空のパスワードまたは弱いパスワードを見つける簡単な方法は、 John the Ripper のようなパスワードクラッカーを使用することです。

NISまたはLDAPを使用している場合は、最初にデータベースからパスワードハッシュを抽出する必要があります。1つの方法はgetentを使用することです。 maxschlepzigからの回答 を参照してください。

5
jofel

質問の最後の部分に対処する:

getentは、データベースの詳細を抽象化します。あなたが使用することができます

$ getent passwd
$ getent shadow

構成されたメカニズム(ファイル、LDAP、NISなど)に関係なくこれらのデータベースにアクセスします。

2
maxschlepzig