見出し画像

【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文字が含まれる


















よろしければサポートお願いします!よりいい情報を発信します。