pam (2015-12-24)
PAM は Pluggable Authentication Modules for Linux のことで、認証周りの設定に使います。
書式はman pam.d で確認できます。とはいえ、この英語のマニュアル読んでもいまいちよく分かりません。
備忘録として具体的な記載例をいくつかメモします。
以下、例としてログイン認証処理から一部分を抜粋
$ cat /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so open
ログインした時の認証処理で、以下の順番に検証されていきます。
1行目 | auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so | /etc/securetty に定義されたttyからのみ root ログインを可能にする。 [user_unknown~] の部分は後述。 |
2行目 | auth include system-auth | ユーザ認証をsystem-authで実行する |
3行目 | account required pam_nologin.so | /etc/nologin があればrootのみを許可する required はこの行で判定NGの場合にログイン失敗となるが、3行目以降へ処理は続行されるという命令 |
4行目 | account include system-auth | ユーザアカウントの有効性をsystem-authで検証する |
5行目 | password include system-auth | パスワードの有効性をsystem-authで検証する |
6行目 | session required pam_selinux.so open | 接続時にselinuxを実行する |
書式構成は
<管理タイプ> <コントロール> <モジュール(path指定)> <モジュールへの引数>
1列目の<管理タイプ>で何を管理するのかを指定。4タイプあります(account/auth/passwd/session)
2列目の<コントロール>は
<この行の戻り値=実行するアクション> の書式で指定。アクションの内容は以下。
ignore | この行の戻り値を無視する |
bad | この行で処理失敗となったときは、後に続く行の処理結果についても失敗とみなす |
die | badと同様で、かつその行で終了となる |
ok | 前の行で成功であった場合は、この行の戻り値で上書きする |
done | okと同様で、かつその行で終了となる |
reset | これまでの状態をリセット、次の行からやり直す |
これを踏まえて、<required>などは、以下の内容を省略したものになる。
required | [success=ok new_authtok_reqd=ok ignore=ignore default=bad] | この行で失敗したら以降の行の処理結果にかかわらず最終的に認証失敗とみなす |
requisite | [success=ok new_authtok_reqd=ok ignore=ignore default=die] | この行で失敗したら、認証失敗として即終了する |
sufficient | [success=done new_authtok_reqd=done default=ignore] | この行で成功したら、認証成功として即終了する |
optional | [success=ok new_authtok_reqd=ok default=ignore] | この行での処理結果は問わない |
include | - | 管理タイプに関する処理をモジュールから読込む、処理結果は読込み先モジュールの内容次第 |
3列目の各モジュール名は「man system-auth」とかで使い方の詳細が見れるようです。割愛。
例その2。/etc/pam.d/su より抜粋。
suコマンドは root ユーザで実行した場合(pam_rootok)、認証OKとして終了することになる(sufficient)。その場合は二行目のsystem-authが実行されない。
auth sufficient pam_rootok.so
auth include system-auth
例その3。/etc/pam.d/system-auth より抜粋。
パスワード強度を検証して(prm_cracklib)、判定NGの場合はエラー終了とする。(requisite)
つまり、パスワード変更とかで3回怒られた場合には変更されずに(pam_unixには行かずに)終了するということ。
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
あとは、PAM認証はlibpamやlibpam_miscを読込むことで、
アプリケーションから pam_start() などの関数を使うことができるようですが、
手元の環境に pam_misc.h 等が見当たらないので、今回はここまで。