Linuxサーバーで認証を強化する方法についてredhatの指示に従いましたが、公開鍵認証でSSHのみを使用します。これらの指示によると: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/chap-hardening_your_system_with_tools_and_services
ここに私の/etc/pam.d/system-authと/etc/pam.d/password-authファイルがありますが、実際にはどちらも同じです:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_faillock.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.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
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
この設定では、たとえば3回試行した後、ユーザーが間違ったキーで認証を試みた場合に、何らかのロックアウトメッセージを表示したいと考えていました。しかし、ロックアウトに関するメッセージは表示されず、ロックアウトポリシーが機能しているかどうかを確認する方法がありません。 pam_tally2モジュールもありますが、pam_faillockモジュールとどのような違いがあるのかわかりません。
ログには、root権限が拒否されたこと以外は何も表示されません。
[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/some_user
[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/root
cat: /var/run/faillock/root: Permission denied
そして、some_user
のsshに間違ったキーを使用しようとしましたが、フェイルロックログやsshしようとした場所からのsshメッセージに何も表示されないため、ロックアウトされていないようです。
問題は、認証スタック内でこれらのポリシーを適用しようとしていることです。
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_faillock.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
SSHデーモン自体に実装された公開鍵認証は、認証スタックをバイパスします。 (送信されたキーを検証するために呼び出されるPAM認証モジュールがないため、そのように機能する必要があります)唯一の例外は、キーボードインタラクティブ内での成功を必要とするカスタマイズされた構成を実行している場合です。これはデフォルトではないため、認証スタックはこれらの認証中にほぼ確実に無視されます。
account
スタックは通常であり、公開鍵のみのログインに制限を課していますが、呼び出されるPAMモジュール。 PAMモジュールが呼び出されていない場合、ログインに失敗するたびにカウントをインクリメントすることはできません。
これが機能していることを確認できる唯一の方法は、sshd構成を調整して、キーボード対話型認証を要求する場合ですに加えて公開鍵認証。 ( このQ&A を出発点として使用できます)とはいえ、JohnAが指摘しているように、これが本当に何らかの価値を提供するかどうかは議論の余地があります。
この容量でPAMを使用することはできません。ユーザーがサーバー上のssh公開鍵に対応するssh秘密鍵を持っていない場合、ユーザーは認証できません。
パスワード障害ロックアウトの目的は、ユーザーアカウントでのパスワードのブルートフォースを防ぐことです。 sshキー認証が実施されている場合、考慮すべきユーザーアカウントのパスワードはありません。
Ssh鍵認証に要求されるパスワードの場合、これは秘密鍵のパスワードです。秘密鍵に対する認証に失敗しても、サーバーへの認証は失敗しません。