自作クラスタ計算機:openldapを使ったldapサーバの基本設定
Table of Contents
管理ノード
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.internal
- 世の中(インターネットの中)にある他のドメイン名と衝突しなければなんでもよい。
- そのため、固定IPと対応するドメイン名をもらったのなら、それを使うのが一般的。
- たとえば、固定IPとともに toaru.daigaku.ac.jp というドメイン名をもらったのならそのまま使ってもよいが、管理ノードの個別名と明確に区別したいということであれば、 cluster.toaru.daigaku.ac.jp みたいにする。
- LDAPサーバーがプライベートLANで閉じることが確約しているのなら、hogehoge.internal や hogehoge.home.arpa が広く使われている、らしい
- クラスタ計算機のドメインなので、ここでは cluster.internal としておく
- 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=internal 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=internal createTimestamp: 20260511092330Z entryCSN: 20260511092330.169937Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260511092330Z
基本構造作成
組織単位を作成し、LDAPに追加する。
$ nano base.ldif
- base.ldif
dn: ou=people,dc=cluster,dc=internal objectClass: organizationalUnit ou: people dn: ou=groups,dc=cluster,dc=internal objectClass: organizationalUnit ou: groups dn: ou=hosts,dc=cluster,dc=internal objectClass: organizationalUnit ou: hosts
LDAPで
- ユーザー
- グループ
- ホスト名
を管理します。
$ ldapadd -x -D cn=admin,dc=cluster,dc=internal -W -f base.ldif
ちゃんと設定されたか確認。
$ sudo slapcat dn: dc=cluster,dc=internal 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=internal createTimestamp: 20260511092330Z entryCSN: 20260511092330.169937Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260511092330Z dn: ou=people,dc=cluster,dc=internal objectClass: organizationalUnit ou: people structuralObjectClass: organizationalUnit entryUUID: e7553b08-e167-1040-867b-8d36242c18d8 creatorsName: cn=admin,dc=cluster,dc=internal createTimestamp: 20260511093116Z entryCSN: 20260511093116.348516Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260511093116Z dn: ou=groups,dc=cluster,dc=internal objectClass: organizationalUnit ou: groups structuralObjectClass: organizationalUnit entryUUID: e755e2c4-e167-1040-867c-8d36242c18d8 creatorsName: cn=admin,dc=cluster,dc=internal createTimestamp: 20260511093116Z entryCSN: 20260511093116.352854Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260511093116Z
ユーザーの追加
ユーザーの初期パスワードを設定する。
$ slappasswd
New password:
Re-enter new password:
{SSHA}9VhiMfY0h9+SiAzqqCRIYGnKedgMUfH5
ユーザー情報の作成。
$ nano user.ldif
- user.ldif
dn: cn=taro,ou=groups,dc=cluster,dc=internal objectClass: posixGroup cn: taro gidNumber: 10000 dn: uid=taro,ou=people,dc=cluster,dc=internal 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
uidとgidは、ユーザーIDとグループIDのこと。 OS自体が持っているIDとの衝突を避けるため、LDAPを使うときは10000番台から始めることが多い。
1グループ1ユーザーで作るとわかりやすいので、ここではtaroというグループを作って、そこにtaroというユーザーを登録している。 Linuxのグループの機能を使いたいなら、あるグループを作ってそこに複数のユーザーをまとめてもよい。
$ ldapadd -x -D cn=admin,dc=cluster,dc=internal -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=internal" 'cn=taro,ou=groups,dc=cluster,dc=internal' $ ldapdelete -x -W -D "cn=admin,dc=cluster,dc=internal" 'uid=taro,ou=people,dc=cluster,dc=internal'
ホストの追加
LDIFファイルは必要な分だけ書いてください。
- hosts.ldif
dn: cn=kanri,ou=hosts,dc=cluster,dc=internal objectClass: top objectClass: ipHost objectClass: device cn: kanri ipHostNumber: 192.168.0.1 dn: cn=node10,ou=hosts,dc=cluster,dc=internal objectClass: top objectClass: ipHost objectClass: device cn: node11 ipHostNumber: 192.168.0.11 dn: cn=node11,ou=hosts,dc=cluster,dc=internal objectClass: top objectClass: ipHost objectClass: device cn: node12 ipHostNumber: 192.168.0.12
登録
$ ldapadd -x -D "cn=admin,dc=cluster,dc=internal" -W -f hosts.ldif
確認
$ getent hosts
LDAPクライアント
- 最近はLDAPクライアントとしてSSSDが推奨されているらしいが、設定が面倒なので昔ながらのnscd+nslcdを使う。
- 管理ノード、計算ノードで行う。
$ sudo apt install libnss-ldapd libpam-ldapd
- LDAP server URI: ldap://192.168.0.1/
- LDAP server search base: dc=cluster,dc=internal
- 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を見ると
$ cat /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
となっていたので、AppArmorを修正しました。
$ sudo nano /etc/apparmor.d/unix-chkpwd
(略) include if exists <local/unix-chkpwd> /att/unix-chkpwd/run/nslcd/socket rw, #この行を追加 }
$ sudo apparmor_parser -r /etc/apparmor.d/unix-chkpwd
参考資料
自作クラスタ計算機/openldapを使ったldapサーバの基本設定.txt · Last modified: 2026/06/12 02:50 by koudai
