前回及び前々回の記事において、OpenLDAPによるLDAPサーバ構築とLDAPS有効化を実現できた。今回は、実際にOpenLDAPサーバーに対してLDAPクライアントから認証を行うことにする。
RHELではLDAPクライアントとして、SSSD (System Security Services Daemon) と呼ばれるソフトウェアを利用できる。SSSDを使うことで、OpenLDAPにて登録したユーザを用いてOSへのログインを行うことができる。
本記事では、LinuxのSSSDを使ってOpenLDAPサーバと認証連携する手順を記載する。
- OpenLDAP入門① (OpenLDAP初期構築手順)
- OpenLDAP入門② (OpenLDAPでLDAPSを有効化する)
- OpenLDAP入門③ (LinuxのSSSDにてOpenLDAPと認証連携する) ←★本記事
環境
RHEL 7にてOpenLDAPサーバ (LDAPS有効化済み) を構築済みの環境において、同じくRHEL 7にてSSSDの設定を行い認証連携を行う。なお、RHEL 8においても一部手順が異なるだけで、ほぼ本記事に記載の手順でSSSDの設定は可能となる (手順が異なる箇所については本記事でも言及する)。
- LDAPクライアントOS : Red Hat Enterprise Linux 7.7
- OpenLDAPサーバOS : Red Hat Enterprise Linux 7.7
- OpenLDAP : 2.4.44
OpenLDAPのドメイン等の情報は以下とする。
設定項目 | 設定値 |
---|---|
ドメイン | dc=example,dc=com |
RootDN | cn=Manager,dc=example,dc=com |
OU | ou=group,dc=example,dc=com |
グループ | cn=ldapgrp,ou=group,dc=example,dc=com |
ユーザ1 | uid=user01,ou=group,dc=example,dc=com |
ユーザ2 | uid=user01,ou=group,dc=example,dc=com |
SSSD設定手順
1. SSSDをインストール
yum
を用いてSSSDをインストールする。openldap-clients
はLDAP通信が問題なくできることの確認のためにインストールしておく。oddjob-mkhomedir
はLDAP認証したユーザのホームディレクトリを自動生成するサービスとなる。
# yum install openldap-clients sssd sssd-ldap oddjob-mkhomedir -y
2. OpenLDAPサーバのサーバ証明書をコピー
LDAPSを使用する場合は、OpenLDAPサーバのサーバ証明書を登録しておく必要がある。前回記事で作成したldaps.crt
を以下の通りコピーして配置する。
# cp ldaps.crt /etc/openldap/certs/core-dirsrv.ca.pem
3. OpenLDAPクライアントから認証情報を取得できることを確認
SSSDの設定を行う前に、ldapsearch
コマンドでOpenLDAPサーバと問題なく通信できることを確認する。
OpenLDAPのクライアントの設定を行う前にldapsearch
コマンドを実行すると、Can't contact LDAP server
のように通信に失敗することがわかる。
# ldapsearch -x -D "uid=user01,ou=group,dc=example,dc=com" -w password -b "dc=example,dc=com" -H "ldaps://192.168.11.117/"
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
以下の通りOpenLDAPのクライアントの設定を追加する。
# cat << EOF >> /etc/openldap/ldap.conf
URI ldap://192.168.11.117/
BASE ou=group,dc=example,dc=com
TLS_CACERT /etc/openldap/certs/core-dirsrv.ca.pem
EOF
再度ldapsearch
コマンドを実行し、以下の通り登録されているグループやユーザの情報が出力されればOKとなる。
# ldapsearch -x -D "uid=user01,ou=group,dc=example,dc=com" -w password -b "dc=example,dc=com" -H "ldaps://192.168.11.117/"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# example.com
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.
# group, example.com
dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
~(以下略)~
4. SSSDを設定
それではSSSDの設定を行う。SSSDの設定ファイルはsssd.conf
となるが、このファイルはデフォルトで存在しないため、以下の通り一から作成する。
# cat << EOF >> /etc/sssd/sssd.conf
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://192.168.11.117/
ldap_search_base = ou=group,dc=example,dc=com
ldap_id_use_start_tls = True
cache_credentials = True
ldap_tls_cacertdir = /etc/openldap/certs
ldap_tls_cacert = /etc/openldap/certs/core-dirsrv.ca.pem
ldap_tls_reqcert = hard
[sssd]
services = nss, pam, autofs
domains = default
[nss]
homedir_substring = /home
EOF
この設定ファイルは以下の通りパーミッションを設定することがセオリーのようなので、以下コマンドで設定しておこう。
# chmod 600 /etc/sssd/sssd.conf
# chown root:root /etc/sssd/sssd.conf
5. SSSDの有効化
SSSDの設定ファイルを作成したら、認証プロバイダーとしてSSSDを使用できるようにする。今回はRHEL 7がクライアントとなるため、authconfig
コマンドにて設定する。RHEL 8の場合はauthselect
コマンドを利用するため注意すること。
以下、RHEL 7とRHEL 8の設定コマンドを記載する。
RHEL 7の場合
# authconfig --update --enablesssd --enablesssdauth --enablemkhomedir
↓★確認コマンド。pam_sssとpam_mkhomedirがenableになっていることを確認
# authconfig --test | egrep 'pam_sss|pam_mkhomedir'
pam_sss is enabled by default
pam_mkhomedir or pam_oddjob_mkhomedir is enabled (umask=0077)
RHEL 8の場合
# authselect select sssd with-mkhomedir --force
プロファイル "sssd" が設定されました。
以下の nsswitch マップはプロファイルで上書きされます:
- passwd
- group
- netgroup
- automount
- services
Make sure that SSSD service is configured and enabled. See SSSD documentation for more information.
- with-mkhomedir is selected, make sure pam_oddjob_mkhomedir module
is present and oddjobd service is enabled
- systemctl enable oddjobd.service
- systemctl start oddjobd.service
6. SSSDを再起動
ここで一度SSSDを再起動して、各種設定を反映させる。
# systemctl restart sssd oddjobd
# systemctl enable sssd oddjobd
今回の手順では問題は発生しないはずだが、SSSD再起動時に、以下のようなstatus=4/NOPERMISSION
のエラーが発生することがある。
# systemctl restart sssd oddjobd
Job for sssd.service failed because the control process exited with error code. See "systemctl status sssd.service" and "journalctl -xe" for details.
# systemctl status sssd -l
~(中略)~
10月 24 06:26:21 localhost.localdomain systemd[1]: Starting System Security Services Daemon...
10月 24 06:26:22 localhost.localdomain systemd[1]: sssd.service: main process exited, code=exited, status=4/NOPERMISSION
10月 24 06:26:22 localhost.localdomain systemd[1]: Failed to start System Security Services Daemon.
10月 24 06:26:22 localhost.localdomain systemd[1]: Unit sssd.service entered failed state.
10月 24 06:26:22 localhost.localdomain systemd[1]: sssd.service failed.
このエラーの原因はsssd.conf
が正しく記載されていないことが原因となる。authconfig
コマンドにて、他オプションを指定して実行した場合は、sssd.conf
の一部設定が消えることがあるようなので、再度記載に問題がないか確認したうえで、サービス再起動をすること。私の遭遇した事象ではdomains
の設定が本来default
であるところが空白になっており、サービス再起動に失敗していた。
[sssd]
services = nss, pam, autofs
domains = ←★本来ここがdefaultになっている必要あり
7. LDAP登録ユーザにてログイン確認
最後に実際にSSHを用いてLDAP登録ユーザでログインできることを確認する。
Tera Termを用いてLDAPに登録されているuser01
でログインする。なお、ドメイン名 (本環境ではexample.com
) は不要となる。
特に設定に問題がなければ、以下の通りホームディレクトリが自動作成され、ログインに成功する。UIDやGIDを確認するとOpenLDAPサーバにて登録された番号となっていることも確認できる。
Creating home directory for user01.
Last login: Sat Oct 23 20:41:07 2021 from t1081w219.intrat.local
[user01@localhost ~]$ pwd
/home/user01
[user01@localhost ~]$ id
uid=10001(user01) gid=10000(ldapgrp) groups=10000(ldapgrp) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
以上で、SSSDを用いてにてOpenLDAPサーバと認証連携する手順は完了となる。
0 件のコメント:
コメントを投稿