PAMとはPluggable Authentication Modulesの略でプログラムのユーザ認証を一括で管理する仕組みです。
以前のUNIX環境は/etc/passwdを参照するだけでユーザ認証が出来ましたが、技術が進むにつれてshadowパスワードやldapなどのデータベースによる認証などユーザ認証方式が多様化してきました。
そこで生まれたのがPAMです。PAMのAPIを利用するプログラムはユーザー認証を意識する必要が無くなり、互換性を維持することができます。プログラムに手を付けずPAM側だけで認証プロセスを変更できるため柔軟な運用管理が可能となります。
PAMの設定
設定ファイル郡は/etc/pam.d/にほとんどがプログラムと同名で格納されています。
accountsservice common-auth cups-daemon newusers samba chfn common-password lightdm other sshd chpasswd common-session lightdm-autologin passwd su chsh common-session-noninteractive lightdm-greeter polkit-1 sudo common-account cron login ppp
例としてsshdを覗いてみるとこうなってます。
@include common-auth account required pam_nologin.so @include common-account session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close session required pam_loginuid.so session optional pam_keyinit.so force revoke @include common-session session optional pam_motd.so motd=/run/motd.dynamic noupdate session required pam_limits.so session required pam_env.so user_readenv=1 envfile=/etc/default/locale session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open @include common-password
pam設定ファイルの構文
タイプ コントロール モジュールパスと引数
タイプ
- auth
- ユーザ認証を行う。
- account
- アカウント情報を検証する(アクセスが許可されているか否か,パスワード期限など)
- password
- パスワードの設定・変更時に行う処理
- session
- ユーザ認証の前後に行う処理
コントロール
ステータスは基本的に許可、拒否、無視です。
- requisite
- 失敗した時点で認証を拒否する。(どこで拒否されたか分かる)
- required
- 失敗してもすぐに拒否せず処理をすべて完了した時点で認証を拒否する。(どこで拒否されたか分からない)
- sufficient
- 成功した場合認証を許可する。失敗した場合引き続き評価を行う。
- optional
- optionalが指定されているモジュールのステータスは基本無視されるが、同じタイプ全てのモジュールが無視された場合optionalが指定されたモジュールが評価される。
モジュールパスと引数
どのモジュールを使うのかを指定。基本ファイル名だけでおk。
以下はよく使われるモジュールの列挙です。
- pam_deny.so 常に拒否する
- pam_nologin.so /etc/nologinがあればroot以外のログインを拒否する
- pam_rootok.so rootユーザによるアクセスを許可する
- pam_unix.so パスワード認証を行う
- pam_warn.so 認証時とパスワード変更時にログ出力する
- pam_wheel.so root権限でのアクセスをwheelグループのみに制限する
- pam_loginuid ログイン時のUIDを処理に返す
- pam_limits.so リソースを制限する
- pam_securetty.so /etc/securettyに記述された端末のみrootログインを許可する
- pam_craclib.so パスワード辞書ファイルに乗っているパスワードであれば拒否する
- pam_motd.so motdファイルを表示する motd=/etc/motd
- pam_faildelay.so 失敗時のディレイを設定する delay=microsecond
PAM設定ファイルの例
/etc/pam.d/loginを見てみましょう。
auth optional pam_faildelay.so delay=3000000 auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so auth requisite pam_nologin.so session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close session required pam_env.so readenv=1 session required pam_env.so readenv=1 envfile=/etc/default/locale @include common-auth auth optional pam_group.so session required pam_limits.so session optional pam_lastlog.so session optional pam_motd.so motd=/run/motd.dynamic noupdate session optional pam_motd.so session optional pam_mail.so standard @include common-account @include common-session @include common-password session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
簡単に読んでみると
- ログインに失敗した場合3秒のディレイ
- /etc/securettyに記述された端末であればrootログインを許可
- /etc/nologinがあればroot以外のログインを拒否
- 環境変数を初期化
- common-authをロード
- グループを認証
- リソースを制限
- lastlogを表示
- motdを表示
- メールのチェック
- common-account common-session common-passwordをロード
- SELinuxのコンテキストをなんちゃら
この読みが合ってるかどうかは分かりませんがだいたいこんな感じでしょうか。
- 関連記事
-
-
iptablesでパケットフィルタリング 概要と実例 2015/05/11
-
OpenLDAP 2015/05/09
-
PAM Pluggable Authentication Modules 2015/05/02
-
Nginx 2015/04/09
-
BIND9について 2015/03/30
-