2019/02/27(Wed)いつの間にかLDAP認証ユーザーのuidを見失ってsudoやgitが動かない

2019/02/27 2:05 Software::Linux
Linuxのユーザー管理をLDAPに委譲する場合、sssd(System Security Services Daemon)を使用してリンクさせるのが一般的だが、特定の環境において正しく設定したにもかかわらず、uidが引けたり引けなかったりしてsudoやgit, crontab等の実行に失敗することがあった。その解決メモ。

環境

$ cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

$ uname -r
4.15.9-1.el7.elrepo.x86_64

$ rpm -q sssd-client
sssd-client-1.16.2-13.el7_6.5.x86_64

現象

SSH等でのログインは問題無くできるが、gitやcrontab, sudoなど、uidを参照するアプリケーションを使用すると、LDAP上のuidが参照できないというエラーで異常終了することがある。
感覚的にシェルを開いた直後は問題無いが、screenで開きっぱなしのシェルに再びアタッチしたときや、ログインしてしばらく経ったログインシェルにコマンドを入力したときに発症した。
$ git fetch --prune
No user exists for uid 5000
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

$ crontab -e
crontab: your UID isn't in the passwd file.
bailing out.

$ sudo su -
sudo: unknown uid 5000: who are you?
不思議なのは、この状態のままidコマンドで自身の存在を確かめると、正しく結果を引くことができ、それから5分間だけはこれらのコマンドも機能する点である。
$ id kero
uid=5000(kero) gid=100(staff) groups=100(staff),985(vboxusers),983(docker),...

$ git fetch --prune
From ssh://.....
remote: Counting objects: 288, done.
remote: Compressing objects: 100% (224/224), done.
remote: Total 288 (delta 138), reused 0 (delta 0)
Receiving objects: 100% (288/288), 103.24 KiB | 510.00 KiB/s, done.
Resolving deltas: 100% (138/138), done.
...

$ crontab -e
crontab: no changes made to crontab

$ sudo su -
[sudo] password for kero:^C


...5分後...

$ crontab -e
crontab: your UID isn't in the passwd file.
bailing out.

原因と対処法

OSの再起動では解消せず。
どうやら、sssdのキャッシュDB /var/lib/sss/db/cache_default.ldb *1 が壊れているようで、キャッシュが正しく動作していない様子。
問題のないVMでは2MB程度だったのに対し、この問題が起こっているVMは5MBほどと肥大化していた。
# mv /var/lib/sss/db/cache_default.ldb /var/lib/sss/db/cache_default.ldb.bak

# systemctl restart sssd
上記のようにファイルを別の場所に移動し、sssdを再起動して問題解消。

シェルを開いた後、5分経ってidコマンドを打たなくてもコマンドが複数回 動作したことにより確認した。


真の原因としては、この問題が発症する少し前、一時的にLDAP管理者が該当ユーザのuidを誤って変更してしまい、その変更が間違ってキャッシュされておかしくなった可能性が考えられる。


*1 : ファイル名は環境によってcache_XXXXXX.ldbのように違うことがある

参考文献

CentOS 7.5 cause: sudo: unknown uid 10180: who are you? - CentOS
現象はこれと全く同じだが、authconfigの再適用をやってみても結果変わらず…。

651028 ? Cannot find username after a while - LDAP id
ここからヒントを得た。