Ubuntu22.04でLDAPに参加する

LAN内に複数の計算マシンを雑に置きたい時、QNAPみたいなLDAP+NFSに対応したNASで管理することありますよね。でも、LDAPクライアント周りの日本語情報は少なめなのでメモ。元ネタはこちら

結論をスクリプトで

適宜LDAPサーバIP、ドメイン、パスワード、等を書き換えて、以下のスクリプトをroot権限で実行すればOK.

解説

export DEBIAN_FRONTEND=noninteractive
apt update || exit 1
apt -y install libnss-ldapd libpam-ldapd ldap-utils || exit 1

ldap周りのソフトをインストールします。通常はapt install時にダイアログが立ち上がって、ldapサーバの設定を手入力するように求められるのですが、毎回打つのは面倒なので、DEBIAN_FRONTEND環境変数設定して質問せずに適当なデフォルト値を設定させます。

echo '
uid nslcd
gid nslcd
uri ldap://[QNAP(LDAPサーバ)のIPアドレス]/
base dc=some,dc=domain,dc=jp←QNAPの設定からコピー
binddn cn=admin,dc=some,dc=domain,dc=jp←QNAPの設定からコピー
bindpw [QNAPで設定したLDAPのパスワード]
' >/etc/nslcd.conf

LDAPの設定です。ubuntu20以前だとldap.confに書くという解説が結構ありますが、ubuntu22だとnslcd.confに書くようになったんですね。

nsswitch.confの設定は認証手段にldapを足すだけなので、特に解説はいらないかと思います。

echo '
Name: activate mkhomedir
Default: yes
Priority: 900
Session-Type: Additional
Session:
        required                        pam_mkhomedir.so umask=0022 skel=/etc/skel
'> /usr/share/pam-configs/my_mkhomedir

ホームディレクトリを自動で用意するpamの設定を追加します。ここに書いた内容は後でpam-auth-updateコマンドを実行すると反映されます。/etc/skelの内容が各自のホームに初期値コピーされるので、NFSへのリンク等つっこんどくと良いでしょう。(私はhomeは各実機上において、別途ワークフォルダをNFS上に置く派)

echo '
Name: activate /etc/security/group.conf
Default: yes
Priority: 900
Auth-Type: Primary
Auth:
        required                        pam_group.so use_first_pass
'>/usr/share/pam-configs/my_groups

後述の/etc/security/group.confを使うための設定。

#QNAPの特定グループ(SOME_LDAP_GROUP)をdockerユーザグループにも入れる場合は、
#以下を参考に記述
#echo "*;*;%SOME_LDAP_GROUP;Al0000-24000;docker" >/etc/security/group.conf

共用マシンで全員をdockerグループにチマチマいれるのは面倒です。LDAP上特定のグループに属している人はdoker使えるという風にするときにのようにgruop.confを使います。%SOME_LDAP_GROUPを*に書き換えると、誰でもdockerグループに追加します。

確認方法

getent passwd とか getent group とか書いて、LDAPに登録してるユーザが出てくればOKです。

参考:NFSについて

普通にマウントすれば、うまくいくんだけど。希にこのバグを踏むので私は以下URLの記事にあるworkaround記述のままにしてます。https://www.nasabi.me/?id=10

/mnt/mountpoint    10.10.10.10:/mounttarget    nfs    noauto,x-systemd.automount,x-systemd.device-timeout=30,_netdev    0 0