OpenSUSE 12.2を実行しているボックスに、OpenLDAPとsssd
デーモンをインストールしました。ユーザー認証にはこれら2つのサービスを使用しています。最近、vhostsの新しいWebユーザーを動的に作成するスクリプトを作成しましたが、今は問題に対処しています。
Sssdは何らかのキャッシュを使用しているようで、getent passwd
の実行中にLDAPから削除されたユーザーが返されます。スクリプトでさらに必要になるため、最近作成されたユーザーがすぐに返されない場合があります(setfacl
およびchown
を使用して権限を設定するため)。
LDAPの再起動、sssd
またはnscd
は役に立ちません。また、sss_cache -U
でキャッシュをフラッシュすることもできません。 sssd
の設定でキャッシュを下げてみましたが、何の影響もないようです。
新しいユーザーをLDAPに追加した後、キャッシュを何らかの方法で明示的に更新するか、キャッシュを無効にする必要があります。
誰かが同様の問題を経験しましたか?
Manページ(sssd.conf)から:
NSS configuration options
These options can be used to configure the Name Service Switch (NSS)
service.
enum_cache_timeout (integer)
How many seconds should nss_sss cache enumerations (requests for
info about all users)
Default: 120
私は次のようなものを挿入します:
[nss]
enum_cache_timeout 10
(それが合うように見えるように秒を調整します)
sss_cache -E
をお試しください
または、sssdを停止し、/ var/lib/sss/db/*内のファイルを削除して、sssdを再起動してみてください
同様の問題を経験しました
getent passwd | grep <username>
とgetent passwd <username>
は同じ結果を返さないことに気づきました。
Straceを使用すると、getent passwd <username>
が"/var/lib/sss/mc/passwd"
のデータをチェックすることがわかりました
wheras getent passwd | grep <username>
は/var/lib/sss/pipes/nss
に接続し、そこからデータを取得します。
どちらのアプローチも異なるキャッシュにヒットするように見えるため、これは本当に混乱します。これらのキャッシュは、Sudo su - <username>
を実行すると更新されるようですが、それ以外の場合は何時間も有効であるようです。
実際の結果は、例えばsshアクセスは、LDAPから削除されてから数分後にはユーザーに対して機能しませんが、getent passwdは何時間もそれを表示し続けるので、このユーザーが実際に削除されているかどうかを確認するのは難しいです(クリアしないと)一部のキャッシュは常に手動で)
/etc/sssd/sssd.confにディレクティブを追加して、資格情報のキャッシュを無効にすることができます。
[domain/default]
cache_credentials = False
次に、コンソールコマンドを使用して、sssdが資格情報のキャッシュを使用していることを確認します。
# authconfig --test|grep credential
credential caching in SSSD is disabled
Sssdでキャッシュを完全に無効にすることはできません。
認証プロバイダーとしてのsssを完全に無効にして、必要な場合はLDAPに直接クエリを実行できます。
たとえば、/etc/nsswitch.conf
では、次のように行を変更します。
passwd: files sss
に
passwd: files ldap
/var/lib/sss/db/*
を削除すると、キャッシュを強制的に消去できますFedora 30/31でcache_credentials = Trueを指定すると、LDAPユーザーを使用してログインできなくなるエラーが発生することに注意してください。これに関連する文書化されたバグを見つけていないので、ここに書きます。