URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

「389 Directory Server」のパスワードポリシー設定

 次はNFSとの連携と記載していましたが、その前にパスワード関連の設定を忘れていました。
 前回まででユーザーやグループを作って認証できるようにしたので、パスワードポリシーやロックアウトポリシーを設定しておきます。

 環境は前回までと同じです。

ホスト名FQDNIPアドレス備考
ds-1ds-1.example.com172.16.11.51LDAPサーバ
ds-2ds-2.example.com172.16.11.52LDAPサーバ
stgstg.example.com172.16.11.55クライアント

グローバルポリシー

 389-dsのパスワードポリシーにはディレクトリ全体に適用されるグルーバルポリシーと、特定のサブツリーに適用されるローカルポリシーがあります。
 基本的に設定可能なポリシーはどちらもほぼ同じです。

 設定の一覧は次のコマンドで確認できます。

# dsconf localhost pwpolicy get
Global Password Policy: cn=config
------------------------------------
nsslapd-pwpolicy-local: off
passwordstoragescheme: PBKDF2-SHA512
passwordchange: on
...
(以下省略)

 結構多いので、一つ一つ確認していくのは大変ですね。
 とりあえず、次のようなルールを設定してみます。

  • 12文字以上
  • 大文字、小文字、数字、記号が各1文字以上必要

 コマンドはオプションが長くなるので"\"で改行していますが、次のようになります。

# dsconf localhost pwpolicy set --pwdchecksyntax on \
--pwdminlen 12 \
--pwdmindigits 1 \
--pwdminuppers 1 \
--pwdminlowers 1 \
--pwdminspecials 1

 "--pwdchecksyntax on"はパスワードの構文チェックの有効化で、それ以外は各種文字数の設定ですね。
 コマンドを実行した後、"Successfully updated global password policy"と表示されれば設定完了です。
 設定が変更されていることを確認しましょう。

# dsconf localhost pwpolicy get
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"のみにポリシーを適用する例です。
 まず、グローバルポリシーでローカルポリシーを有効化します。

# dsconf localhost pwpolicy set --pwdlocal on

 次に対象のサブツリー(OU)にローカルポリシーを作成するための「器」を作成します。

# dsconf localhost localpwp addsubtree "ou=People,dc=example,dc=com"
Successfully created subtree password 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
------------------------------------

 ちなみに、次のように検索するとローカルポリシーを格納するためのエントリーが追加されているのが分かります。

# ldapsearch -h localhost -p 389 -D "cn=Directory Manager" -b "ou=People,dc=example,dc=com" -s sub -x -W '(objectclass=ldapSubEntry)' dn
(省略)

# 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秒)前から警告を表示するようにします。

# dsconf localhost localpwp set --pwdexpire on \
--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を適用したら、次のコマンドでロールを割り当てます。

# dsconf localhost pwpolicy set --pwdadmin "cn=pwadmins,ou=groups,dc=example,dc=com"

 これでグループにパスワード管理者としての権限が付与されましたが、実際に権限を使うのはユーザーなので、グループメンバーとして同様に以前作った"pwadmin"ユーザーを追加します。

# dsidm localhost group add_member pwadmins uid=pwadmin,ou=people,dc=example,dc=com

 以上、パスワードポリシー関連の話でした。
 細かい設定や実際の挙動はまだ理解できていない部分があるので、いろいろ試している所です(ちょっと想定していたのと違う動きをするものとかもあり…)。

 次こそはNFSとの連携をまとめたい。