OpenLDAP 資料一覧

LDAPサーバへのUNIXユーザ登録手順(slapadd)

2008/3/22更新

対応バージョン: 2.4.8

LDIFファイルからLDAPサーバにUNIXユーザ情報を登録する手順を示す。

ここでは以下のツリー内にユーザ情報を作成してみる。

dc=jp
  |
  +- dc=private
       |
       +- ou=People
            |
            +- uid=ldapuser

用意するLDIFファイルは以下のような内容になる。

尚、userPasswordに設定する内容は平文でもよいが、あらかじめslappasswdコマンドで暗号化パスワードを生成しておいてもよい(暗号化方式のデフォルトはSSHA)。

どちらの場合でも登録時には暗号化されて格納される。

% /usr/local/sbin/slappasswd -s <パスワード>
{SSHA}3M9xmc89c8TRf1xXlDJ4lary4WTiHD5S

関連資料・記事

% vi sample.ldif
dn: dc=private,dc=jp
objectClass: dcObject
objectClass: organization
dc: private
o: private Organization

dn: ou=People,dc=private,dc=jp
objectclass: organizationalUnit
ou: People

dn: uid=ldapuser,ou=People,dc=private,dc=jp
objectClass: account
objectClass: posixAccount
uid: ldapuser
userPassword: {SSHA}3M9xmc89c8TRf1xXlDJ4lary4WTiHD5S
uidNumber: 1000
gidNumber: 1000
cn: ldapuser
homeDirectory: /home/ldapuser
loginShell: /bin/bash

objectClassにposixAccountを指定しているが、これはデフォルトでincludeするスキーマcore.schemaではなくnis.schemaで定義されている(nis.schemaで使用するmanager属性はさらにcosine.schemaで定義されている)のでslapd.confで上記2スキーマをincludeしておく。

このLDIFファイルをsample.ldifとして作成し、実際にLDAPサーバに登録してみる。

openldapにはLDIFフォーマットのファイルの内容をLDAPサーバに登録するためにslapaddというコマンドが用意されているのでこれを使用する。

尚、LDIFファイルに日本語が含まれていても問題ないようにファイルの文字コードはUTF-8にしておく。

登録時にはslapdが停止させる必要がある。

% sudo service slapd stop

% sudo /usr/local/sbin/slapadd -l sample.ldif

% sudo service slapd start

-fでslapdと同様に設定ファイルを指定することができるが、slapdと同じくデフォルトが/usr/local/etc/openldap/slapd.confなので、ここでは-fオプションは使わない。

これで/usr/local/var/openldap-dataディレクトリに上記の登録情報が格納される。

実際に格納されたかどうかldapsearchで調べてみる。

% ldapsearch -h localhost -x -b 'ou=People,dc=private,dc=jp' 'uid=ldapuser'

これは、

% ldapsearch -h localhost -x -b 'dc=private,dc=jp' 'uid=ldapuser'

として検索ベースからou=Peopleを省いてもよい。

そうすると検索対象はdc=private,dc=jp以下の全てのサブツリーから行なわれる。

# extended LDIF
#
# LDAPv3
# base <dc=private,dc=jp> with scope subtree
# filter: uid=ldapuser
# requesting: ALL
#

# ldapuser, People, private.jp
dn: uid=ldapuser,ou=People,dc=private,dc=jp
objectClass: account
objectClass: posixAccount
uid: ldapuser
userPassword:: e1NTSEF9M005eG1jODljOFRSZjF4WGxESjRsYXJ5NFdUaUhENVM=
uidNumber: 1000
gidNumber: 1000
cn: ldapuser
homeDirectory: /home/ldapuser
loginShell: /bin/bash

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

ここでuserPassword属性の表示に着目する。

userPasswordは{SSHA}...で登録したはずだが検索結果はe1NT...となっている。

このようにuserPassword属性の値はエンコードされて表示される。

属性名の後に::が続く場合はBase64でエンコードされたものという意味である。

これはバイナリデータでも同様にエンコードされる。

これらデータは単にBase64でエンコードされているだけなのでアクセス制御をきちんとかけておかないと外部に漏洩してしまうので注意が必要である。

また、登録されている情報を参照するにはldapsearchによる検索の他にslapcatを使用して登録内容の一覧が確認する方法もある。

# /usr/local/sbin/slapcat
dn: dc=private,dc=jp
objectClass: dcObject
objectClass: organization
dc: private
o: private Organization
structuralObjectClass: organization
entryUUID: ddafe7aa-8baf-102c-9c1c-cdb4c4747cc6
creatorsName: cn=Manager,dc=private,dc=jp
modifiersName: cn=Manager,dc=private,dc=jp
createTimestamp: 20080321163030Z
modifyTimestamp: 20080321163030Z
entryCSN: 20080321163030.509867Z#000000#000#000000

dn: ou=People,dc=private,dc=jp
objectClass: organizationalUnit
ou: People
structuralObjectClass: organizationalUnit
entryUUID: ddb07238-8baf-102c-9c1d-cdb4c4747cc6
creatorsName: cn=Manager,dc=private,dc=jp
modifiersName: cn=Manager,dc=private,dc=jp
createTimestamp: 20080321163030Z
modifyTimestamp: 20080321163030Z
entryCSN: 20080321163030.513469Z#000000#000#000000

dn: uid=ldapuser,ou=People,dc=private,dc=jp
objectClass: account
objectClass: posixAccount
uid: ldapuser
userPassword:: e1NTSEF9SkpMTUNZWnloRitmOG0rMUlCb01xK1E0WHZuZWwxUjI=
uidNumber: 1000
gidNumber: 1000
cn: ldapuser
homeDirectory: /home/ldapuser
loginShell: /bin/bash
structuralObjectClass: account
entryUUID: ddb35ed0-8baf-102c-9c1e-cdb4c4747cc6
creatorsName: cn=Manager,dc=private,dc=jp
modifiersName: cn=Manager,dc=private,dc=jp
createTimestamp: 20080321163030Z
modifyTimestamp: 20080321163030Z
entryCSN: 20080321163030.532633Z#000000#000#000000

関連資料・記事