PAM Pluggable Authentication Modules

/ LPIC / Comment[0]

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

簡単に読んでみると

  1. ログインに失敗した場合3秒のディレイ
  2. /etc/securettyに記述された端末であればrootログインを許可
  3. /etc/nologinがあればroot以外のログインを拒否
  4. 環境変数を初期化
  5. common-authをロード
  6. グループを認証
  7. リソースを制限
  8. lastlogを表示
  9. motdを表示
  10. メールのチェック
  11. common-account common-session common-passwordをロード
  12. SELinuxのコンテキストをなんちゃら

この読みが合ってるかどうかは分かりませんがだいたいこんな感じでしょうか。

関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可