CoreOs 766以降、 監査サブシステム は部分的に統合されています。
カーネルで監査サブシステムが有効になっており、auditctlがイメージに追加されています。ほとんどの監査イベントはデフォルトで無視されます。監査ルールは/etc/audit/rules.dで変更できます。 auditdは含まれておらず、journaldはベストエフォートメカニズムですが、代わりにイベントのログ記録を担当することに注意してください。監査ベースのシステムとは異なり、journaldが何らかの理由でイベントの記録に失敗しても、カーネルはパニックになりません。
899とalpha1000 CoreOsリリースの両方でsyscallを監査するために、以下を試しました。
# starting a new periodic process:
$ while true; do echo "coreos ..." > /tmp/a.txt && sleep 5s; done &
[1] 4509
# get its pid and add a new audit rule:
$ Sudo auditctl -a always,exit -F Arch=b64 -S read,write,close,dup2,wait4 -F pid=4509
# wait 5 minutes and check if any audit related event was logged into by the journald:
$ journalctl | grep audit | wc
0 0 0
ジャーナルによってログに記録されたイベントが表示されないのはなぜですか?
cn.ko
は正しくロードされ、auditctl -l
出力ルールが正常に設定されました。 journald
はnetlinkインターフェースからメッセージを受信していないように見えますが。
デバッグを有効にするために次の手順を実行しましたが、ヒントも得られませんでした。
mkdir -p /etc/systemd/system/systemd-journald.service.d/
vim /etc/systemd/system/systemd-journald.service.d/10-debug.conf
そして次の内容でそれを埋めました:
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
そして、systemd-journaldサービスを再起動します。
systemctl daemon-reload
systemctl restart systemd-journald
dmesg | grep systemd-journald
CoreOSには一連のデフォルトルールが付属しており、/etc/audit/rules.d/
のファイルシステムを介して構成するように設計されています。インタラクティブに操作しようとしているので、/etc/audit/rules.d/99-default.rules
に残りのすべてのルールを無音にするルールがあるため、最初に監査ルールをクリアする必要があります。
audit -D
を実行してルールをクリアすると、インタラクティブに追加されたルールが機能し始めます。
FWIW、問題を引き起こしている99-default.rules
のルールは-a exclude,always -F msgtype>0
です。