CentOS 7でauditログに実行コマンドを記録する

今まで、実行コマンドのログ記録ではSnoopy Loggerを用いることが多かったのだけど、CentOS 7の場合auditでうまいこと設定してやることで実行したコマンドをログに記録することができるようなので、やってみることにした。
(厳密には、ユーザのキーボード入力をすべて記録するだけなので、上下キーやTab、エンターキーの入力についてもログに記録されてしまうため、ちょっと読みづらい。)

設定方法は簡単。以下の内容を「/etc/pam.d/system-auth」および「/etc/pam.d/password-auth」に記述するだけだ。

session     required      pam_tty_audit.so enable=*

設定記述後、念のためauditdを再起動しておく。

service auditd restart

これで、「/var/log/audit/audit.log」にキーボードの入力内容が記録されるようになった。
実際の入力内容はログファイルを直接みてもよくわからないので、以下のコマンドで参照するとよいだろう。

aureport --tty

…ぐちゃぐちゃで読めない。上下キーとかTabまでログに記録するからなぁ…。
監査用に残しておくのはいいけど、実行されたコマンドを追うには適してなさそうだ。

他なんかないの…?と思って調べたところ、以下のコマンドを実行することで、上の方法とは別のやり方で、コマンドをシステム側で実行後にauditログ(/var/log/audit/audit.log)に記録させることができるようだ。

auditctl -a exit,always -S execve

設定後の記録内容がこちら。

[root@BS-PUB-CENT7-01 ~]# tail -100 /var/log/audit/audit.log | grep type=EXECVE | grep -e a[0-9]*= -e $
type=EXECVE msg=audit(1466838453.225:274): argc=3 a0="ls" a1="--color=auto" a2="-la"
type=EXECVE msg=audit(1466838496.776:277): argc=3 a0="tail" a1="-F" a2="/var/log/audit/audit.log"
type=EXECVE msg=audit(1466838501.335:284): argc=1 a0="clear"
type=EXECVE msg=audit(1466838503.902:287): argc=2 a0="tail" a1="/var/log/audit/audit.log"
type=EXECVE msg=audit(1466838527.655:290): argc=3 a0="grep" a1="--color=auto" a2="type=EXECVE"
type=EXECVE msg=audit(1466838527.656:291): argc=3 a0="tail" a1="-100" a2="/var/log/audit/audit.log"
type=EXECVE msg=audit(1466838563.469:298): argc=1 a0="clear"
type=EXECVE msg=audit(1466838564.317:301): argc=3 a0="grep" a1="--color=auto" a2="type=EXECVE"
type=EXECVE msg=audit(1466838564.318:302): argc=3 a0="tail" a1="-100" a2="/var/log/audit/audit.log"
type=EXECVE msg=audit(1466838583.541:305): argc=3 a0="grep" a1="--color=auto" a2="type=EXECVE"
type=EXECVE msg=audit(1466838583.543:306): argc=6 a0="grep" a1="--color=auto" a2="-e" a3="a[0-9]*=" a4="-e" a5="$"
type=EXECVE msg=audit(1466838583.544:307): argc=3 a0="tail" a1="-100" a2="/var/log/audit/audit.log"
type=EXECVE msg=audit(1466838588.107:310): argc=1 a0="clear"
type=EXECVE msg=audit(1466838588.804:313): argc=3 a0="grep" a1="--color=auto" a2="type=EXECVE"
type=EXECVE msg=audit(1466838588.805:314): argc=6 a0="grep" a1="--color=auto" a2="-e" a3="a[0-9]*=" a4="-e" a5="$"

引数などは別々に分けられてしまっているが、まぁ読めないことはなさそう。
一応、以下のコマンドで各コマンドの実行状況等ごとの情報を整理して出力させることができる。

ausearch -sc 59 -i
[root@BS-PUB-CENT7-01 ~]# ausearch -sc 59 -i | tail -20
type=EXECVE msg=audit(2016年06月25日 16:20:26.925:362) : argc=2 a0=tail a1=-20
type=SYSCALL msg=audit(2016年06月25日 16:20:26.925:362) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x77bc50 a1=0x72eae0 a2=0x739ff0 a3=0x7fff15439150 items=2 ppid=2305 pid=2413 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts2 ses=4 comm=tail exe=/usr/bin/tail subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
----
type=PATH msg=audit(2016年06月25日 16:20:26.927:363) : item=1 name=/lib64/ld-linux-x86-64.so.2 inode=135597092 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL
type=PATH msg=audit(2016年06月25日 16:20:26.927:363) : item=0 name=/usr/sbin/ausearch inode=135368320 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL
type=CWD msg=audit(2016年06月25日 16:20:26.927:363) :  cwd=/root
type=EXECVE msg=audit(2016年06月25日 16:20:26.927:363) : argc=4 a0=ausearch a1=-sc a2=59 a3=-i
type=SYSCALL msg=audit(2016年06月25日 16:20:26.927:363) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x73a260 a1=0x73e6b0 a2=0x739ff0 a3=0x7fff15439150 items=2 ppid=2305 pid=2412 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts2 ses=4 comm=ausearch exe=/usr/sbin/ausearch subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
----
type=PATH msg=audit(2016年06月25日 16:20:39.324:454) : item=1 name=/lib64/ld-linux-x86-64.so.2 inode=135597092 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL
type=PATH msg=audit(2016年06月25日 16:20:39.324:454) : item=0 name=/usr/bin/tail inode=67245119 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL
type=CWD msg=audit(2016年06月25日 16:20:39.324:454) :  cwd=/root
type=EXECVE msg=audit(2016年06月25日 16:20:39.324:454) : argc=2 a0=tail a1=-20
type=SYSCALL msg=audit(2016年06月25日 16:20:39.324:454) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x73f410 a1=0x72eae0 a2=0x739ff0 a3=0x7fff15439150 items=2 ppid=2305 pid=2415 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts2 ses=4 comm=tail exe=/usr/bin/tail subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
----
type=PATH msg=audit(2016年06月25日 16:20:39.325:455) : item=1 name=/lib64/ld-linux-x86-64.so.2 inode=135597092 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL
type=PATH msg=audit(2016年06月25日 16:20:39.325:455) : item=0 name=/usr/sbin/ausearch inode=135368320 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL
type=CWD msg=audit(2016年06月25日 16:20:39.325:455) :  cwd=/root
type=EXECVE msg=audit(2016年06月25日 16:20:39.325:455) : argc=4 a0=ausearch a1=-sc a2=59 a3=-i
type=SYSCALL msg=audit(2016年06月25日 16:20:39.325:455) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x771de0 a1=0x771e00 a2=0x739ff0 a3=0x7fff15439150 items=2 ppid=2305 pid=2414 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts2 ses=4 comm=ausearch exe=/usr/sbin/ausearch subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)