LDAPでアカウント管理を検証するためにまずはLDAPサーバを導入してみる。
$ uname -a
Linux centos9-1 5.14.0-319.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 25 19:53:58 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
$ sudo dnf install -y 389-ds-base
インスタンス定義の作成
[slapd]セクションでinstance_nameが定義されていない場合、localhostが適用される。インスタンスが作成されオブジェクト検索ができることをテストするためにサンプルも合わせて作成することにする(sample_entries = yes)。
$ tee instance.inf<<EOF
[general]
config_version = 2
[slapd]
root_password = YOUR_ADMIN_PASSWORD_HERE
[backend-userroot]
sample_entries = yes
suffix = dc=example,dc=jp
LDAPインスタンスを作成する
$ sudo dscreate from-file instance.inf
Starting installation ...
Validate installation settings ...
Create file system structures ...
Create self-signed certificate database ...
Perform SELinux labeling ...
Create database backend: dc=example,dc=jp ...
Perform post-installation tasks ...
Completed installation for instance: slapd-localhost
インスタンス起動状態を確認する
Activeがactive (running)にと出力されている事をが確認できた。
$ systemctl status dirsrv@localhost
● dirsrv@localhost.service - 389 Directory Server localhost.
Loaded: loaded (/usr/lib/systemd/system/dirsrv@.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/dirsrv@.service.d
└─custom.conf
Active: active (running) since Thu 2023-08-31 04:43:10 JST; 16min ago
Process: 20384 ExecStartPre=/usr/libexec/dirsrv/ds_systemd_ask_password_acl /etc/dirsrv/slapd-localhost/dse.ldif (code=exited, status=0/SUCCESS)
Process: 20389 ExecStartPre=/usr/libexec/dirsrv/ds_selinux_restorecon.sh /etc/dirsrv/slapd-localhost/dse.ldif (code=exited, status=0/SUCCESS)
Main PID: 20394 (ns-slapd)
Status: "slapd started: Ready to process requests"
Tasks: 29 (limit: 48922)
Memory: 130.7M
CPU: 2.804s
CGroup: /system.slice/system-dirsrv.slice/dirsrv@localhost.service
└─20394 /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-localhost -i /run/dirsrv/slapd-localhost.pid
オブジェクト検索のテスト
インスタンス作成時に合わせて作成したサンプルオブジェクトが色々と出力されているので導入できたようだ。
$ ldapsearch -x -LLL
dn: dc=example,dc=jp
objectClass: top
objectClass: domain
dc: example
description: dc=example,dc=jp
dn: ou=groups,dc=example,dc=jp
objectClass: top
objectClass: organizationalunit
ou: groups
dn: ou=people,dc=example,dc=jp
objectClass: top
objectClass: organizationalunit
ou: people
dn: ou=permissions,dc=example,dc=jp
objectClass: top
objectClass: organizationalunit
ou: permissions
dn: ou=services,dc=example,dc=jp
objectClass: top
objectClass: organizationalunit
ou: services
dn: uid=demo_user,ou=people,dc=example,dc=jp
objectClass: top
objectClass: nsPerson
objectClass: nsAccount
objectClass: nsOrgPerson
objectClass: posixAccount
uid: demo_user
cn: Demo User
displayName: Demo User
legalName: Demo User Name
uidNumber: 99998
gidNumber: 99998
homeDirectory: /var/empty
loginShell: /bin/false
dn: cn=demo_group,ou=Groups,dc=example,dc=jp
objectClass: top
objectClass: groupOfNames
objectClass: posixGroup
objectClass: nsMemberOf
cn: demo_group
gidNumber: 99999
dn: cn=group_admin,ou=permissions,dc=example,dc=jp
objectClass: top
objectClass: groupOfNames
objectClass: nsMemberOf
cn: group_admin
dn: cn=group_modify,ou=permissions,dc=example,dc=jp
objectClass: top
objectClass: groupOfNames
objectClass: nsMemberOf
cn: group_modify
dn: cn=user_admin,ou=permissions,dc=example,dc=jp
objectClass: top
objectClass: groupOfNames
objectClass: nsMemberOf
cn: user_admin
dn: cn=user_modify,ou=permissions,dc=example,dc=jp
objectClass: top
objectClass: groupOfNames
objectClass: nsMemberOf
cn: user_modify
dn: cn=user_passwd_reset,ou=permissions,dc=example,dc=jp
objectClass: top
objectClass: groupOfNames
objectClass: nsMemberOf
cn: user_passwd_reset
dn: cn=user_private_read,ou=permissions,dc=example,dc=jp
objectClass: top
objectClass: groupOfNames
objectClass: nsMemberOf
cn: user_private_read
確認が終わったインスタンスを削除してみる
$ sudo dsctl localhost remove --do-it
Removing instance ...
Completed instance removal
削除後のインスタンス起動状態を確認してみる
Activeがinactive (dead)となっているので、インスタンスは停止され削除されているようだ。
$ systemctl status dirsrv@localhost
○ dirsrv@localhost.service - 389 Directory Server localhost.
Loaded: loaded (/usr/lib/systemd/system/dirsrv@.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/dirsrv@.service.d
└─custom.conf
Active: inactive (dead)
$
インスタンス名を指定したインスタンス定義を作成してみる
[slapd]セクションにinstance_nameを定義することで任意のインスタンス名を指定できる。
$ tee instance.inf<<EOF
[general]
config_version = 2
[slapd]
instance_name = ldap1instance
root_password = YOUR_ADMIN_PASSWORD_HERE
[backend-userroot]
sample_entries = yes
suffix = dc=example,dc=jp
LDAPインスタンスを再度作成してみる
インスタンス名が「slapd-」とinstance_nameで指定した文字列「ldap1instance」で構成されるようだ。
$ sudo dscreate from-file instance.inf
Starting installation ...
Validate installation settings ...
Create file system structures ...
Create self-signed certificate database ...
Perform SELinux labeling ...
Create database backend: dc=example,dc=jp ...
Perform post-installation tasks ...
Completed installation for instance: slapd-ldap1instance
$
インスタンス起動状態を確認する
Active: active (running)であることを確認できた。
$ systemctl status dirsrv@ldap1instance
● dirsrv@ldap1instance.service - 389 Directory Server ldap1instance.
Loaded: loaded (/usr/lib/systemd/system/dirsrv@.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/dirsrv@.service.d
└─custom.conf
Active: active (running) since Thu 2023-08-31 05:17:26 JST; 53s ago
Process: 21063 ExecStartPre=/usr/libexec/dirsrv/ds_systemd_ask_password_acl /etc/dirsrv/slapd-ldap1instance/dse.ldif (code=exited, status=0/SUCCESS)
Process: 21068 ExecStartPre=/usr/libexec/dirsrv/ds_selinux_restorecon.sh /etc/dirsrv/slapd-ldap1instance/dse.ldif (code=exited, status=0/SUCCESS)
Main PID: 21073 (ns-slapd)
Status: "slapd started: Ready to process requests"
Tasks: 29 (limit: 48922)
Memory: 117.4M
CPU: 515ms
CGroup: /system.slice/system-dirsrv.slice/dirsrv@ldap1instance.service
└─21073 /usr/sbin/ns-slapd -D /etc/dirsrv/slapd-ldap1instance -i /run/dirsrv/slapd-ldap1instance.pid
$