トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

openldap

[server] [linux]

summaryプラグインは存在しません。

参考リンク集

環境

使用するドメイン
kazz.homeunix.org
slapd,libldap2,ldaputilsのバージョン
2.1.30

インストール

# apt-get install slapd ldap-utils nscd

slapd の debconf で下記のことを聞かれるので、適当に答えます。

Do you want to omit the configuration of slapd?
-> No
Enter your DNS domain name
-> kazz.homeunix.org
Enter the name of your organization
-> kazz.homeunix.org
Admin password
-> ここでは"hoge"とします(適当に変えてね)
Which database backend would you like to use?
-> BDB
Do you want your database to be removed when slapd is purged?
-> No(の方がいいでしょう)
Allow LDAPv2 protocol
-> No

設定

/etc/ldap/slapd.confファイルを修正します。

(追加)
include         /etc/ldap/schema/misc.schema
include         /etc/ldap/schema/openldap.schema
loglevel 0
    ↓
loglevel 256
access to *
        by dn="cn=admin,dc=kazz,dc=homeunix,dc=org" write
        by * read
    ↓
access to *
        by dn="cn=admin,dc=kazz,dc=homeunix,dc=org" write
        by self write
        by users read
        by * read

rootでslapdを起動するのは危険なので、ldapというユーザを作成します。

# adduser --system --home /var/lib/ldap --no-create-home ldap
# chown ldap:nogroup /etc/ldap/slapd.conf
# chown -R ldap:nogroup /var/lib/ldap

合わせて、/etc/default/slapdを修正します。

@@ -3,11 +3,11 @@
 
# System account to run the slapd server under. If empty the server
# will run as root.
-SLAPD_USER=
+SLAPD_USER=ldap
 
# System group to run the slapd server under. If empty the server will
# run in the primary group of its user.
-SLAPD_GROUP=
+SLAPD_GROUP=nogroup

LDAPクライアントの設定を行うため、/etc/ldap/ldap.confに以下を追記します。

HOST 127.0.0.1
BASE dc=kazz,dc=homeunix,dc=org

HOSTはslapdが動いているホスト名かIPアドレスを、BASEはドメイン名を指定します。

 動作確認

それでは起動してみましょう。(すでに動いている場合は一旦止めてください)ps ax | grep slapdでプロセスがあがっていればOKです。

# /etc/init.d/slapd start
Starting OpenLDAP: slapd - failed.

あら、失敗しました。 tail /var/log/syslog してみると下記のようにユーザ ldap からslapd.confが読めなかったようです。

could not open config file "/etc/ldap/slapd.conf": Permission denied (13)

というわけで、これに読み取り属性を追加します。また、/var/lib/ldap/配下も ldap ユーザに書き込み権限を与えておきます[1]

# chmod +r /etc/ldap/slapd.conf
# chown -R ldap /var/lib/ldap

それでは気を取り直して Let's go。

# /etc/init.d/slapd start

ちゃんと起動されているか確認してみます。

# ps ax | grep slapd

試しにLDAPクライアントからアクセスしてみます。

# ldapsearch -x
# extended LDIF
(省略) 
# search result
search: 2
result: 0 Success
 
# numResponses: 3
# numEntries: 2

という風に結果が返ってくればOKです。もし、

ldap_bind: Can't contact LDAP server (81)

といわれる人は、tcpwrapperでアクセス制御されている可能性が高いです。/etc/hosts.allowにLAN内のマシンと自分自身がアクセス出来るように、以下のエントリでも追加しておきましょう。

slapd: 192.168.1. 127.0.0.1

GUIクライアント

コマンドラインから ldapsearch で検索するのは結構面倒です。そういう場合はGUIクライアントを使いましょう。個人的に「実用レベル」だと判断できたのは以下でした。

Javaでつくられたものです。2001年でバージョンアップが止まっているところを見ると、開発が止まっているみたい...ですが、普通に更新したりする分には問題なしでした。

こちらはGTK+で作成されているので、サクサク動きます。使い勝手はLDAP Browserと同等ぐらい?

認証のLDAP化

migrationtoolsというものを使って、肝である/etc/passwdおよび/etc/groupをLDAPに移行します。

 migrationtoolsのインストール

# apt-get install migrationtools

/usr/share/migrationtools配下にPerlスクリプト一式がインストールされます。

 ldifの用意

まず/usr/share/migrationtoolsに移動します。以下このディレクトリで作業を行うものとします。

# cd /usr/share/migrationtools

ldifファイルを用意する前に、ベースDNを設定しておきます。migration_common.phというファイルを以下のように編集します。$DEFAULT_BASEは slapd をインストールする時に聞かれたドメイン名を指定します。

$DEFAULT_MAIL_DOMAIN = "padl.com";
            ↓
$DEFAULT_MAIL_DOMAIN = "kazz.homeunix.org";
 
# Default base
$DEFAULT_BASE = "dc=padl,dc=com";
            ↓
$DEFAULT_BASE = "dc=kazz,dc=homeunix,dc=org";

/etc/passwdを移行します。

# perl migrate_passwd.pl /etc/passwd > passwd.ldif
# ldapadd -x -w hoge -D "cn=admin,dc=kazz,dc=homeunix,dc=org" -f passwd.ldif
adding new entry "uid=root,ou=People,dc=kazz,dc=homeunix,dc=org"
ldapadd: update failed: uid=root,ou=People,dc=kazz,dc=homeunix,dc=org
ldap_add: No such object (32)
       matched DN: dc=kazz,dc=homeunix,dc=org

あら、エラーになりましたね。これは、passwd.ldif内の ou=People のツリーが存在しないのに、その下位のデータとしてアカウントを登録しようとしているためです。ou(Organizatinal Unit)のPeopleとGroupの登録を先に行う必要があります。下記のようなbase.ldifファイルを作成して、 ldapadd しましょう。

dn: ou=People,dc=kazz,dc=homeunix,dc=org
objectClass: organizationalUnit
ou: People
                                                                                
dn: ou=Group,dc=kazz,dc=homeunix,dc=org
objectClass: organizationalUnit
ou: Group
# ldapadd -x -w hoge -D "cn=admin,dc=kazz,dc=homeunix,dc=org" -f base.ldif

成功したら、passwd.ldifとgroup.ldifも同じように ldapadd します。

# ldapadd -x -w hoge -D "cn=admin,dc=kazz,dc=homeunix,dc=org" -f passwd.ldif

/etc/groupも移行します。

# perl migrate_group.pl /etc/group > group.ldif
# ldapadd -x -w hoge -D "cn=admin,dc=kazz,dc=homeunix,dc=org" -f group.ldif

以上で移行は完了です。あとはファイルベースで行っている認証をLDAPで行うように設定するだけです。# でもこれが一番面倒。

 NSS module for LDAP

ここではサーバ自身の認証をLDAP化するという前提で設定します。クライアントマシンの認証をLDAP化したい場合は、LDAPサーバのホスト名をサーバのものに置き換えて読んでください。

LDAPでの認証を有効にするために、LDAP用のモジュールをインストールします。

# apt-get install libnss-ldap

debconfから以下のことを聞かれるので、適当に答えておきます。

LDAP server host address
-> 127.0.0.1
(LDAPサーバのIPアドレスまたはホスト名)
distinguished name of the search base
-> dc=kazz,dc=homeunix,dc=org
LDAP version to use
-> 3
database requires login
-> Yes
make configuration readable/writeable by owner only
-> Yes

nsswitch.confの修正

/etc/nsswitch.confを修正して、LDAPで認証するようにします。

passwd:         compat
group:          compat
shadow:         compat
              ↓
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

私は Debian インストール時に互換性のあるやつを選んだので"compat"ですが、普通は"files"のはずです。

 PAM module for LDAP

インストール

これも色々聞かれますが、大体 libnss-ldap と同じように答えておけばよいです。

# apt-get install libpam-ldap
LDAP Server host
-> 127.0.0.1
The distinguished name of the search base
-> dc=kazz,dc=homeunix,dc=org
LDAP version to use
-> 3
Make local root Database admin
-> Yes
Database requires logging in
-> No
Root login account 
-> cn=admin,dc=kazz,dc=homeunix,dc=org
Root login password
-> LDAPのadmin用のパスワード
Local crypt to use when changing passwords
-> crypt

設定

/etc/pam.d配下のファイルを修正します。

  • commont-account
+account [default=bad                \
+         success=ok                 \
+         user_unknown=ignore        \
+         service_err=ignore         \
+         system_err=ignore          \
+         authinfo_unavail=ignore]   \
+         /lib/security/pam_ldap.so
  • common-auth
+auth    sufficient      /lib/security/pam_ldap.so use_first_pass
  • common-password
+password   sufficient /lib/security/pam_ldap.so use_authok
  • common-session
+session        optional        /lib/security/pam_ldap.so
+session        required        pam_mkhomedir.so skel=/etc/skel/ umask=0022

 動作確認

キャッシュをクリアするために、nscd を再起動しておきます。

# /etc/init.d/nscd restart

あとは普通にログインできるかどうか試しましょう。

# login ユーザ名

ログインできれば、問題なしです。駄目な場合は、/var/log/auth.logや/var/log/syslogにエラー情報があるので、原因を調べて見てください。

UltraPossumでもっと楽しよう

UltraPossumとは、openldapでのディレクトリサービスを容易に構築するためのラッパーのです(ラッパーのレベルを越えてますが)。UltraPossum + migrationtoolsを使うと、より簡単にアカウントの認証をLDAPに移行できます。なお、libnss-ldap と libpam-ldap のインストールと設定はすでに出来ているものとします。バージョンは 1.0-rc2 を対象とします。

 インストール

apt-line に以下を追加し、update して install です。

deb http://ultrapossum.org/debian ./
deb-src http://ultrapossum.org/debian ./

なお、今回はultrapossum付属のslapdを使うので、slapdがインストールされている場合はこれを削除しておきます。

# apt-get remove --purge slapd
# apt-get update
# apt-get install ultrapossum ultrapossum-slapd ultrapossum-slapd-modules

色々聞かれます。

Which backend do you want to use to store configurations
->(わかりやすいから)file
Which organization do you want to join?
->kazz.homeunix.org(slapdで設定したのと同じもの)
Top level DN (Distungnished Name)
-> dc=kazz,dc=homeunix,dc=org 
Datbase directory
-> /var/lib/ultrapossum//db(デフォルト)
LDAP Server type
-> standalone
Root RDN
->cn=admin
Password of the root DN
-> hoge(適当に変えてね)
Check UltraPossum server availability on each configuraion?
->(一応)Yes

以上でultrapossumのインストールは完了ですが、この他にもldapdiffパッケージが必要なのでapt-getしておきます。

# apt-get install ldapdiff

 設定

次に、念のためもう1度debconfでultrapossumを設定しておきます。なお、slapdを止めておかないとまたエラーになるので

# /etc/init.d/slapd stop

しておきます[2]

# dpkg-reconfigure -plow ultrapossum-server
Which organization do you want to join?
->kazz.homeunix.org
Top level DN (Distungnished Name)
->dc=kazz,dc=homeunix,dc=org
Datbase directory
->/var/lib/ultrapossum/db
LDAP Server type
->standalone
Root RDN
->cn=admin
Password of the root DN
->hoge(適当に変えてね)
All informations prepared. Are you sure to continue?
->(当然)Yes
Configuring OpenLDAP for master... done
Configuring initial LDIF... done
Starting UltraPossum Server: slapd.

と表示されれば、設定完了です。うまくいかない場合は/var/log/syslogを見て対処してください。

 実行

それではマシンアカウントをLDAPに移行します。ultramigration, ldifdiffというスクリプトが必要なので、それぞれ下記から取得して/usr/local/binなどのパスの通っている所に置きます。そしてこれを動かします。

# chmod 755 /usr/local/bin/{ultramigration,ldifdiff}
# ultramigration

これで/etc/{group,passwd}の情報がLDAPディレクトリに移行されるはずです。先ほどと同じように login してみましょう。

 アンインストール

# apt-get --purge remove ultrapossum-common
# rm -rf /var/lib/ultrapossum

  • [1]bdb_db_open: dbenv_open failed: Permission denied (13)というエラーになります
  • [2]これでも止まらない場合は killall -9 slapd してください