OpenLDAPでユーザ認証をツリー構造にする方法

Linux

はじめに

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