debian でアカウント情報をOpenLDAPで管理する手順をまとめます.
インストール(LDAPサーバ側)
$ sudo apt-get install ldap-server ldap-utils
設定(LDAPサーバ側)
以前はopenldapの設定ファイルといえば /etc/ldap/slapd.conf でしたが,最近のldapではこのファイルは使いません.設定自体も ldapのデータベース上に保存するようになっています.
ですので,LDAPサーバの再設定を行なう場合はとりあえず
$ sudo dpkg-reconfigure slapd
とするのが簡単です.
本エントリでは,ここで
- base は dc=local
- rootdnは cn=admin,dc=local
と設定した場合を想定して,以下手順を説明していきます.
初期設定
slapdの設定が終わったら,とりあえず動作確認します
ldapのデータベースにある slapdの設定値を眺めてみます.
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config
なお"-Y EXTERNAL"を付けると, root権限を使い,LDAP側の認証を経由せずに直接DBへアクセスします.
エラーがでなければ,初期設定を開始します.
まずldapのデータベースを変更する場合は ldapmodify コマンドを使います.
ldapmodifyコマンドは,次のように shell script 経由で使用するのが便利です.
たとえば slapd のログレベルを変更する場合は bash を使って
#!/bin/bash # Changes log level ldapmodify -Y external -H ldapi:/// <<EOF dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: none EOF
という scriptを書いて,root権限で実行します.面倒ですね.
ldapのデータベースにオブジェクトを新規追加する場合は ldapadd コマンドを使います.
早速,ユーザを登録するために使うオブジェクト
- ou=people,dc=local
- ou=group,dc=local
を追加してみます.
#!/bin/bash ldapadd -Y external -H ldapi:/// <<EOF dn: ou=people,dc=local objectClass: organizationalUnit ou: people dn: ou=group,dc=local objectClass: organizationalUnit ou: group EOF
というスクリプトを書いて,これを実行します.
同じ方法で,アカウントを登録します.
まずユーザグループを登録
#!/bin/bash NAME=users GID=10000 ldapadd -Y external -H ldapi:/// <<EOF dn: cn=$NAME,ou=group,dc=local cn: users objectClass: posixGroup gidNumber: $GID description: Group account
次にユーザを登録
#!/bin/bash USER=username PASS=hogehoge UID=10000 GID=10000 ldapadd -Y external -H ldapi:/// <<EOF dn: uid=$USER,ou=people,dc=local uid: $USER cn: $USER objectClass: posixAccount objectClass: account userPassword: $PASS loginShell: /bin/bash uidNumber: $UID gidNumber: $GID homeDirectory: /home/$USER
実際にシステムを運用するときは,このスクリプトをちょっと改造して,
- コマンドライン引数でユーザ名を受け取る
- 初期パスワードはユーザ名から自動生成する
といった機能を付けることになります.詳細は割愛します.
インストール(LDAPクライアント側)
クライアント側はlibpam-ldapを使います.
$ sudo apt-get install ldap-utils libpam-ldap
これで pamレベルで ldapに対応します.
設定ファイルは
になります.
/etc/pam_ldap.conf は
の3つの設定が必須です.
/etc/pam_ldap.secretにはLDAPサーバのパスワードを記述します.とりあえず最初は平文で書いてテストしましょう :-)
平文ですので,パーミッションを0600にしておきます.
$ sudo chmod 0600 /etc/pam_ldap.secret
BASE dc=local URI ldap://[LDAPサーバのIPアドレス]/
の2行が必須です.
最後に /etc/nssswitch.conf で ldap を使うように指定します.
passwd: files ldap group: files ldap shadow: files ldap hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
念の為 /etc/pam.d/common-auth 等に ldap のモジュールが組み込まれていることを確認しておきます.
$ grep pam_ldap /etc/pam.d/common-*
私の手元のdebian/unstableなPCでは
/etc/pam.d/common-account:account [success=ok new_authtok_reqd=done ignore=ignore user_unknown=ignore authinfo_unavail=ignore default=bad] pam_ldap.so minimum_uid=1000 /etc/pam.d/common-auth:auth [success=1 default=ignore] pam_ldap.so minimum_uid=1000 use_first_pass /etc/pam.d/common-password:password [success=1 default=ignore] pam_ldap.so minimum_uid=1000 try_first_pass /etc/pam.d/common-session:session [success=ok default=ignore] pam_ldap.so minimum_uid=1000 /etc/pam.d/common-session-noninteractive:session [success=ok default=ignore] pam_ldap.so minimum_uid=1000
と言う出力になりました.pam_ldap.so という文字列が含まれているのでLDAPに対応できています.
設定は以上です.idコマンドなどでLDAP経由でユーザ情報が参照できるか確認しましょう.