LDAPの実装系の一つ openldap をコンテナにして運用してみる.
OSの上に直植で openldap を置いてもいいのですが、RHEL系のnis廃止のようにそもそもrpmパッケージが提供されなくても使えるようにしたいので.
ここでは
としていきます
dockerでもいいのですが、podmanを使います.
[root@ldap ~]# cat /etc/redhat-release
Rocky Linux release 9.7 (Blue Onyx)
[root@ldap ~]# dnf install podman -y
[root@ldap ~]# firewall-cmd --add-service=ldap --add-service=ldaps --zone=public --permanent
[root@ldap ~]# firewall-cmd --reload
[root@ldap ~]# getenforce
Enforcing
[root@ldap ~]#あとldapの「サーバ管理者」と「ディレクトリ管理者」の暗号化したパスワード文字列を準備します。
簡単には「dnf install openldap-servers」でインストールされる slappasswd コマンドを使えばいいのですが、openldapのコンテナを作るのになんでパッケージを入れるの?って微妙になるのでpythonで作ってみる
下記pythonスクリプトを用意して
[root@ldap ~]# cat slappasswd_mock.py
import os
import hashlib
import base64
import getpass
def generate_ssha(password: str) -> str:
# 4バイトのランダムなソルト(Salt)を生成
salt = os.urandom(4)
# SHA-1 ハッシュの作成 (password + salt)
ctx = hashlib.sha1()
ctx.update(password.encode('utf-8'))
ctx.update(salt)
digest = ctx.digest()
# (ハッシュ値 + ソルト) を Base64 エンコード
ssha_hash = base64.b64encode(digest + salt).decode('utf-8')
return f"{{SSHA} }{ssha_hash}" # '} }' と間にスペースがありますが、実装時はスペースを削除してください。web表記上の問題です
if __name__ == "__main__":
password = getpass.getpass("New password: ")
confirm = getpass.getpass("Re-enter new password: ")
if password == confirm:
print(generate_ssha(password))
else:
print("Error: Passwords do not match.")
[root@ldap ~]# python slappasswd_mock.py
New password:
Re-enter new password:
{SSHA}J+3AMq6fyrZnJr5hOo0CAAAAAAAAAAA <-- 作られた暗号化文字列
[root@ldap ~]#あと、ldaps対応にもしたいので、自己証明書らを用意します
[root@ldap ~]# mkdir -p /srv/openldap/certs
[root@ldap ~]# cd /srv/openldap/certs
[root@ldap certs]# vi cert.cnf
[req]
distinguished_name = dn
x509_extensions = v3_req
prompt = no
[dn]
CN = ldap.cluster.internal
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = ldap.cluster.internal
[root@ldap certs]# openssl genrsa 2048 > cert.key
[root@ldap certs]# openssl req -new -x509 -key cert.key -out cert.crt -days 3650 -config cert.cnf -extensions v3_req
[root@ldap certs]# cp cert.crt ca.crt
[root@ldap certs]# ls -l
total 16
-rw-r--r--. 1 root root 1123 May 15 13:19 ca.crt
-rw-r--r--. 1 root root 181 May 15 13:18 cert.cnf
-rw-r--r--. 1 root root 1123 May 15 13:19 cert.crt
-rw-r--r--. 1 root root 1704 May 15 13:18 cert.key
[root@ldap certs]#peopleやgroupsなouやテストアカウントらをコンテナ起動時に用意できたらなと思ったのですが、
これらldifを用意したフォルダを下記のように繋げたら
「-v "/srv/openldap/ldif/ou.ldif:/container/services/openldap-bootstrap/assets/ldif/data/custom/00-init.ldif:Z" \」
エラーになった. こちらはバグのようです. https://github.com/osixia/container-openldap/issues/695
コンテナとしては https://hub.docker.com/r/osixia/openldap
を使います
以前は古い openldap version の提供でしたが、新しめの 2.6.10[リリース日 2025/05/22] が使えるようになりました. 本家のhttps://www.openldap.org/
は 2.6.13[リリース日 2026/03/09]
rockylinux9 のパッケージ版(rpm)は 2.6.8 です
[root@ldap ~]# podman volume create openldap-conf
[root@ldap ~]# podman volume create openldap-data
[root@ldap ~]# podman volume create openldap-backups
[root@ldap ~]# podman run --detach \
-p 389:3890 -p 636:6360 \
--name openldap-container \
--hostname ldap.cluster.internal \
-e OPENLDAP_BOOTSTRAP_ORGANIZATION="chaperone" \
-e OPENLDAP_BOOTSTRAP_SUFFIX="dc=cluster,dc=internal" \
-e OPENLDAP_BOOTSTRAP_TLS="true" \
-e OPENLDAP_BOOTSTRAP_TLS_CERT="/container/services/openldap/assets/certs/cert.crt" \
-e OPENLDAP_BOOTSTRAP_TLS_CERT_KEY="/container/services/openldap/assets/certs/cert.key" \
-e OPENLDAP_BOOTSTRAP_TLS_CA_CERT="/container/services/openldap/assets/certs/ca.crt" \
-e OPENLDAP_BOOTSTRAP_CONFIG_ROOT_DN="cn=admin,cn=config" \
-e OPENLDAP_BOOTSTRAP_DATA_ROOT_DN="cn=manager,dc=cluster,dc=internal" \
-e OPENLDAP_BOOTSTRAP_PPOLICY="true" \
-e OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MIN_LENGTH=3 \
-e OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_IN_HISTORY=0 \
-e OPENLDAP_BOOTSTRAP_CONFIG_ROOT_PASSWORD_HASHED="{SSHA}J+3AMq6fyrZnJr5hOo0CAAAAAAAAAAA" \
-e OPENLDAP_BOOTSTRAP_DATA_ROOT_PASSWORD_HASHED="{SSHA}J+3AMq6fyrZnJr5hOo0CAAAAAAAAAAA" \
-e OPENLDAP_BOOTSTRAP_MEMBEROF="true" \
-e OPENLDAP_BOOTSTRAP_SCHEMAS="core.ldif cosine.ldif inetorgperson.ldif rfc2307bis.ldif samba.ldif sudo.ldif" \
-v "/srv/openldap/certs:/container/services/openldap/assets/certs:Z" \
-v "openldap-conf:/etc/openldap/slapd.d" \
-v "openldap-data:/var/lib/openldap/openldap-data" \
-v "openldap-backups:/var/lib/openldap/openldap-backups" \
-v /etc/localtime:/etc/localtime:ro \
osixia/openldap:2.6.10-alpha
[root@ldap ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d60a7e3f4346 docker.io/osixia/openldap:2.6.10-alpha 48 seconds ago Up 48 seconds 0.0.0.0:389->3890/tcp, 0.0.0.0:636->6360/tcp openldap-container
[root@ldap ~]#
(ログ確認)
[root@ldap ~]# podman logs openldap-container
2026-05-16T16:02:27Z INFO Container image: osixia/openldap:2.6.10-alpha
2026-05-16T16:02:27Z INFO Loading environment variables from /container/environment/.env, /container/environment/.env.bootstrap, /container/environment/.env.cron, /container/environment/.env.ctl, /container/environment/.env.upgrade ...
2026-05-16T16:02:27Z INFO Running /container/services/openldap/startup.sh ...
2026-05-16T16:02:27Z INFO Running /container/services/openldap-bootstrap/startup.sh ...
2026-05-16T16:02:27Z INFO Bootstrapping OpenLDAP ...
2026-05-16T16:02:27Z INFO Setting bootstrapping environment variables ...
2026-05-16T16:02:27Z INFO Creating OpenLDAP config ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/config/base LDIFs ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/config/tls LDIFs ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/config/ppolicy LDIFs ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/config/memberof LDIFs ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/config/custom LDIFs ...
2026-05-16T16:02:27Z INFO Adding OpenLDAP data ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/data/base LDIFs ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/data/ppolicy LDIFs ...
2026-05-16T16:02:27Z INFO Load /container/services/openldap-bootstrap/assets/ldif/data/custom LDIFs ...
2026-05-16T16:02:27Z INFO Running /container/services/openldap-upgrade/startup.sh ...
2026-05-16T16:02:27Z INFO Testing OpenLDAP config ...
2026-05-16T16:02:27Z INFO config file testing succeeded
2026-05-16T16:02:27Z INFO Writing OpenLDAP version 2.6.10-r0 to /etc/openldap/slapd.d/.version ...
2026-05-16T16:02:27Z INFO Running /container/services/openldap/process.sh ...
6a089513.2f521cb9 0x7fd0c2c40b28 @(#) $OpenLDAP: slapd 2.6.10 (Aug 10 2025 08:43:17) $
openldap
6a089513.2fce4a6a 0x7fd0c2c40b28 slapd starting
[root@ldap ~]#
[root@ldap ~]#っで動作確認。別のマシンから
[saber@c ~]$ LDAPTLS_REQCERT=never ldapsearch -x -H ldap://ldap -b "" -s base "+"
:
namingContexts: dc=cluster,dc=internal
:
[saber@c ~]$ LDAPTLS_REQCERT=never ldapsearch -x -H ldaps://ldap -b "" -s base "+"
:
namingContexts: dc=cluster,dc=internal
:
[saber@c ~]$で通信は可能. 次に入っているスキーマを確認
[saber@c ~]$ LDAPTLS_REQCERT=never ldapsearch -H ldap://ldap -x -D "cn=admin,cn=config" -W -b cn=config dn | grep '^dn'
Enter LDAP Password:
dn: cn=config
dn: cn=module{0},cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}inetorgperson,cn=schema,cn=config
dn: cn={3}rfc2307bis,cn=schema,cn=config
dn: cn={4}samba,cn=schema,cn=config
dn: cn={5}sudo,cn=schema,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}mdb,cn=config
dn: olcOverlay={0}ppolicy,olcDatabase={1}mdb,cn=config
dn: olcOverlay={1}memberof,olcDatabase={1}mdb,cn=config
dn: olcDatabase={2}monitor,cn=config
[saber@c ~]$sambaとsudoのスキーマも入っている.
どんなスキーマがあるかは「podman exec -it openldap-container ls /etc/openldap/schema」コマンドで見れます
目下コンテナ起動時にouとか用意出来たらいいのですが、まだ問題があるようなので、手動でいれます
追加で people と groups のOUを用意するldifを作ってldapaddで加える
[root@ldap ~]# vi ldif/ou.ldif
dn: ou=people,dc=cluster,dc=internal
objectClass: organizationalUnit
ou: People
dn: ou=groups,dc=cluster,dc=internal
objectClass: organizationalUnit
ou: groups
[root@ldap ~]# ldapadd -H ldap://ldap -x -D cn=manager,dc=cluster,dc=internal -W -f ldif/ou.ldif次にautofs向けのOUらも同様に
[root@ldap ~]# vi ldif/autofs.ldif
dn: ou=automount,dc=cluster,dc=internal
objectClass: organizationalUnit
ou: automount
dn: nisMapName=auto.master,ou=automount,dc=cluster,dc=internal
objectClass: nisMap
nisMapName: auto.master
dn: nisMapName=auto.home,ou=automount,dc=cluster,dc=internal
objectClass: nisMap
nisMapName: auto.home
[root@ldap ~]# ldapadd -H ldap://ldap -x -D cn=manager,dc=cluster,dc=internal -W -f ldif/autofs.ldifあとはsudo関係
[root@ldap ~]# vi ldif/sudoers.ldif
dn: ou=sudoers,dc=cluster,dc=internal
objectClass: organizationalUnit
ou: sudoers
dn: cn=supervisor,ou=sudoers,dc=cluster,dc=internal
objectClass: top
objectClass: sudorole
cn: supervisor
sudoUser: %supervisor
sudoCommand: ALL
sudoHost: ALL
[root@ldap ~]# ldapadd -H ldap://ldap -x -D cn=manager,dc=cluster,dc=internal -W -f ldif/sudoers.ldifLDAP Adminで見るとこんな感じ

スキームが nisではなく、rfc2307bisなのでLDAP/dataの所と違ってます
まずはgroup作成
[root@ldap ~]# vi ldif/groups.ldif
dn: cn=xray,ou=groups,dc=cluster,dc=internal
objectClass: top
objectClass: groupOfNames
objectClass: posixGroup
cn: xray
gidNumber: 2001
member: cn=manager,dc=cluster,dc=internal
dn: cn=em,ou=groups,dc=cluster,dc=internal
objectClass: top
objectClass: groupOfNames
objectClass: posixGroup
cn: em
gidNumber: 2002
member: cn=manager,dc=cluster,dc=internal
dn: cn=manager,ou=groups,dc=cluster,dc=internal
objectClass: top
objectClass: groupOfNames
objectClass: posixGroup
cn: manager
gidNumber: 2003
member: cn=manager,dc=cluster,dc=internal
[root@ldap ~]# ldapadd -H ldap://ldap -x -D cn=manager,dc=cluster,dc=internal -W -f ldif/groups.ldif次にアカウント
[root@ldap ~]# vi ldif/saber.ldif
dn: uid=saber,ou=people,dc=cluster,dc=internal
changetype: add
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
uid: saber
cn: saber
sn: saber
uidNumber: 3000
gidNumber: 2001
homeDirectory: /home/saber
loginShell: /bin/bash
userPassword: 12345
dn: cn=xray,ou=groups,dc=cluster,dc=internal
changetype: modify
add: member
member: uid=saber,ou=people,dc=cluster,dc=internal
[root@ldap ~]# ldapadd -H ldap://ldap -x -D cn=manager,dc=cluster,dc=internal -W -f ldif/saber.ldifLDAP Adminから見るとこんな感じ

このように登録されたアカウント情報はコンテナ起動時のオプション指定で podman volume に入っている
-v "openldap-conf:/etc/openldap/slapd.d" \
-v "openldap-data:/var/lib/openldap/openldap-data" \なので、立ち上がったコンテナを破棄して、再度作ってもこのコンテナを繋げばデータは失われない
中身は「podman volume inspect 」で確認できる
っでこちらはpodmanで作っているので、マシンが再起動したらサービスも再開っていうわけではない。
dockerならdocker自体がデーモンなので再起動したらdockerも立ち上がるので、vmのフラグのような感じで「docker update --restart always openldap-container」とかでok
ならpodmanの場合ですが。そのコンテナのsystemd向けserviceファイルを作ってそれを動かすようにします
podman generate systemd --name openldap-container --files --new
mv container-openldap-container.service /etc/systemd/system/こちらは運用後にコンテナの内容を修正すると、再度 service ファイルを作り直す必要がある
小さいコンテナらこちらの方がいいかも
でも一方でQuadlet形式で行うのが推奨されていて、こちらは service ファイルではなく拡張子 .container のファイルを作成して
それから自動的に service が用意され実行される. そんな流れができる.
修正があったら.container ファイルを修正して、「systemctl restart」でコンテナが再作成される。
今回の場合は「/etc/containers/systemd/openldap-container.container」というファイルを作ります
[Unit]
Description=OpenLDAP Container
After=network-online.target
Wants=network-online.target
[Container]
Image=docker.io/osixia/openldap:2.6.10-alpha
ContainerName=openldap-container
HostName=ldap.cluster.internal
PublishPort=389:3890
PublishPort=636:6360
Volume=openldap-conf:/etc/openldap/slapd.d
Volume=openldap-data:/var/lib/openldap/openldap-data
Volume=openldap-backups:/var/lib/openldap/openldap-backups
Volume=/srv/openldap/certs:/container/services/openldap/assets/certs:Z
Volume=/etc/localtime:/etc/localtime:ro
Environment=OPENLDAP_BOOTSTRAP_ORGANIZATION=chaperone
Environment=OPENLDAP_BOOTSTRAP_SUFFIX=dc=cluster,dc=internal
Environment=OPENLDAP_BOOTSTRAP_TLS=true
Environment=OPENLDAP_BOOTSTRAP_TLS_CERT=/container/services/openldap/assets/certs/cert.crt
Environment=OPENLDAP_BOOTSTRAP_TLS_CERT_KEY=/container/services/openldap/assets/certs/cert.key
Environment=OPENLDAP_BOOTSTRAP_TLS_CA_CERT=/container/services/openldap/assets/certs/ca.crt
Environment=OPENLDAP_BOOTSTRAP_CONFIG_ROOT_DN=cn=admin,cn=config
Environment=OPENLDAP_BOOTSTRAP_DATA_ROOT_DN=cn=manager,dc=cluster,dc=internal
Environment=OPENLDAP_BOOTSTRAP_PPOLICY=true
Environment=OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MIN_LENGTH=3
Environment=OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_IN_HISTORY=0
Environment=OPENLDAP_BOOTSTRAP_MEMBEROF=true
Environment=OPENLDAP_BOOTSTRAP_CONFIG_ROOT_PASSWORD_HASHED={SSHA}J+3AMq6fyrZnJr5hOo0CAAAAAAAAAAA
Environment=OPENLDAP_BOOTSTRAP_DATA_ROOT_PASSWORD_HASHED={SSHA}J+3AMq6fyrZnJr5hOo0CAAAAAAAAAAA
Environment=OPENLDAP_BOOTSTRAP_SCHEMAS=core.ldif cosine.ldif inetorgperson.ldif rfc2307bis.ldif samba.ldif sudo.ldif
Network=podman
[Service]
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target中身はコンテナを作った時のコマンドとか環境変数が並んでます。
っで有効にするには、既存で存在しているコンテナをまずは削除して、「systemctl daemon-reload」で.serviceファイルを作成させます
[root@ldap ~]# podman rm -f openldap-container <--一旦既存のコンテナを削除します. Volumeは消えないです
[root@ldap ~]# ls -l /etc/containers/systemd/openldap-container.container
-rw-r--r--. 1 root root 1629 May 17 15:34 /etc/containers/systemd/openldap-container.container
[root@ldap ~]# systemctl list-unit-files |grep openldap-container
[root@ldap ~]# systemctl daemon-reload <-- 「openldap-container.container」 から 「openldap-container.service」を作る
[root@ldap ~]# systemctl list-unit-files |grep openldap-container
openldap-container.service generated - <-- 作られた
[root@ldap ~]# systemctl status openldap-container.service
○ openldap-container.service - OpenLDAP Container
Loaded: loaded (/etc/containers/systemd/openldap-container.container; generated)
Active: inactive (dead)
[root@ldap ~]# systemctl start openldap-container.service
[root@ldap ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43c39c609e80 docker.io/osixia/openldap:2.6.10-alpha 2 minutes ago Up 2 minutes 0.0.0.0:389->3890/tcp, 0.0.0.0:636->6360/tcp openldap-container
[root@ldap ~]#っでここでマシンを再起動させてみます
[root@ldap ~]# reboot再起動が終わったら、再度アクセスして確認します
(boot-up)
[root@ldap ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
626348916a6a docker.io/osixia/openldap:2.6.10-alpha 7 seconds ago Up 8 seconds 0.0.0.0:389->3890/tcp, 0.0.0.0:636->6360/tcp openldap-container
[root@ldap ~]#と再起動しても自動起動になりました. 「/etc/containers/systemd/openldap-container.container」を用意して「systemctl daemon-reload」したらokって感じかな
逆に金輪際、openldap-containerを動かさないなら
[root@ldap ~]# podman rm -f openldap-container
[root@ldap ~]# rm -f /etc/containers/systemd/openldap-container.container
[root@ldap ~]# systemctl daemon-reload
[root@ldap ~]# systemctl list-unit-files |grep openldap-container
[root@ldap ~]#とします。これで再起動してもopenldap-containerは起動しないです.
コンテナ自体に修正があるなら「/etc/containers/systemd/openldap-container.container」を修正して「systemctl daemon-reload」「systemctl restart openldap-container」とします
ドキュメントには OPENLDAP_CRON_JOB を定義すればldapのコンテンツを自動的にバックアップを取ってくれるみたい. だが、、上手く動いてくれない.
一応手動なら動いてまして、
[root@ldap ~]# podman exec openldap-container container run -- openldap-ctl backup $(date -I)-2.6.10-r0-openldap-cron --clean 15
2026-05-17T23:14:44+09:00 INFO Backing up OpenLDAP config ...
2026-05-17T23:14:44+09:00 INFO Backing up OpenLDAP data ...
2026-05-17T23:14:44+09:00 INFO Cleaning up backups older than 15 day(s) ...
[root@ldap ~]#「--clean 15」は15日より前のバックアップファイルは削除するそうな.
これをOS側のcronに登録すればいいかんじでしょうか
crontabに
「0 0 * * * podman exec openldap-container container run -- openldap-ctl backup $(date -I)-2.6.10-r0-openldap-cron --clean 15」
として置けば、毎日午前0時にldapのコンテンツのバックアップが取れるみたい
LDAP Adminしか使っていないが、LDAP Account Managerがいいのでしょうか
LDAP/Compose
ouを別にしたいと思う. 「cn=client-bind,ou=system,dc=cluster,dc=internal」を作ります
[root@ldap ~]# vi ldif/client-bind.ldif
dn: ou=system,dc=cluster,dc=internal
objectClass: organizationalUnit
ou: system
dn: cn=client-bind,ou=system,dc=cluster,dc=internal
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: client-bind
description: LDAP Client Bind Account
userPassword: {SSHA}ZkP4R4hR/k+pRDV+cAvTrsxxxxxxxxxx
[root@ldap ~]# ldapadd -H ldap://ldap -x -D cn=manager,dc=cluster,dc=internal -W -f ldif/client-bind.ldif次に大事なセキュリティー変更です. ちょいと間違えると動かなくなるのでバックアップを取って行います.
ldapviを使って直接セキュリティーを修正します.
[root@ldap ~]# podman exec openldap-container container run -- openldap-ctl backup $(date -I)-2.6.10-r0-openldap-cron --clean 15
[root@ldap ~]# dnf install ldapvi -y
[root@ldap ~]# EDITOR=vi LDAPTLS_REQCERT=never ldapvi -h ldap -D "cn=admin,cn=config" -b "olcDatabase={1}mdb,cn=config"
:
olcAccess: {0}to * by dn.exact="gidNumber=911+uidNumber=911,cn=peercred,cn=external,cn=auth" manage by * break
olcAccess: {1}to attrs=userPassword,shadowLastChange by self write by anonymous auth by * break
olcAccess: {2}to attrs=cn,sn,givenName,mail,uid by self read by users read by * break
olcAccess: {3}to * by * none
↓
olcAccess: {0}to * by dn.exact="gidNumber=911+uidNumber=911,cn=peercred,cn=external,cn=auth" manage by * break
olcAccess: {1}to attrs=userPassword,shadowLastChange by self write by anonymous auth by * break
olcAccess: {2}to attrs=loginShell,gecos by self write by users read by * break
olcAccess: {3}to dn.subtree="dc=cluster,dc=internal" by dn.exact="cn=client-bind,ou=system,dc=cluster,dc=internal" read by self read by users read by * none
olcAccess: {4}to * by * none
:
[root@ldap ~]#{2}は自分自身でloginshellとgecosを変更可能にしてます
{3}は接続専用アカウント「client-bind」はユーザー・グループツリー全体を読めるという事。自分自身も読める. user(=ログインしているユーザ)も読める
そのような意図です。
[root@r9 ~]# dnf -y install sssd-ldap oddjob-mkhomedir sssd-tools
[root@r9 ~]# vi /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = default
[nss]
[domain/default]
enumerate = true <-- これをいれると getent passwd でldapの全ユーザが見れる
id_provider = ldap
ldap_uri = ldap://ldap/
ldap_search_base = dc=cluster,dc=internal
ldap_id_use_start_tls = True
ldap_tls_reqcert = never
ldap_default_bind_dn = cn=client-bind,ou=system,dc=cluster,dc=internal
[root@r9 ~]# chmod 600 /etc/sssd/sssd.conf本来なら sssd.conf に「ldap_default_authtok 」項目を入れてパスワードを定義しますが、
平文のまま入れるので厄介. なので、コマンドでパスワードのみ別途暗号化された文字列に置き換えるコマンドを使います
[root@r9 ~]# sss_obfuscate -d default <-- 「cn=client-bind,ou=system,dc=cluster,dc=internal」のパスワードを入力
Enter password:
Re-enter password:
[root@r9 ~]# cat /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = default
[nss]
[domain/default]
enumerate = True
id_provider = ldap
ldap_uri = ldap://ldap/
ldap_search_base = dc=cluster,dc=internal
ldap_id_use_start_tls = True
ldap_tls_reqcert = never
ldap_default_bind_dn = cn=client-bind,ou=system,dc=cluster,dc=internal
access_provider = permit
sudo_provider = ldap
auth_provider = ldap
autofs_provider = ldap
resolver_provider = ldap
ldap_default_authtok_type = obfuscated_password
ldap_default_authtok = AAAQADNmWX2XEV6+BsJnBPjSOpazrFkXWW0zfxg9CzDpj6SyA+xTe3A9mlc065/yWIbA8wm8a9G5pyCa7m4iDV09z7wAAQID <-- 暗号化されたパスワードが用意されます
[root@r9 ~]#と暗号化されます。
そして authselectなどで、認証先を指定すれば使ます
[root@r9 ~]# authselect select sssd with-mkhomedir --force
[root@r9 ~]# systemctl restart sssd
[root@r9 ~]# getent passwd saber
saber:*:3000:2001:saber:/home/saber:/bin/bash
[root@r9 ~]#