URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

「389 Directory Server」のユーザー作成

 平日はなんだかんだで仕事以外のアウトプットをする余裕が全然なかった。
 5月は西とか北に出張することになりそう…。
 まあ、そのお仕事にRHDSが関連しているわけですが。

 前回までで2台構成のマルチマスターレプリケーションが構成できたので、ユーザーを作成して認証できるようにするまで。

 環境は引き続き同じです。

ホスト名FQDNIPアドレス
ds-1ds-1.example.com172.16.11.51
ds-2ds-2.example.com172.16.11.52

セキュリティ等の設定

 最初に最低限のセキュリティ設定として匿名ユーザーのアクセスを無効化します。
 "dsconf"コマンドの設定は基本的にレプリケーションされないので、各サーバそれぞれで実行します。

# dsconf localhost config replace nsslapd-allow-anonymous-access=off

 設定の確認は次のような感じです。

# dsconf localhost config get nsslapd-allow-anonymous-access
nsslapd-allow-anonymous-access: off

 "dsconf"の設定でもう一つ、後々のために"MemberOf"プラグインを有効にしておきます。

# dsconf localhost plugin memberof enable

 続いて、クライアントが参照用に使うオブジェクトを作成します。
 ここからの操作ではOpenLDAPクライアントのコマンド"ldapadd"や"ldapmodify"を使うのですが、自己署名証明書に起因するエラーを回避するため、証明書の検証を無効にする設定を入れておきます。
 設定ファイル"/etc/openldap/ldap.conf"に以下の一行を追加します。

TLS_REQCERT never

 ここからオブジェクトの作成ですが、いずれか一方で実行すればもう一方へもレプリケーションされるはずです。
 次の様なLDIFファイルを作成します。

dn: cn=readonly,dc=example,dc=com objectClass: person cn: readonly sn: readonly userPassword: changeme

 これを"ldapadd"コマンドで投入します。

# ldapadd -h localhost -p 389 -D "cn=Directory Manager" -W -f readonly-cn.ldif

 "readonly-cn.ldif"が事前に作成したLDIFファイルです。
 これで"cn=readonly,dc=example,dc=com"というオブジェクトが作成されましたが、この状態ではアクセス権がありませんので、ACIで読み取りのみのアクセス権を付与します。
 ACIを記述したLDIFファイルを作成します。

dn: dc=example,dc=com add: aci aci: (targetattr=*) (version 3.0; acl "Read Only"; allow(read,search,compare)(userdn="ldap:///cn=readonly,dc=example,dc=com");)

 この内容は"cn=readonly,dc=example,dc=com"に対してディレクトリ全体の読み取り(read)、search(検索)、比較(compare)を許可しています。
 これを"ldapmodify"コマンドで適用します。

# ldapmodify -h localhost -p 389 -D "cn=Directory Manager" -W -f readonly-bind-acl.ldif

 このオブジェクトをLDAPクライアントが利用できるようにパスワードを設定します。

# ldappasswd -Z -h localhost -D "cn=Directory Manager" -W -S cn=readonly,dc=example,dc=com

 コマンド例はローカル実行想定なのであまり心配しなくてもよいと思いますが、パスワードは平文でやりたくなかったので"-Z"オプションでSTARTTLSを使っています。
 プロンプトが表示されたら新しいパスワードを入力します。

OU/グループ/ユーザーの作成

 ここからはLinuxの認証に使うユーザーやグループを作成します。
 まずはユーザーやグループを配置するためのOUを作成するのですが、この後で使う"dsidm"コマンドでは暗黙で"People"と"Groups"を使うので、これを作成します。
 LDIFファイルは次の通りです。

dn: ou=Groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People

 "ldapadd"コマンドで投入します。

# ldapadd -h localhost -p 389 -D "cn=Directory Manager" -W -f init-ou.ldif

 続いてグループとユーザーの作成です。
 OUのようにLDIFファイルから作成しても良いのですが、ここでは389-dsで用意されている"dsidm"コマンドを使います。
 グループから作成します。

# dsidm localhost posixgroup create --cn pwadmins --gidNumber 10000
# dsidm localhost posixgroup create --cn ldapusers --gidNumber 10001

 "pwadmins"と"ldapusers"の2つのグループを作成しました。"gidNumber"はLinux上でのGIDになります。
 続いてユーザー作成です。オプションが多くて長くなっていますが、内容はそれほど難しくないと思います。

# dsidm localhost user create --uid pwadmin --cn pwadmin --displayName "Password Admin" --uidNumber 10000 --gidNumber 10000 --homeDirectory /home/pwadmin
# dsidm localhost user create --uid test --cn test --displayName "Test User" --uidNumber 10001 --gidNumber 10001 --homeDirectory /home/test

 "pwadmin"と"test"というユーザーを作成しました。"gidNumber"はLinuxへのログイン時に所属させたいグループのGIDに合わせます。
 ユーザーを作成したら初期パスワードを設定して利用可能にします。

# dsidm localhost account reset_password uid=pwadmin,ou=people,dc=example,dc=com "password"
# dsidm localhost account reset_password uid=test,ou=people,dc=example,dc=com "password"

 作成したユーザーは次のように確認することができます。

# dsidm localhost user list
pwadmin
test
# dsidm localhost user get test
dn: uid=test,ou=people,dc=example,dc=com
cn: test
displayName: Test User
gidNumber: 10001
homeDirectory: /home/test
objectClass: top
objectClass: nsPerson
objectClass: nsAccount
objectClass: nsOrgPerson
objectClass: posixAccount
uid: test
uidNumber: 10001
userPassword: {PBKDF2-SHA512}10000$LPe2vwfkurbasSHbhaG13ZSwqxxx

 これでユーザーは作成できましたが、実運用上はユーザー自身にパスワードを変更させる必要があります。
 次のLDIFファイルは"ou=People"配下のユーザーに自分自身のパスワード変更権限を与えています。

dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="userPassword") (version 3.0; acl "Allow users updating their password"; allow (write) userdn= "ldap:///self";)

 これを"ldapmodify"で適用します。

# ldapmodify -h localhost -p 389 -D "cn=Directory Manager" -W -f change-own-pw.ldif

 これで最低限の準備はできたので、別のLinuxから認証してみます。
 そっちは次回で。