OpenLDAP サンプルコマンド
[履歴] [最終更新] (2018/10/30 01:22:14)
最近の投稿
注目の記事

概要

LDAP の実装の一つ OpenLDAP について、簡単なコマンドサンプルを記載します。

インストール

LDAP サーバ slapd (Standalone LDAP Daemon)

sudo yum install openldap-servers
sudo apt install slapd

LDAP クライアントコマンドのインストール

sudo yum install openldap-clients
sudo apt install ldap-utils

LDAP サーバ slapd の起動

systemctl を利用する場合は以下のように起動できます。

systemctl is-enabled slapd.service
sudo systemctl start slapd.service
sudo systemctl status slapd.service

CentOS7、Debian9 の場合は、それぞれ以下の場所が LDAP ディレクトリとして利用されます。

sudo ls /etc/openldap/slapd.d
sudo ls /etc/ldap/slapd.d

LDAP コマンド例

初期設定の確認および管理者パスワードの変更

Debian9 の場合、既定で以下の LDAP ディレクトリに slapd の設定ファイルが作成されます。

$ ls /etc/ldap/slapd.d/
cn=config  cn=config.ldif

$ sudo cat /etc/ldap/slapd.d/cn\=config.ldif 
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 bec8a68f
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
structuralObjectClass: olcGlobal
entryUUID: 09b137f8-3421-1038-988a-fb4547d0d90f
creatorsName: cn=config
createTimestamp: 20180814151827Z
entryCSN: 20180814151827.197061Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20180814151827Z

管理者パスワードを生成します。(例: mypass)

$ /usr/sbin/slappasswd
New password: 
Re-enter new password: 
{SSHA}EVltfO5ymr5fm0kPBhEBw7GbzSn86AND

LDIF で追加します。以降、簡単のため echo で標準入力から設定しています。

echo 'dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}EVltfO5ymr5fm0kPBhEBw7GbzSn86AND
' | sudo ldapmodify -Y EXTERNAL -H ldapi://

RootDN の追加

LDAP は RDB 等と異なり参照が主であるため、検索が高速な木構造でデータを格納します。木構造のある階層には一つ以上のエントリが存在します。各エントリは一つ以上の属性および属性値を持っています。属性として必須のものとして cn (common name) があります。cn はある階層でエントリを一意に定めるための属性です。ディレクトリ情報ツリー全体でエントリを一意に定めるためには、各階層の cn を連結すればよいことになります。これを dn (distinguished name) とよびます。LDAP においては、ファイルシステムにおけるディレクトリのような枠となるエントリは存在せず、すべてファイルのような扱いとなり、各エントリはすべて属性および属性値を持ちます。

各エントリに設定する属性は、そのエントリのオブジェクトタイプに依ります。オブジェクトタイプの MUST 属性と MAY 属性にしたがってエントリの属性値を設定します。LDAP サーバには標準でオブジェクトタイプが用意されています。特に core.schema は OpenLDAP で必ず提供されているスキーマファイルです。基本的にはこれらスキーマファイルで定義されているオブジェクトタイプを用いてエントリを追加していくことになります。

$ sudo find /etc/ldap/ -name *.schema
/etc/ldap/schema/openldap.schema
/etc/ldap/schema/core.schema
/etc/ldap/schema/nis.schema
/etc/ldap/schema/collective.schema
/etc/ldap/schema/corba.schema
/etc/ldap/schema/cosine.schema
/etc/ldap/schema/java.schema
/etc/ldap/schema/pmi.schema
/etc/ldap/schema/dyngroup.schema
/etc/ldap/schema/duaconf.schema
/etc/ldap/schema/ppolicy.schema
/etc/ldap/schema/inetorgperson.schema
/etc/ldap/schema/misc.schema

エントリを追加するために必要となる、木構造の RootDN cn=Manager,dc=mydomain,dc=local は以下のコマンドで追加できます。

echo 'dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=local

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=local

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}EVltfO5ymr5fm0kPBhEBw7GbzSn86AND
' | sudo ldapmodify -Y EXTERNAL -H ldapi:///

エントリの追加

以下のようなコマンドで RootDN 以下にエントリを追加できます。

  • dn: dc=mydomain,dc=local
  • dn: cn=Manager,dc=mydomain,dc=local
  • dn: ou=users,dc=mydomain,dc=local

上記三つのエントリを追加しています。

echo 'dn: dc=mydomain,dc=local
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain.inc
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=local
objectClass: organizationalRole
cn: Manager

dn: ou=users,dc=mydomain,dc=local
objectClass: organizationalUnit
ou: users
' | sudo ldapadd -x -D cn=Manager,dc=mydomain,dc=local -W

更に dn: ou=users,dc=mydomain,dc=local 以下にユーザエントリを追加してみます。

echo 'dn: uid=user001,ou=users,dc=mydomain,dc=local
objectClass: account
objectClass: posixAccount
uid: user001
cn: user001
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/user001
loginShell: /bin/bash
' | sudo ldapadd -x -D cn=Manager,dc=mydomain,dc=local -W

結果は既定では以下の場所に保存されます。

$ sudo ls /var/lib/ldap/
data.mdb  lock.mdb

$ sudo strings /var/lib/ldap/data.mdb | grep user001 | sort | uniq
/home/user001
uid=user001
user001

情報の検索

以下のようなコマンドで追加したエントリを検索できます。以下の二つのコマンドは認証方法が異なるだけで結果は同じです。

ldapsearch -Y EXTERNAL -H ldapi:/// -b ou=users,dc=mydomain,dc=local
ldapsearch -x -D cn=Manager,dc=mydomain,dc=local -W -b ou=users,dc=mydomain,dc=local

LDAP ディレクトリの設定情報も base (-b) を指定して検索できます。

sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config
関連ページ