- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2023-01-25T19:53:32+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