この回答 では、パスワードフィールドの前に!
を追加するUNIXの方法が機能することが示唆されました。これはクリーンな解決策ではないと私は主張します。ログインを不可能にするわけではありませんが、パスワードをパスワードフィールドのリテラルコンテンツ(最初の文字は!
)に変更するだけです。
たとえば、パスワードフィールドが次のようになっているとします。
!{CRYPT}$6$rounds=1000000$xxx$yyy
ここで、xxx
はソルトを表し、yyy
はハッシュを表します。その文字列がユーザーのパスワードになります。多くの実用的な目的では、これは、ユーザーが自分のソルトを知らないため、ユーザーがログインできなくなったことを意味します。しかし、理論的には、塩を推測することで、ログインは可能です。 さらに悪いことに、攻撃者がLDAPデータベースを取得した場合、ハッシュが使用されなくなったため、この「ロックされた」アカウントに簡単にログインできるようになりました。
代わりにどのようにそれを行うことができますか?
パスワードフィールドを次のように変更します。
{CRYPT}!$6$rounds=1000000$xxx$yyy
または以下:
{CRYPT}$6$rounds=1000000$xxx$!yyy
私のテストによると、これによりパスワード認証が不可能になります。
ただし、SSHキーなど、他の認証方法については説明していません。それらをカバーするために、少なくともシェルは/bin/false
に設定されるべきです。これを別の方法と組み合わせることを強くお勧めします。コメントでは、~/.ssh/authorized_keys
を無効にすることが提案されました。おそらくより安全な方法は、ユーザーのプライマリグループをマシンへのSSHが許可されていないグループに変更することです(SSHDのDenyGroups
またはAllowGroups
機能を使用できます)。
既存のパスワードハッシュを保持する必要がない場合は、LDAPエントリからuserPasswordフィールドを削除するだけです。もちろん、アカウントを再度有効にすると、ユーザーは新しいパスワードを設定する必要があります。