LDAP/Containerにてopenldapのコンテナをpodmanで作ってみた
次に LDAP Account Manager もコンテナとして組み込んで compose を作ってみた
参照先 https://qiita.com/luhoriuchi/items/bf29f886a78a3500e759
ここではdockerではなく podman で作ってます
[root@ldap ~]# cat /etc/redhat-release
Rocky Linux release 9.7 (Blue Onyx)
[root@ldap ~]# dnf install epel-release
[root@ldap ~]# dnf install podman podman-composeあとfirewallにあなを開けます
[root@ldap ~]# firewall-cmd --add-service=ldap --add-service=ldaps --add-service=http --zone=public --permanent
[root@ldap ~]# firewall-cmd --reload
[root@ldap ~]# getenforce
Enforcing
[root@ldap ~]#LDAP/Containerの内容を踏襲します
[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そして compose.yml ファイルを用意します
「OPENLDAP_BOOTSTRAP_CONFIG_ROOT_PASSWORD_HASHED:」と「OPENLDAP_BOOTSTRAP_DATA_ROOT_PASSWORD_HASHED:」のパスワード文字列は slappasswd か LDAP/Container のpythonスクリプトで得てください
[root@ldap ~]# podman volume create openldap-conf
[root@ldap ~]# podman volume create openldap-data
[root@ldap ~]# podman volume create openldap-backups
[root@ldap ~]# mkdir $HOME/ldap
[root@ldap ~]# cd $HOME/ldap
[root@ldap ldap]# vi compose.yml
version: '3.8'
services:
openldap-container:
image: docker.io/osixia/openldap:2.6.10-alpha
container_name: openldap-container
hostname: ldap.cluster.internal
ports:
- 389:3890
- 636:6360
environment:
OPENLDAP_BOOTSTRAP_ORGANIZATION: "chaperone"
OPENLDAP_BOOTSTRAP_SUFFIX: "dc=cluster,dc=internal"
OPENLDAP_BOOTSTRAP_TLS: "true"
OPENLDAP_BOOTSTRAP_TLS_CERT: "/container/services/openldap/assets/certs/cert.crt"
OPENLDAP_BOOTSTRAP_TLS_CERT_KEY: "/container/services/openldap/assets/certs/cert.key"
OPENLDAP_BOOTSTRAP_TLS_CA_CERT: "/container/services/openldap/assets/certs/ca.crt"
OPENLDAP_BOOTSTRAP_CONFIG_ROOT_DN: "cn=admin,cn=config"
OPENLDAP_BOOTSTRAP_DATA_ROOT_DN: "cn=manager,dc=cluster,dc=internal"
OPENLDAP_BOOTSTRAP_PPOLICY: "true"
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_MIN_LENGTH: 3
OPENLDAP_BOOTSTRAP_PPOLICY_DEFAULT_IN_HISTORY: 0
OPENLDAP_BOOTSTRAP_MEMBEROF: "true"
OPENLDAP_BOOTSTRAP_CONFIG_ROOT_PASSWORD_HASHED: "{SSHA}J+3AMq6fyrZnJr5hOo0CAAAAAAAAAAA"
OPENLDAP_BOOTSTRAP_DATA_ROOT_PASSWORD_HASHED: "{SSHA}J+3AMq6fyrZnJr5hOo0CAAAAAAAAAAA"
OPENLDAP_BOOTSTRAP_SCHEMAS: "core.ldif cosine.ldif inetorgperson.ldif rfc2307bis.ldif samba.ldif sudo.ldif"
volumes:
- openldap-conf:/etc/openldap/slapd.d
- openldap-data:/var/lib/openldap/openldap-data
- openldap-backups:/var/lib/openldap/openldap-backups
- /etc/localtime:/etc/localtime:ro
- /srv/openldap/certs:/container/services/openldap/assets/certs:Z
lam:
image: ghcr.io/ldapaccountmanager/lam:stable
container_name: lam
environment:
LDAP_DOMAIN: "cluster.internal"
LDAP_BASE_DN: "dc=cluster,dc=internal"
LDAP_USERS_DN: "ou=people,dc=cluster,dc=internal"
LDAP_GROUPS_DN: "ou=groups,dc=cluster,dc=internal"
LDAP_SERVER: "ldap://openldap-container:3890"
LAM_LANG: "ja_JP"
LAM_PASSWORD: "lam"
VIRTUAL_HOST: "lam"
CERT_NAME: "cert"
ports:
- "8080:80"
depends_on:
- openldap-container
volumes:
openldap-conf:
external: true
openldap-data:
external: true
openldap-backups:
external: true
[root@ldap ldap]#これでcompose.ymlファイルがある場所にて
[root@ldap ldap]# podman-compose up -d
[root@ldap ldap]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4337f0fa790 docker.io/osixia/openldap:2.6.10-alpha 6 seconds ago Up 6 seconds 0.0.0.0:389->3890/tcp, 0.0.0.0:636->6360/tcp openldap-container
200f2f8bbe40 ghcr.io/ldapaccountmanager/lam:stable /usr/local/bin/st... 6 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp lam
[root@ldap ldap]# podman volume ls
DRIVER VOLUME NAME
local openldap-conf
local openldap-data
local openldap-backups
[root@ldap ldap]#と立ち上がる。停止の際は「podman-compose down」とする
[root@ldap ldap]# podman-compose down
[root@ldap ldap]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@ldap ldap]#コンテナ自体が消えます.
そしてサービスファイルを作成
[root@ldap ~]# vi /etc/systemd/system/podman-compose-app.service
[Unit]
Description=Podman Compose Application Service
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/root/ldap <-- compose.ymlの場所
ExecStart=/usr/bin/podman-compose up -d
ExecStop=/usr/bin/podman-compose down
[Install]
WantedBy=multi-user.target
[root@ldap ~]#そしてこれを有効にする
[root@ldap ~]# systemctl daemon-reload
[root@ldap ~]# systemctl list-unit-files |grep podman
podman-auto-update.service disabled disabled
podman-clean-transient.service disabled disabled
podman-compose-app.service disabled disabled <-- これ
podman-kube@.service disabled disabled
podman-restart.service disabled disabled
podman.service disabled disabled
podman.socket disabled disabled
podman-auto-update.timer disabled disabled
[root@ldap ~]#
[root@ldap ~]# systemctl enable podman-compose-app.service
Created symlink /etc/systemd/system/multi-user.target.wants/podman-compose-app.service → /etc/systemd/system/podman-compose-app.service.
[root@ldap ~]#
[root@ldap ~]# systemctl list-unit-files |grep podman
podman-auto-update.service disabled disabled
podman-clean-transient.service disabled disabled
podman-compose-app.service enabled disabled
podman-kube@.service disabled disabled
podman-restart.service disabled disabled
podman.service disabled disabled
podman.socket disabled disabled
podman-auto-update.timer disabled disabled
[root@ldap ~]#稼働しているマシンの8080にアクセスします「ldap:8080/lam」
まずは右上にある「LAN構成設定」リンクをクリックします(初回のみ)

次の画面で「サーバープロファイルの編集」リンクを押下します

次の画面で求められる「パスワード」は、compose.ymlで指定している「LAM_PASSWORD:」の値です. ここでは「lam」になりますね. 入力して「OK」ボタンを押下します.

このLDAP Account Managerを経由してopenldapのコンテンツを調整できますが、コンテンツを調整するのは「ディレクトリ管理者」にしたいので
「有効なユーザのリスト」は cn=manager,dc=cluster,dc=internal にします
そしてこのアプリのtimezoneを修正します. そして画面下の「保存」ボタンを押下してください

設定の保存が完了すると最初のページに戻ります。
ここで表示されている「ユーザ名」は「manager」と表記されますが、これは cn=manager,dc=cluster,dc=internal を意図してます
ログインに成功すると前の段階で作っていたアカウントとかが表示されます

具体的なgroupの追加や、ユーザの作成はほかのサイトをご覧ください