2016年9月2日金曜日

pam_unix.so が NSS 見てる

以下、完全に自分のためのメモ。

恥ずかしながら、PAM と NSS は独立しているのだとばかり思いこんでいた。
例えば、PAM で認証して OK だったら NSS から passwd 情報等持ってくる的な..

が、ふと、
独立してるなら pam_mkhomedir なんかはどうやってホームディレクトリ取得してるん?NSS 経由していないん?
とか、
agetty でログインしたとき、パスワード入れる前に知らんユーザだと蹴られるよね、
あれって NSS を最初に持ってきてるんじゃないん?

とか、思い始め、あ、これもしかして間違って覚えてる?となった。

簡単な実験をしてみた。sss で LDAP 認証可能な Linux マシンにおいて、sssd.conf で
sssd_nss を起動しないよう(sssd_pam だけ起動する)に設定。で LDAP にいるユーザ
で ssh から認証をかけてみる。
自分の予想的には、パスワード認証は通るけど uid や loginShell が取れなくて蹴られる
的な動きをするんだろうと /var/log/secure を見てたら、違う。

  Failed password for invalid user user1

などと、ユーザがいない時と同じエラー。じゃぁ、/etc/pam.d/password-auth で
pam_unix.so や pam_env や pam_localuser (今回は関係ないけど)を auth からコメント
アウトしてみたが、何も変わらず。これはおそらく ssh が独自に PAM の前に NSS を見
てるんじゃ無かろうかと(推測)。

じゃぁ、getty で試してみるということで。とりあえず sssd.conf は pam と nss の
サービスを起動するように設定。/etc/nsswitch.confで、passwd, group, shadow から
sss を取り去り nss だけ LDAP 通信しないようにしてみる。もちろん /etc/pam.d/system-auth
は、auth pam_sss と account pam_sss の設定は残してあって、他は細工してない。

すると、agetty のログインプロンプトで ID 入力して Enter しただけで
「Login incorrect 」 のエラーが。パスワードすら入れさせてもらえない。
/var/log/secure には以下のエラーが。

 login: FAILED LOGIN 1 FROM tty1 FOR (unknown), User not known to the underlying authentication module


じゃぁ、この状態で /etc/pam.d/system-auth をいじってみようと。まず、auth の
pam_unix.so の行をコメントアウトしてみる。んで agetty からログイン。
するとですね、ログインは失敗するものの、/var/log/secure の中には auth の pam_sss
がちゃんと認証してくれたメッセージが。


 Sep  2 03:05:34 client login: pam_sss(login:auth): authentication success; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=user1
 Sep  2 03:05:34 client login: pam_sss(login:auth): authentication success; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=user1
Sep  2 03:05:34 client login: pam_unix(login:account): could not identify user (from getpwnam(user1))
Sep  2 03:05:34 client login: User not known to the underlying authentication module

system-auth から auth の pam_unix.so 行をコメントして上記メッセージが出るよう
になったということは、やっぱり pam_unix.so が NSS を見てるんだなと 90% くらい
確信。んで、/etc/nsswitch.conf の passwd, group, shadow に sss を戻してみる。
するとやっぱり問題なく認証された。

ちなみに、system-auth の auth と account の pam_unix.so をコメントアウトして
また nsswitch.conf から sss を排除してやってみると以下のようなエラー。

Session setup problem, abort.

/var/log/secure には以下のようなエラーが。

Sep  2 03:13:05 lient login: pam_sss(login:auth): authentication success; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=user1
Sep  2 03:13:05 client login: Invalid user name "user1" in main:1229. Abort.

これこれ。最初に推測してた動き。pam_unix.so によるユーザ存在チェックが無ければ、
ちゃんと認証してから session で蹴られてる。

というわけで、おそらく pam_unix.so は NSS を介してユーザ存在チェックをしている
ということで(独自実装ではないということで)。












0 件のコメント:

コメントを投稿