PAM
PAM(Pluggable Authentication Modules)
linuxの共通認証の仕組み。
各認証をモジュールとして定義して利用することで、アプリケーション側で認証機能を再利用できるようにしたもの。
/etc/pam.d/で設定は行われる。
/etc/pam.d/構成
各種サービス(アプリケーション)で利用すりPAM設定ファイルは/etc/pam.d/にある。
pam.dの設定ファイルの名前は、各サービスで使われる設定となる。サービスごとに専用の設定ファイルを参照して利用している場合もあれば、共通の設定ファイルを参照して認証している場合もある。
例えばsshdは/etc/pamd.d/sshdを参照しているし、loginコマンドでは/etc/pam.d/loginを参照している。
設定ファイル構成
ファイルは次のような4つのブロックで分かれている
code:config shema
module_interface control_flag module_name module_arguments
module_interface
モジュールインターフェースは次の4種類。だいたいはauthを設定したいケースだとは思う。
auth ユーザー認証に関する設定、パスワードの有効性検証、グループ検証
account アカウントに関する設定、 ユーザーアカウントの期限、特定時間帯でのアカウント利用の可否
password ユーザーパスワード変更時の設定
session ユーザーセッションの設定管理
controle flag
モジュールによる成否の結果をPAMがどのように扱うかについて規定する。
required 認証を継続するにはモジュールの成功が必要。あくまで必要なので認証失敗時にも次の処理にすすみ、該当インターフェースの他の参照モジュールの結果がすべて失敗するまでユーザーに失敗を通知しない
requisite 認証を継続するにはモジュールの成功が必須。必須なので失敗時には即座にユーザーに失敗を通知する。
sfficeient これ単体は失敗しても無視される。sfficientフラグのモジュールが成功した時に、すでにrequiredのフラグモジュールが成功していれば、それ以上の処理は要求されずその場でユーザーは認証されます。
optional 成功失敗しても何も影響しない。ただメッセージにその処理結果を通知するだけである。
module name
/lib64/security下にあるモジュールを指定する。
module arguments
モジュールにわたす引数。
処理
モジュールは設定ファイルの上から順番に実行される。
例としては次のようなファイルがある。
code:example
auth required pam_env.so
auth requisite pam_unix.so
auth sufficient pam_unix.so
auth optional pam_unix.so
account sufficient pam_unix.so
この場合処理は次のようになる。
PAMは各行を上から順番に評価して、正の値が帰れば成功として次の処理に、負の値が帰れば設定によるが即座に終了したり、何もせず次の処理に移るといったようになっている。
https://gyazo.com/dc5cd2c0297a025ac2e33b7d8b24f8f1
ubuntu sshd pam
例えばubuntuのsshd pamでははじめに@include common-authのPAMで共通で使われるPAMを利用するようになっている。
code: sshd
# PAM configuration for the Secure Shell service
# Standard Un*x authentication.
@include common-auth
# Disallow non-root logins when /etc/nologin exists.
account required pam_nologin.so
# Uncomment and edit /etc/security/access.conf if you need to set complex
# access limits that are hard to express in sshd_config.
# account required pam_access.so
# Standard Un*x authorization.
@include common-account
.
.
common-authでは次のようになっている。
[success=1 ] derault=ignoreは結果が成功の場合は次の1行をスキップするという意味。default=ignoreは失敗時に次の1行へいくという意味。
code:common-auth
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_cap.so
# end of pam-auth-update config
参考
万能のArch wiki
PAMについて