web-dev-qa-db-ja.com

PAMを使用してssh公開鍵認証方式のロックアウトポリシーを管理する方法

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メッセージに何も表示されないため、ロックアウトされていないようです。

2
alexfvolk

問題は、認証スタック内でこれらのポリシーを適用しようとしていることです。

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が指摘しているように、これが本当に何らかの価値を提供するかどうかは議論の余地があります。

4
Andrew B

この容量でPAMを使用することはできません。ユーザーがサーバー上のssh公開鍵に対応するssh秘密鍵を持っていない場合、ユーザーは認証できません。

パスワード障害ロックアウトの目的は、ユーザーアカウントでのパスワードのブルートフォースを防ぐことです。 sshキー認証が実施されている場合、考慮すべきユーザーアカウントのパスワードはありません。

Ssh鍵認証に要求されるパスワードの場合、これは秘密鍵のパスワードです。秘密鍵に対する認証に失敗しても、サーバーへの認証は失敗しません。

2
JohnA