CentOS7で任意の回数SSHでログインを失敗したユーザのアカウントをロックする方法です。
SSH設定
CentOS7ではPAMの「pam_faillock」モジュールの機能を使用することで、任意の回数ログインに失敗したユーザのアカウントをロックすることが出来ます。
そのためsshdでPAMが使用できるように「/etc/ssh/sshd_config」で「UsePAM yes」の設定が有効になっていることを確認して下さい。(CentOS7.5では初期状態で有効になっていました)
UsePAM yes
設定変更を行った場合はsshdを再起動して設定を反映させて下さい。
# systemctl restart sshd
PAM 設定 (password-auth)
SSHで任意の回数ログインに失敗したユーザのアカウントをロックさせたい場合、「/etc/pam.d/password-auth」のauthセクションとaccountセクションに「pam_faillock」モジュールの設定を追加します。(rootユーザはロック対象外)
auth required pam_faillock.so preauth silent audit deny=回数 unlock_time=解除時間 auth [default=die] pam_faillock.so authfail audit deny=回数 unlock_time=解除時間 account required pam_faillock.so
- 「deny=回数」でログイン失敗でアカウントをロックをするまでの回数を指定
- 「unlock_time=解除時間」でロックが解除されるまでの時間(秒)を指定
「unlock_time」の値に「0」を指定すると、管理者が「faillock」コマンドでロック解除を行わない限りアカウントはロックされたままとなります。
※「/etc/pam.d/password-auth」の設定だけではコンソールから直接ログイン失敗した場合にアカウントをロックすることはできません。コンソールからのログイン失敗についてもアカウントのロックを行いたい場合は「/etc/pam.d/system-auth」にも、同様の設定を行う必要があります。
設定例
「/etc/pam.d/password-auth」にログイン失敗を3回繰り返すと600秒(10分)アカウントをロックする設定を追加します。
# vi /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_faillock.so preauth silent audit deny=3 unlock_time=600 auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600 auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth required pam_deny.so account required pam_unix.so account required pam_faillock.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account required pam_permit.so
ロックさせたくないユーザがいる場合
「auth required pam_faillock.so preauth silent audit deny=回数 unlock_time=解除時間」の上に下記の設定を追加してください。
複数ユーザを除外したい場合は「:」で除外したいユーザを区切って指定します。
auth [success=1 default=ignore] pam_succeed_if.so user in ユーザ1:ユーザ2:ユーザ3
下記は「tamohiko」ユーザろロック対象から除外するという設定になります。
#%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 [success=1 default=ignore] pam_succeed_if.so user in tamohiko auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 auth required pam_faildelay.so delay=2000000 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600 auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth required pam_deny.so
rootユーザもロックさせたい場合
「root」ユーザもロックしたい場合はauthセクションに追加する設定に「even_deny_root」を追加します。
auth required pam_faillock.so preauth silent audit deny=回数 even_deny_root unlock_time=解除時間 auth [default=die] pam_faillock.so authfail audit deny=回数 even_deny_root unlock_time=解除時間
ログイン失敗回数の確認
「faillock」コマンドを実行することで、ユーザのログイン失敗情報を確認することが出来ます。
# faillock
「testuser」でログイン失敗を繰り返した後に「faillock」コマンドを実行してみると、ログイン失敗に関しての情報が確認できました。
# faillock root: When Type Source Valid tamohiko: When Type Source Valid testuser: When Type Source Valid 2018-07-04 16:50:41 RHOST 192.168.1.26 V 2018-07-04 16:50:44 RHOST 192.168.1.26 V 2018-07-04 16:50:47 RHOST 192.168.1.26 V
特定ユーザのログイン失敗情報を確認したい場合は、「--user」オプションを使用することでユーザの指定が可能となります。
faillock --user ユーザ名
「testuser」というユーザのログイン失敗状況を確認してみます。
# faillock --user testuser testuser: When Type Source Valid 2018-07-04 16:50:41 RHOST 192.168.1.26 V 2018-07-04 16:50:44 RHOST 192.168.1.26 V 2018-07-04 16:50:47 RHOST 192.168.1.26 V
アカウントロックの解除方法
アカウントのロックを解除したい場合は、「--user」でロックを解除したいユーザを指定した後に「--reset」を指定することでロックを解除することが出来ます。
faillock --user ユーザ名 --reset
実際に「testuser」のロックを解除してみます。
# faillock --user testuser --reset
「faillock」コマンドで確認してみると、ログイン失敗の情報が削除されてロックが解除されていることが確認できます。
# faillock root: When Type Source Valid tamohiko: When Type Source Valid testuser: When Type Source Valid
コメント