2月 072017
 

OpenLDAPで自作カスタムスキーマの登録

標準のスキーマの属性だと足りない場合など、独自スキーマを作成して登録する手順メモ。今回はメールシステム構築前提で、mySchemaという名称のスキーマを作成しmyMailAddress と myMemoいう名称の文字列の属性をLDAPに登録する場合の手順。

RHEL7からかな?LDAPの設定ファイルやスキーマ定義のディレクトリとして格納されているので、設定変更もLDIFなどで実行する必要があり非常に面倒です。

OpenLDAP初期構築

パッケージインストール

yum -y install openldap openldap-clients openldap-servers

DBの雛形設定

cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

サービス起動/有効

systemctl enable  slapd
systemctl start  slapd

管理者パスワード設定

{SSHA}tPhOf8pZdMn4bsEu/VCjtS4RVufBdRHX は password です。他の文字にする場合には slappasswd コマンドで生成

ldapadd -Y EXTERNAL -H ldapi:// << EOF
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}tPhOf8pZdMn4bsEu/VCjtS4RVufBdRHX
EOF

ユーザドメイン(dc=goodnai,dc=com)のアクセス権限設定

dc=goodnai,dc=comというドメインを利用想定で、そのアクセス権限を設定します。

ldapmodify -x -D cn=config -w password << EOF
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" 
  read by dn.base="cn=Manager,dc=goodnai,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=goodnai,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=goodnai,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}tPhOf8pZdMn4bsEu/VCjtS4RVufBdRHX
EOF

ユーザドメイン(dc=goodnai,dc=com)作成

ユーザドメイン作成というか、TOPにあるOUを作成する。

ldapadd -x -D "cn=Manager,dc=goodnai,dc=com" -w password << EOF
dn: dc=goodnai,dc=com
objectClass: dcObject
objectClass: organization
dc: goodnai
o: goodnai

dn: ou=People,dc=goodnai,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=goodnai,dc=com
objectClass: organizationalUnit
ou: Group
EOF

カスタムスキーマ登録

スキーマ定義はolcObjectClassesというオブジェクト定義とそれに紐づくolcAttributeTypesという属性定義となっている。

ldapadd -x -D cn=config -w password << EOF
dn: cn=goodnai,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: goodnai
olcAttributeTypes: ( 1.1.2.1.1 NAME 'myMailAddress'
  DESC 'myMailAddress'
  EQUALITY caseIgnoreMatch
  SUBSTR caseIgnoreSubstringsMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
olcAttributeTypes: ( 1.1.2.1.2 NAME 'myMemo'
  DESC 'myMemo'
  EQUALITY caseIgnoreMatch
  SUBSTR caseIgnoreSubstringsMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
olcObjectClasses: ( 1.1.2.2.1  NAME 'mySchema'
  SUP 'person'
  STRUCTURAL
  MAY ( myMailAddress $ myMemo ) )
EOF

サンプルデータ登録に必要なスキーマ登録

今回のサンプルデータを登録するに、既存で必要なスキーマがあるのでそれを登録する。

ldapadd -x -D cn=config -w password -f /etc/openldap/schema/cosine.ldif
ldapadd -x -D cn=config -w password -f /etc/openldap/schema/nis.ldif

サンプルデータ登録

サンプルのデータを登録する。カスタム定義したオブジェクト(goodnai)とその属性である、myMemoとmyMailAddressが登録できているのが確認できる。

ldapadd -x -D "cn=Manager,dc=goodnai,dc=com" -w password << EOF
dn: uid=testuser1,ou=People,dc=goodnai,dc=com
uid: testuser1
cn: testuser1
sn: testuser1
userPassword: {SSHA}tPhOf8pZdMn4bsEu/VCjtS4RVufBdRHX
shadowLastChange: 16398
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 5001
gidNumber: 5001
homeDirectory: /home/testuser1
gecos: testuser1
objectClass: goodnai
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: top
myMemo: testuser memo
myMailAddress: testuser1@goodnai.com
EOF

その他

便利ツール

LDIFを作成したりするのが不便なのでVIインターフェイスで更新できるツールがある。EPELリポジトリになってしまうが、便利なのでお勧めします。

yum install epel-release
yum install ldapvi

ldapvi使用例

今回の構成でのコンフィグ修正用とデータ修正用のコマンドはこうなります

ldapvi -Y EXTERNAL -h ldapi:/// -b cn=config
ldapvi -D "cn=Manager,dc=goodnai,dc=com" -w password -h ldapi:/// -b dc=goodnai,dc=com

参考にしたURL

http://qiita.com/kazukikudo/items/703d6e6664e13882fa0b
http://d.hatena.ne.jp/end0tknr/20141124/1416828820
http://assimane.blog.so-net.ne.jp/2013-08-04

Sorry, the comment form is closed at this time.