最近、Ubuntuサーバーの1つでauditdの使用を開始しました。
与えられたサンプルのaudit.rulesファイルには、次のようなルールがあります。
-w /var/log/syslog -p wra -k logs
ただし、syslogがファイルに書き込む場合、auditdによってログに記録されるものはありません。同様に、コマンドラインに移動してlogger
コマンドを実行すると、監査ログを生成せずにsyslogファイルが書き込まれます。エディタを使用するか、コマンドラインからファイルに行を追加してファイルを直接変更すると、ログに記録されます。
もちろん、syslogが書き込まれるたびに監査ログは必要ありませんが、これが発生する原因と、syslog以外に私の知らないうちに発生する可能性のある他のケースがあるかどうかを知りたいと思います。
どうもありがとうございました!
追加情報:
Audit.rulesファイルをテストします。
-D
-b 8192
-f 1
-w /var/log/syslog -p wra -k logs
auditctl -l
およびaugenrules --check
の出力:
# auditctl -l
-w /var/log/syslog -p rwa -k logs
# augenrules --check
/sbin/augenrules: Rules have changed and should be updated
ロガーの使用:
# logger "logger example"
# ausearch -k logs
----
time->Fri Mar 10 14:35:20 2017
type=CONFIG_CHANGE msg=audit(1489156520.983:4463): auid=4294967295 ses=4294967295 op="add_rule" key="logs" list=4 res=1
エコーと出力リダイレクトの使用:
# echo "echo example" >> /var/log/syslog
# ausearch -k logs
----
time->Fri Mar 10 14:35:20 2017
type=CONFIG_CHANGE msg=audit(1489156520.983:4463): auid=4294967295 ses=4294967295 op="add_rule" key="logs" list=4 res=1
----
time->Fri Mar 10 14:36:52 2017
type=PROCTITLE msg=audit(1489156612.334:4465): proctitle="bash"
type=PATH msg=audit(1489156612.334:4465): item=1 name="/var/log/syslog" inode=417506 dev=08:01 mode=0100640 ouid=104 ogid=4 rdev=00:00 nametype=NORMAL
type=PATH msg=audit(1489156612.334:4465): item=0 name="/var/log/" inode=411799 dev=08:01 mode=040775 ouid=0 ogid=108 rdev=00:00 nametype=PARENT
type=CWD msg=audit(1489156612.334:4465): cwd="/etc/audit"
type=SYSCALL msg=audit(1489156612.334:4465): Arch=c000003e syscall=2 success=yes exit=3 a0=a93108 a1=441 a2=1b6 a3=7ffe24385b98 items=2 ppid=28462 pid=28463 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts18 ses=4294967295 comm="bash" exe="/bin/bash" key="logs"
/ var/log/syslogのテール:
# tail -n 2 /var/log/syslog
Mar 10 14:36:40 testserver root: logger example
echo example
この動作の背後にある理由を理解しました。
-p
フラグのauditctl
マニュアルページには次のように記載されています。
ファイルシステムウォッチがトリガーするアクセス許可の種類を説明します。 r =読み取り、w =書き込み、x =実行、a =属性の変更。これらのパーミッションは標準のファイルパーミッションではなく、この種のことを行う一種のシステムコールです。読み取りと書き込みのシステムコールは、ログを圧倒するため、このセットから省略されています。ただし、読み取りまたは書き込みの場合は、オープンフラグを調べて、要求されたアクセス許可を確認します。
当時、これが何を意味するのか理解できませんでしたが、linux-auditメーリングリストを数時間調べたところ、書き込み用のファイルを監視すると、いつログに記録されないかがわかりました。ファイルに書き込むためのシステムコールがあります。 O_RDWR
またはO_WRONLY
フラグを使用してopen
システムコールをチェックすることにより、書き込み権限でファイルがアクセスされたかどうかをログに記録するだけです。
したがって、logger
コマンドを使用すると、実際にはSyslogデーモンにファイルへの書き込みを要求しています。 Syslogデーモンは常にそのファイルを書き込み用に開いているため、何もログに記録されないのは理にかなっています。
Syslogデーモンを再起動すると、監査ログに次のようなメッセージが表示されます。
# ausearch -i -k logs
----
type=PROCTITLE msg=audit(10-03-2017 16:16:59.128:4613) : proctitle=/usr/sbin/rsyslogd -n
type=PATH msg=audit(10-03-2017 16:16:59.128:4613) : item=1 name=/var/log/syslog inode=417506 dev=08:01 mode=file,640 ouid=syslog ogid=adm rdev=00:00 nametype=NORMAL
type=PATH msg=audit(10-03-2017 16:16:59.128:4613) : item=0 name=/var/log/ inode=411799 dev=08:01 mode=dir,775 ouid=root ogid=syslog rdev=00:00 nametype=PARENT
type=CWD msg=audit(10-03-2017 16:16:59.128:4613) : cwd=/
type=SYSCALL msg=audit(10-03-2017 16:16:59.128:4613) : Arch=x86_64 syscall=open success=yes exit=6 a0=0x7f5848003fb0 a1=O_WRONLY|O_CREAT|O_NOCTTY|O_APPEND|O_CLOEXEC a2=0640 a3=0x7f5848000088 items=2 ppid=1 pid=10638 auid=unset uid=syslog gid=syslog euid=syslog suid=syslog fsuid=syslog egid=syslog sgid=syslog fsgid=syslog tty=(none) ses=unset comm=rs:main Q:Reg exe=/usr/sbin/rsyslogd key=logs
Sudo auditctl -l
の出力でルールを探すことにより、ルールが現在アクティブであるかどうかを確認することから始めることができます。
ルールセットを不変にするようにauditdが設定されている場合(たとえば、/ etc/audit /audit.rulesに-e 2
が含まれている場合)、再起動するだけで新しいルールがアクティブになります。
ルールが表示されている場合、Sudo ausearch -k logs
を実行するとanythingになりますか?また、Sudo augenrules --check
を実行すると何が得られますか?
あなたが言うように、/ var/log/syslog(または/ var/log/messages)へのすべての書き込みをログに記録すると、少しうるさくなる可能性があるため、rootや非特権syslogコンポーネントに使用されているユーザーを除外することを検討してください。それが機能したら。