UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS6 OpenLDAPのスキーマ管理




■スキーマの管理

CentOSのOpenLDAPはインストールした時点で基本的なスキーマを読み込むように設定されています。現在定義されているスキーマは設定の一部としてcn=schema,cn=configというエントリの配下に格納されています。そのため以下のコマンドで確認することができます。

# ldapsearch -x -LLL -W -D cn=config -b cn=config "(objectClass=olcSchemaConfig)" dn
Enter LDAP Password:
dn: cn=schema,cn=config

dn: cn={0}corba,cn=schema,cn=config

dn: cn={1}core,cn=schema,cn=config

dn: cn={2}cosine,cn=schema,cn=config

dn: cn={3}duaconf,cn=schema,cn=config

dn: cn={4}dyngroup,cn=schema,cn=config

dn: cn={5}inetorgperson,cn=schema,cn=config

dn: cn={6}java,cn=schema,cn=config

dn: cn={7}misc,cn=schema,cn=config

dn: cn={8}nis,cn=schema,cn=config

dn: cn={9}openldap,cn=schema,cn=config

dn: cn={10}ppolicy,cn=schema,cn=config

dn: cn={11}collective,cn=schema,cn=config


LDAPのスキーマはolcSchemaConfigというオブジェクトクラスで定義されています。そのためこの例ではオブジェクトクラスがolcSchemaConfigであるエントリだけを表示するようにフィルタを設定します。また引数にdnを指定し、そのエントリのdnのみを表示しています。標準では以下のようなスキーマが定義されています。番号はLDAPサーバが管理用につけているものでスキーマを読み込む順番になります。

番号 ファイル  説明 
corba  RFC2714で定義されているCORBAオブジェクトを扱うために使用するスキーマ 
core  OpenLDAP Coreスキーマ ( 必須 ) 
cosine  COSINEとInternet X.500スキーマ ( 必須 ) 
duaconf  LDAPベースのDirectory User Agent ( DUA )の設定用スキーマ 
dyngroup  Netscape社が定義したグループのスキーマ、URLを使った動的なグループ生成のための属性が定義されている 
inetorgperson  組織に関連する人を表すオブジェクトクラスinetOrgPersonを定義するスキーマ 
java  RFC2713で定義されているJavaオブジェクトを扱うために使用するスキーマ 
misc  発展中のオブジェクトクラスを定義するスキーマ、製品での使用は奨励されない 
nis  UNIXアカウント等を扱うために使用するスキーマ、posixAccountやposixGroupはこのファイルに定義されている 
openldap  OpenLDAPプロジェクトのスキーマ、情報提供用に使用されている 
10  ppolicy  パスワードポリシーのためのスキーマ 
11  collective  RFC3671で定義されている複数エントリで共有する属性のためのスキーマ 


■スキーマの登録

スキーマはスキーマ特有の形式で配布されています。実際にLDAPサーバにスキーマを登録するにはLDIF形式に変換する必要があります。標準で/etc/openldap/schemaにスキーマ定義ファイルがインストールされます。また一部のスキーマはLDIF形式のものも同時にインストールされます。しかし残念ながら全てのスキーマをLDIF形式で用意されているわけではありません。そのためスキーマを登録するにはまずスキーマ形式をLDIF形式に変換する必要があります。なお、LDIF形式へ変換済みのファイルがある場合は変換後のスキーマ登録のみを行います。

ここではautofs.schemaを登録する場合を例にとります。autofs.schemaはautofsパッケージに含まれているのでインストールされていない場合はまずこれをインストールします。


# yum install autofs
# rpm -qa | grep autofs
autofs-5.0.5-74.el6_4.i686


以下のコマンドでスキーマファイルを/etc/openldap/schemaに移動しておきます。

# cp /usr/share/doc/autofs-5.0.5/autofs.schema /etc/openldap/schema/


■スキーマファイルの変換

slaptestコマンドには従来のOpenLDAP設定ファイルの形式を動的管理のできるディレクトリ形式に変換するための機能が実装されています。この機能を使ってスキーマファイルをLDIF形式に変換することができます。変換作業を行う前にまずは作業用ディレクトリを作成します。

# mkdir /tmp/work
# mkdir /tmp/work/slapd.d


ここでは2つのディレクトリを作成しましたが、1つめは作業ディレクトリそのもの、もうひとつは変換したディレクトリ形式のファイルを格納するディレクトリです。次に変換の元となる設定ファイルを作成します。設定ファイルには次の例のように最低限の情報だけを記載します。

# vi /tmp/work/autofs.config

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/autofs.schema


このファイルを指定して次のように変換処理を行います。

# slaptest -f autofs.config -F slapd.d
config file testing succeeded


変換が成功するとslapd.d/cn=config/cn=schemaに変換後のスキーマファイルが作成されています。

# ls slapd.d/cn=config/cn=schema
cn={0}core.ldif  cn={1}autofs.ldif


ファイルには{0}, {1}のように番号がつけられていますがこれは先程の設定ファイルで指定したファイルの読み込み順です。この場合にはcn={1}autofs.ldifがautofs.schemaが変換されたファイルです。変換されたLDIFファイルはそのまま使うことができませんので作業用ディレクトリにコピーして編集します。

# cp slapd.d/cn=config/cn=schema/cn={1}autofs.ldif autofs.ldif


次にこのLDIFファイルを編集します。ファイルの中身は次のようになっており、編集が必要な箇所を太文字にしています。

# vi autofs.ldif
dn: cn={1}autofs
objectClass: olcSchemaConfig
cn: {1}autofs
olcAttributeTypes: {0}( 1.3.6.1.1.1.1.25 NAME 'automountInformation' DESC 'Inf
 ormation used by the autofs automounter' EQUALITY caseExactIA5Match SYNTAX 1.
 3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.1.1.1.13 NAME 'automount' DESC 'An entry in an
 automounter map' SUP top STRUCTURAL MUST ( cn $ automountInformation $ object
 class ) MAY description )
olcObjectClasses: {1}( 1.3.6.1.4.1.2312.4.2.2 NAME 'automountMap' DESC 'An gro
 up of related automount objects' SUP top STRUCTURAL MUST ou )
structuralObjectClass: olcSchemaConfig
entryUUID: c17f2e2e-5986-1032-93b1-8909044b3dbc
creatorsName: cn=config
createTimestamp: 20130525130001Z
entryCSN: 20130525130001.733017Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20130525130001Z


スキーマはcn=schema,cn=config配下に登録する必要がありますので最初のDNを実際のエントリ名に合わせて変更する必要があります。また、ファイルの読み込み順を表す{1}のような数字はLDAPサーバが勝手に割り振りしますので指定することができません。そのため数値を削除する必要があります。さらにstructuralObjectClassの部分以降の属性はLDAPサーバ管理用の属性で不要ですので削除します。これらを踏まえて最終的なLDIFファイルは以下のようになります。


dn: cn=autofs,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: autofs
olcAttributeTypes: {0}( 1.3.6.1.1.1.1.25 NAME 'automountInformation' DESC 'Inf
 ormation used by the autofs automounter' EQUALITY caseExactIA5Match SYNTAX 1.
 3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.1.1.1.13 NAME 'automount' DESC 'An entry in an
 automounter map' SUP top STRUCTURAL MUST ( cn $ automountInformation $ object
 class ) MAY description )
olcObjectClasses: {1}( 1.3.6.1.4.1.2312.4.2.2 NAME 'automountMap' DESC 'An gro
 up of related automount objects' SUP top STRUCTURAL MUST ou )


あとはこのファイルをldapaddコマンドを使ってLDAPサーバに登録します。

# ldapadd -x -W -D cn=config -f autofs.ldif
Enter LDAP Password:
adding new entry "cn=autofs,cn=schema,cn=config"


登録されているか確認してみます。

# ldapsearch -x -LLL -W -D cn=config -b cn=config "(objectClass=olcSchemaConfig)" dn
Enter LDAP Password:
<省略>

dn: cn={12}autofs,cn=schema,cn=config


登録されていることが確認できます。



 

 関連記事
 OpenLDAPのTLS対応設定
 OpenLDAPのスキーマ管理
 OpenLDAPのレプリケーション設定
 OpenLDAPのチューニング
 OpenLDAPにLinuxアカウントを統合
 OpenLDAPのインストールと基本設定
 Apache Directory Studioの導入
 ActiveDirectory+Linuxで統合アカウント
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.