User Tools

Site Tools


自作クラスタ計算機:openldapを使ったldapサーバの基本設定

管理ノード

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