7.6. パスワードポリシーの設計
パスワードポリシーとは、特定のシステムでパスワードがどのように使用されるかを管理する一連のルールのことです。Directory Server のパスワードポリシーは、期間、長さ、ユーザーがパスワードを再利用できるかどうかなど、パスワードが有効であると見なされるために満たす必要のある基準を指定します。
7.6.1. パスワードポリシーの仕組み
Directory Server はきめ細かなパスワードポリシーをサポートしています。つまり、Directory Server はディレクトリーツリーの任意のポイントでパスワードポリシーを定義します。Directory Server は、次のレベルでパスワードポリシーを定義します。
- ディレクトリー全体
このようなポリシーは グローバル パスワードポリシーと呼ばれます。このポリシーを設定して有効にすると、Directory Server は、Directory Manager エントリーとローカルパスワードポリシーが有効になっているユーザーエントリーを除く、ディレクトリー内のすべてのユーザーにこのポリシーを適用します。
このポリシータイプでは、すべてのディレクトリーユーザーに対して共通の単一のパスワードポリシーを定義できます。
- ディレクトリーの特定のサブツリー
このようなポリシーは サブツリーレベル または ローカル パスワードポリシーと呼ばれます。このポリシーを設定して有効にすると、Directory Server は指定されたサブツリーの下にあるすべてのユーザーにこのポリシーを適用します。
このポリシータイプは、すべてのホスト会社に単一のポリシーを適用するのではなく、ホスト会社ごとに異なるパスワードポリシーをサポートするホスティング環境に適しています。
- ディレクトリーの特定ユーザー
このようなポリシーは ユーザーレベル または ローカル パスワードポリシーと呼ばれます。このポリシーを設定して有効にすると、Directory Server は指定されたユーザーにのみこのポリシーを適用します。
このポリシータイプでは、ディレクトリーユーザーごとに異なるパスワードポリシーを定義できます。たとえば、一部のユーザーがパスワードを毎日変更し、一部のユーザーが毎月パスワードを変更し、他のすべてのユーザーが 6 か月ごとにパスワードを変更するように指定します。
デフォルトでは、Directory Server にはグローバルパスワードポリシーに関連するエントリーおよび属性が含まれます。つまり、同じポリシーがすべてのユーザーに適用されます。サブツリーまたはユーザーのパスワードポリシーを設定するには、サブツリーまたはユーザーレベルで追加のエントリーを追加し、cn=config
エントリーの nsslapd-pwpolicy-local
属性を有効にします。この属性はスイッチとして機能し、粒度の細かいパスワードポリシーをオンおよびオフに切り替えます。
コマンドラインまたは Web コンソールを使用して、パスワードポリシーを変更できます。コマンドラインでは、dsconf pwpolicy
コマンドはグローバルポリシーを変更し、dsconf localpwp
コマンドはローカルポリシーを変更します。パスワードポリシーを設定する手順は、パスワードポリシーの設定 セクションを参照してください。
パスワードポリシーの確認プロセス
ディレクトリーに追加するパスワードポリシーエントリーによって、Directory Server が適用するパスワードポリシーのタイプ (グローバルまたはローカル) が決まります。
ユーザーがディレクトリーにバインドしようとすると、Directory Server は、ローカルポリシーが定義され、ユーザーのエントリーに対して有効になっているか判断します。Directory Server は、次の順序でポリシー設定をチェックします。
-
Directory Server は、きめ細かいパスワードポリシーが有効になっているか判断します。サーバーは、
cn=config
エントリーのnsslapd-pwpolicy-local
属性の値 (on
またはoff
) をチェックします。値がoff
に設定されている場合、サーバーはサブツリーおよびユーザーレベルで定義されたポリシーを無視し、グローバルパスワードポリシーを適用します。 Directory Server は、サブツリーまたはユーザーに対してローカルポリシーが定義されているか判断します。サーバーは、対応するユーザーエントリー内の
pwdPolicysubentry
属性をチェックします。- 属性が存在する場合は、サーバーは、ユーザーに設定されたローカルパスワードポリシーを適用します。エントリーに属性があっても、値が空または無効 (たとえば、存在しないエントリーを指している) の場合、サーバーはエラーメッセージをログに記録します。
-
pwdPolicysubentry
属性がユーザーエントリーに見つからない場合、サーバーは最上位に到達するまで親エントリー、祖父母エントリー、およびその他の上位レベルのエントリーをチェックします。 -
pwdPolicysubentry
属性が上位レベルのエントリーに見つからない場合、サーバーはグローバルポリシーを適用します。
- サーバーはユーザーが指定したパスワードを、ユーザーのディレクトリーエントリーで指定された値と比較して、それらが一致することを確認します。サーバーは、パスワードポリシーが定義するルールも使用して、ユーザーがディレクトリーにバインドできるようになる前にパスワードが有効であることを確認します。
バインド要求に加えて、要求に userPassword
属性が存在する場合、追加および変更操作中にパスワードポリシーのチェックも行われます。
userPassword
の値を変更すると、次の 2 つのパスワードポリシー設定がチェックされます。
-
パスワードの最低期間ポリシーがアクティブになります。最小年齢要件が満たされていない場合、サーバーは
constraintViolation
エラーを返します。パスワード更新操作は失敗します。 -
パスワード履歴ポリシーがアクティブになります。
userPassword
属性の新しい値がパスワード履歴に存在する場合、または現在のパスワードと同じ場合、サーバーはconstraintViolation
エラーを返します。パスワード更新操作は失敗します。
userPassword
の値を追加および変更すると、パスワード構文に設定されているパスワードポリシーがチェックされます。
-
パスワードの最小長ポリシーがアクティブになります。
userPassword
属性の新しい値が必要な最小長より短い場合、サーバーはconstraintViolation
エラーを返します。パスワード更新操作は失敗します。 -
パスワード構文の確認ポリシーがアクティブになります。
userPassword
の新しい値がエントリーの別の属性と同じ場合、サーバーはconstraintViolation
エラーを返します。パスワード更新操作は失敗します。
7.6.2. パスワードポリシーの属性
サーバーのパスワードポリシーを作成するために使用できる属性を説明します。Directory Server はパスワードポリシー属性を cn=config
エントリーに保存しますが、dsconf
ユーティリティーを使用してこれらの設定を変更できます。
失敗の最大回数
この設定により、パスワードポリシーでパスワードベースのアカウントロックアウトが有効になります。ユーザーが一定回数ログインを試行して失敗した場合、Directory Server はそのアカウントをロックします。このアカウントは、管理者がロックを解除するか、一定時間が経過するまで (オプション) ロックされます。失敗の最大回数を設定するには、passwordMaxFailure
設定パラメーターを使用します。
Directory Server には、ログイン試行回数をカウントし、ログイン試行回数が制限に達したときにアカウントをロックする方法が 2 つあります。
-
Directory Server は、カウントが (
n
) に達するとアカウントをロックします。 -
Directory Server は、カウントが (
n+1
) を超えた場合にのみアカウントをロックします。
たとえば、失敗回数が 3 回に制限されている場合、アカウントは 3 回目の失敗 (n
) または 4 回目の失敗 (n+1
) でロックされる可能性があります。n+1
の動作は LDAP サーバーの過去の動作であるため、レガシー動作とみなされます。新しい LDAP クライアントでは、より厳しいハード制限が想定されます。デフォルトでは、Directory Server は厳密な制限 (n) を使用しますが、passwordLegacyPolicy
設定パラメーターでレガシー動作を変更できます。
リセット後のパスワード変更
Directory Server パスワードポリシーでは、初回のログイン後、または管理者がパスワードをリセットした後にユーザーがパスワードを変更する必要があるかどうかを指定できます。管理者が設定するデフォルトのパスワードは通常、ユーザーのイニシャル、ユーザー ID、会社名などの会社の規則に従います。この規則が検出された場合、それは通常、悪意のある攻撃者がシステムに侵入しようとする際に使用する最初の値になります。したがって、管理者がパスワードをリセットした後は、ユーザーにパスワードの変更を要求することを推奨します。
パスワードポリシーにこの設定を行うと、ユーザー定義のパスワードが無効になっている場合でも、ユーザーはパスワードを変更する必要があります。パスワードポリシーにより、ユーザーが自分のパスワードを変更する必要がないまたは変更を許可されていない場合、管理者が割り当てるパスワードは、明白な規則に従わないもので、検出されにくいものにする必要があります。
デフォルト設定では、リセット後にユーザーがパスワードを変更する必要はありません。
ユーザー定義のパスワード
ユーザーが自分のパスワードを変更できるかできないかは、パスワードポリシーで設定できます。強固なパスワードポリシーには、適切なパスワードが必要です。適切なパスワードには、辞書に載っている単語、ペットや子供の名前、誕生日、ユーザー ID、または簡単に発見できる (またはディレクトリー自体に保存されている) ユーザーに関するその他の情報など、簡単に推測できるような単語は使用しないでください。適切なパスワードには、文字、数字、および特殊文字の組み合わせが含まれる必要があります。ただし、便宜上、ユーザーは覚えやすいパスワードを使用することがよくあります。そのため、企業によっては、強固なパスワード基準を満たすユーザーにパスワードを設定し、ユーザーがパスワードを変更できないようにすることがあります。
管理者がユーザーのパスワードを設定することには、次のような欠点があります。
- 管理者の時間をかなり費やす必要があります。
- 管理者が指定したパスワードは通常、覚えるのが難しいため、ユーザーはパスワードを書き留める可能性が高く、発見されるリスクが高くなります。
デフォルトでは、ユーザー定義のパスワードが許可されます。
パスワードの有効期限
パスワードポリシーを使用すると、同じパスワードを無期限に使用することを許可したり、一定期間後にパスワードの有効期限が切れるように設定することが可能です。一般的に、パスワードの使用期間が長いほど、パスワードが検出される可能性が高くなります。ただし、パスワードの期限切れが頻繁に発生すると、ユーザーはパスワードを覚えるのに苦労し、パスワードを書き留めてしまう可能性があります。一般的なポリシーでは、パスワードは 30 - 90 日ごとに失効します。サーバーは、パスワードの有効期限が無効であっても、パスワード失効の仕様を記憶します。パスワードの有効期限が再度有効になると、パスワードは最後に無効になった前に設定された期間のみ有効になります。たとえば、パスワードの有効期限が 90 日ごとに切れるように設定し、その後パスワードの有効期限を無効にしてから再度有効にした場合、デフォルトのパスワードの有効期限は 90 日間のままになります。
デフォルトでは、ユーザーパスワードは期限切れになりません。
有効期限の警告
パスワードの有効期限が設定されている場合、パスワードの期限が切れる前に警告をユーザーに送信することが推奨されます。
ユーザーがサーバーにバインドすると、Directory Server は警告を表示します。パスワードの有効期限が設定されている場合、Directory Server はデフォルトで、ユーザーパスワードの有効期限が切れる 1 日前に、LDAP メッセージを使用してユーザーに警告を送信します。ユーザークライアントアプリケーションはこの機能をサポートする必要があります。
パスワード有効期限警告の有効範囲は 1 日から 24,855 日です。
Directory Server が有効期限の警告を送信するまで、パスワードは期限切れに なりません。
猶予ログイン制限
期限切れパスワードの 猶予期間 とは、パスワードが期限切れであっても、ユーザーがシステムにログインできることを意味します。一部のユーザーが期限切れのパスワードを使用してログインできるようにするには、パスワードの有効期限が切れた後にユーザーに許可される猶予ログインの試行回数を指定します。
デフォルトでは、Directory Server は猶予ログインを許可しません。
パスワードの構文チェック
パスワード構文チェックでは、パスワード文字列のルールが適用され、すべてのパスワードが特定の基準を満たすか、それを超える必要があります。すべてのパスワード構文チェックは、グローバルに、サブツリーごとに、またはユーザーごとに適用できます。passwordCheckSyntax
属性は、パスワード構文チェックを管理します。
デフォルトのパスワード構文には、最低 8 文字が必要で、パスワードに普通の言葉を使用できません。簡単に推測できる単語とは、ユーザーエントリーの uid
、cn
、sn
、givenName
、ou
、または mailattributes
に格納されている任意の値のことです。
さらに、他の形式のパスワード構文を強制でき、パスワード構文にさまざまなオプションのカテゴリーを提供します。
-
パスワードに必要な最小文字数 (
passwordMinLength
)。 -
数字の最小桁数、つまり 0 から 9 までの数字 (
passwordMinDigits
)。 -
大文字と小文字の両方を含む ASCII アルファベット文字の最小数 (
passwordMinAlphas
)。 -
大文字の ASCII アルファベット文字の最小数 (
passwordMinUppers
)。 -
小文字の ASCII アルファベット文字の最小数 (
passwordMinLowers
)。 -
!@#$
などの ASCII 特殊文字の最小数 (passwordMinSpecials
)。 - 8 ビット文字の最小数 (passwordMin8bit)。
-
aaabbb
など、同じ文字をすぐに繰り返すことができる最大回数 (passwordMaxRepeats
)。 -
パスワードに必要な文字カテゴリーの最小数。カテゴリーには、大文字または小文字、特殊文字、数字、または 8 ビット文字を使用できます (
passwordMinCategories
)。 -
Directory Server は、パスワードを
CrackLib
辞書と照合します (passwordDictCheck
)。 -
Directory Server は、パスワードに回文が含まれているか確認します (
passwordPalindrome
)。 -
Directory Server では、同じカテゴリーからの連続する文字が複数含まれるパスワードの設定を阻止します (
passwordMaxClassChars
)。 -
Directory Server は、特定の文字列を含むパスワードの設定を阻止します (
passwordBadWords
)。 -
Directory Server では、管理者定義の属性に設定された文字列を含むパスワードの設定が阻止されます (
passwordUserAttributes
)。
必要な構文のカテゴリーが多いほど、パスワードは強力になります。
デフォルトでは、パスワード構文のチェックは無効になっています。
パスワードの長さ
パスワードポリシーでは、ユーザーパスワードの最小の長さを要求できます。一般的に、パスワードが短いほど解読されやすくなります。パスワードの推奨最小文字数は 8 文字です。これは、解読が難しく、ユーザーがパスワードを書き留めなくても覚えられる長さです。この属性に有効な値の範囲は、2 - 512 文字です。
デフォルトでは、サーバーにはパスワードの最小文字数はありません。
パスワードの最小有効期間
パスワードポリシーにより、ユーザーが指定された期間はパスワードを変更できないようにすることができます。passwordMinAge
属性を passwordHistory
属性と組み合わせて設定すると、ユーザーは古いパスワードを再利用できなくなります。たとえば、パスワードの最小期間 (passwordMinAge
) 属性が 2 日間の場合、ユーザーは単一のセッション中にパスワードを繰り返し変更できません。これにより、パスワード履歴を循環して、古いパスワードを再利用できるようになります。
passwordMinAge
属性の有効な値の範囲は 0 日から 24,855 日です。0 (0
) の値は、ユーザーがすぐにパスワードを変更できることを示しています。
パスワード履歴
Directory Server は、パスワード履歴に 2 - 24 個のパスワードを保存できます。パスワードが履歴にある場合、ユーザーは自分のパスワードをその古いパスワードにリセットすることはできません。これにより、ユーザーは覚えやすいいくつかのパスワードを再利用できなくなります。あるいは、パスワード履歴を無効にして、ユーザーがパスワードを再利用できるようにすることもできます。
パスワード履歴をオフにしても、パスワードは履歴に残ります。パスワード履歴を再度オンにすると、パスワード履歴を無効にする前に履歴にあったパスワードをユーザーは再利用できなくなります。
サーバーはデフォルトではパスワード履歴を維持しません。
パスワードストレージスキーム
パスワードストレージスキームは、ディレクトリー内に Directory Server パスワードを保存するために使用される暗号化のタイプを指定します。Directory Server は、さまざまなパスワードストレージスキームをサポートします。
- Password-Based Key Derivation Function 2 (PBKDF2_SHA256, PBKDF2-SHA1, PBKDF2-SHA256, PBKDF2-SHA512)
- これは最も安全なパスワード保存方式です。デフォルトのストレージスキームは PBKDF2-SHA512 です。
- Salted Secure Hash Algorithm (SSHA、SSHA-256、SSHA-384、および SSHA-512)
- 推奨される SSHA スキームは SSHA-256 以上です。
- CLEAR
- これは暗号化がないことを意味し、SASL Digest-MD5 で使用できる唯一のオプションであるため、SASL を使用するには CLEAR パスワード保存スキームが必要です。ディレクトリーに保存されるパスワードはアクセス制御情報 (ACI) 命令を使用して保護できますが、ディレクトリーにプレーンテキストのパスワードを保存することは推奨できません。
- Secure Hash Algorithm (SHA、SHA-256、SHA-384、および SHA-512)
- これは SSHA よりも安全性が低いです。
- UNIX 暗号
- このアルゴリズムは、UNIX パスワードとの互換性を提供します。
- MD5
- このストレージスキームは SSHA よりも安全性が低くなりますが、MD5 を必要とするレガシーアプリケーション用に含まれています。
- Salted MD5
- このストレージスキームは、プレーンな MD5 ハッシュよりも安全ですが、SSHA よりも安全性が低くなります。このストレージスキームは、新しいパスワードと併用するために含まれていませんが、salted MD5 に対応するディレクトリーからユーザーアカウントを移行する場合に役立ちます。
パスワードの最終変更時刻
passwordTrackUpdateTime
設定属性は、Directory Server がエントリーのパスワードを最後に更新した時刻のタイムスタンプを記録するようにサーバーに指示します。Directory Server は、パスワード変更時間を、modifyTimestamp
または lastModified
操作属性とは別の操作属性 pwdUpdateTime
としてユーザーエントリーに保存します。
デフォルトでは、サーバーはパスワードの最終変更時刻を保存しません。
7.6.3. レプリケートされた環境でのパスワードポリシーの設計
Directory Server は、レプリケートされた環境でパスワードとアカウントのロックアウトポリシーを次のように適用します。
- パスワードポリシーはデータサプライヤーで実施されます。
- アカウントのロックアウトは、レプリケーション設定のすべてのサーバーに適用されます。
Directory Server は、パスワードの有効期間、アカウントロックアウトカウンター、有効期限警告カウンターなどのパスワードポリシー情報をディレクトリーにレプリケートします。ただし、Directory Server は、パスワード構文やパスワード変更履歴などの設定情報をレプリケートしません。Directory Server はこの情報をローカルに保存します。
レプリケートされた環境でパスワードポリシーを設定する場合は、以下の点を考慮してください。
- すべてのレプリカは、パスワードの期限切れが近いことを警告します。Directory Server は各サーバー上でこの情報をローカルに保存するため、ユーザーが複数のレプリカに順番にバインドすると、同じ警告が複数回表示されます。さらに、ユーザーがパスワードを変更する場合、レプリカがこの情報を受信するまでに時間がかかることがあります。ユーザーがパスワードを変更してからすぐに再バインドすると、レプリカが変更を登録するまでバインドに失敗する可能性があります。
- サプライヤーやレプリカなど、すべてのサーバーで同じバインド動作が発生する必要があります。各サーバーに常に同じパスワードポリシー設定情報を作成します。
- アカウントロックアウトカウンターは、マルチサプライヤー環境で想定どおりに機能しない場合があります。