openldap 2.3(目次)


Table of Contents

インストール環境

  • OS
    • CentOS 5.3
  • パッケージ
    • openldap-servers-2.3.43-3.el5
    • openldap-clients-2.3.43-3.el5

openldapのインストール

  1. openldap-serversのインストール
    # yum install openldap-servers

  2. openldap-clientsのインストール
    # yum install openldap-clients

openldapの設定

管理パスワードの生成

  • slappasswdコマンドで管理用パスワードを生成します。
    # slappasswd
    New password:****
    Re-enter new password:****
    {SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn 
    このパスワードは後で利用するのでテキストなどに貼り付けておきます。

slapd.confの編集

  • ldapの設定ファイル「/etc/openldap/slapd.conf」を編集します
    suffix      "dc=oss-d,dc=net"
    rootdn      "cn=Manager,dc=oss-d,dc=net"
    #先ほど生成したパスワードを入力します
    rootpw      {SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn
    
    #ユーザが自分のパスワード変更できるようにアクセス権を設定する
    access to attrs=userPassword
      by self write
      by anonymous auth
      by * none
    
    #管理者は書き込み可能、その他のユーザは読み取り専用
    access to *
      by self write
      by * read

Berkeley DBの設定

  • Berkeley DBの設定ファイルであるDB_CONFIGは、サンプルをコピーします。
    # cp -rp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

自動起動の設定

  • chkconfigコマンドで自動起動をONにします
    # chkconfig ldap on

  • chkconfigコマンドで自動起動の確認をします。 LUNレベル3,4,5がonになっていれば問題ありません。
    # chkconfig --list ldap
    ldap            0:off   1:off   2:on    3:on    4:on    5:on    6:off

起動・確認

  • ldapを起動します。
    # /etc/init.d/ldap start


  • psコマンドでプロセスの確認を行います。/usr/sbin/slapd があれば問題ありません。
    # ps ax|grep ldap
    2876 ?        Ssl    0:00 /usr/sbin/slapd -h ldap:/// -u ldap

ファイアウォールの設定

  • 環境に合わせてファイアウォールの設定(ファイル「/etc/sysconfig/iptables」)を変更します。設定変更後はiptablesの再起動を忘れないように注意します。

データベースの作成

データベース構成

  • 今回は下記のような構成でデータベースを作成します。
ldap_データベース構造.JPG
・Manager
slapd.confでrootdnに設定したディレクティブ。
Unixのrootのような扱いでデータベースに対してありとあらゆる権限を持ちます。
・Group
グループを登録するディレクティブ。
一般的なグループと同じで、複数ユーザをまとめて1つとして扱うために利用します。
Active Directory であれば administratorsやpoweruserがあります。
・Users
ユーザを登録するディレクティブ。

データ登録

データの登録は一括登録に便利なldifファイルを利用します。

サブツリーの登録

  • サブツリー用にldifファイル「object.ldif」を作成します。
    dn: dc=oss-d,dc=net
    objectClass: dcObject
    objectclass: organization
    dc: oss-d
    o: oss-d.net
    
    dn: cn=Manager,dc=oss-d,dc=net
    objectClass: organizationalRole
    cn: Manager
    
    dn: ou=Users,dc=oss-d,dc=net
    objectClass: organizationalUnit
    ou: Users
    
    dn: ou=Group,dc=oss-d,dc=net
    objectClass: organizationalUnit
    ou: Group
  • 上記をldapaddコマンドで登録します。
    # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f object.ldif 
    Enter LDAP Password:
    adding new entry "dc=oss-d,dc=net"
    adding new entry "cn=Manager,dc=oss-d,dc=net"
    adding new entry "ou=Users,dc=oss-d,dc=net"
    adding new entry "ou=Group,dc=oss-d,dc=net"

ユーザ/グループの登録(既存unixアカウントをそのまま移行する)

ユーザ/グループの登録は、migrate_passwd.plというスクリプトを利用して 既存のunixアカウントをLDAPサーバーへ登録します。

  • migrate_passwd.plの準備
    • 関連ファイル「/usr/share/openldap/migration/migrate_common.ph」を修正します。
      $DEFAULT_MAIL_DOMAIN = "oss-d.net";
      $DEFAULT_BASE = "dc=oss-d,dc=net";
      $NAMINGCONTEXT{'passwd'} = "ou=Users";

  • /etc/passwdのアカウントをLDAPへ登録する
    • 今回は/etc/passwdから一般ユーザのみを抽出するようuidが500番台のものに絞りました。
      # grep :5[0-9][0-9] /etc/passwd > user.txt
    • migrate_passwd.pl を利用してLDIFファイルを作成します。
      # /usr/share/openldap/migration/migrate_passwd.pl user.txt > user.ldif
    • ldapaddコマンドでLDIFファイルの内容を登録します。
      # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif 
      Enter LDAP Password:
      adding new entry "uid=hoge,ou=Users,dc=oss-d,dc=net"


  • /etc/groupのグループをLDAPへ登録する
    • 今回は/etc/passwdから一般グループのみを抽出するようgidが500番台のものに絞りました。
      # grep :5[0-9][0-9] /etc/group > group.txt
    • migrate_passwd.pl を利用してLDIFファイルを作成します。
      # /usr/share/openldap/migration/migrate_group.pl group.txt > group.ldif
    • ldapaddコマンドでLDIFファイルの内容を登録します。
      # ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f group.ldif
      Enter LDAP Password:
      adding new entry "cn=hoge,ou=Group,dc=oss-d,dc=net"

管理ツールの導入

Apache Directory Studioを参照

バックアップ

バックアップ方法

データのバックアップにはオンラインバックアップが可能なslapcatコマンド(データをLDIFファイル形式で出力)を利用します。

  • 全データをバックアップする場合は以下のようになります。
    # slapcat -l backup.ldif

  • 特定のサブディレクトリ配下をバックアップする場合は-sオプションを利用します。
    Users配下のバックアップを取る場合は以下のように指定します。
    # slapcat -s "ou=Users,dc=oss-d,dc=net" -l backup.ldif


定期バックアップ

  • バックアップ要件は下記を前提として設定を行います。
・オンラインバックアップ
slapcatコマンドを利用
・定期バックアップ(1日1回)
cronを利用
・バックアップは10世代を管理する
logrotateを利用



  • 定期バックアップはcronを利用します。
    今回は毎日2時にバックアップするよう「crontab -e」コマンドで設定します。
    # crontab -e
    0 2 * * *  /usr/sbin/slapcat -l /backup/backup.ldif

  • 世代管理はlogrotateを利用します。
    設定ファイル「/etc/logrotate.d/ldap_backup」を下記内容で新規作成します。
    /backup/backup.ldif {
        daily
        missingok
        notifempty
        rotate 10
    }
・daily
毎日実行する
・missingok
ファイルが無くてもエラーを出さない
・notifempty
ファイルが空なら実行しない
・rotate 10
10世代残す

  • logrotate の確認を行います。
    # logrotate -dv /etc/logrotate.d/ldap_backup
    reading config file /etc/logrotate.d/ldap_backup
    reading config info for /backup/backup.ldif
    
    Handling 1 logs
    
    rotating pattern: /backup/backup.ldif  after 1 days (10 rotations)
    empty log files are not rotated, old logs are removed
    considering log /backup/backup.ldif
      log /backup/backup.ldif does not exist -- skipping

    エラーの場合は下記のようなエラーがでます。
    error: /etc/logrotate.d/ldap_backup:2 unexpected text

    logrotateは毎日実行されますが、バックアップファイルが空の場合は実行されないため無駄にファイルが増えることはありません。

リストア

slapcatでバックアップした場合のリストア手順を示します。

  1. ldapを停止します。
    # /etc/init.d/ldap stop
  2. データを全て削除します。
    # cd /var/lib/ldap
    # rm -rf *
  3. DB_CONFIGファイルを作成します。
    # cp -rp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
  4. slapadd コマンドでリストア後、ファイルの所有者を変更します。
    # slapadd -l /backup/backup.ldif.1
    # chown ldap:ldap *
  5. ldapを起動します。
    # /etc/init.d/ldap start
    slapd の設定ファイルをチェック中:  config file testing succeeded    [  OK  ]
    slapd を起動中:                                                   [  OK  ]

その他

各種コマンド

  • 検索
    # ldapsearch -x -b "dc=oss-d,dc=net" "objectclass=*"
    # ldapsearch -x -b "dc=oss-d,dc=net" "uid=hoge"
    LDAP側の設定によっては「-W -D 'cn=Manager,dc=oss-d,dc=net'」オプションを指定する必要があります。
  • 追加
    #ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif

  • 変更
    # ldapmodify -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif   
    ※hogeユーザのhomeDirectoryを変更する場合、user.ldifは次のような内容になります。
    dn: uid=hoge,ou=Users,dc=oss-d,dc=net
    homeDirectory: /home/newdir

  • 削除
    # ldapdelete -x -D "cn=Manager,dc=oss-d,dc=net" -W "uid=hoge,ou=Users,dc=oss-d,dc=net"

  • パスワード変更
    # ldappasswd -x -D 'cn=Manager,dc=exsample,dc=co,dc=jp' -W -S "uid=hoge,ou=Users,dc=oss-d,dc=net"

FAQ

起動時に「rootdn is always granted unlimited privileges.」と警告メッセージが表示される。

  • rootdnが常に全権限が持つ場合に表示されます。
    「/etc/openldap/slapd.conf」で下記のようなアクセス権があると表示されます。
    access to *
     by dn="cn=Manager,dc=oss,dc=dip,dc=jp" write
  • その場合は以下のように書き換えて下さい。
    #管理者は書き込み可能、その他のユーザは読み取り専用
    access to *
      by self write
      by * read
このエントリーをはてなブックマークに追加
Last-modified: 2010-06-05 (土) 12:30:44   最終更新のRSS