OpenLDAPを活用して、Ubuntuのログインを管理する

環境

  • LDAPサーバ:Ubuntu22.04
  • LDAPクライアント:Ubuntu22.04

なお、LDAPサーバとLDAPクライアントは同一環境に構築する

LDAPサーバの構築

OpenLDAPのインストールと設定する

$ sudo apt install slapd ldap-utils
管理者パスワードを設定:ubuntu

# 自動設定の確認
$ sudo slapcat
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain
structuralObjectClass: organization
entryUUID: 727fc124-17e6-103e-801d-472c4fc6fea5
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20231115093816Z
entryCSN: 20231115093816.195194Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20231115093816Z

# 初期設定
$ sudo dpkg-reconfigure slapd
# DNSドメイン名、組織名、LDAPサーバーの管理者パスワード、slapdを削除する時にLDAPデータベースもあわせて削除するか、今ある古いデータベースを移動するか等、ダイアログが表示されるので適当に入力

# 設定内容の確認
$ sudo slapcat
dn: dc=6GI-DNS
objectClass: top
objectClass: dcObject
objectClass: organization
o: 6GI-org
dc: 6GI-DNS
structuralObjectClass: organization
entryUUID: 6253fc7e-17e7-103e-8f88-831c89cecf2e
creatorsName: cn=admin,dc=6GI-DNS
createTimestamp: 20231115094458Z
entryCSN: 20231115094458.561534Z#000000#000#000000
modifiersName: cn=admin,dc=6GI-DNS
modifyTimestamp: 20231115094458Z

組織単位の追加する

以下のファイルを作成する

$ vim add_ou.ldif
(以下を追記)
dn: ou=people,dc=6GI-DNS
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=6GI-DNS
objectClass: organizationalUnit
ou: groups

ldapadd コマンドを実行して、エントリ追加する

$ ldapadd -x -D cn=admin,dc=6GI-DNS -W -f add_ou.ldif
Enter LDAP Password: (前述で設定した管理者パスワードを入力)
adding new entry "ou=people,dc=6GI-DNS"

adding new entry "ou=groups,dc=6GI-DNS"

ユーザーとグループの追加する

まず、ユーザーの初期パスワード生成する。パスワードはtestとする

$ slappasswd
New password: (「test」と入力)
Re-enter new password: (同上)
{SSHA}rVEU9SRvCBlVCDJx+FTPdauUeStELs2r

このハッシュ値を使って次のようなLDIFファイルを作る

$ vim add_u11000.ldif
(以下を追記)
dn: cn=u11000,ou=groups,dc=6GI-DNS
objectClass: posixGroup
cn: u11000
gidNumber: 11000

dn: uid=u11000,ou=people,dc=6GI-DNS
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Test Name
sn: Test
displayName: Test Name
givenName: Name
title: staff
uid: u11000
userPassword: {SSHA}rVEU9SRvCBlVCDJx+FTPdauUeStELs2r
gidNumber: 11000
homeDirectory: /home/u11000
uidNumber: 11000
gecos: Uchida Ryo
loginShell: /bin/bash
shadowExpire: -1
shadowInactive: 99999
shadowMax: 99999
shadowMin: 0
shadowWarning: 14

作成したLDIFファイルを活用して、エントリを追加する

$ ldapadd -x -D cn=admin,dc=6GI-DNS -W -f add_u11000.ldif
Enter LDAP Password: (前述で設定した管理者パスワードを入力)
adding new entry "cn=u11000,ou=groups,dc=6GI-DNS"

adding new entry "uid=u11000,ou=people,dc=example,dc=com"
ldap_add: Server is unwilling to perform (53)
        additional info: no global superior knowledge

エントリを確認する

$ ldapsearch -x -LLL -D cn=admin,dc=6GI-DNS -b dc=6GI-DNS -W
Enter LDAP Password: (前述で設定した管理者パスワードを入力)
dn: dc=6GI-DNS
objectClass: top
objectClass: dcObject
objectClass: organization
o: 6GI-org
dc: 6GI-DNS

dn: ou=people,dc=6GI-DNS
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=6GI-DNS
objectClass: organizationalUnit
ou: groups

dn: cn=u11000,ou=groups,dc=6GI-DNS
objectClass: posixGroup
cn: u11000
gidNumber: 11000

LDAPクライアントの構築

必要なパッケージのインストールする

$ sudo apt install libnss-ldapd libpam-ldapd

インストール中に表示されたダイアログの設定は以下とした。

項目 設定内容
LDAPサーバーのURI ldap://localhost
LDAPサーバーの検索ベース dc=6GI-DNS
nslocdの設定 none
TLSの使用 No
設定する名前サービス passwd, group, shadow

もし、設定にミスした場合は以下のコマンドで再度に設定が可能である

# libpam-ldapdを再設定する場合
$ sudo dpkg-reconfigure nslcd
# libnss-ldapdを再設定する場合
$ sudo dpkg-reconfigure libnss-ldapd

ホームディレクトリの自動生成の設定を行う。

$ sudo vim /etc/pam.d/common-session
(末尾に追加)
+session optional pam_mkhomedir.so skel=/etc/skel umask=0002

 # サービス再起動
$ sudo systemctl restart nscd.service nslcd.service

作成したユーザIDでLDAPクライアントからLDAPサーバにログインする

$ ssh u11000@localhost
u11000@localhost's password: (「test」と入力)
# loginユーザ確認
$ whoami
u11001

これでLDAPサーバで作成したIDで、LDAPクライアントからログインできたことを確認した。

参考

zenn.dev

server-network-note.net