罰金担当あらため、募金担当の高橋です。Linuxサーバーへのログインの履歴を確認するには、サーバーにログインしてからログファイルを確認する必要があります。また、都度サーバーに特権ユーザーでのログインが必要となり、リアルタイムでの監視は難しいです。そこで、誰がいつサーバーにログインしたかをpush通知で通知してくれる仕組みを作成してみました。通知の受け取りには弊社で使用しているコミュニケーションツールのSlackを使用しました。弊社のSlackの使い方はこの記事で紹介されています。tech.sanwasystem.com
動作環境
本番環境で動作させることを考えると、新規にミドルウエアを追加せずに動作するようにしたかったので、シェルスクリプトで作成しました。
- OS: CentOS6.4
- 言語: シェルスクリプト
連携の準備
Slack連携の準備
Slack連携の設定を行います。SlackのIntegrationsからIncoming WebHooksを選択します。選択すると以下の画面が出てくるので、通知を行うチャネルを設定します。 次の画面で表示されるWebhook URLを使用します。
連携用のスクリプトの作成と設定
ログイン時にシェルを呼び出す処理と、Slackに通知をするシェルを作成します。
ログイン時にシェルを呼び出す処理
/etc/ssh/にsshrcファイルを作成します。ファイルに以下の内容を記載します。今回はログイン名、クライアントのIPアドレス、ログイン先のホスト名を表示させます。
/PATH_TO_SH/sshlogin.sh "$USER" "$SSH_CLIENT" "$HOSTNAME"
適当なフォルダにSlack通知をするシェルスクリプトを作成します。ファイルには以下の内容を記載します。また、パーミッションはすべてのユーザーが実行できるようにします。
#!/bin/sh #WebHookUrl WEBHOOKURL="https://hooks.slack.com/services/XXXXXXXXXX/XXXXXXXXXXXXXX/" #Slack送信チャンネル CHANNEL=${CHANNEL:-"#送信するチャネル"} #Slack送信名 BOTNAME=${BOTNAME:-"MRSO試験環境ログイン"} #Slackアイコン FACEICON=${FACEICON:-":ghost:"} #Slackメッセージ MESSAGE=${MESSAGE:-"$1が$2から$3にログインしました"} curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"icon_emoji\": \"${FACEICON}\", \"text\": \"${MESSAGE}${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null
設定後にLinuxにログインを行うとSlackに以下の内容が通知されます。
まとめ
今回の設定を行うと、だれがどの時間にどのサーバーにログインをしたのかリアルタイムで確認することができ、またSlackのログを残すことができます。また、今回の仕組みでSSHのログイン以外にもSFTPのログインも同様に検知できるようになります。