いいかげんLDAP管理メモ

クリスマスイブと言えばシステム管理ということで、また必要に迫られてド素人オールドタイプの私がLDAPの俄か勉強をしているので、いいかげん(「良い加減」ではない)にメモします。必要があれば自由に追記する予定。嘘や間違いがあったら教えてください(←これが本当の目的)。

  • LDAPって何? ⇒ ユーザIDやパスワードの管理に使う、クライアント・サーバ型データベース。NISのかわり。「パスワード以外にも使える」とか「LDAPのPはプロトコル」とか「ディレクトリ(笑)はデータベースじゃない」とか細かいことは無視
  • LDAPサーバの立ち上げ:/etc/openldap/slapd.confを設定してから、/etc/init.d/ldap startおよびchkconfig ldap on(Red Hat Enterprise Linux ES 4の場合。他は知らない)。
    • suffix "dc=my-domain,dc=com"を、たとえば組織のドメインがmy.domain.example.comだったら、suffix "dc=my,dc=domain,dc=example,dc=com"に。
    • rootdn "cn=Manager,dc=my-domain,dc=com"のdcも同様。
    • コメントを参考にrootpwを設定。chmod o= /etc/openldap/slapd.confしておくこと。ただしslapdをroot以外(ユーザ「ladp」など)で実行するときは、chgrp ldap /etc/openldap/slapd.conf等も忘れずに。
    • いずれsambaのパスワードもLDAPにするときは、/usr/share/doc/samba-*/LDAP/samba.schemaを/etc/openldap/schema/samba.schemaにコピーしておき、include /etc/openldap/schema/samba.schemaを追加。
    • アクセス権限を設定。「ふつう」は以下を追加すればOK。"by self write"(自分の「名前」が「鍵」であるようなエントリは変更可能)と"by * selfwrite"(自分の名前が値であるようなエントリは追加・削除可能)はまったく別物なので注意。前者は自分の情報を変更するとき、後者は自分でグループへ加入するときなどに利用する(らしい)。
access to attr=userPassword
        by self write
        by anonymous auth
        by * none
access to *
        by self write
        by * read
      • 疑問1: 手元の設定では/etc/openldap/schema/misc.schemaもincludeされているが、なぜ必要なのか? ⇒ とりあえず消しても動いた
      • 疑問2: 手元の設定ではmode 0600なる行があるが、何のため? ⇒ データベースファイルのデフォルトパーミッションらしい
  • LDAPクライアントの設定。RHELならGUIでもできるらしい。
    • /etc/ldap.conf(普通のログイン認証モジュールが参照する設定ファイル?)のhost行にLDAPサーバを指定。base行のdcを設定。
      • 疑問3: 手元の設定ではbinddnとbindpwも指定されているが、なぜ? ⇒ とりあえず消しても動いた
      • 疑問4: 他にも↓の3行の意義がよくわからない…(MD5は危ない、みたいな話はさておき) ⇒ RHELのデフォルト(だった)らしい
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5
    • /etc/openldap/ldap.conf(LDAP関係のコマンドが参照する設定ファイル?)のHOSTとBASEを設定。
    • /etc/nsswitch.confで↓みたくする。[!NOTFOUND=return]は、/etc/passwdなどにあるエントリはLDAPを検索しないという意味(/etc/groupのグループとLDAPのグループの両方に所属するユーザがいる場合などは駄目)これがないと、LDAPサーバがダウンしているときにシステムアカウントまでタイムアウトして悲惨な状態になる(/etc/ldap.confにnss_initgroups_ignoreusers root,ldap,...などと列挙しても同様だが、列挙が面倒。あと、nscdは除外しないと駄目)。特に、LDAPサーバ自身が自分のLDAPクライアントでもある場合、起動に異常に時間がかかってしまう。
passwd: files [!NOTFOUND=return] ldap
shadow: files [!NOTFOUND=return] ldap
group: files [!NOTFOUND=return] ldap
      • 疑問5: 手元の設定ではprotocolsとservicesとnetgroupとautomountもfiles ldapになっているが何故?(ldapsearchしてもそれらしいエントリは皆無) ⇒ とりあえず消しても動いた
    • そのままだと遅いので、キャッシュデーモンも動かしたければ、クライアント側で/etc/init.d/nscd startおよびchkconfig --level 345 nscd on。ただしRHEL4のnss_ldapとnscdはバージョンが古くてバグが多いので(アップデートしても)、やめたほうがよい
    • /etc/pam.d/の下はよくわからないが、いじらなくて良い?のでGUIでやる?
    • /etc/sysconfig/authconfigは? USELDAPAUTH=yesにすべきだが、この変数の値は誰が参照しているのか???
    • Sambaの設定。/etc/samba/smb.confの先頭に以下のように追加。下手に""とかつけたら駄目。デフォルトのpassdb backend = tbdsamはコメントアウト。smbpasswd -wでLDAPの管理パスワードをSambaに記憶させる。testparm smb.confで設定を確認してから、/etc/init.d/smb restart。
ldap admin dn = cn=Manager,dc=my,dc=domain,dc=example,dc=com
passdb backend = ldapsam:ldap://ldapserver.my.domain.example.com
ldap user suffix = ou=People
ldap group suffix = ou=Groups
ldap machine suffix = ou=Computers
ldap suffix = dc=my,dc=domain,dc=example,dc=com

さらなる続きはCMの後で。第一部完。