すべてのログイン試行の監視

すべてのログイン試行の監視

数週間前、私はユーザーが自分のサーバーにログインしたときに私に電子メールを送信するスクリプトを書くのが良い考えだと思いました。

そのため、完全に機能するスクリプトを提供し、notifyLogin.sh各ユーザーのスクリプトからそれを呼び出すことにしました .bash_login

ssh -tしかし、誰かがスイッチを使って自分のサーバーにログインするために使用できるシェルを選択できることを発見しました。たとえば、

ssh user@myserver -t sh

このように.bash_login実行されないと実行されません/etc/profile

notifyLogin.shシェルの種類に関係なく、ログイン時にそれを呼び出す方法はありますか? (常に動作する必要があります)

答え1

車輪を再発明しないで、rsyslogすべてがあなたのためになされるようにしなさい。ファイルに到達する前にsyslogメッセージのパターンが一致した場合は、電子メールを送信できます。

以下に電子メールアドレスとSMTPサーバーを設定して入力または/etc/rsyslog.conf入力/etc/rsyslog.d/します。rsyslogの再起動

$ModLoad ommail
$ActionMailSMTPServer localhost
$ActionMailFrom [email protected]
$ActionMailTo [email protected]
$template mailSubject,"Login Alert on %hostname%"
$template mailBody,"\n\n%msg%"
$ActionMailSubject mailSubject
$ActionExecOnlyOnceEveryInterval 1
# the if ... then ... mailBody mus be on one line!
if $msg contains 'session opened for user' then :ommail:;mailBody

メッセージの文字列と一致すると、 rsyslog電子メールがトリガーされます。session opened for user

/var/log/auth.logメッセージを表示し、sshdパターンとして使用できる他の内容を確認できます。

源泉:rsyslog メール

答え2

まず、ユーザーが変更できるため、ユーザーの.profileに依存してはいけません。それが本当ならあなたのサーバーでは、次のことができます。

  • auth.log、utmpなどのエントリを定期的にテストします(またはinotifyによってトリガされます)。
  • /bin/loginタスクを実行してから、実際のタスクを実行するラッパーを作成します/bin/login。 (たとえば、sshが実行しているかどうかはわかりませんが、/bin/loginそうなることを願っています。)しかし、お勧めできません。危険すぎる。

答え3

/var/log/auth.log

システムでの試みの追跡

cat /var/log/auth.log grep sshd.\*Failed 

失敗した試行をgrepでき、タイムスタンプも使用できるため、スクリプトに適用するか、次を使用できます。

tail -f /var/log/auth.log 

入力を追跡し、いくつかの正規表現を実行できます。

答え4

@Creekの答えに応じて、rsyslogを使用した複数のユーザーの一致

$ModLoad ommail
$ActionMailSMTPServer localhost
$ActionMailFrom [email protected]
$ActionMailTo [email protected]
$template mailSubject,"Login alert on %hostname%"
# mailBody must be on one line!
$template mailBody,"\n\n%msg%"
$ActionMailSubject mailSubject
$ActionExecOnlyOnceEveryInterval 1

if $msg contains 'session opened for' then {
        if $msg contains 'USER1' then :ommail:;mailBody

        # Repetition required (did not investigate why)
        $ActionMailSMTPServer localhost
        $ActionMailFrom [email protected]
        $ActionMailTo [email protected]
        $template mailSubject,"Login alert on %hostname%"
        $template mailBody,"\n\n%msg%"
        $ActionMailSubject mailSubject
        $ActionExecOnlyOnceEveryInterval 1

        if $msg contains 'USER2' then :ommail:;mailBody
}

関連情報