end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

openLDAPに独自属性(スキーマ)を追加

colinux環境へのopenldap install - ポイントは BerkeleyDB - end0tknrのkipple - web写経開発
以前、colinux環境へinstallした↑こちらのopenLDAPに対し、↓こちらを参考にしながら、独自属性(スキーマ)を追加。
openldapサーバを構築しよう [No.2 スキーマ追加の準備]:アシマネくんのほんわか日記:So-netブログ
「参考にしながら...」って、写経ですけど

スキーマファイルの作成

各属性の定義を、その属性を保持するクラスの定義が必要です

$ su -

# vi /usr/local/openldap/etc/openldap/schema/endo_test.schema

##属性定義
attributeTypes: ( 1.1.2.1.1
        NAME 'keiCode'
        DESC 'SEXY HEIM TEI CODE'
        EQUALITY caseIgnoreMatch
        SUBSTR caseIgnoreSubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )  #属性構文(型)

##オブジェクト クラス定義
objectclass ( 1.1.2.2.1
        NAME 'sexyHeimObject'                #クラス名
        DESC 'Sexy Heim Object'
        SUP 'person'                            #スーパークラス
        STRUCTURAL
        MAY ( keiCode ) )                       #任意属性
オブジェクト識別子 = 1.1.2.1.1

オブジェクト識別子の指定方法は理解できていませんが、「ローカルで利用する場合は、1.1台が利用可」ということなので、なんとなく「1.1.2.1.1」を指定しています。

SYNTAX(属性構文) = 1.3.6.1.4.1.1466.115.121.1.15

SYNTAX(属性構文)とは、属性値の型を表すOIDで、次のurlで、様々な方が記載されています。
http://unixlife.jp/linux/centos-6/openldap-schema-2.html

slapd.confへのスキーマファイルの追加と反映

# vi /usr/local/openldap/etc/openldap/slapd.conf
  :
include         /usr/local/openldap/etc/openldap/schema/core.schema
include         /usr/local/openldap/etc/openldap/schema/cosine.schema
include         /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include         /usr/local/openldap/etc/openldap/schema/nis.schem
include         /usr/local/openldap/etc/openldap/schema/endo_test.schema #←ココ

先程、作成したスキーマファイルを↑このようにopenldapの設定ファイルへ追加後、openldapを再起動します。

停止
# kill -INT `cat /usr/local/openldap/var/run/slapd.pid`
起動
# /usr/local/openldap/libexec/slapd -u ldap 

動作確認

LDIFファイルの作成と追加

$ vi /home/endo/tmp/add.ldif

dn: uid=test5001,ou=People,dc=my-domain,dc=com
uid: test5001
cn: testtest5001
sn: test
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sexyHeimObject   ####←ココ
userPassword: {SSHA}s6qZYlxMIYdSnWa8X9NHC06EfzYXKBCy
shadowLastChange: 16398
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 5001
gidNumber: 5001
homeDirectory: /home/test5001
gecos: test5001
keiCode: tei5001                ####←ココ

$ ldapadd -x -D cn=Manager,dc=my-domain,dc=com -w secret -f add.ldif

最初は、「objectClass: sexyHeimObject」の指定が漏れていて、次のエラーとなっていました。

ldap_add: Object class violation (65)
        additional info: attribute 'keiCode' not allowed


colinux環境へのopenldap install - ポイントは BerkeleyDB - end0tknrのkipple - web写経開発
追加結果の確認は、以前作成した↑こちらのperl scriptを利用していますが、次のように問題なく「keiCode: tei5001」が登録されていることが確認できました。

$ ./dump_ldap_users.pl
------------------------------------------------------------------------
dn:uid=test5001,ou=People,dc=my-domain,dc=com

             uid: test5001
              cn: testtest5001
              sn: test
     objectClass: top
                  person
                  posixAccount
                  shadowAccount
                  sexyHeimObject
    userPassword: {SSHA}s6qZYlxMIYdSnWa8X9NHC06EfzYXKBCy
shadowLastChange: 16398
       shadowMax: 99999
   shadowWarning: 7
      loginShell: /bin/bash
       uidNumber: 5001
       gidNumber: 5001
   homeDirectory: /home/test5001
           gecos: test5001
         keiCode: tei5001