2009/10/21

OpenLDAP 2.4: 動的なスキーマの登録

bdbを使った時に消せなくなるコンテナエントリが出来てしまうところは、BerkeleyDBのマニュアルやら追いかけたのですが、LPICの試験とは関係ないのと、事務局からexpireの予告はがきが届いたこともあって、試験勉強を進める事にしました。

参考にしている問題集の「徹底攻略LPI Level3問題集」(中島能和:著)によれば、Active Directoryやらを使ってのLinuxアカウントの統合なども出るらしい。

そこで、とりあえず作ったサーバーを使って、VMWareに別VMを追加してPAMとNSSで認証をさせてみようと作業を進めました。

ここで新たな問題が…。

そこで"objectclass: posixAccount"を持つようなアカウント用のコンテナを作って…、と作業を進めてみたもののldapaddが失敗してしまう…。

adding new entry "cn=e0001,ou=accounts,dc=example,dc=org"
ldap_add: Invalid syntax (21)
 additional info: objectclass: value #0 invalid per syntax

あれ、っと思っていろいろ見回してみると、なんとcore.schemaしか登録されていませんでした。

$ ldapsearch -x -W -D cn=admin,cn=config -b cn=schema,cn=config | grep dn:
xxxxxxx
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config

システムの"schema"ディレクトリには"nis.ldif"や"cosine.ldif"はありますが、misc.ldifなどはありませんでした。

少し調べてみると"slaptest"コマンドにもslapd同様に"-f"、"-F"を両方指定してslapd.confを変換する事が判りました。 そこで適当なディレクトリに移動して、misc.ldifを作成してみました。

$ mkdir dummy_slapd.d
$ mkdir fake_schema
$ echo 'include "fake_schema/misc.schema"' > dummy_slapd.conf
$ cp /usr/local/etc/openldap/schema/misc.schema fake_schema/
$ slaptest -f dummy_slapd.conf -F dummy_slapd.d
config file testing succeeded
$ cp dummy_slapd.d/cn\=config/cn\=schema/cn\=\{0\}misc.ldif misc.ldif

これでmisc.ldifが手に入ったと…。
あとはldapaddでスキーマを登録していきます。

$ ldapadd -x -W -D cn=admin,cn=config -f /usr/local/etc/openldap/schema/cosine.ldif
$ ldapadd -x -W -D cn=admin,cn=config -f /usr/local/etc/openldap/schema/inetorgperson.ldif
$ ldapadd -x -W -D cn=admin,cn=config -f /usr/local/etc/openldap/schema/nis.ldif
$ ldapadd -x -W -D cn=admin,cn=config -f misc.ldif
Enter LDAP Password: xxxxxxx
adding new entry "cn={0}misc"
ldap_add: Server is unwilling to perform (53)
 additional info: no global superior knowledge

最後にエラーになってしまったのは、slaptestで生成したmisc.ldifが、DNとして"cn=misc,cn=schema,cn=config"ではなく、"cn={0}misc"となっているからでした。

変更前: misc.ldifの先頭3行

dn: cn={0}misc
objectClass: olcSchemaConfig
cn: {0}misc

変更後: misc.ldifの先頭3行

dn: cn=misc,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: misc

さらにファイルの後ろも編集します。

変更前: misc.ldifの最後9行

structuralObjectClass: olcSchemaConfig
entryUUID: 5a6e1624-526d-102e-98e3-738f0cac427d
creatorsName: cn=config
createTimestamp: 20091021091042Z
entryCSN: 20091021091042.575517Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20091021091042Z

この部分をバッサリ削除します。なので変更後は"structuralObjectClass:"から"modifyTimestamp:"までのエントリがなくなります。

2009/10/22追記:
最初に投稿した時点ではmisc.ldifファイルの修正方法が間違っていました。削除していない行があると次のようなエラーがでます。 adding new entry "cn=misc,cn=schema,cn=config"
ldap_add: Constraint violation (19)
additional info: structuralObjectClass: no user modification allowed

あとはこれをldapaddして、終了。 さっさと先に進まないと…。

0 件のコメント: