【Linux】 PAM (Pluggable Authentication Modules) の設定
PAM
PAMはユーザ認証を行うためのAPI。ユーザログイン(login)や、ユーザ切替(su)でも、PAMの仕組みが利用されている。
/etc/pam.dディレクトリ(/etc/pam.confもあるが)が存在するときは、その配下にある設定ファイルを設定する。
書式
type control module
type:PAM のタイプを指定。
auth:認証処理を定義
account:ユーザーの認証状態を検証する(PW期限切れなど)。
password:パスワードの設定と更新を
session:ログイン記録など、認証前後の処理を指定
control:モジュールが実行される条件を指定。
required:モジュールの実行に失敗してもすぐには拒否せず、同じタイプのモジュールの実行が終了した時点で認証を拒否。どの段階で失敗たのかユーザー側ではわからない。
requisite:モジュールの実行に失敗すると認証処理は失敗し、ユーザーに通知される。失敗したモジュール処理に関する情報も記載されるため、攻撃者へもどのモジュールで認証をしているかを知らせることになる。
sufficient:モジュールの実行に成功した時、上位の require行が全て成功していれば認証を成功、失敗の時は処理を継続
optional:他のモジュール処理がないような処理のときに、認証成功のために便宜的に必要となるフラグ。
include:複数の設定ファイルを組み合わせることができ、再利用性や管理性が上がる
substack:includeと同じように使用できる
module:実行するモジュール
pam_unix.so:/etc/passwd や /etc/shadow ファイルを使用して、ユーザー名とパスワードを検証。
pam_ldap:LDAP サーバーを使用して、ユーザー名とパスワードを検証する
pam_pkcs11:PKCS#11 スマートカードを使用して、ユーザー名とパスワードを検証する
pam_deny.so:常に認証を失敗させる
pam_warn:認証を警告して処理を継続する
pam_permit:常に認証を成功させる
pam_group:ユーザーが所属するグループを検証する
pam_time:日時や日付によって認証を制限する
pam_tally2.so:ログイン失敗を記録し、一定回数以上失敗するとロックする
pam_motd:ログイン時に、/etc/motd (message of the day) を表示する
pam_cracklib.so:パスワードのチェックを行う。使用文字の制限として、数字を含める必要がある場合は、dcredit=0、パスワードに数字を含める必要がない場合はdcredit=-1、記号を含める場合はocredit=-1、大文字小文字を含める場合はucredit=-1, lcredit=-1
nullok::ユーザーがパスワードを設定していなくても、認証が許可され、パスワードが空でも認証されることになる。
try_first_pass::前の認証で入力されたパスワードを再利用し、パスワード入力プロンプトを表示しない。たとえば、1つのモジュールがパスワードを検証し、別のモジュールがそれを変更する必要がある場合、try_first_passを使用して最初に入力されたパスワードを再利用し、パスワードの再入力をする必要を避ける。
sha512:パスワードのハッシュ化アルゴリズムを示す。
shadow:パスワードをシャドウファイルから読み込むことを示す。
remember=24:以前の 24 個のパスワードを記憶し、再利用を許可しない。
min=N0:パスワードの最小文字数がN文字以上であること
disabled:単語辞書を使用したパスワード総当たり攻撃による解読を防ぐ。
12:パスワードに少なくとも12文字が含まれるよう要求します。
local_users_only:ローカルユーザーに対してのみチェックを実行する
retry=3:パスワードが要件を満たしていない場合に再試行する回数
authtok_type=:チェックするパスワードのタイプを指定。デフォルトは空の文字列で、PAMが提供するパスワードを使用。パスワードが異なるソースから提供される場合は、このオプションを使用して、適切なパスワードを指定する
設定例
# /etc/pam.d/
auth required pam_securetty.so #TTY (TeleTYpewriter) のアクセスを制限する
auth required pam_env.so #環境変数を設定する
auth required pam_tally2.so deny=5 unlock_time=900 #ログイン失敗を記録し、5 回以上失敗すると 15 分ロックする
auth required pam_unix.so nullok #Unix 系 OS の認証方法を提供する/etc/passwd や /etc/shadow ファイルを使用して、ユーザー名とパスワードを検証します。nullok オプションを指定することで、空のパスワードを許可する
account required pam_unix.so # アカウントの有効性をチェック
password required pam_unix.so # パスワードのチェックを行う
session required pam_unix.so # セッションの開始や終了時に実行される処理を定義する
include common-auth
substack common-auth
password required pam_cracklib.so minlen=8 dcredit=-1 # 最小文字数と使用文字制限を指定
auth required pam_env.so: # 環境変数を設定するために必要な認証ステップを提供する。
auth required pam_faildelay.so delay=2000000: # 認証に失敗した場合、指定された時間 (2000000 マイクロ秒) 後に再試行するように指示する。
auth sufficient pam_unix.so nullok try_first_pass: # /etc/shadowファイルに保存されているUNIXパスワードファイルを使用してユーザーを認証する。 sufficientは、このモジュールが認証成功として終了することを意味。したがって、auth sufficientは、他のモジュールが失敗した場合でも、認証が許可される。
auth requisite pam_succeed_if.so uid >= 1000 quiet_success: # ユーザーIDが1000以上の場合にのみ認証を許可する。
auth required pam_deny.so: # 上記のルールに合致しない場合、拒否する。
account required pam_unix.so: # アカウントに関する設定を提供する。
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=: パスワードの品質を確認し、ローカルユーザーのみがパスワードを変更できるようにする。
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=24: パスワードを変更する。影パスワードを使用し、以前使用されたパスワードを24時間以内に変更できないようにする。
password required pam_deny.so: # パスワード変更のルールに合致しない場合、拒否する。
session optional pam_keyinit.so revoke: # セッションのキーを初期化する。
session required pam_limits.so: # リソースの制限に関する設定を提供する。
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid: cron サービスに関する設定を提供する。
session required pam_unix.so: # ユーザーのログアウト時に必要なセッション設定を提供する。
session optional pam_systemd.so: # systemd のセッション管理を提供する。
session required pam_loginuid.so: # 起動プロセスに関する設定を提供
password include no-passwd # パスワード認証の無効化
password substack system-auth # 2段階認証の設定
password required pam_google_authenticator.so # 2段階認証の設定
password requisite pam_passwdqc.so min=N0,disabled,12 # パスワードに少なくとも12文字が含まれる
よろしければサポートお願いします!よりいい情報を発信します。