web-dev-qa-db-ja.com

sshによるpam_tally2またはpam_faillockアカウントのロックアウト

RHEL6.2を実行しています。ほとんどのユーザーはSSHを使用してパスワードを使用してログインします。いくつかは鍵を持っているかもしれません。すべてのアカウントはローカルです。

N回のパスワードログインに失敗した後、ユーザーをロックアウトする必要があります。

man pam_tally2およびpam_faillockの例では、sshoutを使用してユーザーをロックしていません。 pam_tally2の例では、Telnet(テストを有効にしました)ログインをロックでき、その後sshユーザーをロックアウトします。 sshはそれをトリガーできません。

/etc/ssh/sshd_configには:

PasswordAuthentication yes # setting to no doesn't allow login with a password!
UsePAM yes
UseLogin no # setting to yes doesn't allow PuTTY logins

マニュアルページの例は、変更されていないシステムで機能するはずです。

2
user150471

PasswordAuthenticationを有効にすると、SSHデーモンはPAMを使用せずに、パスワード自体を処理します。 PAMを使用するように強制するには、実際にはこれを無効にする必要があります。

PasswordAuthentication no
UsePAM yes
ChallengeResponseAuthentication yes

ただし、キーを使用しているユーザーを捕まえることはできません(個人的には問題ないと思いますが)。その場合は、おそらく fail2ban のようなものを使用する必要があります。これは、ログで認証の失敗を検索し、iptablesルールを追加して今後の試行をブロックします。

2
mgorven

/etc/pam.d/sshdに次の行を追加する必要があります。

auth       required     pam_tally2.so deny=6 onerr=fail unlock_time=1800
account    required     pam_tally2.so

以下に示すように、3行目と6行目にそれらを追加します。

#%PAM-1.0
auth       required     pam_sepermit.so
auth       required     pam_tally2.so deny=6 onerr=fail unlock_time=1800
auth       include      password-auth
account    required     pam_nologin.so
account    required     pam_tally2.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth

また、UsePAM yes/etc/ssh/sshd_configに設定されていることを確認してください

これにより、認証が6回失敗した後、sshユーザーが30分間ロックアウトされます。


公式のRHEL 6セキュリティガイド に従うと、/etc/pam.d/sshdを変更せずにこれを実現できます。

/etc/pam.d/system-auth/etc/pam.d/password-authの両方を編集し、置き換えます

auth        sufficient     pam_unix.so nullok try_first_pass

auth        required       pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth        sufficient     pam_unix.so nullok try_first_pass
auth        [default=die]  pam_faillock.so authfail audit deny=3 unlock_time=600

そして、両方のファイルで、「アカウント」セクションの先頭に次の行を追加します。

account     required      pam_faillock.so

これにより、コンソールユーザー、スクリーンセーバーユーザーなどにアカウントロックアウト機能が提供されます。

/etc/pam.d/sshdを調べると、password-authを使用していることがわかります。したがって、sshユーザーは同じロックアウト機能を利用できます。

1
Dave

'/etc/pam.d/sshd'を編集する必要がありました

認証が必要ですpam_tally2.soDeny = 5 Unlock_time = 1200 Even_deny_root Root_unlock_time = 10

そしてそれは今動作します。

Pam_tallyと比較した場合のpam_faillockのunlock_timeの動作の不一致。 (unlock_timeは、最後に失敗した試行に従ってドリフトされません)system-authおよびpassword-authでdeny = 3およびunlock_time = 300を使用してpam_faillockを構成します。次に、root以外のユーザーでログインし、無効なパスワードを3回入力してから、アカウントは期待どおりにロックされます。たとえば、現在の時刻は1300時間です。アカウントはロックアウトされ、13:05時まで正しいパスワードでログインすることはできません。ユーザーが13:02に再度ログインしようとすると、アカウントがロックアウトされているため、システムは拒否します。同じシナリオで、pam_tallyの場合、ユーザーが13:02にログインしようとすると、ユーザーは13:05ではなく13:07以降にのみロック解除されます。試行に失敗した後、unlock_timeはドリフトされ、ここで調整されます。

0
Abhijit Roy