Linux

openladap

参考

Server

Install (以下 su - 権限)

yum install openldap openldap-servers openldap-clients

パスワードの準備

  • slappasswd
    • New password:[パスワード入力]
    • Re-enter new password:[パスワード入力]
    • {SSHA}3pVTGxVxrS7tFJXrp+sAA6EdSgO8y1NE
  • vi /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
    • 下記を変更
      olcRootPW: {SSHA}3pVTGxVxrS7tFJXrp+sAA6EdSgO8y1NE

DB 環境構築

  • バークレーDB、設定ファイルのコピー
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

Service の起動

/etc/init.d/slapd start

loglevel の設定

  • 参考
    vi /etc/sysconfig/ldap
    
    # Options of slapd (see man slapd)
    SLAPD_OPTIONS="-l local4 -s 512"

LDAP の基本設定

  • ldapsearch -x -LLL -b 'olcDatabase={2}bdb,cn=config' -D cn=config -W
    • Enter LDAP Password: [上記で設定したディレクトリパスワードを入力]
    • dn: olcDatabase={2}bdb,cn=config
    • objectClass: olcDatabaseConfig?
    • objectClass: olcBdbConfig?
    • olcDatabase: {2}bdb
    • olcDbDirectory?: /var/lib/ldap
    • olcSuffix: dc=my-domain,dc=com
    • olcAddContentAcl?: FALSE
    • olcLastMod?: TRUE
    • olcMaxDerefDepth?: 15
    • olcReadOnly?: FALSE
    • olcRootDN: cn=Manager,dc=my-domain,dc=net

データ用ディレクトリの管理情報の変更

  • LDIF ファイルを準備し適用する方法
    • vi bdb-init.ldif -W
      • # 設定を行うDNを指定
      • dn: olcDatabase={2}bdb,cn=config
      • # このLDIFファイルで修正を行うことを宣言します
      • changetype: modify
      • # olcRootDNを書き換えることを指定し値を指定する
      • replace: olcRootDN
      • olcRootDN: cn=Manager,dc=unix-power,dc=net
      • -
      • # olcSuffixを書き換えることを指定し値を指定する
      • replace: olcSuffix
      • olcSuffix: dc=unix-power,dc=net
      • -
      • # olcRootPWを追加することを指定し値を指定する
      • add: olcRootPW
      • olcRootPW: {SSHA}en/K3sLikQDCWk/lMmWLNh8svNQ+ggf0
  • GUI ツール、Apache Directory Studio

初期データの登録(以下は CUI)

  • vi init.ldif
    dn: dc=unix-power,dc=net
    objectclass: dcObject
    objectclass: organization
    o: VIRTUAL CORPORATION
    dc: unix-power
    
    dn: cn=Manager,dc=unix-power,dc=net
    objectclass: organizationalRole
    cn: Manager
  • 登録は ldapadd コマンド
    ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f init.ldif
  • vi add.ldif
    dn: ou=Users,dc=unix-power,dc=net
    objectclass: organizationalUnit
    ou: Users
    
    dn: ou=Groups,dc=unix-power,dc=net
    objectclass: organizationalUnit
    ou: Groups
    
    dn: ou=Computers,dc=unix-power,dc=net
    objectclass: organizationalUnit
    ou: Computers
    
    # ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f add.ldif
    Enter LDAP Password:
    adding new entry "ou=Users,dc=unix-power,dc=net"
    
    adding new entry "ou=Groups,dc=unix-power,dc=net"
    
    adding new entry "ou=Computers,dc=unix-power,dc=net
  • vi groupadd.ldif
    dn: cn=develop,ou=Groups,dc=unix-power,dc=net
    objectClass: posixGroup
    cn: develop
    gidNumber: 1000
    
    dn: cn=sales,ou=Groups,dc=unix-power,dc=net
    objectClass: posixGroup
    cn: sales
    gidNumber: 1001
    
    dn: cn=market,ou=Groups,dc=unix-power,dc=net
    objectClass: posixGroup
    cn: market
    gidNumber: 1002
    
    # ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f groupadd.ldif
    Enter LDAP Password:
    adding new entry "cn=develop,ou=Groups,dc=unix-power,dc=net"
    
    adding new entry "cn=sales,ou=Groups,dc=unix-power,dc=net"
    
    adding new entry "cn=market,ou=Groups,dc=unix-power,dc=net"
  • vi useradd.ldif
    dn: uid=takeda,ou=Users,dc=unix-power,dc=net
    objectclass: posixAccount
    objectclass: inetOrgPerson
    sn: takeda
    cn: kazuma
    displayName: Takeda Kazuma
    uid: takeda
    uidNumber: 1000
    gidNumber: 1000
    homeDirectory: /home/takeda
    loginShell: /bin/bash
    userPassword: {CRYPT}B5fKzlwfatuy2
    mail: takeda@unix-power.net
    
    dn: uid=suzuki,ou=Users,dc=unix-power,dc=net
    objectclass: posixAccount
    objectclass: inetOrgPerson
    sn: suzuki
    cn: hajime
    displayName: Suzuki Hajime
    uid: suzuki
    uidNumber: 1001
    gidNumber: 1000
    homeDirectory: /home/suzuki
    loginShell: /bin/bash
    userPassword: {CRYPT}B5fKzlwfatuy2
    mail: suzuki@unix-power.net
    
    dn: uid=tanaka,ou=Users,dc=unix-power,dc=net
    objectclass: posixAccount
    objectclass: inetOrgPerson
    sn: tanaka
    cn: takuya
    displayName: Tanaka Takuya
    uid: tanaka
    uidNumber: 1002
    gidNumber: 1000
    homeDirectory: /home/tanaka
    loginShell: /bin/bash
    userPassword: {CRYPT}B5fKzlwfatuy2
    mail: tanaka@unix-power.net
    
    # ldapadd -x -W -D "cn=Manager,dc=unix-power,dc=net" -f useradd.ldif
    Enter LDAP Password:
    adding new entry "uid=takeda,ou=Users,dc=unix-power,dc=net"
    
    adding new entry "uid=suzuki,ou=Users,dc=unix-power,dc=net"
    
    adding new entry "uid=tanaka,ou=Users,dc=unix-power,dc=net"

ssl 対応

前提

  • CentOS6 でやります。
  • Client は AlmaLinux? 8。
    • 理由は RHEL8 相当はクライアントでldap情報を参照する際、SSL以上が必須なため。
      (SSL無しでできないか相当調べましたが無理でした。)

証明書の作成(ldap サーバー側)

  1. openssl のインストール
    yum -y install openssl
  2. ディレクトリへ移動
    cd /etc/pki/CA/
  3. index.txt の作成。(既にあったら消して作り直す)
    touch index.txt
  4. serial file の初期化
    echo 01 > serial
  5. ca.key の作成
    openssl genrsa -out ca.key 4096
  6. ca.cert.pem の作成
    openssl req -new -x509 -days 365 -key ca.key -out ca.cert.pem
    • 最初は国。例: JP
    • 県。例: Saitama
    • 市。例: Sakado
    • 会社名。例: Home
    • 組織。例: Home
    • Common name。host名など。例: hoge.domain.jp
    • Mail address。例: (空白)Enter
  7. サーバー証明書の作成
    • ディレクトリ移動
      cd private/
    • key の作成
      openssl genrsa -out ldap.domain.jp.key 4096
    • csr の作成
      req -new -key ldap.domain.jp.key -out ldap.domain.jp.csr
    • 1つ上のディレクトリへ移動
      cd ..
    • crt ファイルの作成
      y を2回押す。
      「Data Base Updated」と表示されれば完了。
      ca -keyfile ca.key -cert ca.cert.pem -in private/ldap.domain.jp.csr -out private/ldap.domain.jp.crt -extensions v3_ca
  8. index.txt の確認
    cat index.txt
    • V       220407123403Z           01      unknown /C=IN/ST=Karnataka/O=GoLinuxCloud/OU=Database/CN=server.example.com/emailAddress=admin@golinuxcloud.com
  9. 確認
    1. 1
      openssl verify -CAfile ca.cert.pem private/ldap.domain.jp.crt
    2. 2
      openssl x509  -noout -text -in private/ldap.domain.jp.crt  | grep -A 1 "Subject Alternative Name"
  10. openldap ディレクトリへコピー
    1. 1
      cp -v private/ldap.domain.jp.crt private/ldap.domain.jp.key /etc/openldap/certs/              
    2. 2
      cp -v ca.cert.pem /etc/openldap/cacerts/
  11. 現在のldap設定を確認
    slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile"
    • 例)
      olcTLSCertificateFile: "OpenLDAP Server"
      olcTLSCertificateKeyFile: /etc/openldap/certs/password
  12. openldap の設定を変更する ldif ファイルの作成
    1. cd
    2. vim tls.ldif
      dn: cn=config
      changetype: modify
      replace: olcTLSCertificateFile
      olcTLSCertificateFile: /etc/openldap/certs/ldap.domain.jp.crt
      -
      replace: olcTLSCertificateKeyFile
      olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.domain.jp.key
    3. ファイルの owner の変更
      (CentOS6 だとユーザー名などは 「ldap」)
      chown -R ldap:ldap /etc/openldap/certs
      chown -R ldap:ldap /etc/openldap/cacerts
    4. tls.ldif の適用
      ldapmodify -Y EXTERNAL -H ldapi:// -f tls.ldif
  13. もう1つの設定変更ファイルの作成
    1. vim tls-1.ldif
      dn: cn=config
      changetype: modify
      add: olcTLSCACertificateFile
      olcTLSCACertificateFile: /etc/openldap/cacerts/ca.cert.pem
    2. 適用
      ldapmodify -Y EXTERNAL -H ldapi:// -f tls-1.ldif
  14. 再度設定の確認
    slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile|olcTLSCACertificateFile"
  15. ldap config file の変更
    (CentOS6 ではここの手順が違くてはまりました。。。
    CentOS6 では、SLAPD_URLS を空白にしておく必要があります。
    以下のSLAPD_LDAPS を yes に変更すれば、自動的に ldaps:/// が追加されます)
    • vi /etc/sysconfig/ldap
      • 変更前
        SLAPD_LDAPS=no
      • 変更後
        SLAPD_LDAPS=yes
  16. ldap.conf の変更
    • vim /etc/openldap/ldap.conf
    • 以下を追加。
      TLS_CACERTDIR /etc/openldap/certs
      TLS_CACERT /etc/openldap/cacerts/ca.cert.pem
      TLS_REQCERT allow
  17. slapd の再起動
    service slapd restart

クライアント側の設定

  1. (クライアント) 関連ソフトのインストール
    dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir openssl-perl
  2. (クライアント) openldap に証明書を入れるディクトリを作成する。
    mkdir /etc/openldap/cacerts
  3. (サーバー側) 関連ファイルをクライアントにコピーする。
    scp /etc/openldap/cacerts/ca.cert.pem ldap-client:/etc/openldap/cacerts/ca.cert.pem
  4. sssd.conf の設定
    (SSLなので以下)
    • (クライアント) vi /etc/sssd/sssd.conf
      [sssd]
      config_file_version = 2
      services = nss, pam,autofs
      domains = default
      
      [nss]
      homedir_substring = /home
      
      [pam]
      
      [domain/default]
      id_provider = ldap
      autofs_provider = ldap
      auth_provider = ldap
      chpass_provider = ldap
      ldap_uri = ldaps://ldap.domain.jp:636
      ldap_chpass_uri = ldaps://ldap.domain.jp:636
      ldap_search_base = dc=domain,dc=jp
      ldap_id_use_start_tls = False
      ldap_tls_cacertdir = /etc/openldap/certs
      cache_credentials = True
      ldap_tls_reqcert = never
      entry_cache_timeout = 600
      ldap_network_timeout = 3
      ldap_connection_expire_timeout = 60
  5. 権限の変更
    chmod 600 /etc/sssd/sssd.conf
    chown root:root /etc/sssd/sssd.conf
  6. (クライアント) ldap.conf の変更
    • 「TLS_REQCERT never」 はオレオレ証明書なので必要。
    • vi /etc/openldap/ldap.conf
      BASE    dc=domain,dc=jp
      URI     ldap://10.0.2.20
      TLS_CACERT      /etc/openldap/cacerts/ca.cert.pem
      TLS_CACERTDIR /etc/openldap/cacerts
      TLS_REQCERT     never
  7. (クライアント) 証明書のリフレッシュ
    openssl rehash /etc/openldap/cacerts
  8. (クライアント) sssd の設定を関連設定ファイルへ設定。
    authselect select sssd with-mkhomedir --force
  9. (クライアント) 関連サービスの実行
    • sssd
      systemctl enable sssd.service --now 
    • oddjobd
      systemctl enable oddjobd.service --now
  10. (クライアント) ldap の user 名が引けるか確認
    id testUser
  11. (他のPCから) ログインできるか確認
    ssh testUser@clientComputer

error, daemon: listen(ldap:///, 5) failed errno=98 (Address already in use)

  • vim /etc/sysconfig/ldap
  • 以下の行をコメント・アウトしたら直った。
    SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"

Client

common

  • ldap に loginshell を設定

Redhat系

  1. sudo yum install openldap-clients nss-pam-ldapd
  2. sudo authconfig-tui
    • ユーザー情報
      ユーザー情報         認証                          │ 
      [ ] キャッシュ情報   [ ] MD5 パスワードを使用      │ 
      [*] LDAP を使用      [*] シャドウパスワードを使用  │ 
      [ ] NIS を使用       [*] LDAP 認証を使用           │ 
      [ ] IPAv2 の使用     [ ] Kerberos 5 を使用         │ 
      [ ] Winbind を使用   [ ] 指紋読み取りを使用        │ 
                           [ ] Winbind 認証を使用        │ 
                           [*] ローカル認証は十分です   
    • [ ] TLS を使用
      • サーバー: ldap://123.456.789.012/
      • ベース DN: dc=tar3,dc=net
  • sudo vi /etc/pam.d/system-auth (もし中身にsssがあれば)
    #auth        sufficient    pam_sss.so use_first_pass
    auth        sufficient    pam_ldap.so use_first_pass
    
    #account     [default=bad success=ok user_unknown=ignore] pam_sss.so
    account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
    
    #password    sufficient    pam_sss.so use_authtok
    password    sufficient    pam_ldap.so use_authtok
    
    #session     optional      pam_sss.so
    session     optional      pam_ldap.so
  • sudo vi /etc/pam.d/password-auth (もし中身にsssがあれば)
    #auth        sufficient    pam_sss.so use_first_pass
    auth        sufficient    pam_ldap.so use_first_pass
    
    #account     [default=bad success=ok user_unknown=ignore] pam_sss.so
    account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
    
    #password    sufficient    pam_sss.so use_authtok
    password    sufficient    pam_ldap.so use_authtok
    
    #session     optional      pam_sss.so
    session     optional      pam_ldap.so
  • sudo vi /etc/nsswitch.conf
    #passwd:     files sss
    passwd:     files ldap
    #shadow:     files sss
    shadow:     files ldap
    #group:      files sss
    group:      files ldap
    
    #services:   files sss
    services:   files ldap
    
    #netgroup:   files sss
    netgroup:   files ldap
    
    #automount:  files sss
    automount:  files ldap
  • sudo vi /etc/pam.d/sshd
    session required pam_mkhomedir.so skel=/etc/skel/ umask=0007
  • service の restart
    sudo service nslcd restart
  • 確認
    getent passwd

Debian系

  • ubuntu
    sudo apt-get install libpam-ldap libnss-ldap nss-updatedb libnss-db
  • debian
    sudo apt install libnss-ldapd libpam-ldapd ldap-utils 
    • 失敗した時の再設定
      sudo dpkg-reconfigure ldap-auth-config
    1. Should debconf manage LDAP configuration?
      <はい>
    2. LDAP server Uniform Resource Identifier:
      ldap://123.456.789.012/
    3. Distinguished name of the search base:
      dc=tar3,dc=net
    4. LDAP version to use:
      3
    5. Make local root Database admin:
      <はい>
    6. Does the LDAP database require login?
      <いいえ>
    7. LDAP account for root:
      cn=Manager,dc=tar3,dc=net
    8. LDAP root account password:
      [LDAP root account password]
    9. The meanings for selections are:
      <了解>
    10. Local crypt to use when changing passwords:
      exop
  1. sudo vi /etc/pam.d/sshd
    # Create home directory automatically.
    session required pam_mkhomedir.so skel=/etc/skel/ umask=0007
  2. sudo vi /etc/nsswitch.conf
    passwd: files ldap
    group: files ldap
    shadow: files ldap
     
    netgroup: ldap
  3. 確認
    getent passwd
  4. mkdir /home/userName
    • sudo chown -R userName:GroupName? /home/userName
    • 必要に応じて
      sudo visudo
  5. サービスの再起動
    systemctl restart nscd
  6. sudo 時、password を2回聞かれる問題
    sudo vi /etc/pam.d/common-auth
    1. before
      auth    [success=1 default=ignore]      pam_ldap.so use_first_pass
    2. after
      auth    [success=1 default=ignore]      pam_ldap.so try_first_pass
  7. x ログイン時にユーザー名が表示されない
    • ctrl + alt + F1 を押してコンソールへ。一度、ldap ユーザーでログインする。

ApacheDirectoryStudio?

setButton(GtkWidget?*): アサーション `!_button._widget' に失敗しました。

トラブル

config_back_db_open: line 0: warning: cannot assess the validity of the ACL scope within backend naming context

  1. ログの確認
    sudo less /var/log/ldap.log
  2. 以下のフォルダをバックアップから戻す
    • /var/lib/ldap
      sudo cp -fr /mnt/backup/var/lib/ldap/* /var/lib/ldap/
  3. ldapの再起動
    sudo service slapd restart

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-02-16 (木) 08:31:32 (432d)