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

openldap-container

コンテナとしては 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.ldif

LDAP Adminで見るとこんな感じ
2026y05m17d_012844963.png

アカウント追加

スキームが 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.ldif

LDAP Adminから見るとこんな感じ
2026y05m17d_130144969.png 2026y05m17d_130147844.png

自動起動

このように登録されたアカウント情報はコンテナ起動時のオプション指定で 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のバックアップ

ドキュメントには 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(=ログインしているユーザ)も読める

そのような意図です。

クライアント接続

LDAP/Client#g2ccf901参照

[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 ~]#
最新の60件
2026-06-08 2026-06-06 2026-06-05 2026-06-04 2026-06-03 2026-05-31 2026-05-28 2026-05-26 2026-05-23 2026-05-22 2026-05-21 2026-05-20 2026-05-19 2026-05-18 2026-05-12 2026-05-11 2026-05-08 2026-05-06 2026-05-05 2026-05-03 2026-04-30 2026-04-29 2026-04-28 2026-04-27 2026-04-25 2026-04-24 2026-04-22 2026-04-21 2026-04-12 2026-04-08 2026-04-06 2026-04-05 2026-04-02 2026-03-26 2026-03-23 2026-03-21 2026-03-19 2026-03-15 2026-03-14

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2026-05-20 (水) 05:25:49