11.5. 了解审计日志文件
默认情况下,审计系统将日志条目存储在 /var/log/audit/audit.log
文件中;如果启用了日志轮转,则轮转的 audit.log
文件也在存储同一个目录中。
添加以下审计规则,来记录读取或修改 /etc/ssh/sshd_config
文件的每次尝试:
# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config
如果 auditd
守护进程正在运行,使用以下命令在审计日志文件中创建新事件,例如:
$ cat /etc/ssh/sshd_config
audit.log
文件中的该事件如下。
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config" type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman" type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
以上事件由四个记录组成,它们共享相同的时间戳和序列号。记录始终以 type=
关键字开头。每个记录由多个 name=value
对组成,它们之间由空格或逗号分开。对上述事件的详细分析如下:
第一条记录
type=SYSCALL
-
type
字段包含记录的类型。在本例中,SYSCALL
值指定此记录是由对内核的系统调用触发的。
msg=audit(1364481363.243:24287):
msg
字段记录:-
audit (time_stamp:ID)
格式的记录的时间戳和唯一ID。如果多个记录是作为同一审计事件的一部分而产生的,则它们共享相同的时间戳和 ID。时间戳使用 Unix 时间格式 - 自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。 -
由内核或用户空间应用程序提供的各种特定于事件的
name=value
对。
-
arch=c000003e
-
arch
字段包含系统的 CPU 架构信息。该值c000003e
以十六进制表示法编码。当使用ausearch
命令搜索审计记录时,请使用-i
或--interpret
选项来自动将十六进制值转换成人类可读的等效值。c000003e
值被解释为x86_64
。 syscall=2
-
syscall
字段记录了发送到内核的系统调用的类型。值2
可以与/usr/include/asm/unistd_64.h
文件中人类可读的等效值匹配。在本例中,2
是打开
系统调用。请注意,ausyscall
工具允许您将系统调用号转换为人类可读的等效值。使用ausyscall --dump
命令显示所有系统调用及其编号的列表。如需更多信息,请参阅ausyscall
(8)手册页。 success=no
-
success
字段记录了该特定事件中记录的系统调用是成功还是失败。在这种情况下,调用不成功。 exit=-13
exit
字段包含一个值,指定系统调用返回的退出码。此值因不同的系统调用而不同。您可以使用以下命令将值解释成人类可读的等效值:# ausearch --interpret --exit -13
请注意,上例假定您的审计日志包含一个失败的事件,其退出码为
-13
。a0=7fffd19c5592
,a1=0
,a2=7fffd19c5592
,a3=a
-
a0
至a3
字段记录了该事件中系统调用的前四个参数,用十六进制符号编码。这些参数取决于使用的系统调用,可以通过ausearch
工具来解释它们。 items=1
-
items
字段包含系统调用记录后面的 PATH 辅助记录的数量。 ppid=2686
-
ppid
字段记录了父进程ID(PPID)。在这种情况下,2686
是父进程(如bash
)的 PPID 。 pid=3538
-
pid
字段记录了进程 ID(PID)。在本例中,3538
是cat
进程的 PID。 auid=1000
-
auid
字段记录了审计用户 ID,即loginuid。此 ID 在登录时分配给用户,并被每个进程继承,即使用户的身份改变了,例如使用su - john
命令切换用户帐户。 uid=1000
-
uid
字段记录了启动分析过程的用户的用户 ID。使用以下命令可以将用户 ID 解释成用户名:ausearch -i --uid UID
。 gid=1000
-
gid
字段记录了启动分析过程的用户的组 ID。 euid=1000
-
euid
字段记录了启动分析过程的用户的有效用户 ID。 suid=1000
-
suid
字段记录了启动分析过程的用户的设置用户 ID。 fsuid=1000
-
fsuid
字段记录了启动分析进程的用户的文件系统用户 ID。 egid=1000
-
egid
字段记录了启动分析过程的用户的有效组 ID。 sgid=1000
-
sgid
字段记录了启动分析过程的用户的组 ID。 fsgid=1000
-
fsgid
字段记录了启动分析进程的用户的文件系统组 ID。 tty=pts0
-
tty
字段记录了分析过程被调用的终端。 ses=1
-
ses
字段记录了分析过程被调用的会话的会话 ID。 comm="cat"
-
comm
字段记录了用于调用分析过程的命令行名称。在本例中,cat命令用于触发此审计事件
。 exe="/bin/cat"
-
exe
字段记录了用于调用分析过程的可执行文件的路径。 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
-
subj
字段记录了被分析的进程在执行时被标记的 SELinux 上下文。 key="sshd_config"
-
key
记录了与在审计日志中生成该事件的规则相关联的管理员定义的字符串。
第二条记录
type=CWD
在第二条记录中,
type
字段值为CWD
- 当前工作目录。此类型用于记录从中调用第一条记录中指定的系统调用的进程的工作目录。此记录的目的是记录当前进程的位置,以防在相关 PATH 记录中捕获到相对路径。这样,就可以重建绝对路径。
msg=audit(1364481363.243:24287)
-
msg
字段持有与第一条记录中的值相同的时间戳和 ID 值。时间戳使用 Unix 时间格式 - 自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。 cwd="/home/user_name"
-
cwd
字段包含系统调用所在目录的路径。
第三条记录
type=PATH
-
在第三条记录中,
type
字段值为PATH
。审计事件包含作为参数传递给系统调用的每个路径的PATH
类型记录。在这个审计事件中,只有一个路径(/etc/ssh/sshd_config
) 被用作参数。 msg=audit(1364481363.243:24287):
-
msg
字段拥有与第一和第二条记录中的值相同的时间戳和 ID 值。 item=0
-
item
字段表示在SYSCALL
类型记录所引用的项目总数中,当前记录是哪个项目。这个数是以零为基础的;值为0
表示它是第一项。 name="/etc/ssh/sshd_config"
-
name
字段记录了作为参数传递给系统调用的文件或目录的路径。在本例中,它是/etc/ssh/sshd_config
文件。 inode=409248
inode
字段包含与该事件中记录的文件或目录相关联的 inode 号。以下命令显示与409248
inode 号相关联的文件或目录:# find / -inum 409248 -print /etc/ssh/sshd_config
dev=fd:00
-
dev
字段指定了包含该事件中记录的文件或目录的设备的次要和主要 ID。在本例中,值表示/dev/fd/0
设备。 mode=0100600
-
mode
字段记录文件或目录权限,由数字标记。它是st_mode
字段中的stat
命令返回。如需更多信息,请参阅stat(2)
手册页。在这种情况下,0100600
可以解释为-rw-------
,这意味着只有 root 用户对/etc/ssh/sshd_config
文件具有读和写的权限。 ouid=0
-
ouid
字段记录了对象所有者的用户 ID。 ogid=0
-
ogid
字段记录了对象所有者的组 ID。 rdev=00:00
-
rdev
字段包含一个记录的设备标识符,仅用于特殊文件。在这种情况下,不会使用它,因为记录的文件是一个常规文件。 obj=system_u:object_r:etc_t:s0
-
obj
字段记录了 SELinux 上下文,在执行时,记录的文件或目录被贴上了标签。 nametype=NORMAL
-
nametype
字段记录了每个路径记录在给定系统调用的上下文中的操作意图。 cap_fp=none
-
cap_fp
字段记录了与设置文件或目录对象的基于文件系统的允许能力有关的数据。 cap_fi=none
-
cap_fi
字段记录了与文件或目录对象的基于继承文件系统的能力设置有关的数据。 cap_fe=0
-
cap_fe
字段记录了文件或目录对象基于文件系统能力的有效位的设置。 cap_fver=0
-
cap_fver
字段记录了文件或目录对象基于文件系统能力的版本。
第四条记录
type=PROCTITLE
-
type
字段包含记录的类型。在本例中,PROCTITLE
值指定此记录提供触发此审计事件的完整命令行,该事件是由对内核的系统调用触发的。 proctitle=636174002F6574632F7373682F737368645F636F6E666967
-
proctitle
字段记录了用于调用分析过程的命令的完整命令行。该字段采用十六进制表示法编码,不允许用户影响审计日志解析器。对触发此审计事件的命令进行文本解码。当使用ausearch
命令搜索审计记录时,请使用-i
或--interpret
选项来自动将十六进制值转换成人类可读的等效值。636174002F6574632F7373682F737368645F636F6E666967
值解释为cat /etc/ssh/sshd_config
。