Memo/Linux/OpenLDAP

http://dexlab.net/pukiwiki/index.php?Memo%2FLinux%2FOpenLDAP
 

'Memo/Linux/OpenLDAP/' には、下位層のページがありません。

OpenLDAP


パスワード変更時に「Must supply old password to be changed as well as new one」

  • 環境
    • CentOS release 6.8
    • openldap-servers-2.4.40-12.el6.x86_64
  • 現象
    • ldapmodify時にldap serverの/var/log/openldap/slapd.logに「Must supply old password to be changed as well as new one」と表示され、client(php)側は「LDAP - Modify password error 50 (Insufficient access)」となる。
    • パスワードの変更時に古いパスワード入力が必須になっている
  • 原因
    • 「pwdSafeModify?:TRUE」が /etc/openldap/slapd.conf の「ppolicy_default」で指定されたcnレコードに追加されていると発生する
  • 解決
    • 「pwdSafeModify?:FALSE」に変更する。
    • LDAPのadminユーザで変更する
    • または、Re: [ldapext] ppolicy questions LDAP Server側ppolicyを変更しないで実施する場合、削除後に追加する
      1. dn: uid=jayson,ou=people,o=example,dc=com
      2. changetype: modify
      3. delete: userPassword
      4. userPassword: OldPassword
      5. add: userPassword
      6. userPassword: NewPassword
    • PHP: ldap_modify_batch - Manualの場合
      1.         $modifications = array(
      2.             array(
      3.                 "attrib" => "userPassword",
      4.                 "modtype" => LDAP_MODIFY_BATCH_REMOVE,
      5.                 "values" => array($oldpassword),
      6.             ),
      7.             array(
      8.                 "attrib" => "userPassword",
      9.                 "modtype" => LDAP_MODIFY_BATCH_ADD,
      10.                 "values" => array($password),
      11.             ),
      12.         );
      13.         $bmod = ldap_modify_batch($ldap, $dn, $modifications);

index

  • config databaseを使っている場合、後からindexを追加し、slapd.d を消して、slapdを再起動すると、nslcdから名前解決できなくなる。ldapsearchは成功し、サーバのopenldapのログや、nslcdにはエラーは出ない。この場合、slapindex を実行すると解決した。
  • indexを後から追加する
    1. sudo service slapd stop
    2. sudo vim /etc/openldap/slapd.conf
    3. ----
    4. index description                       eq
    5. ----
    6. sudo slapindex
    7. sudo service slapd start

loglevel

  • デフォルトでは何もログが出ない
  • syslog経由で出力する事が出来る。解説サイトでは数値だが、文字でも指定できる
    • /etc/openldap/slapd.conf
      1. loglevel stats sync
    • /etc/rsyslog.d/openldap.conf
      1. local4.* /var/log/openldap/slapd.log
    • /etc/logrotate.d/openldap
      1. /var/log/openldap/*.log {
      2.         daily
      3.         missingok
      4.         compress
      5.         notifempty
      6.         copytruncate
      7. }
    • サービスの再起動
      1. sudo service rsyslog restart

標準入力を使う

  • ヒアドキュメントを使う場合
    1. ldapmodify -x -H 'ldap://localhost' -D 'cn=Manager,dc=my-domain,dc=com' -W <<EOS
    2. dn: uid=user01,ou=People,dc=my-domain,dc=com
    3. changetype: modify
    4. replace: sshPublicKey
    5. sshPublicKey: ssh-rsa replaced
    6. EOS
  • echoを使う場合
    1. echo "dn: uid=user01,ou=People,dc=my-domain,dc=com
    2. changetype: modify
    3. replace: sshPublicKey
    4. sshPublicKey: ssh-rsa replaced
    5. " | ldapmodify -x -H 'ldap://localhost' -D 'cn=Manager,dc=my-domain,dc=com' -W

ACL(Access Control Lis) / アクセス制限


ブラウザから一般ユーザのパスワード/公開鍵変更

LDAPの一般ユーザが以下の事をブラウザから簡単に行いたい。

  • パスワード変更(userPassword属性)
  • SSH公開鍵変更(sshPublicKey?属性)
  • Self Service Password [LDAP Tool Box (LTB)]
    • GitHub - ltb-project/self-service-password GitHub?のドキュメントの方が何ができるか詳しく書いてある
    • php製。yumインストール可能
    • パスワード変更可能
    • SSH公開鍵変更可能(self-service-password-1.0-2.el7.noarchには入っていない。GitHub?ソースには $change_sshkey の記述があり変更可能)
    • 設定:/usr/share/self-service-password/conf/config.inc.php
    • LDAP Serverのppolicyを「pwdSafeModify?: FALSE」にする必要がある。2017-06-22現在、TRUEの場合は古いパスワードが常時必要になり動作しない。
  • Easy LDAP management | LDAP Account Manager
    • php製。php5.4以上。yumインストール可能
    • SSH public key extensionに編集があった
    • 有償Pro版あり
    • 見た目は綺麗な方
    • ツリービューの部分がphpLDAPadminとほぼ同じ
    • 右上のツリービュー、新規ユーザ作成を無効化したい
    • ユーザタブで、ログインユーザだけを表示したい。(@@LOGIN_DN@@でうまく絞れなかった)
    • 項目毎のreadonlyが出来ない。Pro版はできそう
    • 設定:/usr/share/ldap-account-manager/config/lam.conf

トラブル


local userでもLDAPに問い合わせてしまう

  • 構成:CentOS 6/7, nss-pam-ldapd, openldap, openssh-ldap, nscd
  • 問題
    • local userで認証成功した場合は、LDAPに問い合わせないで欲しい。
    • CentOS 6.x/7.x で確認する限り、local user認証が成功してもLDAPに問い合わせてしまう
    • local userのログインでも遅くなるし、無駄な問い合わせでLDAPサーバの負荷が上がる
    • Man page of NSSWITCH.CONFの通りに指定しても目的の挙動にならない
      • 「files [NOTFOUND=return] ldap」local user=>成功、ldap user=>失敗(想定通り)
      • 「files [!NOTFOUND=return] ldap」local user=>LDAP接続、ldap user=>LDAP接続(想定外)
      • 「files [NOTFOUND=continue] ldap」local user=>LDAP接続、ldap user=>LDAP接続(想定外)
      • 「files [SUCCESS=return] ldap」local user=>LDAP接続、ldap user=>LDAP接続(想定外)
  • 確認
    1. cat /etc/nsswitch.conf
    2. passwd:     files ldap
    3. shadow:     files ldap
    4. group:      files ldap
    5.  
    6.  
    7. # キャッシュ等を停止
    8. sudo service nscd stop
    9. sudo service nslcd stop
    10. # debug modeで起動
    11. sudo nslcd -d
    12.  
    13. # 別ターミナルでidコマンドを使って確認
    14. id local_user
    15. id ldap_user

Can't contact LDAP server


/etc/pam.d/以下がsymlinkの場合にauthconfigを使うと壊れる場合がある

  • ○:/etc/pam.d/*-authがsymlink、*-acが実体
  • ×:/etc/pam.d/*-authが実体、*-ac がsymlink
  • 環境
    • CentOS 6.x 64bit
  • *-authが実体、*-ac がsymlinkの場合にauthconfigで更新するとpam.d以下が壊れて、sshでログインできなくなる。
    1. ls -l /etc/pam.d/*auth*
    2. -rw-r--r-- 1 root root 766 2016-09-01 09:00 /etc/pam.d/fingerprint-auth
    3. lrwxrwxrwx 1 root root  27 2016-09-01 09:00 /etc/pam.d/fingerprint-auth-ac -> /etc/pam.d/fingerprint-auth
    4. -rw-r--r-- 1 root root 869 2016-09-01 09:00 /etc/pam.d/password-auth
    5. lrwxrwxrwx 1 root root  24 2016-09-01 09:00 /etc/pam.d/password-auth-ac -> /etc/pam.d/password-auth
    6. -rw-r--r-- 1 root root 879 2016-09-01 09:00 /etc/pam.d/smartcard-auth
    7. lrwxrwxrwx 1 root root  25 2016-09-01 09:00 /etc/pam.d/smartcard-auth-ac -> /etc/pam.d/smartcard-auth
    8. -rw-r--r-- 1 root root 869 2016-09-01 09:00 /etc/pam.d/system-auth
    9. lrwxrwxrwx 1 root root  22 2016-09-01 09:00 /etc/pam.d/system-auth-ac -> /etc/pam.d/system-auth
  • authconfigで更新。既存の設定ファイルが書き換わるので注意
    1. sudo yum install authconfig
    2. rpm -q authconfig
    3. authconfig-6.1.12-23.el6.x86_64
    4. sudo authconfig --update
  • *-auth もsymlinkになり、実体が無いため全ての認証に失敗するようになる
    1. ls -l /etc/pam.d/*auth*
    2. lrwxrwxrwx 1 root root 19 2016-11-16 06:00 /etc/pam.d/fingerprint-auth -> fingerprint-auth-ac
    3. lrwxrwxrwx 1 root root 27 2016-09-01 09:00 /etc/pam.d/fingerprint-auth-ac -> /etc/pam.d/fingerprint-auth
    4. lrwxrwxrwx 1 root root 16 2016-11-16 06:00 /etc/pam.d/password-auth -> password-auth-ac
    5. lrwxrwxrwx 1 root root 24 2016-09-01 09:00 /etc/pam.d/password-auth-ac -> /etc/pam.d/password-auth
    6. lrwxrwxrwx 1 root root 17 2016-11-16 06:00 /etc/pam.d/smartcard-auth -> smartcard-auth-ac
    7. lrwxrwxrwx 1 root root 25 2016-09-01 09:00 /etc/pam.d/smartcard-auth-ac -> /etc/pam.d/smartcard-auth
    8. lrwxrwxrwx 1 root root 14 2016-11-16 06:00 /etc/pam.d/system-auth -> system-auth-ac
    9. lrwxrwxrwx 1 root root 22 2016-09-01 09:00 /etc/pam.d/system-auth-ac -> /etc/pam.d/system-auth

attribute 'c' not allowed

  • slapaddでエラーが出る。schemaファイル名は同じでもopenldap-serversのバージョンによって微妙に違いがあるようだ。古い schema を上書きしたら動作した
  • /etc/openldap/schema/
    • OK: openldap-servers-2.4.23-34.25.amzn1.x86_64
    • NG: openldap-servers-2.4.40-12.el6.x86_64
  1. diff -uwr schema/inetorgperson.schema schema.2.4.40-12/inetorgperson.schema
  2. --- schema/inetorgperson.schema 2012-11-30 22:38:35.000000000 +0900
  3. +++ schema.2.4.40-12/inetorgperson.schema       2016-05-11 08:32:09.000000000 +0900
  4. @@ -151,5 +151,5 @@
  5.                 labeledURI $ mail $ manager $ mobile $ o $ pager $
  6.                 photo $ roomNumber $ secretary $ uid $ userCertificate $
  7.                 x500uniqueIdentifier $ preferredLanguage $
  8. -               userSMIMECertificate $ userPKCS12 $ c )
  9. +               userSMIMECertificate $ userPKCS12 )
  10.         )

LDAPスキーマの追加

slapadd等でLDAPスキーマが不足している場合は、「str2ad(sudoUser): attribute type undefined」の様なエラーが出る。

  • CentOS6.x: sudo.schema, openssh.schema, ldapns.schema を追加
    1. # sudo.schemaを追加
    2. find /usr/share/doc/ -name schema.OpenLDAP
    3. /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP
    4. sudo cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
    5.  
    6. # openssh.schema, ldapns.schemaを追加
    7. sudo yum install openssh-ldap pam_ldap -y
    8. find /usr/share/doc/ -name openssh-lpk-openldap.schema
    9. /usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.schema
    10. sudo cp /usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.schema  /etc/openldap/schema/openssh.schema
    11.  
    12. find /usr/share/doc/ -name ldapns.schema
    13. /usr/share/doc/pam_ldap-185/ldapns.schema
    14. sudo cp /usr/share/doc/pam_ldap-185/ldapns.schema /etc/openldap/schema/
    15.  
    16. sudo vim /etc/openldap/slapd.conf
    17. ----
    18. include         /etc/openldap/schema/sudo.schema
    19. include         /etc/openldap/schema/openssh.schema
    20. include         /etc/openldap/schema/ldapns.schema
    21. ----

デバッグ

  • nslcd:
    1. sudo service nslcd stop
    2. sudo nslcd -d
    3. # デバッグ終了時に CTRL+C

認証方式の変更

  • CentOS7では /etc/nsswitch.conf 内がldapではなく、sssに変わるので注意
  • コマンドライン
    1. LANG=C; authconfig-tui

LDAPでssh認証する場合に、sudoできない時

  • sudo時にどの設定ファイルを見ているか確認
    1. sudo -V | grep 'ldap.conf path:'
    2. ldap.conf path: /etc/ldap.conf.sudo
  • symlinkを貼る
    1. ln -s /etc/ldap.conf /etc/ldap.conf.sudo

LDAPでssh公開鍵認証を使う

現状2つ方法があるようだ。

  • sshのバージョンによって/etc/ssh/sshd_configの記述が違う。「sshd -t」で設定ファイルのテストできる
    • CentOS6: openssh-5.3p1-122.el6.x86_64
      1. AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
      2. AuthorizedKeysCommandRunAs root
    • CentOS7: openssh-6.6.1p1-35.el7_3.x86_64
      1. AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
      2. AuthorizedKeysCommandUser root
  • /etc/sysconfig/authconfig は初回存在しない。(CentOS 6.5) 作成するには、
    1. sudo authconfig --update
  • ssh認証にLDAPを使う場合、以下のコマンドを使う。
    1. # 設定変更
    2. LANG=C sudo authconfig-tui
    3.  
    4. # 設定確認
    5. sudo authconfig --test
    6.  
    7. # 変更されるファイル
    8. /etc/nscl.conf
    9. /etc/nsswitch.conf
    10. /etc/pam_ldap.conf
    11. /etc/openldap/ldap.conf
    12. /etc/sysconfig/authconfig
    13. /etc/pam.d/*

ldapdelete:エントリの削除

  • 指定階層以下も削除したい場合は「-r」オプション
    1. ldapdelete -x -H ldap://localhost:389 \
    2.   -D "cn=Manager,dc=my-domain,dc=com" \
    3.   -W \
    4.   'uid=user03,ou=People,dc=my-domain,dc=com'

バージョンアップ

  • CentOS6.xの 2.4.23 にはmemory leakがあるので、IUS Community のリポジトリから 2.4.32-2 へアップデートする場合
    1. rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/ius-release-1.0-11.ius.el6.noarch.rpm
    2. rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm
    3. yum install yum-plugin-replace
    4. yum replace openldap-servers --replace-with openldap24-servers --enablerepo=ius-dev

password hash methodの変更

  1. sudo vim /etc/openldap/slapd.conf
  2. ----
  3. # database config より上に記述
  4. password-hash {SHA}
  5. ----
  6. sudo service slapd stop
  7. sudo rm -rf /etc/openldap/slapd.d/{cn=config,cn=config.ldif}
  8. sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
  9. sudo service slapd restart

slappasswd : パスワード生成

ハッシュ化パスワードを生成する。

  • Google Apps Directory Syncで同期する時には {SHA} が必要。で{SSHA}だとエラーになる
  • CentOS6.x には openldap-servers パッケージに入っていた
  1. # 入力待ち
  2. slappasswd
  3. New password:
  4. Re-enter new password:
  5. {SSHA}CfGz6P2+x1YoIAjBnIsezTJvROGXQFMw
  6.  
  7. # パスワード指定
  8. slappasswd -s secret
  9. {SSHA}H8R+xa45GRrDhntW8NzXO0pP5btUnAz3
  10.  
  11. # Hash methodの指定: {SHA}, {SSHA}, {MD5}, {SMD5}, {CRYPT}, {CLEARTEXT}
  12. slappasswd -s secret -h {SHA}
  13. {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=

ldappasswd : パスワード変更

  • 一般ユーザが自分でパスワードで変更する場合。
    1. ldappasswd -x -H 'ldap://localhost' \
    2.  -D 'uid=user01,l=apac,ou=users,dc=my-domain,dc=com' \
    3.  -W -S -A 'uid=user01,l=apac,ou=users,dc=my-domain,dc=com'
    4.  
    5. Old password: ***
    6. Re-enter old password: ***
    7. New password: ***
    8. Re-enter new password: ***
    9. Enter LDAP Password: ***
  • 他ユーザを使ってパスワードの変更(-W, -A, -S でそれぞれ入力待ちになる)
    1. ldappasswd -x -H 'ldap://localhost' -D 'cn=Manager,dc=my-domain,dc=com' -w 'Manager password' -s 'new password' 'uid=user01,l=apac,ou=users,dc=my-domain,dc=com'

objectClass: value #0 invalid per syntax

  • 原因
    • objectClassの上から#0番目がエラー
    • 未定義のobjectClassを使用している
  • エラー内容
    1. ldap_add: Invalid syntax (21)
    2.         additional info: objectClass: value #0 invalid per syntax
  • 解決
    • /etc/openldap/slapd.conf に該当schemaを読み込ませる
      1. sudo vim /etc/openldap/slapd.conf
      2. ----
      3. include         /etc/openldap/schema/inetorgperson.schema
      4. ----
      5.  
      6. # slapd.conf 更新
      7. sudo service slapd stop
      8. sudo rm -rf /etc/openldap/slapd.d/{cn=config,cn=config.ldif}
      9. sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
      10. sudo service slapd restart

LDIFファイル

  • 1行1レコード
  • 行頭が空白文字の場合、継続行
  • コメント: 行頭 "#"
  • 空行で区切り
  1. # 1つめのエントリ
  2. dn: uid=user01,ou=People,dc=my-domain,dc=com
  3. uid: user01
  4. cn: Test User 01
  5. objectClass: account
  6. objectClass: posixAccount
  7. objectClass: top
  8. loginShell: /bin/bash
  9. uidNumber: 5001
  10. gidNumber: 3001
  11. homeDirectory: /home/user01
  12.  
  13. # 2つめのエントリ
  14. dn: uid=user02,ou=People,dc=my-domain,dc=com
  15. uid: user02
  16. cn: Test User 02
  17. objectClass: account
  18. objectClass: posixAccount
  19. objectClass: top
  20. loginShell: /bin/bash
  21. uidNumber: 5002
  22. gidNumber: 3002
  23. homeDirectory: /home/user02

uidNumberの最大値を検索

  1. ldapsearch -x -H 'ldap://localhost' -b 'dc=my-domain,dc=com' -D 'cn=Manager,dc=my-domain,dc=com' -w 'YOUR PASSWORD' '(objectClass=posixAccount)' -LLL | \
  2.     grep uidNumber: | \
  3.     cut -f 2 -d ' ' | \
  4.     sort -nr        | \
  5.     head -n 1

ldapsearch : 登録済みエントリーの検索

  • ldaps:// を使って uid=hoge を検索。("-W" の代わりに "-w password" でパスワードを直接指定)
    1. ldapsearch -x -b 'dc=my-domain,dc=com' '(uid=hoge)' \
    2.   -H ldaps://localhost:636 \
    3.   -D "cn=Manager,dc=my-domain,dc=com" \
    4.   -W
  • -A: 属性名のみを表示。属性値は非表示
  • -o ldif-wrap=no: 出力時に改行しない。OpenLDAP 2.4.24以降で指定可能。デフォルトでは78文字で改行される。

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

ldaps://での通信時に発生。SSL自己証明書等を利用していると出る。
openldap-clientsのみの場合でも有効。

  • 認証されていないサーバ証明書をクライアントが受け入れる
    1. vim /etc/openldap/ldap.conf
    2. ----
    3. tls_reqcert never
    4. ----

sshログインにldapを使う

  • CentOS6.x
  1. クライアント側
    1. # インストール
    2. yum install pam_ldap nscd nss-pam-ldapd
    3.  
    4. # デフォルトでTLS認証が嫌な場合は以下をyesに変更
    5. vim /etc/sysconfig/authconfig
    6. ----
    7. FORCELEGACY=yes
    8. ----
    9.  
    10. # 認証情報設定(/etc/nsswitch.conf, /etc/pam.d/system-auth-ac, /etc/openldap/ldap.conf が変更される)
    11. authconfig --enableldap --enableldapauth --ldapserver="ldap://[LDAP SERVER]/" --ldapbasedn="dc=my-domain,dc=com" --update
    12. authconfig --test | grep -i ldap
    13. chkconfig nslcd on
    14.  
    15. # ホームディレクトリが無い場合は自動作成
    16. echo "session     optional      pam_mkhomedir.so skel=/etc/skel umask=022" >> /etc/pam.d/system-auth-ac
  2. sshログインできるかテスト
  • LDAP認証の無効化
    1. authconfig --disableldap --disableldapauth --update
    2. authconfig --test | grep -i ldap

設定(cn=config) 監視(cn=monitor) データベースを有効にする

デフォルトでは以下のディレクトリはadminユーザでも見えない。

  • cn=config ディレクトリ
    • LDAPサーバ設定自体をデータベースに格納して管理
  • cn=monitor ディレクトリ
    • 監視項目が増える
  • CentOS6.x
  • ユーザ:cn=Manager,dc=my-domain,dc=com でアクセス可能にする場合
    1. # "database        bdb" の前に追加
    2. sudo vim /etc/openldap/slapd.conf
    3. ----
    4. # enable on-the-fly configuration (cn=config)
    5. database config
    6. access to *
    7.         by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
    8.         by dn.exact="cn=Manager,dc=my-domain,dc=com" manage
    9.         by * none
    10.  
    11. # enable server status monitoring (cn=monitor)
    12. database monitor
    13. access to *
    14.         by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
    15.         by dn.exact="cn=Manager,dc=my-domain,dc=com" read
    16.         by * none
    17. ----
    18.  
    19. sudo service slapd stop
    20. sudo rm -rf /etc/openldap/slapd.d/{cn=config,cn=config.ldif}
    21. sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    22. sudo service slapd restart
  • Apache Directory Studioからのアクセス
    • Network Parameterタブ
      • Hostname: 環境に合わせて
      • Port: 389(デフォルト)
    • Authenticationタブ
      • Authentication Method: Simple Authentication
      • Bind DN or user: cn=Manager,dc=my-domain,dc=com
      • Bind password: ****
    • Browser Options
      • Get base DNs from Root DSEのチェックを外して、見たいディレクトリ(cn=config , cn=monitor)を直接入力
      • Fetch Operational Attributes while browsing: チェック
  • 例:OpenLDAPが起動している秒数(Uptime)取得。("-W" の代わりに "-w password" でパスワードを直接指定)
    1. ldapsearch -x \
    2.  -b "cn=Uptime,cn=Time,cn=Monitor" \
    3.  -D "cn=Manager,dc=my-domain,dc=com" \
    4.  -W \
    5.  monitoredInfo -LLL
    6.  
    7. # 結果
    8. dn: cn=Uptime,cn=Time,cn=Monitor
    9. monitoredInfo: 111
  • Apache Directory Studioで見る
    • cn=monitor > cn=Time > cn=Uptime までツリーをたどる
    • 表示されない場合は 右クリック > Fetch Operational Attributes

レプリケーション/冗長化


readonly replica

  • slapd.conf: でミラーモードをoffにする
    1. mirrormode off

監視

  • 監視。それぞれサーバでcontextCSNを取得して比較。同じならOK。contextCSNのソート順はバラバラなので自分でソートする必要がある
    1. ldapsearch -x -H ldap://localhost \
    2.  -s base -b "dc=my-domain,dc=com" \
    3.  -D "cn=Manager,dc=my-domain,dc=com" \
    4.  -W contextCSN
    5.  
    6. contextCSN: 20130906022414.910401Z#000000#001#000000
    7. contextCSN: 20130906013314.290742Z#000000#002#000000
    • スクリプトにした fileldap-status.sh
      1. yum install openldap-clients
      2. chmod 755 ldap-status.sh
      3.  
      4. ./ldap-status.sh --servers ldap://server01/,ldap://server02/ \
      5.  --base-dn dc=my-domain,dc=com \
      6.  --bind-dn cn=Manager,dc=my-domain,dc=com \
      7.  --bind-password YOUR-PASSWORD \
      8.  replication-status

監視


CN=Monitor - 管理ツール


Apache Directory Studio - 管理ツール

  • 詳細プロパティの表示: エントリ上で右クリック > Fetch Operational Attributes
  • 詳細プロパティをデフォルトで表示させる: Connections:選択 > 右クリックしてproperties > Browser Optionsタブ > Fetch Operational Attributes while browsing: チェック
  • 不具合?
    • 表示されないエントリがある。ldapsearchコマンドだと表示される。

phpLDAPadmin - 管理ツール


バックアップ/リストア

  • OpenLDAP バックアップスクリプト: fileldap-backup.sh
    • s3へのコピーはs3cmdが必要。使用しないならば --s3cmd-config, --s3-bucket は不要
      1. yum install s3cmd --enablerepo=epel
      2. s3cmd --configure
      3. chmod 755 ldap-backup.sh
      4.  
      5. ./ldap-backup.sh \
      6.   --base-dn "dc=yourDC,dc=local" \
      7.   --backup-dir /path/to/backup \
      8.   --log-dir /tmp \
      9.   --s3cmd-config /path/to/.s3cfg \
      10.   --s3-bucket s3://BUCKET/path/to
  • リストア:
    1. sudo service slapd stop
    2. sudo find /var/lib/ldap/ -type f ! -name DB_CONFIG -delete
    3. sudo find /etc/openldap/slapd.d/ ! -name slapd.d -delete
    4.  
    5. sudo -u ldap slapadd -l /tmp/ldap.backup.ldif
    6. sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    7.  
    8. sudo service slapd start
    • 「dn:」 のエラーはldifからそのセクションを削除するとインポートできる
    • slapadd「The first database does not allow slapadd; using the first available one (2)」 は無視できる」
    • slapadd -s で スキーマチェックをしない。エラーが出て、インポートに失敗する場合に使えるが、エラーが直る訳では無いので推奨しない。

インストール

  • CentOS 6.x
  • インストール
    1. yum install openldap-servers openldap-clients
    2.  
    3. # rootパスワードの設定。"{SSHA}〜"をメモ
    4. slappasswd -s secret
    5.  
    6. # Berkeley DB設定
    7. cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    8. vim /var/lib/ldap/DB_CONFIG
    9. ----
    10. # one 0.25 GB cache
    11. set_cachesize 0 268435456 1
    12.  
    13. # Transaction Log settings
    14. set_lg_regionmax 262144
    15. set_lg_bsize 2097152
    16.  
    17. # automatically delete transaction logs
    18. set_flags DB_LOG_AUTOREMOVE
    19. ----
    20.  
    21. # slapd.conf 設定変更
    22. cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
    23. vim /etc/openldap/slapd.conf
    24. ----
    25. # suffixの変更
    26. suffix "dc=my-domain,dc=com"
    27.  
    28. # rootdnの変更
    29. rootdn "cn=Manager,dc=my-domain,dc=com"
    30.  
    31.  
    32. # rootpwの変更
    33. rootpw {SSHA}XACqUDuUFVNjgfn+JPFilYB1X852Xepi
    34. ----
    35.  
    36. # slapd.conf テスト
    37. slaptest -u -f /etc/openldap/slapd.conf -v
    38.  
    39. # slapd.conf 更新
    40. sudo service slapd stop
    41. sudo rm -rf /etc/openldap/slapd.d/{cn=config,cn=config.ldif}
    42. sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    43. sudo service slapd restart
  • サンプルドメイン(dc=my-domain,dc=com)追加。fileldif-example.zip
    • user passwor:secret
      1. ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ./base.ldif
      2. ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ./group.ldif
      3. ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ./user.ldif
  • 確認
    1. # rootユーザで検索
    2. ldapsearch -x -b 'dc=my-domain,dc=com' '(objectClass=*)' \
    3.   -H ldap://localhost \
    4.   -D "cn=Manager,dc=my-domain,dc=com" \
    5.   -W
    6.  
    7. # 外部サービス接続用のユーザで検索
    8. ldapsearch -x -b 'dc=my-domain,dc=com' '(objectClass=*)' \
    9.   -H ldap://localhost \
    10.   -D "cn=connector,ou=People,dc=my-domain,dc=com" \
    11.   -W

添付ファイル: fileldap-backup.sh 701件 [詳細] fileldap-status.sh 631件 [詳細] fileldif-example.zip 599件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-30 (水) 17:07:42 (237d)