#author("2023-01-28T17:11:35+09:00","default:dramsukohome","dramsukohome")
#author("2023-02-16T08:31:31+09:00","default:dramsukohome","dramsukohome")
[[Linux]]

#shadowheader(1,openladap);

#contents

* 参考 [#f1183791]
- [[CentOS6 OpenLDAPの設定(UnixPower on Networking):http://www.unix-power.net/linux/openldap.html]]
- [[Apache Directory Studioの導入(UnixPower on Networking):http://www.unix-power.net/linux/ads.html]]

* Server [#wa76f6e4]
** Install (以下 su - 権限) [#c01498a3]
 yum install openldap openldap-servers openldap-clients
** パスワードの準備 [#b9ca83bd]
- 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 環境構築 [#ld0db918]
- バークレーDB、設定ファイルのコピー
 cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
** Service の起動 [#cb43c135]
 /etc/init.d/slapd start
** loglevel の設定 [#r83fdd34]
- [[参考:http://www.unix-power.net/linux/openldap.html]]
 vi /etc/sysconfig/ldap
 
 # Options of slapd (see man slapd)
 SLAPD_OPTIONS="-l local4 -s 512"

** LDAP の基本設定 [#kd549020]
-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''

** データ用ディレクトリの管理情報の変更 [#j78bdf68]
- 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
-- これ、すごく便利です。
--- [[Apache Directory Studio:http://directory.apache.org/studio/]]
** 初期データの登録(以下は CUI) [#m8b4017b]
- 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 対応 [#sd0e08bc]


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


*** 証明書の作成(ldap サーバー側) [#v0bfe971]
-参考サイト
--証明書の作成とコピー。少し読み変えて CentOS6 で動かします。
---[[Simple steps to configure LDAPS with TLS certificates CentOS 7 Linux:https://www.golinuxcloud.com/configure-openldap-with-tls-certificates/]]
-以下は全て root 権限で行う。
+openssl のインストール
 yum -y install openssl
+ディレクトリへ移動
 cd /etc/pki/CA/
+index.txt の作成。(既にあったら消して作り直す)
 touch index.txt
+serial file の初期化
 echo 01 > serial
+ca.key の作成
 openssl genrsa -out ca.key 4096
+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
+サーバー証明書の作成
--ディレクトリ移動
 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
+ 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
+確認
++ 1
 openssl verify -CAfile ca.cert.pem private/ldap.domain.jp.crt
++ 2
 openssl x509  -noout -text -in private/ldap.domain.jp.crt  | grep -A 1 "Subject Alternative Name"
+openldap ディレクトリへコピー
++ 1
 cp -v private/ldap.domain.jp.crt private/ldap.domain.jp.key /etc/openldap/certs/              
++ 2
 cp -v ca.cert.pem /etc/openldap/cacerts/
+ 現在のldap設定を確認
 slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile"
--例)
 olcTLSCertificateFile: "OpenLDAP Server"
 olcTLSCertificateKeyFile: /etc/openldap/certs/password
+ openldap の設定を変更する ldif ファイルの作成
++ cd
++ 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
++ ファイルの owner の変更~
(CentOS6 だとユーザー名などは 「ldap」)
 chown -R ldap:ldap /etc/openldap/certs
 chown -R ldap:ldap /etc/openldap/cacerts
++ tls.ldif の適用
 ldapmodify -Y EXTERNAL -H ldapi:// -f tls.ldif
+もう1つの設定変更ファイルの作成
++ vim tls-1.ldif
 dn: cn=config
 changetype: modify
 add: olcTLSCACertificateFile
 olcTLSCACertificateFile: /etc/openldap/cacerts/ca.cert.pem
++ 適用
 ldapmodify -Y EXTERNAL -H ldapi:// -f tls-1.ldif
+再度設定の確認
 slapcat -b "cn=config" | egrep "olcTLSCertificateFile|olcTLSCertificateKeyFile|olcTLSCACertificateFile"
+ ldap config file の変更~
(CentOS6 ではここの手順が違くてはまりました。。。~
CentOS6 では、SLAPD_URLS を空白にしておく必要があります。~
以下のSLAPD_LDAPS を yes に変更すれば、自動的に ldaps:/// が追加されます)
-- vi /etc/sysconfig/ldap
---変更前
 SLAPD_LDAPS=no
---変更後
 SLAPD_LDAPS=yes
+ ldap.conf の変更
-- vim /etc/openldap/ldap.conf
-- 以下を追加。
 TLS_CACERTDIR /etc/openldap/certs
 TLS_CACERT /etc/openldap/cacerts/ca.cert.pem
 TLS_REQCERT allow
+ slapd の再起動
 service slapd restart


*** クライアント側の設定 [#pd83a7f5]
-参考サイト
--openldap と SSL の設定
---[[8 simple steps to configure ldap client RHEL/CentOS 8:https://www.golinuxcloud.com/ldap-client-rhel-centos-8/]]
- AlmaLinux8 で行いました。
- 以下は全て root 権限で行うこと。
+ (クライアント) 関連ソフトのインストール
 dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir openssl-perl
+ (クライアント) openldap に証明書を入れるディクトリを作成する。
 mkdir /etc/openldap/cacerts
+ (サーバー側) 関連ファイルをクライアントにコピーする。
 scp /etc/openldap/cacerts/ca.cert.pem ldap-client:/etc/openldap/cacerts/ca.cert.pem
+ 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
+権限の変更
 chmod 600 /etc/sssd/sssd.conf
 chown root:root /etc/sssd/sssd.conf
+(クライアント) 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
+(クライアント) 証明書のリフレッシュ
 openssl rehash /etc/openldap/cacerts
+(クライアント) sssd の設定を関連設定ファイルへ設定。
 authselect select sssd with-mkhomedir --force
+(クライアント) 関連サービスの実行
-- sssd
 systemctl enable sssd.service --now 
-- oddjobd
 systemctl enable oddjobd.service --now
+(クライアント)  ldap の user 名が引けるか確認
 id testUser
+(他のPCから) ログインできるか確認
 ssh testUser@clientComputer


*** error, daemon: listen(ldap:///, 5) failed errno=98 (Address already in use) [#x677c9c5]
- vim /etc/sysconfig/ldap
- 以下の行をコメント・アウトしたら直った。
 SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"


* Client [#fed74a6e]
** common [#qf0987cb]
- ldap に loginshell を設定

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




* ApacheDirectoryStudio [#oa1da4d3]



**setButton(GtkWidget*): アサーション `!_button._widget' に失敗しました。 [#u2b48527]
-参考:[[https://bugs.launchpad.net/ubuntu/+source/gtk2-engines-oxygen/+bug/1242801]]
-以下の箇所を変更
 sudo vi /usr/share/themes/oxygen-gtk/gtk-2.0/gtkrc
--`GtkComboBox::appears-as-list = 1`
-- -> `GtkComboBox::appears-as-list = 0`




* トラブル [#x324c761]



** config_back_db_open: line 0: warning: cannot assess the validity of the ACL scope within backend naming context [#taca1f64]
+ ログの確認
 sudo less /var/log/ldap.log
+ 以下のフォルダをバックアップから戻す
-- /var/lib/ldap
 sudo cp -fr /mnt/backup/var/lib/ldap/* /var/lib/ldap/
+ ldapの再起動
 sudo service slapd restart

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS