| Works
「389 Directory Server」のパスワードポリシー設定
次はNFSとの連携と記載していましたが、その前にパスワード関連の設定を忘れていました。
前回まででユーザーやグループを作って認証できるようにしたので、パスワードポリシーやロックアウトポリシーを設定しておきます。
環境は前回までと同じです。
| ホスト名 | FQDN | IPアドレス | 備考 |
| ds-1 | ds-1.example.com | 172.16.11.51 | LDAPサーバ |
| ds-2 | ds-2.example.com | 172.16.11.52 | LDAPサーバ |
| stg | stg.example.com | 172.16.11.55 | クライアント |
グローバルポリシー
389-dsのパスワードポリシーにはディレクトリ全体に適用されるグルーバルポリシーと、特定のサブツリーに適用されるローカルポリシーがあります。
基本的に設定可能なポリシーはどちらもほぼ同じです。
設定の一覧は次のコマンドで確認できます。
Global Password Policy: cn=config
------------------------------------
nsslapd-pwpolicy-local: off
passwordstoragescheme: PBKDF2-SHA512
passwordchange: on
...
(以下省略)
結構多いので、一つ一つ確認していくのは大変ですね。
とりあえず、次のようなルールを設定してみます。
- 12文字以上
- 大文字、小文字、数字、記号が各1文字以上必要
コマンドはオプションが長くなるので"\"で改行していますが、次のようになります。
--pwdminlen 12 \
--pwdmindigits 1 \
--pwdminuppers 1 \
--pwdminlowers 1 \
--pwdminspecials 1
"--pwdchecksyntax on"はパスワードの構文チェックの有効化で、それ以外は各種文字数の設定ですね。
コマンドを実行した後、"Successfully updated global password policy"と表示されれば設定完了です。
設定が変更されていることを確認しましょう。
Global Password Policy: cn=config
------------------------------------
(省略)
passwordchecksyntax: on
passwordminlength: 12
passwordmindigits: 1
passwordminalphas: 1
passwordminuppers: 1
passwordminlowers: 1
passwordminspecials: 1
...
(以下省略)
これでユーザーは簡単なパスワードを設定できなくなったはずなので、パスワードを変更してみましょう。
ただし、管理者だけはこのルールを無視して"dsidm localhost account reset_password ~"コマンド等で簡単なパスワードも設定できてしまいます。
あと、グローバルポリシーはレプリケーションされないので、各サーバでそれぞれ実行します。
ローカルポリシー
次に一般ユーザーのアカウントが集まっている"ou=People"のみにポリシーを適用する例です。
まず、グローバルポリシーでローカルポリシーを有効化します。
次に対象のサブツリー(OU)にローカルポリシーを作成するための「器」を作成します。
Successfully created subtree password policy
これでローカルポリシーを設定できるようになりました。
設定を確認すると、まだ中身が空なのが分かります。
Local Subtree Policy Policy for "ou=People,dc=example,dc=com": cn=cn\3DnsPwPolicyEntry_subtree\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,cn=nsPwPolicyContainer,ou=People,dc=example,dc=com
------------------------------------
ちなみに、次のように検索するとローカルポリシーを格納するためのエントリーが追加されているのが分かります。
(省略)
# cn\3DnsPwPolicyEntry_subtree\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom, nsPwPol
icyContainer, People, example.com
dn: cn=cn\3DnsPwPolicyEntry_subtree\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,cn
=nsPwPolicyContainer,ou=People,dc=example,dc=com
# nsPwPolicy_CoS, People, example.com
dn: cn=nsPwPolicy_CoS,ou=People,dc=example,dc=com
...
(以下省略)
では、実際に設定を入れていきます。
例としてパスワードに有効期限30日(2,592,000秒)を設け、期限の7日(604,800秒)前から警告を表示するようにします。
--pwdmaxage 2592000 --pwdwarning 604800 \
"ou=People,dc=example,dc=com"
Successfully updated subtree policy
# dsconf localhost localpwp get "ou=People,dc=example,dc=com"
Local Subtree Policy Policy for "ou=People,dc=example,dc=com": cn=cn\3DnsPwPolicyEntry_subtree\2Cou\3DPeople\2Cdc\3Dexample\2Cdc\3Dcom,cn=nsPwPolicyContainer,ou=People,dc=example,dc=com
------------------------------------
passwordwarning: 604800
passwordexp: on
passwordmaxage: 2592000
これで設定が入ったのを確認できました。ここでは省略しますが、設定確認とは別に実際の動作確認も別にやりましょう。
パスワード管理者
389-dsでは全てのユーザーのパスワードを操作できる「パスワード管理者」というのを設定できます。
ここでは、以前作成した"pwadmins"グループに権限を与えます。
まず、操作の権限をACIで定義します。
dn: ou=People,dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr="userPassword || nsAccountLock || userCertificate || nsSshPublicKey") (targetfilter="(objectClass=nsAccount)")(version 3.0; acl "Enable user password reset"; allow (write, read)(groupdn="ldap:///cn=pwadmins,ou=Groups,dc=example,dc=com");)"ldapmodify"でACIを適用したら、次のコマンドでロールを割り当てます。
これでグループにパスワード管理者としての権限が付与されましたが、実際に権限を使うのはユーザーなので、グループメンバーとして同様に以前作った"pwadmin"ユーザーを追加します。
以上、パスワードポリシー関連の話でした。
細かい設定や実際の挙動はまだ理解できていない部分があるので、いろいろ試している所です(ちょっと想定していたのと違う動きをするものとかもあり…)。
次こそはNFSとの連携をまとめたい。