2019/02/27(Wed)いつの間にかLDAP認証ユーザーのuidを見失ってsudoやgitが動かない
2019/02/27 2:05
環境
$ 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を誤って変更してしまい、その変更が間違ってキャッシュされておかしくなった可能性が考えられる。
参考文献
CentOS 7.5 cause: sudo: unknown uid 10180: who are you? - CentOS現象はこれと全く同じだが、authconfigの再適用をやってみても結果変わらず…。
651028 ? Cannot find username after a while - LDAP id
ここからヒントを得た。