====== 管理ノード ======
===== OpenLDAPのインストールと初期設定 =====
(UFWを使用している場合)LDAPサーバ用のポートを開放
$ sudo ufw allow 389
ソフトウェアのインストール
$ sudo apt install slapd ldap-utils
以下を聞かれるので設定
* Administrator password: 任意
初期設定
$ sudo dpkg-reconfigure slapd
* Omit OpenLDAP server Configuration?: No
* DNS domain name: cluster.home.arpa
* プライベートLAN内のドメイン名は hogehoge.home.arpa が推奨されている、らしい
* クラスタ計算機のドメインなので、ここでは cluster.home.arpha としておく
* Organization name: Computer cluster
* このドメインが何を表すかの覚書。好きな名前にしてよろしい
* Administration password: インストール時に入力したもの
* Do you want the database to be removed when slapd is purged?: No
* slapdをアンインストールしたときにデータベースを残すかどうか。
* Move old database?: Yes
* 古いデータベースを別名にして残すかどうか。
ちゃんと設定されたか確認
$ sudo slapcat
dn: dc=cluster,dc=home,dc=arpa
objectClass: top
objectClass: dcObject
objectClass: organization
o: Computer Cluster
dc: cluster
structuralObjectClass: organization
entryUUID: d1780672-e166-1040-9b15-8729bd3fc447
creatorsName: cn=admin,dc=cluster,dc=home,dc=arpa
createTimestamp: 20260511092330Z
entryCSN: 20260511092330.169937Z#000000#000#000000
modifiersName: cn=admin,dc=cluster,dc=home,dc=arpa
modifyTimestamp: 20260511092330Z
===== 基本構造作成 =====
組織単位を作成し、LDAPに追加する。
$ nano base.ldif
dn: ou=people,dc=cluster,dc=home,dc=arpa
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=cluster,dc=home,dc=arpa
objectClass: organizationalUnit
ou: groups
dn: ou=hosts,dc=cluster,dc=home,dc=arpa
objectClass: organizationalUnit
ou: hosts
$ ldapadd -x -D cn=admin,dc=cluster,dc=home,dc=arpa -W -f base.ldif
ちゃんと設定されたか確認。
$ sudo slapcat
dn: dc=cluster,dc=home,dc=arpa
objectClass: top
objectClass: dcObject
objectClass: organization
o: Computer Cluster
dc: cluster
structuralObjectClass: organization
entryUUID: d1780672-e166-1040-9b15-8729bd3fc447
creatorsName: cn=admin,dc=cluster,dc=home,dc=arpa
createTimestamp: 20260511092330Z
entryCSN: 20260511092330.169937Z#000000#000#000000
modifiersName: cn=admin,dc=cluster,dc=home,dc=arpa
modifyTimestamp: 20260511092330Z
dn: ou=people,dc=cluster,dc=home,dc=arpa
objectClass: organizationalUnit
ou: people
structuralObjectClass: organizationalUnit
entryUUID: e7553b08-e167-1040-867b-8d36242c18d8
creatorsName: cn=admin,dc=cluster,dc=home,dc=arpa
createTimestamp: 20260511093116Z
entryCSN: 20260511093116.348516Z#000000#000#000000
modifiersName: cn=admin,dc=cluster,dc=home,dc=arpa
modifyTimestamp: 20260511093116Z
dn: ou=groups,dc=cluster,dc=home,dc=arpa
objectClass: organizationalUnit
ou: groups
structuralObjectClass: organizationalUnit
entryUUID: e755e2c4-e167-1040-867c-8d36242c18d8
creatorsName: cn=admin,dc=cluster,dc=home,dc=arpa
createTimestamp: 20260511093116Z
entryCSN: 20260511093116.352854Z#000000#000#000000
modifiersName: cn=admin,dc=cluster,dc=home,dc=arpa
modifyTimestamp: 20260511093116Z
===== ユーザーの追加 =====
ユーザーの初期パスワードを設定する。
$ slappasswd
New password:
Re-enter new password:
{SSHA}9VhiMfY0h9+SiAzqqCRIYGnKedgMUfH5
ユーザー情報の作成。
$ vim user.ldif
dn: cn=taro,ou=groups,dc=cluster,dc=home,dc=arpa
objectClass: posixGroup
cn: taro
gidNumber: 10000
dn: uid=taro,ou=people,dc=cluster,dc=home,dc=arpa
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Taro Yamada
sn: Yamada
uid: taro
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/taro
loginShell: /bin/bash
userPassword: {SSHA}9VhiMfY0h9+SiAzqqCRIYGnKedgMUfH5
$ ldapadd -x -D cn=admin,dc=cluster,dc=home,dc=arpa -W -f user.ldif
ちゃんと登録されているか確認
$ sudo slapcat
正しく登録されていれば、今まで入力した情報がすべて表示されます。
以下で述べるLDAPユーザの自動homeディレクトリ作成機能を利用しないなら、手動で作成する。
$ sudo mkdir /home/taro
$ sudo chown 10000:10000 /home/taro
===== ユーザーの削除 =====
$ ldapdelete -x -W -D "cn=admin,dc=cluster,dc=home,dc=arpa" 'cn=taro,ou=groups,dc=cluster,dc=home,dc=arpa'
$ ldapdelete -x -W -D "cn=admin,dc=cluster,dc=home,dc=arpa" 'uid=taro,ou=people,dc=cluster,dc=home,dc=arpa'
===== ホストの追加 =====
LDIFファイルは必要な分だけ書いてください。
dn: cn=kanri,ou=hosts,dc=cluster,dc=home,dc=arpa
objectClass: top
objectClass: ipHost
objectClass: device
cn: kanri
ipHostNumber: 192.168.0.1
dn: cn=keisan10,ou=hosts,dc=cluster,dc=home,dc=arpa
objectClass: top
objectClass: ipHost
objectClass: device
cn: keisan10
ipHostNumber: 192.168.0.10
dn: cn=keisan11,ou=hosts,dc=cluster,dc=home,dc=arpa
objectClass: top
objectClass: ipHost
objectClass: device
cn: keisan11
ipHostNumber: 192.168.0.11
登録
$ ldapadd -x -D "cn=admin,dc=cluster,dc=home,dc=arpa" -W -f hosts.ldif
確認
$ getent hosts
====== LDAPクライアント ======
* 最近はLDAPクライアントとしてSSSDが推奨されているらしいが、設定が面倒なので昔ながらのNSLCDを使う。
* 管理ノード、計算ノードで行う。
$ apt install libnss-ldapd libpam-ldapd
* LDAP server URI: ldap://192.168.0.1/
* LDAP server search base: dc=cluster,dc=home,dc=arpa
* Name services to configure: passwd, group, shadow, hosts (スペースキーでチェックを入れられます)
$ sudo pam-auth-update
* 「LDAP Authentication」を有効化(通常は自動で有効化済み)
* Create home directory on login を有効化
$ sudo systemctl restart nslcd nscd
ユーザーが見えるか確認
$ getent passwd taro
taro:x:10000:10000:Taro Yamada:/home/taro:/bin/bash
$ id taro
* uidとgidが見えます。
ユーザーに切り替えるには
$ su - taro
=== おまけ ===
ラズパイ5で組んだクラスタマシンで実行すると、追加したtaroのログインに失敗します。
$ su - taro
Password:
su: Authentication failure
/var/log/syslogを見ると
2026-05-14T16:16:19.302517+09:00 kanri kernel: audit: type=1400 audit(1778742979.300:545): apparmor="DENIED" operation="connect" class="file" profile="unix-chkpwd" name="/att/unix-chkpwd/run/nslcd/socket" pid=16833 comm="unix_chkpwd" requested_mask="wr" denied_mask="wr" fsuid=0 ouid=0
となっていたので、AppAmorを修正しました。
$ sudo nano /etc/apparmor.d/unix-chkpwd
(略)
include if exists
/att/unix-chkpwd/run/nslcd/socket rw, #この行を追加
}
$ sudo apparmor_parser -r /etc/apparmor.d/unix-chkpwd
====== 参考資料 ======
* https://server-network-note.net/2022/11/openldap-client-ubuntu22-04lts-server/
* https://zenn.dev/iasl/articles/1d35c87a66ee35