スクリプトキディによるすべてのssh-loginの試みを見ると、パスワードなしのアカウントが設定されているインターネットに接続されたシステムが台無しになっていると思います。
しかし、Linux/Unixシステムでそのようなアカウント(おそらく壊れたインストーラースクリプト、混乱した管理者、またはこのようなものによって作成されたもの)をチェックする方法は?
最初の概算として、私は次のようなことを考えることができます:
_$ grep '^[^:]\+::' /etc/passwd /etc/shadow
_
空のパスワードですべてのアカウントを印刷しますが、具体的なシステムでは、空のエントリを受け入れるプログラムがないため、このようなアカウントは問題になりません。c.f。パスワード(5):
ただし、/ etc/passwdファイルを読み取る一部のアプリケーションは、パスワードフィールドが空白の場合、アクセスをまったく許可しないことを決定する場合があります。
しかし、パスワードとしてハッシュされたempty文字列(例:crypt("")
)はどうですか?
それらをチェックする方法は?
そして、より洗練されたアカウントデータベース(NIS、LDAPなど)が使用されているときにアカウントをチェックする方法は?
暗号化された空のパスワードまたは弱いパスワードを見つける簡単な方法は、 John the Ripper のようなパスワードクラッカーを使用することです。
NISまたはLDAPを使用している場合は、最初にデータベースからパスワードハッシュを抽出する必要があります。1つの方法はgetent
を使用することです。 maxschlepzigからの回答 を参照してください。
質問の最後の部分に対処する:
getent
は、データベースの詳細を抽象化します。あなたが使用することができます
$ getent passwd
$ getent shadow
構成されたメカニズム(ファイル、LDAP、NISなど)に関係なくこれらのデータベースにアクセスします。