ゴール
Linuxサーバー(EC2内)に接続して入力されたコマンドを監査用のログとして残す
前提
・EC2起動済み(Linux)
・SSH接続可能
Linux設定
bashrc設定
bashrcとは?
bashを起動したときに読み込まれる設定ファイル
(正確には、bash_profileから読み込まれるファイル)
まず、Linuxでコマンドをログとして記録する設定ファイルのAuditを設定します。
vim /etc/bashrc
ファイルの最後に下記を追加します。
export PROMPT_COMMAND='RETRN_VAL=$?; logger -p local1.notice -t bash_audit "[$USER][$(pwd)] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//")"'
上記はコマンドが実行されるたび(PROMPT_COMMAND)に実行コマンド&ユーザー名&実行ディレクトリの情報をrsyslogに送る設定となります。
logger -p local1.notice とは?
loggerはsyslogでログを送る用のコマンド
local1 ~ local7まではユーザーが定義する用のログカテゴリとなっています。
今回はlocal1を、bashのコマンド履歴用のログカテゴリとして使用します。
rsyslog設定
rsyslogに関する設定は 「bash_audit.conf」
vim /etc/rsyslog.d/bash_audit.conf
local1.* /var/log/bash_audit.log
↑を追記して保存
which rsyslog
sudo yum install -y rsyslog
sudo systemctl restart rsyslog
sudo systemctl status rsyslog
whichコマンドでrsyslogサービスの存在を確認(ない場合はインストール)
rsyslogサービスを再起動
確認
ログファイルを確認して、確認してみる
cat /var/log/bash_audit.log
ログを日付ごとに分けたい
これだとすべての日付のログが同じファイルに混在しており、保守性が低い
ログの日付ごとにファイルを分けるようにrsyslog設定を変える
vim /etc/rsyslog.d/bash_audit.conf
↓を記載
template(name="DailyLogFile" type="string" string="/var/log/bash_audit/%$YEAR%-%$MONTH%-%$DAY%.log")
if $syslogfacility-text == 'local1' then {
action(type="omfile" dynaFile="DailyLogFile")
stop
}
actionはrsyslogの何かを実行するブロック
type="omfile"はログを指定したテンプレートで出力するのを指定する
%$YEAR%-%$MONTH%-%$DAY%.log ⇒ yyyyMMdd形式(%~%はLinuxの環境変数)
また、/var/log/bash_auditディレクトリ作成&パーミッション設定を行う
sudo mkdir -p /var/log/bash_audit
sudo chown root:adm /var/log/bash_audit
sudo chmod 770 /var/log/bash_audit
ログ用フォルダ作成&rootユーザーを所有者にして書き込み権限を付与
rsyslogを再起動&ログファイル確認
sudo systemctl restart rsyslog
cd /var/log/bash_audit
ls