はじめに
OpenLDAP(slapd)でユーザをツリー構造にして認証させたい場合のメモです。
もっと上手な方法がないか探し中です。
環境
Ubuntu 22.04.1 LTS slapd 2.5.13+dfsg-0ubuntu0.22.04.1
目的
ユーザaaaaaとbbbbbはou=userに属しています。
それぞれou=user_1、ou=user_2に分けます。
こうすることで以下の状況を作ります。
パソコン1:ユーザaaaaaとbbbbbがログイン可能 パソコン2:ユーザaaaaaだけがログイン可能
パソコン1、パソコン2ではsssdで認証を行っていますが、認証の参照を切り替えることで以下のようになります。
・「ou=user」を認証に使った場合、下位Treeの「user_1」と「user_2」が対象になる。
・「ou=user_1」を認証に使った場合、「ou=user_1」が対象になる。
・「ou=user_2」を認証に使った場合、「ou=user_2」が対象になる。
ou情報の追加
user_1、user_2を定義したldifファイルを作成します。
sudo vi /etc/ldap/myldif/in_out.ldif
dn: ou=user_1,ou=user,dc=local objectClass: organizationalUnit ou: user_1 dn: ou=user_2,ou=user,dc=local objectClass: organizationalUnit ou: user_2
OpenLDAP(slapd)に追加します。
OpenLDAP管理者(admin)のパスワードが必要です。
sudo ldapadd -x -D cn=admin,dc=local -W -f in_out.ldif
追加されたか確認します。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -D cn=admin,dc=local -b dc=local
ユーザaaaaaとbbbbbの元のouは以下となっています。
15 uid=aaaaa,ou=user,dc=local 16 uid=bbbbb,ou=user,dc=local
ユーザaaaaaとbbbbbのouを変更します。
sudo ldapvi -Y EXTERNAL -h ldapi:/// -D cn=admin,dc=local -b ou=user,dc=local
15 uid=aaaaa,ou=user_1,ou=user,dc=local <-- ここ homeDirectory: /home/aaaaa uid: aaaaa cn: aaaaa sn: aaaaa loginShell: /bin/bash objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount gidNumber: 1000 uidNumber: 1000 userPassword: {SSHA}yyyyyyyyyyyyyyy shadowLastChange: 19234 16 uid=bbbbb,ou=user_2,ou=user,dc=local <-- ここ homeDirectory: /home/bbbbb uid: bbbbb cn: bbbbb sn: bbbbb loginShell: /bin/bash objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount gidNumber: 2000 uidNumber: 2000 userPassword: {SSHA}xxxxxxxxxxxxxx shadowLastChange: 19234
sssdの設定
sssd.confを編集します。
sudo cat /etc/sssd/sssd.conf
パソコン1で、ユーザaaaaaとbbbbbの両方を認証させたい場合は以下となります。
ldap_user_search_base = ou=user,dc=local
パソコン2で、ユーザaaaaaだけを認証させたい場合は以下となります。
ldap_user_search_base = ou=user_1,ou=user,dc=local
sssdを再起動します。
sudo systemctl restart sssd
Comments