Memo/Linux/OpenLDAP

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/OpenLDAP
 

'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を変更しないで実施する場合、削除後に追加する
      dn: uid=jayson,ou=people,o=example,dc=com
      changetype: modify
      delete: userPassword
      userPassword: OldPassword
      add: userPassword
      userPassword: NewPassword
    • PHP: ldap_modify_batch - Manualの場合
              $modifications = array(
                  array(
                      "attrib" => "userPassword",
                      "modtype" => LDAP_MODIFY_BATCH_REMOVE,
                      "values" => array($oldpassword),
                  ),
                  array(
                      "attrib" => "userPassword",
                      "modtype" => LDAP_MODIFY_BATCH_ADD,
                      "values" => array($password),
                  ),
              );
              $bmod = ldap_modify_batch($ldap, $dn, $modifications);

index

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

loglevel

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

標準入力を使う

  • ヒアドキュメントを使う場合
    ldapmodify -x -H 'ldap://localhost' -D 'cn=Manager,dc=my-domain,dc=com' -W <<EOS
    dn: uid=user01,ou=People,dc=my-domain,dc=com
    changetype: modify
    replace: sshPublicKey
    sshPublicKey: ssh-rsa replaced
    EOS
  • echoを使う場合
    echo "dn: uid=user01,ou=People,dc=my-domain,dc=com
    changetype: modify
    replace: sshPublicKey
    sshPublicKey: ssh-rsa replaced
    " | 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接続(想定外)
  • 確認
    cat /etc/nsswitch.conf
    passwd:     files ldap
    shadow:     files ldap
    group:      files ldap
    
    
    # キャッシュ等を停止
    sudo service nscd stop
    sudo service nslcd stop
    # debug modeで起動
    sudo nslcd -d
    
    # 別ターミナルでidコマンドを使って確認
    id local_user
    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でログインできなくなる。
    ls -l /etc/pam.d/*auth*
    -rw-r--r-- 1 root root 766 2016-09-01 09:00 /etc/pam.d/fingerprint-auth
    lrwxrwxrwx 1 root root  27 2016-09-01 09:00 /etc/pam.d/fingerprint-auth-ac -> /etc/pam.d/fingerprint-auth
    -rw-r--r-- 1 root root 869 2016-09-01 09:00 /etc/pam.d/password-auth
    lrwxrwxrwx 1 root root  24 2016-09-01 09:00 /etc/pam.d/password-auth-ac -> /etc/pam.d/password-auth
    -rw-r--r-- 1 root root 879 2016-09-01 09:00 /etc/pam.d/smartcard-auth
    lrwxrwxrwx 1 root root  25 2016-09-01 09:00 /etc/pam.d/smartcard-auth-ac -> /etc/pam.d/smartcard-auth
    -rw-r--r-- 1 root root 869 2016-09-01 09:00 /etc/pam.d/system-auth
    lrwxrwxrwx 1 root root  22 2016-09-01 09:00 /etc/pam.d/system-auth-ac -> /etc/pam.d/system-auth
  • authconfigで更新。既存の設定ファイルが書き換わるので注意
    sudo yum install authconfig
    rpm -q authconfig
    authconfig-6.1.12-23.el6.x86_64
    sudo authconfig --update
  • *-auth もsymlinkになり、実体が無いため全ての認証に失敗するようになる
    ls -l /etc/pam.d/*auth*
    lrwxrwxrwx 1 root root 19 2016-11-16 06:00 /etc/pam.d/fingerprint-auth -> fingerprint-auth-ac
    lrwxrwxrwx 1 root root 27 2016-09-01 09:00 /etc/pam.d/fingerprint-auth-ac -> /etc/pam.d/fingerprint-auth
    lrwxrwxrwx 1 root root 16 2016-11-16 06:00 /etc/pam.d/password-auth -> password-auth-ac
    lrwxrwxrwx 1 root root 24 2016-09-01 09:00 /etc/pam.d/password-auth-ac -> /etc/pam.d/password-auth
    lrwxrwxrwx 1 root root 17 2016-11-16 06:00 /etc/pam.d/smartcard-auth -> smartcard-auth-ac
    lrwxrwxrwx 1 root root 25 2016-09-01 09:00 /etc/pam.d/smartcard-auth-ac -> /etc/pam.d/smartcard-auth
    lrwxrwxrwx 1 root root 14 2016-11-16 06:00 /etc/pam.d/system-auth -> system-auth-ac
    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
diff -uwr schema/inetorgperson.schema schema.2.4.40-12/inetorgperson.schema
--- schema/inetorgperson.schema 2012-11-30 22:38:35.000000000 +0900
+++ schema.2.4.40-12/inetorgperson.schema       2016-05-11 08:32:09.000000000 +0900
@@ -151,5 +151,5 @@
                labeledURI $ mail $ manager $ mobile $ o $ pager $
                photo $ roomNumber $ secretary $ uid $ userCertificate $
                x500uniqueIdentifier $ preferredLanguage $
-               userSMIMECertificate $ userPKCS12 $ c )
+               userSMIMECertificate $ userPKCS12 )
        )

LDAPスキーマの追加

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

  • CentOS6.x: sudo.schema, openssh.schema, ldapns.schema を追加
    # sudo.schemaを追加
    find /usr/share/doc/ -name schema.OpenLDAP 
    /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP
    sudo cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
    
    # openssh.schema, ldapns.schemaを追加
    sudo yum install openssh-ldap pam_ldap -y
    find /usr/share/doc/ -name openssh-lpk-openldap.schema
    /usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.schema
    sudo cp /usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.schema  /etc/openldap/schema/openssh.schema
    
    find /usr/share/doc/ -name ldapns.schema
    /usr/share/doc/pam_ldap-185/ldapns.schema
    sudo cp /usr/share/doc/pam_ldap-185/ldapns.schema /etc/openldap/schema/
    
    sudo vim /etc/openldap/slapd.conf
    ----
    include         /etc/openldap/schema/sudo.schema
    include         /etc/openldap/schema/openssh.schema
    include         /etc/openldap/schema/ldapns.schema
    ----

デバッグ

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

認証方式の変更

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

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

  • sudo時にどの設定ファイルを見ているか確認
    sudo -V | grep 'ldap.conf path:'
    ldap.conf path: /etc/ldap.conf.sudo
  • symlinkを貼る
    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
      AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
      AuthorizedKeysCommandRunAs root
    • CentOS7: openssh-6.6.1p1-35.el7_3.x86_64
      AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
      AuthorizedKeysCommandUser root
  • /etc/sysconfig/authconfig は初回存在しない。(CentOS 6.5) 作成するには、
    sudo authconfig --update
  • ssh認証にLDAPを使う場合、以下のコマンドを使う。
    # 設定変更
    LANG=C sudo authconfig-tui
    
    # 設定確認
    sudo authconfig --test
    
    # 変更されるファイル
    /etc/nscl.conf
    /etc/nsswitch.conf
    /etc/pam_ldap.conf
    /etc/openldap/ldap.conf
    /etc/sysconfig/authconfig
    /etc/pam.d/*

ldapdelete:エントリの削除

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

バージョンアップ

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

password hash methodの変更

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

slappasswd : パスワード生成

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

  • Google Apps Directory Syncで同期する時には {SHA} が必要。で{SSHA}だとエラーになる
  • CentOS6.x には openldap-servers パッケージに入っていた
# 入力待ち
slappasswd
New password: 
Re-enter new password: 
{SSHA}CfGz6P2+x1YoIAjBnIsezTJvROGXQFMw

# パスワード指定
slappasswd -s secret
{SSHA}H8R+xa45GRrDhntW8NzXO0pP5btUnAz3

# Hash methodの指定: {SHA}, {SSHA}, {MD5}, {SMD5}, {CRYPT}, {CLEARTEXT}
slappasswd -s secret -h {SHA}
{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=

ldappasswd : パスワード変更

  • 一般ユーザが自分でパスワードで変更する場合。
    ldappasswd -x -H 'ldap://localhost' \
     -D 'uid=user01,l=apac,ou=users,dc=my-domain,dc=com' \
     -W -S -A 'uid=user01,l=apac,ou=users,dc=my-domain,dc=com'
    
    Old password: ***
    Re-enter old password: ***
    New password: ***
    Re-enter new password: ***
    Enter LDAP Password: ***
  • 他ユーザを使ってパスワードの変更(-W, -A, -S でそれぞれ入力待ちになる)
    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を使用している
  • エラー内容
    ldap_add: Invalid syntax (21)
            additional info: objectClass: value #0 invalid per syntax
  • 解決
    • /etc/openldap/slapd.conf に該当schemaを読み込ませる
      sudo vim /etc/openldap/slapd.conf
      ----
      include         /etc/openldap/schema/inetorgperson.schema
      ----
      
      # slapd.conf 更新
      sudo service slapd stop
      sudo rm -rf /etc/openldap/slapd.d/{cn=config,cn=config.ldif}
      sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
      sudo service slapd restart

LDIFファイル

  • 1行1レコード
  • 行頭が空白文字の場合、継続行
  • コメント: 行頭 "#"
  • 空行で区切り
# 1つめのエントリ
dn: uid=user01,ou=People,dc=my-domain,dc=com
uid: user01
cn: Test User 01
objectClass: account
objectClass: posixAccount
objectClass: top
loginShell: /bin/bash
uidNumber: 5001
gidNumber: 3001
homeDirectory: /home/user01

# 2つめのエントリ
dn: uid=user02,ou=People,dc=my-domain,dc=com
uid: user02
cn: Test User 02
objectClass: account
objectClass: posixAccount
objectClass: top
loginShell: /bin/bash
uidNumber: 5002
gidNumber: 3002
homeDirectory: /home/user02

uidNumberの最大値を検索

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 | \
    grep uidNumber: | \
    cut -f 2 -d ' ' | \
    sort -nr        | \
    head -n 1

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

  • ldaps:// を使って uid=hoge を検索。("-W" の代わりに "-w password" でパスワードを直接指定)
    ldapsearch -x -b 'dc=my-domain,dc=com' '(uid=hoge)' \
      -H ldaps://localhost:636 \
      -D "cn=Manager,dc=my-domain,dc=com" \
      -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のみの場合でも有効。

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

sshログインにldapを使う

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

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

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

  • cn=config ディレクトリ
    • LDAPサーバ設定自体をデータベースに格納して管理
  • cn=monitor ディレクトリ
    • 監視項目が増える
  • CentOS6.x
  • ユーザ:cn=Manager,dc=my-domain,dc=com でアクセス可能にする場合
    # "database        bdb" の前に追加
    sudo vim /etc/openldap/slapd.conf
    ----
    # enable on-the-fly configuration (cn=config)
    database config
    access to *
            by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
            by dn.exact="cn=Manager,dc=my-domain,dc=com" manage
            by * none
    
    # enable server status monitoring (cn=monitor)
    database monitor
    access to *
            by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
            by dn.exact="cn=Manager,dc=my-domain,dc=com" read
            by * none
    ----
    
    sudo service slapd stop
    sudo rm -rf /etc/openldap/slapd.d/{cn=config,cn=config.ldif}
    sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    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" でパスワードを直接指定)
    ldapsearch -x \
     -b "cn=Uptime,cn=Time,cn=Monitor" \
     -D "cn=Manager,dc=my-domain,dc=com" \
     -W \
     monitoredInfo -LLL
    
    # 結果
    dn: cn=Uptime,cn=Time,cn=Monitor
    monitoredInfo: 111
  • Apache Directory Studioで見る
    • cn=monitor > cn=Time > cn=Uptime までツリーをたどる
    • 表示されない場合は 右クリック > Fetch Operational Attributes

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


readonly replica

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

監視

  • 監視。それぞれサーバでcontextCSNを取得して比較。同じならOK。contextCSNのソート順はバラバラなので自分でソートする必要がある
    ldapsearch -x -H ldap://localhost \
     -s base -b "dc=my-domain,dc=com" \
     -D "cn=Manager,dc=my-domain,dc=com" \
     -W contextCSN
    
    contextCSN: 20130906022414.910401Z#000000#001#000000
    contextCSN: 20130906013314.290742Z#000000#002#000000
    • スクリプトにした fileldap-status.sh
      yum install openldap-clients
      chmod 755 ldap-status.sh
      
      ./ldap-status.sh --servers ldap://server01/,ldap://server02/ \
       --base-dn dc=my-domain,dc=com \
       --bind-dn cn=Manager,dc=my-domain,dc=com \
       --bind-password YOUR-PASSWORD \
       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 は不要
      yum install s3cmd --enablerepo=epel 
      s3cmd --configure
      chmod 755 ldap-backup.sh
      
      ./ldap-backup.sh \
        --base-dn "dc=yourDC,dc=local" \
        --backup-dir /path/to/backup \
        --log-dir /tmp \
        --s3cmd-config /path/to/.s3cfg \
        --s3-bucket s3://BUCKET/path/to
  • リストア:
    sudo service slapd stop
    sudo find /var/lib/ldap/ -type f ! -name DB_CONFIG -delete
    sudo find /etc/openldap/slapd.d/ ! -name slapd.d -delete
    
    sudo -u ldap slapadd -l /tmp/ldap.backup.ldif
    sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    
    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
  • インストール
    yum install openldap-servers openldap-clients
    
    # rootパスワードの設定。"{SSHA}〜"をメモ
    slappasswd -s secret
    
    # Berkeley DB設定
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    vim /var/lib/ldap/DB_CONFIG
    ----
    # one 0.25 GB cache
    set_cachesize 0 268435456 1
    
    # Transaction Log settings
    set_lg_regionmax 262144
    set_lg_bsize 2097152
    
    # automatically delete transaction logs
    set_flags DB_LOG_AUTOREMOVE
    ----
    
    # slapd.conf 設定変更
    cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
    vim /etc/openldap/slapd.conf
    ----
    # suffixの変更
    suffix "dc=my-domain,dc=com"
    
    # rootdnの変更
    rootdn "cn=Manager,dc=my-domain,dc=com"
    
    
    # rootpwの変更
    rootpw {SSHA}XACqUDuUFVNjgfn+JPFilYB1X852Xepi
    ----
    
    # slapd.conf テスト
    slaptest -u -f /etc/openldap/slapd.conf -v
    
    # slapd.conf 更新
    sudo service slapd stop
    sudo rm -rf /etc/openldap/slapd.d/{cn=config,cn=config.ldif}
    sudo -u ldap slaptest -f  /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
    sudo service slapd restart
  • サンプルドメイン(dc=my-domain,dc=com)追加。fileldif-example.zip
    • user passwor:secret
      ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ./base.ldif
      ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ./group.ldif
      ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f ./user.ldif
  • 確認
    # rootユーザで検索
    ldapsearch -x -b 'dc=my-domain,dc=com' '(objectClass=*)' \
      -H ldap://localhost \
      -D "cn=Manager,dc=my-domain,dc=com" \
      -W
    
    # 外部サービス接続用のユーザで検索
    ldapsearch -x -b 'dc=my-domain,dc=com' '(objectClass=*)' \
      -H ldap://localhost \
      -D "cn=connector,ou=People,dc=my-domain,dc=com" \
      -W

添付ファイル: fileldap-backup.sh 674件 [詳細] fileldap-status.sh 610件 [詳細] fileldif-example.zip 556件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (8d)