Help us understand the problem. What is going on with this article?

ausearchコマンドの使い方

More than 1 year has passed since last update.

1 ausearchコマンドとは?

Auditとは、監査システムのことです。
つまり、システムで発生したイベントをログファイルに出力する機能です。

Auditの主なコマンドとして以下のものがあります。

コマンド 概要
auditctl Auditの動作に関する設定、およびAuditルールの定義を行う
ausearch ログファイルから特定の監査結果を検索する
aureport ログファイルから監査結果のレポートを作成する

ここでは、ausearchコマンドの説明します。
ausearchは、auditログを人が見やすいように変換したり、指定した条件で
ログを抽出したりするコマンドです。

auditログは、以下のファイルに格納されています。

[root@server ~]# ls -l /var/log/audit/*
-rw-------. 1 root root 6663860  9月  8 16:30 /var/log/audit/audit.log

2 検証環境

VMware Workstation 14 Playerのゲストマシン(1台)を使いました。

ゲストマシンのOS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@server ~]# uname -r
3.10.0-693.el7.x86_64
ausearchコマンドの版数
[root@server ~]# ausearch -v
ausearch version 2.7.6

3 人が見やすい形式に変換する方法(-i)

数値で表示されるユーザID(例:UID=0)を文字列(例:UID=root)に変換したり、
UNIX時間(★印)を現在時刻(●印)に変換する。

変換前のログ
[root@server ~]# less /var/log/audit/audit.log
type=DAEMON_START msg=audit(★1526280612.485:9877): op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=4294967295 pid=556 uid=0 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=success
-以下、略-

現在時刻に変換する。

変換後のログ
[root@server ~]# ausearch -i -if /var/log/audit/audit.log
type=DAEMON_START msg=audit(●2018年05月14日 15:50:12.485:9877) : op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=unset pid=556 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success
-以下、略-

4 出力範囲を絞り込む方法(-ts:開始,-te:終了)

4.1 時刻で絞り込む方法

9時48分から9時50分までのログを表示してみます。

[root@master ~]# ausearch -i -if /var/log/audit/audit.log -ts 09:48:00 -te 09:50:00
----
type=SYSCALL msg=audit(2017年03月27日 09:48:49.071:1131) : arch=x86_64 syscall=stat success=no exit=EACCES(許可がありません) a0=0x7fb282b79590 a1=0x7ffdf5a8f600 a2=0x7ffdf5a8f600 a3=0x7fb276ec2792 items=0 ppid=6449 pid=6554 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:48:49.071:1131) : avc:  denied  { getattr } for  pid=6554 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
----
type=SYSCALL msg=audit(2017年03月27日 09:48:49.072:1132) : arch=x86_64 syscall=lstat success=no exit=EACCES(許可がありません) a0=0x7fb282b796e8 a1=0x7ffdf5a8f600 a2=0x7ffdf5a8f600 a3=0x0 items=0 ppid=6449 pid=6554 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:48:49.072:1132) : avc:  denied  { getattr } for  pid=6554 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file

4.2 月で絞り込む方法(this-month)

今月に出力されたログを表示してみます。

[root@server ~]# ausearch -i -ts this-month
----
type=DAEMON_START msg=audit(2018年09月08日 14:59:55.539:6302) : op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=unset pid=591 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success
----
type=SERVICE_START msg=audit(2018年09月08日 14:59:56.060:7) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=auditd comm=systemd exe=/usr/lib/systemd/systemd hostname=? addr=? terminal=? res=success'

-中略-

----
type=CRED_DISP msg=audit(2018年09月08日 16:40:01.117:251) : pid=1861 uid=root auid=root ses=16 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_env,pam_unix acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success'
----
type=USER_END msg=audit(2018年09月08日 16:40:01.130:252) : pid=1861 uid=root auid=root ses=16 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success'

4.3 今週で絞り込む方法(this-week)

今週出力されたログを表示してみます。

[root@server ~]# ausearch -i -ts this-week

4.4 昨日から今日で絞り込む方法(yesterday,today)

[root@server ~]# ausearch -i -ts yesterday -te today

4.5 今日のログに絞り込む方法(today)

今日出力されたログを表示してみます。
今が2/24 21:47だとすると、2/24 00:00から21:47までのログを表示することになります。

[root@server ~]# ausearch -i -ts today

4.6 直近のログに絞り込む方法(recent)

直近とは、10分前(recent)からを意味します。

[root@server ~]# ausearch -i -ts recent

5 システムコール種別で絞り込む方法(-sc)

setsockoptシステムコール(★印)だけを出力してみます。

setsockoptシステムコールだけを表示した場合
[root@server ~]# ausearch -i -sc setsockopt
----
type=PROCTITLE msg=audit(2018年05月14日 15:50:18.809:44) : proctitle=/usr/sbin/ip6tables-restore --wait=2 -n
type=SYSCALL msg=audit(2018年05月14日 15:50:18.809:44) : arch=x86_64 syscall=★setsockopt success=yes exit=0 a0=0x4 a1=ipv6 a2=IP6T_SO_SET_REPLACE a3=0x1d9dd60 items=0 ppid=648 pid=763 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=ip6tables-resto exe=/usr/sbin/xtables-multi subj=system_u:system_r:iptables_t:s0 key=(null)
type=NETFILTER_CFG msg=audit(2018年05月14日 15:50:18.809:44) : table=filter family=ipv6 entries=4
----
type=PROCTITLE msg=audit(2018年05月14日 15:50:18.838:45) : proctitle=/usr/sbin/ip6tables-restore --wait=2 -n
type=SYSCALL msg=audit(2018年05月14日 15:50:18.838:45) : arch=x86_64 syscall=★setsockopt success=yes exit=0 a0=0x4 a1=ipv6 a2=IP6T_SO_SET_REPLACE a3=0x1d9c650 items=0 ppid=648 pid=763 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=ip6tables-resto exe=/usr/sbin/xtables-multi subj=system_u:system_r:iptables_t:s0 key=(null)
type=NETFILTER_CFG msg=audit(2018年05月14日 15:50:18.838:45) : table=raw family=ipv6 entries=3
----

writeシステムコール(★印)だけを出力してみます。

writeシステムコールだけを表示した場合
[root@server ~]# ausearch -i -sc write
----
type=PROCTITLE msg=audit(2018年05月14日 20:45:34.301:320) : proctitle=setenforce 0
type=SYSCALL msg=audit(2018年05月14日 20:45:34.301:320) : arch=x86_64 syscall=★write success=yes exit=1 a0=0x3 a1=0x7fffcdcfb190 a2=0x1 a3=0x7fffcdcfaea0 items=0 ppid=14674 pid=16870 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=7 comm=setenforce exe=/usr/sbin/setenforce subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=MAC_STATUS msg=audit(2018年05月14日 20:45:34.301:320) : enforcing=0 old_enforcing=1 auid=root ses=7
----
type=PROCTITLE msg=audit(2018年05月14日 20:50:47.480:330) : proctitle=setenforce 1
type=SYSCALL msg=audit(2018年05月14日 20:50:47.480:330) : arch=x86_64 syscall=★write success=yes exit=1 a0=0x3 a1=0x7ffcd6669350 a2=0x1 a3=0x7ffcd6669060 items=0 ppid=14674 pid=17139 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=7 comm=setenforce exe=/usr/sbin/setenforce subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=MAC_STATUS msg=audit(2018年05月14日 20:50:47.480:330) : enforcing=1 old_enforcing=0 auid=root ses=7
----
type=PROCTITLE msg=audit(2018年06月25日 17:29:12.491:216) : proctitle=setenforce 0
type=SYSCALL msg=audit(2018年06月25日 17:29:12.491:216) : arch=x86_64 syscall=★write success=yes exit=1 a0=0x3 a1=0x7ffd9aca2210 a2=0x1 a3=0x7ffd9aca1f20 items=0 ppid=1354 pid=2956 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts2 ses=4 comm=setenforce exe=/usr/sbin/setenforce subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=MAC_STATUS msg=audit(2018年06月25日 17:29:12.491:216) : enforcing=0 old_enforcing=1 auid=root ses=4

6 最初に条件にヒットしたものを表示する方法(--just-one)

setsockoptのログは全部で24888個あります。
[root@server ~]# ausearch -i -sc setsockopt|wc -l
24888

24888個のうち、最初にヒットしたsetsockoptだけを表示する。
[root@server ~]# ausearch -i -sc setsockopt --just-one
----
type=PROCTITLE msg=audit(2018年05月14日 15:50:18.809:44) : proctitle=/usr/sbin/ip6tables-restore --wait=2 -n
type=SYSCALL msg=audit(2018年05月14日 15:50:18.809:44) : arch=x86_64 syscall=setsockopt success=yes exit=0 a0=0x4 a1=ipv6 a2=IP6T_SO_SET_REPLACE a3=0x1d9dd60 items=0 ppid=648 pid=763 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=ip6tables-resto exe=/usr/sbin/xtables-multi subj=system_u:system_r:iptables_t:s0 key=(null)
type=NETFILTER_CFG msg=audit(2018年05月14日 15:50:18.809:44) : table=filter family=ipv6 entries=4

7 タイプで絞り込む方法(-m)

7.1サービス開始時のログを絞り込む(-m SERVICE_START)

サービス開始時のログを確認する。
[root@server ~]# ausearch -i -ts today -m SERVICE_START

----
type=SERVICE_START msg=audit(2018年09月08日 14:59:56.060:7) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=auditd comm=systemd exe=/usr/l
ib/systemd/systemd hostname=? addr=? terminal=? res=success'
----
-以下、略-

7.2 サービス終了時のログを絞り込む(-m SERVICE_STOP)

サービス終了時のログを確認する。
[root@server ~]# ausearch -i -ts today -m SERVICE_STOP
----
type=SERVICE_STOP msg=audit(2018年09月08日 14:59:57.197:22) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=plymouth-quit comm=systemd exe=/usr/lib/systemd/systemd hostname=? addr=? terminal=? res=success'
----
-以下、略-

7.3 Dockerイメージの作成、削除のログを絞り込む (-m VIRT_CONTROL)

Dockerイメージをpullする。
[root@master audit]# docker pull busybox

Dockerイメージをpullしたときのログ(★印)を確認する。
[root@master audit]# ausearch -i -ts today -m VIRT_CONTROL
★type=VIRT_CONTROL msg=audit(2017年02月25日 20:47:11.344:1387) : pid=1025 uid=root auid=unset ses=unset msg='user=root auid=root exe=? hostname=? reason=api op=create vm=? vm-pid=?  exe=/usr/bin/docker-current hostname=? addr=? terminal=? res=success'

削除するイメージを確認する。
[root@master audit]# docker images
REPOSITORY                                            TAG                  IMAGE ID            CREATED             SIZE
docker.io/busybox                                     latest               7968321274dc        6 weeks ago         1.11 MB

イメージを削除する。
[root@master audit]# docker rmi 7968321274dc

Dockerイメージを削除したときのログ(★印)を確認する。
[root@master audit]# ausearch -i -ts today -m VIRT_CONTROL
★type=VIRT_CONTROL msg=audit(2017年02月25日 20:52:04.171:1415) : pid=1025 uid=root auid=unset ses=unset msg='hostname=? reason=api op=remove vm=? vm-pid=? user=root auid=root exe=?  exe=/usr/bin/docker-current hostname=? addr=? terminal=? res=success'

8 成功/失敗で絞り込む方法(-sv)

成功したものだけを表示する(yes)
[root@server ~]# ausearch -i -if /var/log/audit/audit.log -sv yes
----
type=DAEMON_START msg=audit(2018年05月14日 15:50:12.485:9877) : op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=unset pid=556 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success
----
-以下、略-
失敗したものだけを表示する(no)
[root@master ~]# ausearch -i -if /var/log/audit/audit.log -sv no
----
type=SYSCALL msg=audit(2017年03月27日 09:20:54.437:1121) : arch=x86_64 syscall=stat ★success=no exit=EACCES(許可がありません) a0=0x7fb282b79510 a1=0x7ffdf5a8f5e0 a2=0x7ffdf5a8f5e0 a3=0x7fb276ec2792 items=0 ppid=6449 pid=6451 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:20:54.437:1121) : avc:  denied  { getattr } for  pid=6451 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
----
type=SYSCALL msg=audit(2017年03月27日 09:20:54.439:1122) : arch=x86_64 syscall=lstat ★success=no exit=EACCES(許可がありません) a0=0x7fb282b79668 a1=0x7ffdf5a8f5e0 a2=0x7ffdf5a8f5e0 a3=0x0 items=0 ppid=6449 pid=6451 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:20:54.439:1122) : avc:  denied  { getattr } for  pid=6451 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
-以下、略-

9 プロセスIDで絞り込む方法(-p)

PID=1だけのログを出力してみます。

[root@server ~]# ausearch -if /var/log/audit/audit.log -p 1
----
time->Mon May 14 15:50:12 2018
type=SERVICE_START msg=audit(1526280612.875:7): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=auditd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
----
-以下、略-

X その他(備忘録)

X.1 ausyscallコマンドの使い方

システムコールの名前から番号を求める。その逆もおこなう。

サポートしているシステムコールの名前と番号一覧を表示する。
[root@master ~]# ausyscall --dump
Using x86_64 syscall table:
0       read
1       write
2       open
3       close
4       stat
5       fstat
-中略-
317     seccomp
318     getrandom
319     memfd_create
320     kexec_file_load
321     bpf
[root@master ~]#

5番のシステムコールの名前を表示する。
root@master ~]# ausyscall 5
fstat

read文字列を名前に含むシステムコールの番号を表示する。
[root@master ~]# ausyscall read
read               0
pread              17
readv              19
readlink           89
readahead          187
set_thread_area    205
get_thread_area    211
readlinkat         267
preadv             295
process_vm_readv   310
[root@master ~]#

readだけの番号を知りたい場合は--exactを付ける。
[root@master ~]# ausyscall read --exact
0

x 参考情報

Linux auditdでアクセス拒否されたファイルを探し出す
AUDIT ログファイルの検索

hana_shin
写真は淡路島SAから明石海峡大橋を撮影したものです('19夏撮影)。'20年夏も3年連続で四国、大阪に行く予定でしたが、コロナ終息しないので断念。甲子園で高校野球もみれない。ほんと悲しい!コロナなんとかならないか!治療薬の研究開発している人がんばってほしいな。ソフトが少しでも役に立てればと思う今日この頃。取得済資格:ネットワークスペシャリスト、オンライン情報処理技術者。
https://hana-shin.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away