ソフトウェアのインストール
$ sudo apt install slapd ldap-utils
以下を聞かれるので設定
初期設定
$ sudo dpkg-reconfigure slapd
ちゃんと設定されたか確認
$ sudo slapcat dn: dc=cluster,dc=internal objectClass: top objectClass: dcObject objectClass: organization o: Computer cluster dc: cluster structuralObjectClass: organization entryUUID: e186be3c-fea8-1040-8619-d5206caf5213 creatorsName: cn=admin,dc=cluster,dc=internal createTimestamp: 20260617145927Z entryCSN: 20260617145927.614662Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260617145927Z
組織単位を作成し、LDAPに追加する。
$ nano 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: e186be3c-fea8-1040-8619-d5206caf5213 creatorsName: cn=admin,dc=cluster,dc=internal createTimestamp: 20260617145927Z entryCSN: 20260617145927.614662Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260617145927Z dn: ou=people,dc=cluster,dc=internal objectClass: organizationalUnit ou: people structuralObjectClass: organizationalUnit entryUUID: 2b271ea6-fea9-1040-8d53-7d7e6af5b904 creatorsName: cn=admin,dc=cluster,dc=internal createTimestamp: 20260617150131Z entryCSN: 20260617150131.139400Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260617150131Z dn: ou=groups,dc=cluster,dc=internal objectClass: organizationalUnit ou: groups structuralObjectClass: organizationalUnit entryUUID: 2b27ad3a-fea9-1040-8d54-7d7e6af5b904 creatorsName: cn=admin,dc=cluster,dc=internal createTimestamp: 20260617150131Z entryCSN: 20260617150131.143063Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260617150131Z dn: ou=hosts,dc=cluster,dc=internal objectClass: organizationalUnit ou: hosts structuralObjectClass: organizationalUnit entryUUID: 2b27ed4a-fea9-1040-8d55-7d7e6af5b904 creatorsName: cn=admin,dc=cluster,dc=internal createTimestamp: 20260617150131Z entryCSN: 20260617150131.144703Z#000000#000#000000 modifiersName: cn=admin,dc=cluster,dc=internal modifyTimestamp: 20260617150131Z
ハッシュ化されたユーザーの初期パスワードを設定する。
$ slappasswd
New password:
Re-enter new password:
{SSHA}9VhiMfY0h9+SiAzqqCRIYGnKedgMUfH5
ユーザー情報の作成。
$ nano 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'
確認
$ sudo slapd
$ sudo apt install -y libnss-ldapd libpam-ldapd
$ sudo pam-auth-update
$ sudo systemctl restart nslcd nscd
$ getent passwd taro taro:x:10000:10000:Taro Yamada:/home/taro:/bin/bash
$ id taro
$ su - taro
追加した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
$ echo "/att/unix-chkpwd/run/nslcd/socket rw," | sudo tee -a /etc/apparmor.d/local/unix-chkpwd $ sudo systemctl reload apparmor
LDAPでは、ユーザー情報だけでなくホスト名も共有できます。 通常はDNSサーバーを使って名前解決すべきなのであまり推奨されません。 しかし、DNSサーバーを立てる必要がない分だけ楽にクラスター計算機が構築できます。
dn: ou=hosts,dc=cluster,dc=internal objectClass: organizationalUnit ou: hosts
$ ldapadd -x -D cn=admin,dc=cluster,dc=internal -W -f base-hosts.ldif
dn: cn=head,ou=hosts,dc=cluster,dc=internal objectClass: top objectClass: ipHost objectClass: device cn: head ipHostNumber: 192.168.0.1 dn: cn=node11,ou=hosts,dc=cluster,dc=internal objectClass: top objectClass: ipHost objectClass: device cn: node11 ipHostNumber: 192.168.0.11 dn: cn=node12,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
libnss-ldapdをインストールするときにhostsも共有するか聞かれますが、そこで共有しないようにしてしまった人向け。
# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: files systemd ldap group: files systemd ldap shadow: files systemd ldap gshadow: files systemd hosts: files dns ldap networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
$ sudo systemctl restart nslcd nscd
$ getent hosts