はじめに
ラズパイで389-ds環境を作った。
今回は、クライアント側を作っていく。
クライアント側のサーバは、AlmaLinux9.2
。
各種インストール
まずはパッケージインストール。
# dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir sssd-tools
インストールパッケージの確認
# dnf list --installed | grep -e openldap -e sssd
openldap.x86_64 2.6.3-1.el9 @baseos
openldap-clients.x86_64 2.6.3-1.el9 @baseos
openldap-compat.x86_64 2.6.3-1.el9 @baseos
sssd.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-ad.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-client.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-common.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-common-pac.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-ipa.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-kcm.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-krb5.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-krb5-common.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-ldap.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
sssd-proxy.x86_64 2.9.1-4.el9_3.1.alma.1 @baseos
LDAP(Lightweight Directory Access Protocol)
ディレクトリサービスへ接続するためのプロトコル。
LDAPサーバー用のソフトウェアと、クライアント向けのパッケージがある。
今回使っているのはクライアント向けの方。
LDAP設定
初期設定ファイルはバックアップを取っておく。
# cp -p /etc/openldap/ldap.conf /etc/openldap/ldap.conf.org
編集する。
# vi /etc/openldap/ldap.conf
編集後の差分比較。
# diff /etc/openldap/ldap.conf.org /etc/openldap/ldap.conf
8,9c8,9
< #BASE dc=example,dc=com
< #URI ldap://ldap.example.com ldap://ldap-master.example.com:666
---
> BASE ou=people,dc=example,dc=com
> URI ldap://192.168.0.254/
13c13
< #DEREF never
---
> DEREF always
28a29
> TLS_REQCERT = never
DEREF
エイリアスの実名参照をどのように行うかを指定。
設定 | 説明 |
---|---|
never | 名参照しない。(デフォルト) |
searching | 検索で実名参照する。 |
finding | 検索のためのベースオブジェクトを 探すときのみ実名参照する。 |
always | 常に実名参照する。 |
TLS_REQCERT
TLS セッション開設時にサーバ認証をどうするかを指定。
設定 | 説明 |
---|---|
never | サーバ証明書を要求しないし、チェックもしない。 |
allow | 証明書を要求するが、なければ正常に進む。証明書があって不正あっても無視して進める。 |
try | 証明書を要求するが、なければ正常に進む。証明書があって不正があればセッションを終了する。 |
demand | hard |
接続テスト
# ldapsearch -H ldap://192.168.0.254 -x -w password -D cn=Manager -b ou=people,dc=example,dc=com -LLL
dn: dc=example,dc=com
objectClass: top
objectClass: organizationalunit
ou: people
dn: uid=app-user,ou=people,dc=example,dc=com
uid: app-user
cn: app-user
objectClass: account
objectClass: posixAccount
objectClass: top
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/app-user
userPassword:: e1BCS0RGMl9TSEEyNTZ9QUFBSUFQVjBNd002K1BESXIrTFpHdkdGaTc3cXN2NzN
YbWczVE5FSG10YjFYUzA0T1JuL2EyMjZaVjVnVmNWM3psODlIVEdGQ1o4NlV3NERPQ1NtMGdjb3dS
WnJRSGJWS1VQNGZHQVNmSngrYUdNS05GWXJvY3dEQkFCcTExdUw2ZVlheC9pRm8ydXBZNXp5ZzdlU
jBpL2dqNlQvMUI5cGlpQ1piamxRRnlmM0lORTJPRnNqaGorWTEzTnQxVXZLTER3UDRLeS8vZzdOUn
prYnRkTXE0R0lmWXUzT2k1V3JBd2g2a0VwQml5ZEtOcXVZODYyb2E0YlkvOUxsUGhWWTVSeExJTmF
uV3VrdGl5K1A5K1JNdklOSjFHdE0vbkdrTWJYc2IvMlFxRWpvZzlUZmVwUHY1blkwTFBDUHpvVHFx
REh4MExYTW5FeDh3UmwveWpjYisrUVV1aFBxZ0s1SzZNSlJsYys1SXpPUGxJWDBRckowL21uYVBTQ
jFzbFNKZytQbGd2MGtUSThya0c1VzdQSGdqeHg4RXYzVlJiRHRibXVzdzFvVzU0TEZPKzNU
dn: cn=app-group,ou=people,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: app-group
gidNumber: 1000
SSSD(System Security Services Daemon)
- リモートディレクトリと認証メカニズムにアクセスするシステム・サービス。
- ユーザー認証、アカウント管理、名前解決、ポリシー管理などのセキュリティ機能を提供する。
- SSSDクライアントがリモートプロバイダーに接続して、ID・認証情報を取得、キャッシュを行う。ローカルシステムのユーザーはキャッシュされたアカウント情報を使用して認証を行う。オフラインでも使える。(キャッシュ有効の場合)
- SSSDはローカルでユーザーアカウントを作成しない。ユーザーが初回ログインしたときに、クライアントはリモートプロバイダーに接続する。なので、ユーザーは最低でも1度はログインしていないといけない。
- SSSDクライアントは、LDAP、IdM(Identity Manager)、AD(ActiveDirectory)、Kerberosレルムなどの外部IDおよび認証プロバイダーに接続ができる。
(参考)IdM(Identity Manager)
RHELに付属するID管理ソフトウェアで、LDAPおよびKerberosによる認証を行う。
WindowsでいうところのActiveDirectoryのようなもの。
アップストリームプロジェクトは、FreeIPA。
(参考)nslcd,nscd
一昔前は、LDAP接続を行うnslcd(Name Service LDAP Connection Daemon)
と、キャッシュを行うnscd(Name Service Cache Daemon)
を使っていたようだが、SSSDへの移行が推奨されているようである。
設定ファイル編集
IDおよび認証プロバイダーは、SSSD設定ファイル/etc/sssd/sssd.conf
で設定する。
# vi /etc/sssd/sssd.conf
[domain/default]
id_provider = ldap
auth_provider = ldap
autofs_provider = ldap
chpass_provider = ldap
cache_credentials = True
ldap_uri = ldap://192.168.0.254/
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/openldap/certs
ldap_tls_reqcert = never
ldap_search_base = ou=people,dc=example,dc=com
ldap_search_timeout = 3
ldap_network_timeout = 3
ldap_deref = always
enumerate = True
[sssd]
services = nss, pam, autofs
domains = default
[nss]
homedir_substring = /home
設定 | 内容 |
---|---|
id_provider | 使用するデータバックエンドを指定 |
auth_provider | 認証プロバイダーを指定(デフォルト値はid_providerの値) |
cache_credentials | キャッシュにユーザー認証情報を保存するかどうか(デフォルトはFalse) |
chpass_provider | パスワード変更要求をどのデータベースで処理するのかを指定 |
ldap_id_use_start_tls | SSL/TLS通信を行うかどうか |
ldap_tls_cacert | 使用するルートCA証明書ファイルを指定 |
ldap_tls_cacertdir | 使用するルートCA証明書ファイルが格納されたディレクトリを指定したいときは、ldap_tls_cacert の代わりにこちらを使用 |
ldap_tls_reqcert | 証明書をどのように検証するか neverは要求もチェックもしない |
enumerate | getent passwd(ユーザーやグループの一覧を表示するコマンド)に対応させる |
services | 使用するサービスを指定 |
domains | SSSDではユーザ情報を保持するデータベースのことをdomainと呼ぶ 複数定義可能 |
(参考)
今回は、IDプロバイダーの設定をする。
-
IDプロバイダー(ユーザー情報を提供)
[domain/name of the domain]セクションのid_providorオプションを使用して設定。 -
認証プロバイダー(認証要求を処理)
[domain/name of the domain]セクションのauth_providerオプションを使用して設定。 -
アクセス制御プロバイダー(認可要求を処理)
[domain/name of the domain]セクションのaccess_providerオプションを使用して設定。 -
プロキシープロバイダー
SSSDと、SSSDが使用できないリソースとの間で中間リレーとして機能。
パーミッション変更しておく。
# chmod 600 /etc/sssd/sssd.conf
# chown root:root /etc/sssd/sssd.conf
SSSD有効化
一昔前は、authconfig
とやらで設定していたようだが、今は非推奨になっているらしい。
その代わり、authselect
を使って設定する。
# authselect select sssd with-mkhomedir
バックアップは /var/lib/authselect/backups/2024-01-01-10-14-15.1x1fd2 に保存されました
プロファイル "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 and active
- systemctl enable --now oddjobd.service
oddjobデーモン起動&自動起動設定
oddjobは、LDAP認証したユーザのホームディレクトリを自動生成するサービス。
# systemctl start oddjobd
# systemctl enable oddjobd
SSSD起動
起動もしくは再起動させる。
# systemctl srart sssd
# systemctl resrart sssd
LDAPサーバーとの接続確認
sssctl
は、sssd-tools
に含まれる。
Online statusがOnlineなら正常。
# sssctl domain-status default
Online status: Online
Active servers:
LDAP: not connected
Discovered LDAP servers:
- 192.168.0.254
うまく起動しなかったらログ読んで調べるといいと思う。
# less /var/log/sssd/sssd_default.log
idコマンドでユーザーを引けるかどうか確認
idコマンドでユーザーを引けるかどうか確認する。
匿名バインドを無効化してるとうまく引けない気がする。
# id demo_user
uid=99998(demo_user) gid=99998 groups=99998
# getent passwd | grep demo_user
demo_user:*:99998:99998:Demo User:/var/empty:/bin/false
参考にしたサイト