#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