web-dev-qa-db-ja.com

LDAPでユーザーアカウントをロックします(ポリシーを使用せずに)

この回答 では、パスワードフィールドの前に!を追加するUNIXの方法が機能することが示唆されました。これはクリーンな解決策ではないと私は主張します。ログインを不可能にするわけではありませんが、パスワードをパスワードフィールドのリテラルコンテンツ(最初の文字は!)に変更するだけです。

たとえば、パスワードフィールドが次のようになっているとします。

!{CRYPT}$6$rounds=1000000$xxx$yyy

ここで、xxxはソルトを表し、yyyはハッシュを表します。その文字列がユーザーのパスワードになります。多くの実用的な目的では、これは、ユーザーが自分のソルトを知らないため、ユーザーがログインできなくなったことを意味します。しかし、理論的には、塩を推測することで、ログインは可能です。 さらに悪いことに、攻撃者がLDAPデータベースを取得した場合、ハッシュが使用されなくなったため、この「ロックされた」アカウントに簡単にログインできるようになりました。

代わりにどのようにそれを行うことができますか?

2
Lasse Kliemann

パスワードフィールドを次のように変更します。

{CRYPT}!$6$rounds=1000000$xxx$yyy

または以下:

{CRYPT}$6$rounds=1000000$xxx$!yyy

私のテストによると、これによりパスワード認証が不可能になります。

ただし、SSHキーなど、他の認証方法については説明していません。それらをカバーするために、少なくともシェルは/bin/falseに設定されるべきです。これを別の方法と組み合わせることを強くお勧めします。コメントでは、~/.ssh/authorized_keysを無効にすることが提案されました。おそらくより安全な方法は、ユーザーのプライマリグループをマシンへのSSHが許可されていないグループに変更することです(SSHDのDenyGroupsまたはAllowGroups機能を使用できます)。

1
Lasse Kliemann

既存のパスワードハッシュを保持する必要がない場合は、LDAPエントリからuserPasswordフィールドを削除するだけです。もちろん、アカウントを再度有効にすると、ユーザーは新しいパスワードを設定する必要があります。

0
Timothy Booth