CentOsはデフォルトでは,sshの履歴(?)を監視するだけのはずなので,ログイン失敗回数を数えて,そのアカウントが定めた失敗回数に達したらログインできないようにした.
CentOsのバージョン
6.4
PAMによる認証を許可する
pam_tally2 で一定回数ログインに失敗したアカウントをロックするを参考にさせていただきました.
自分は研究室のサーバであらかじめ,PAMでのssh認証がyesになっていたのでPAMに絞ってしらべました.
とりあえずPAMを使いたい場合はまず,/etc/ssh/sshd_config
で UsePAMをYesにすること
・
・
# UsePAM no
UsePAM yes
・
・
pam_tally2を使ってアカウントロックする
/etc/pam.d/password-auth
を編集する.
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
# この下1行追記
auth required pam_tally2.so deny=5
#
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
この2行目のdeny
で定義した値とログイン失敗回数が一致したらアカウントがロックされる.
4行目は常にログイン失敗時にログを残すというもので,もはや不要かとも思ったが,試す勇気もなかったのでそのまま残した.
試しに失敗してみる
ログインに失敗した回数は /var/log/tallylog
を見ればわかるのだが,これはバイナリファイルであるため,pam_tally2
コマンドを使う.
$ pam_tally2 -u locktestusername
Login Failures Latest failure From
locktestusername 1 08/28/15 19:43:45 xxx.xxx.xxx.xxx
記録された.
勇気をだして5回失敗してみたら,次からちゃんとしたパスワードを打ってもpermission deniedのエラーになってログインできなくなってた
ロックを解除する
ロック解除もpam_tally2
コマンドを使う
$ pam_tally2 -u locktestusername --reset
確認
$ pam_tally2 -u locktestusername
Login Failures Latest failure From
locktestusername 0
ちゃんと0になった
感想
今回はアカウントをベースにしてロックをかけた.
けども,もしIDが漏洩した場合,ログインを失敗しまくってアカウントをロックさせるということが可能になってしまうため,ipベースのロックも調べたい.
ただ,他人のIDを取得し,サービスや情報にアクセスするのが目的の攻撃はこれで十分防げる(?)のかな.