定位进程被kill或创建的父进程

有时进程会被其他服务或监控脚本莫名其妙的kill,为了找到真正发出kill或pkill信号的进程,我们可以使用linux下的audit工具来捕获发出创建或kill进程的父进程信息。

审核系统(audit)包含两个主要部分:用户空间的应用程序、实用程序,以及 kernel-side 系统调用处理。Kernel 的组件从用户空间的应用程序接受系统调用,并且通过三个过滤器中的一个过滤器来进行筛选: usertask 或者 exit。一旦系统调用通过其中的一个过滤器,就将通过 exclude 过滤器进行传送,这是基于审核规则的配置,并把它传送给审核的守护程序做进一步的处理。架构图如下:

注意:审核所收集的信息量可能影响系统性能, 一般信息收集完毕后需清理规则并停止审核服务

audit 安装部署

1
2
3
4
5
6
# 安装audit
yum install -y audit
# 启动audit
service auditd start
# 停止
service auditd stop

audit 常用命令

1
2
3
4
5
6
7
# 列出当前设置的规则
auditctl -l
# 清理已经设置的规则
auditctl -D
# 添加一条规则,捕获发出kill或pkill命令或创建进程的进程信息,
auditctl -a exit,always -S kill,execve

audit 日志分析示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
**************************
type=SYSCALL msg=audit(1643192492.720:23218): arch=c000003e syscall=59 success=yes exit=0 a0=2347970 a1=2346ce0 a2=23467b0 a3=7ffdda2a3780 items=3 ppid=29639 pid=5554 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="600_cdn_mmoonni" exe="/usr/bin/bash" key=(null)
****************************
type=SYSCALL msg=audit(1643192492.751:23269): arch=c000003e syscall=59 success=yes exit=0 a0=883430 a1=87be20 a2=883650 a3=7ffd21c2f330 items=2 ppid=5554 pid=5606 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pkill" exe="/usr/bin/pkill" key=(null)
type=EXECVE msg=audit(1643192492.751:23269): argc=2 a0="pkill" a1="monit"
************************
type=PATH msg=audit(1643192492.752:23274): item=0 name="/usr/bin/rpm" inode=50391106 dev=08:02 mode=0100755 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL
type=PATH msg=audit(1643192492.752:23274): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=20973072 dev=08:02 mode=0100755 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL
type=SYSCALL msg=audit(1643192492.764:23275): arch=c000003e syscall=62 success=yes exit=0 a0=2c27 a1=f a2=7f776e62f7b8 a3=7fffd20c62c0 items=0 ppid=5554 pid=5606 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pkill" exe="/usr/bin/pkill" key=(null)
type=OBJ_PID msg=audit(1643192492.764:23275): opid=11303 oauid=-1 ouid=0 oses=-1 ocomm="monit"
type=SYSCALL msg=audit(1643192492.764:23276): arch=c000003e syscall=62 success=yes exit=0 a0=2c7e a1=f a2=7f776e62f7b8 a3=7fffd20c62c0 items=0 ppid=5554 pid=5606 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pkill" exe="/usr/bin/pkill" key=(null)
type=OBJ_PID msg=audit(1643192492.764:23276): opid=11390 oauid=0 ouid=0 oses=52555 ocomm="jumper-monitor"
type=SYSCALL msg=audit(1643192492.764:23277): arch=c000003e syscall=62 success=yes exit=0 a0=2c7f a1=f a2=7f776e62f7b8 a3=7fffd20c62c0 items=0 ppid=5554 pid=5606 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pkill" exe="/usr/bin/pkill" key=(null)
type=OBJ_PID msg=audit(1643192492.764:23277): opid=11391 oauid=0 ouid=0 oses=52628 ocomm="zmq-proxy-monit"
type=SYSCALL msg=audit(1643192492.764:23278): arch=c000003e syscall=62 success=yes exit=0 a0=2c8b a1=f a2=7f776e62f7b8 a3=7fffd20c62c0 items=0 ppid=5554 pid=5606 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pkill" exe="/usr/bin/pkill" key=(null)
type=OBJ_PID msg=audit(1643192492.764:23278): opid=11403 oauid=0 ouid=0 oses=52628 ocomm="zcho-monitor"
type=SYSCALL msg=audit(1643192492.764:23279): arch=c000003e syscall=62 success=yes exit=0 a0=2c8c a1=f a2=7f776e62f7b8 a3=7fffd20c62c0 items=0 ppid=5554 pid=5606 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pkill" exe="/usr/bin/pkill" key=(null)
type=OBJ_PID msg=audit(1643192492.764:23279): opid=11404 oauid=0 ouid=0 oses=888 ocomm="promised-monito"
type=SYSCALL msg=audit(1643192492.765:23280): arch=c000003e syscall=59 success=yes exit=0 a0=8830d0 a1=87be60 a2=883650 a3=7ffd21c2f350 items=3 ppid=5554 pid=5609 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="service" exe="/usr/bin/bash" key=(null)
type=EXECVE msg=audit(1643192492.765:23280): argc=4 a0="/bin/sh" a1="/usr/sbin/service" a2="monit" a3="restart"
type=CWD msg=audit(1643192492.765:23280): cwd="/opt/soft/fast/agent/v0.0.25.e326b11"

如上例中的日志中发现promised-monito 被kill掉,从上述倒数第4行日志发现promised-monito 有收到消息, 那是谁发出的消息那,从倒数第5行日志看到ppid=5554 pid=5606exe="/usr/bin/pkill" 可以看出是通过父进程(5554) 接收到pkill系统调用发生的。

那么5554又是哪个进程?通过执行ps -ef |grep 5554 发现找不到任何5554的信息,从而怀疑5554执行完相关pkill动作后就退出了,所以在日志中继续向上查找有谁创建了5554进程。通过日志发现了items=3 ppid=29639 pid=5554 和行尾的comm="600_cdn_mmoonni" exe="/usr/bin/bash" 说明5554是一个脚本进程,脚本的名字包含600_cdn_mmoonni 这个名字可能被截断了。再次通过执行ps -ef |grep 29639 我们发现了进程信息如下的进程信息

1
2
3
4
root      7915 12188  0 14:23 pts/0    00:00:00 grep --color=auto fast
root 12957 1 0 2021 ? 02:26:12 ./fast-updater -c cfg.json
root 29639 1 0 2021 ? 08:00:13 ./fast-agent -c cfg.json

通过29639 这个信息我们在fast-agent 服务的脚本中找到了600_cdn_mmoonniitt_check.sh 这个脚本,并在脚本中发现了pkill monit 这样的杀死进程的命令。由于pkill是按照模糊匹配规则对所有运行进程中包含monit的进程发送pkill 命名,从而导致了我们的promised-monito 被意外杀死从而影响了线上服务的稳定性。

审核守护程序可以在 /etc/audit/auditd.conf 配置文件中进行配置。这个文件包括修改审核守护进程特性的配置参数。紧跟 # 字符(#)的任何空行或者文本都被忽略。所有配置参数的列表以及它们的解释都可以在 audit.conf(5) 手册页中找到。

配置 auditd

1
2
audit的默认配置文件路径为 /etc/audit/auditd.conf
audit的默认日志路径为 /var/log/audit/audit.log

默认 auditd 配置应该对大多数环境都适合。但是如果您的环境符合由 可控制存取保护档案(CAPP)所建立的标准,这将是公共标准认证的一部分,审核守护程序必须用以下设定配置:

  • 保存审核日志文件的目录(/var/log/audit/)经常应该在另一个分区。这将防止其他过程耗费此目录中的空间,并且为剩余的审核守护程序提供准确的检测。
  • max_log_file 参数详细说明了每个审核日志文件最少的占用空间,参数必须设定为充分利用保存审核日志文件分区所在的可用空间。
  • max_log_file_action 参数决定采取何种行动,一旦到达在 *max_log_file*中所设定的极限,则应该设定为 keep_logs 防止审核日志文件被重写。
  • space_left 参数明确说明磁盘中可用空间的数量,这样的话在*space_left_action* 参数中所设定的行动会被触发。此参数必须被设定为一个数字它会给予管理者足够的时间来回应和刷新磁盘空间。 space_left 价值取决于审核日志文件生成的速度。
  • 我们推荐您采用合适的通知方法把 space_left_action 参数设定为email 或者 exec
  • admin_space_left 参数明确说明自由空间的绝对最小数量,为了在 admin_space_left_action 参数中所设定的行动会被触发,必须设定一个会给予管理者的日志行动总够空间的值。
  • admin_space_left_action 参数必须设定 single 使系统属于单一用户模式,并且允许管理者开放一些磁盘空间。
  • disk_full_action 参数明确说明当保存审核日志文件的分区没有可用空间时,应该触发行动,并且必须设定为 halt 或者 single。这保障了当审核不再记录事件时,系统也能在单一用户模式下关闭或者运行。
  • *disk_error_action*,明确说明如果保存在审核日志文件的分区检测到错误时,应该采取行动,必须设定 syslogsingle 或者 halt,这取决于当地的安全政策有关硬件故障的处理。
  • flush 配置参数必须设定为 sync 或者 data。这些参数保证所有的审核事件数据能与磁盘中的日志文件同步。

定义审核规则

审核系统根据一组规则运行,这组规则定义了日志文件中所获取的内容。有三种类型的审核规则可以详细说明:

  • 控制规则 — 允许审核系统的行为和它的一些被修改的配置。
  • 文件系统规则 — 也被称为文件监视,允许审核进入特定文件或者目录。
  • 系统调用规则 — 允许记录任何指定程序所做的系统调用。

审核规则可以在命令行上使用 auditctl 实用程序进行详细说明(请注意这些规则并不是在重新启动时一直有效),或者写在 /etc/audit/audit.rules 文件中。以下两个部分总结了定义审核规则的两个方法。

使用 auditctl 实用程序来定义审核规则

注意

所有与审核服务交互的命令以及审核日志文件都需要 root 特权。作为 root 用户确保您执行这些命令。

auditctl 命令允许您控制审核系统的基本功能并且限定规则来决定哪些审核项目要记录。

定义控制规则

以下是一些控制规则允许您修改审核系统的行为:

  • -b

    在 Kernel 中设定最大数量的已存在的审核缓冲区,例如:~]# auditctl -b 8192

  • -f

    当追踪重要错误时设定所要完成的行动,例如:~]# auditctl -f 2以上配置触发 kernel 恐慌以防重要错误。

  • -e

    启动或者禁用审核系统或者锁定它的配置,例如:~]# auditctl -e 2以上命令锁定审核配置。

  • -r

    设定每秒生成信息的速率,例如:~]# auditctl -r 0以上配置在生成信息方面不设定限制速率。

  • -s

    报告审核系统状态,例如:~]# auditctl -s AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0

  • -l

    列出所有当前装载的审核规则,例如:~]# auditctl -l LIST_RULES: exit,always watch=/etc/localtime perm=wa key=time-change LIST_RULES: exit,always watch=/etc/group perm=wa key=identity LIST_RULES: exit,always watch=/etc/passwd perm=wa key=identity LIST_RULES: exit,always watch=/etc/gshadow perm=wa key=identity ⋮

  • -D

    删除所有当前装载的审核规则,例如:~]# auditctl -D No rules

定义文件系统规则

定义文件系统规则,使用以下语法:

1
auditctl -w path_to_file -p permissions -k key_name

其中:

  • path_to_file 是审核过的文件或者目录:
  • permissions 是被记录的权限:
    • r — 读取文件或者目录。
    • w — 写入文件或者目录。
    • x — 运行文件或者目录。
    • a — 改变在文件或者目录中的属性。
  • key_name 是可选字符串,可帮助您判定哪个规则或者哪组规则生成特定的日志项。

例 5.1. 文件系统规则

为了定义所有的输写访问权限以及在 /etc/passwd 文件中每个属性更改的规则,执行以下命令:

1
~]# auditctl -w /etc/passwd -p wa -k passwd_changes

请注意以下字符串 -k 选项是任意的。

为了定义记录所有输写访问权限,以及在 /etc/selinux/ 目录中所有文件属性更改的规则,执行以下命令:

1
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes

为了定义可以记录执行 /sbin/insmod 命令的规则,在 Linux Kernel 中插入模块,执行以下命令:

1
~]# auditctl -w /sbin/insmod -p x -k module_insertion

定义系统调用规则

为了定义系统调用规则,使用以下语法:

1
auditctl -a action,filter -S system_call -F 输入栏=value -k key_name

其中:

  • action 以及 filter 详细说明某个事件何时被记录。 action 可能是 always(经常是)或者never(从不是)其中之一。 filter 详细说明哪个 Kernel 规则匹配过滤器应用在事件中。以下是其中之一的与规则匹配的过滤器: taskexituser 以及 exclude。如果想要更多有关这些过滤器的信息,请参考〈第 5.1 节 “审核系统架构”〉的开始部分。
  • system_call 通过它的名字详细说明系统调用。所有的系统调用都可以在/usr/include/asm/unistd_64.h 文件中找到。许多系统调用都能形成一个规则,每个都在 -S 选项之后详细说明。
  • field=value 详细说明其他选项,进一步修改规则来与以特定架构、组 ID、进程 ID和其他内容为基础的事件相匹配。为了列出完整可用的输入栏类型和它们的数值,请参考 auditctl(8) 手册页。
  • key_name 是可选字符串,可帮助您判定哪个规则或者哪组规则生成特定的日志项。

例 系统调用规则

为了定义创造日志项 的规则,每次通过程序使用系统调用 adjtimex 或者 settimeofday。当系统使用 64 位架构,请执行以下命令:

1
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change

为了定义创造日志项的规则,每次由 ID 是 500 或更大的系统用户删除或者重命名文件时,使用(-F auid!=4294967295 选项排除没有设定登录 UID的用户),执行以下命令:

1
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

使用系统调用语法来定义文件系统也是有可能的。对于 -w /etc/shadow -p wa 文件系统规则来说,以下命令为模拟的系统调用创造了规则:

1
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa

/etc/audit/audit.rules 文件中定义持久的审核规则和控制

为了定义在重新启动时可以一直有效的审核规则,您必须把它们包含在 /etc/audit/audit.rules 文件中。这个文件使用相同的 auditctl 命令行语法来详细说明规则。任何在 # 之后的空行或者文本(#)可以忽略。

auditctl 指令可以被用来读取来自指定文件的规则,使用 -R 选项,例如:

1
~]# auditctl -R /usr/share/doc/audit-version/stig.rules

定义控制规则

文件可以只包括以下的控制规则,修改审核系统的行为: -b-D-e-f、或者 -r。如果想获取更多信息,请参考 “定义控制规则”一节

例 5.3. 在 audit.rules中控制规则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Delete all previous rules
-D

# Set buffer size
-b 8192

# Make the configuration immutable -- reboot is required to change audit rules
-e 2

# Panic when a failure occurs
-f 2

# Generate at most 100 audit messages per second
-r 100

定义文件系统和系统调用规则

使用 auditctl 语法定义文件系统和系统调用原则。在〈第 5.5.1 节 “使用 auditctl 实用程序来定义审核规则”〉中的例子可以用以下规则文件来表示:

例 5.4. 在 audit.rules 中的文件系统和系统调用规则

1
2
3
4
5
6
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
-w /sbin/insmod -p x -k module_insertion

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=500 -F auid!=4294967295 -k delete

预配置规则文件

/usr/share/doc/audit-*version*/ 目录中, 根据不同的认证标准 audit 软件包提供一组预配置规则文件:

  • nispom.rules — 审核规则配置符合《国家行业安全程序操作运行指南》的第八章中详细说明的要求。
  • capp.rules — 审核规则配置满足由 CAPP 设定的要求,是公共标准认定的一部分。
  • lspp.rules —审核规则配置满足由 LSPP 设定的要求是公共标准认定的一部分。
  • stig.rules — 审核规则配置满足由 STIG 所设定的要求。

为了使用这些配置文件,需要创造您原始文件的备份 /etc/audit/audit.rules 并且复制您所选择的有关 /etc/audit/audit.rules 文件的配置文件:

1
2
~]# cp /etc/audit/audit.rules /etc/audit/audit.rules_backup
~]# cp /usr/share/doc/audit-version/stig.rules /etc/audit/audit.rules

理解审核日志文件

默认情况下,在 /var/log/audit/audit.log 文件中的审核系统储存日志项;如果启用日志旋转,就可以旋转储存在同一目录中的 audit.log 文件。

以下的审核规则记录了每次读取或者修改 /etc/ssh/sshd_config 文件的尝试:

1
-w /etc/ssh/sshd_config -p warx -k sshd_config

如果 auditd 守护程序在运行,就需在审核日志文件中运行以下命令创造新事件:

1
~]# cat /etc/ssh/sshd_config

audit.log 文件中的事件如下所示:

1
2
3
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=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 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

以上事件由三个记录组成(每个以 type= 密码作为开始),共享相同的时间戳和编号。每个记录包含好几对 *name*=*value* ,由空格或者逗号分开。以下是关于以上事件的详细分析:

第一个记录

  • type=SYSCALL

    type 输入栏包含这类记录。在这个例子中, SYSCALL 数值详细说明连接到 Kernel 的系统调用触发了这个记录。为了列出所有可能的类型值和它们的解释,请参考〈第 B.2 节 “审核记录类型”〉。

  • msg=audit(1364481363.243:24287):

    msg 输入栏记录:audit(*time_stamp*:*ID*) 表格中记录的时间戳和特殊 ID。如果多种记录生成为相同审核事件的一部分,那么它们可以共享相同的时间戳和 ID。Kernel 或者用户空间应用提供不同的事件特定 *name*=*value* 组。

  • arch=c000003e

    arch 输入栏包括关于系统CPU架构的信息。值 c000003e 是使用 16 进制表示法编码。当使用 ausearch 命令搜寻审核记录时, 使用 -i 或者 --interpret 选项自动转化为 16 进制值可供人读取的对等语。 c000003e 值被解释为 x86_64

  • syscall=2

    syscall 输入栏记录了传输给 Kernel 的输入栏类型。值 2 可以与在 /usr/include/asm/unistd_64.h 文件中可供人读取的对等语相匹配。 在这种情况下,2open 系统调用。 请注意 ausyscall 实用程序允许您把系统调用数字转换成可供人读取的对等语。 使用 ausyscall --dump 命令来展示所有的系统调用和它们的号码。如想要获取更多信息,请参考 ausyscall(8) 手册页。

  • success=no

    success 输入栏记录了系统调用是否被成功地记录在特定事件中。在这种情况下,调用不会成功。

  • exit=-13

    exit 输入栏包含详细说明由系统调用所返回的退出代码的值。在不同的系统调用中,值各不相同。您可以用以下命令把值解释为可供人读取的对等语:ausearch --interpret --exit -13(假设您的审核日志中包含的事件没有退出代码 -13)。

  • a0=7fffd19c5592, a1=0, a2=7fffd19c5592, a3=a

    a0a3 输入栏记录了前四个参数,在这个事件中使用 16 进制编码系统调用。这些参数取决于使用的系统调用;它们可以通过 ausearch 实用程序来解释。

  • items=1

    items 输入栏包含事件中路径记录的数量。

  • ppid=2686

    items 输入栏记录了父进程 ID(PPID)。在这个情况下,2686bash 进程的 PPID。

  • pid=3538

    pid 输入栏记录了进程 ID(PID)。在这个情况下,3538cat 进程的 PID。

  • auid=500

    auid 输入栏记录了审核用户 ID,这个是 loginuid。这个ID是用户在登录时使用的并且即使当用户身份改变时,也可以通过每个进程获取该ID。(例如,通过切换用户账户,使用 su - john命令)。

  • uid=500

    uid 输入栏记录了开始分析进程的用户 ID。使用以下指令:ausearch -i --uid *UID*,用户 ID 就可以被解释为用户名字。在这个情况下, 500shadowman 的用户 ID。

  • gid=500

    gid 输入栏记录了开始分析进程用户的 ID组。

  • euid=500

    euid 输入栏记录了开始分析进程用户的有效用户 ID。

  • suid=500

    suid 输入栏记录了开始分析进程的用户的设置用户 ID。

  • fsuid=500

    fsuid 输入栏记录了开始分析进程用户的文件系统用户 ID。

  • egid=500

    egid 输入栏记录了开始分析进程用户的有效群组 ID。

  • sgid=500

    sgid 输入栏记录了开始分析进程用户的设置群组 ID。

  • fsgid=500

    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 值。

  • cwd="/home/shadowman"

    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 输入栏包含索引结点数字,与记录在事件中的文件和目录有关。以下命令体现了与 409248 索引结点数字相关的文件和目录:~]# find / -inum 409248 -print /etc/ssh/sshd_config

  • dev=fd:00

    dev 输入栏明确说明了设备的次要和主要 ID,它包含记录在事件中的文件和目录。在这种情况下,值代表 /dev/fd/0 设备。

  • mode=0100600

    mode 输入栏记录了文件和目录权限,用 16 进制表示法编码。在这种情况下,0100600 可以被解释为 -rw-------,意味着对于 /etc/ssh/sshd_config 文件,只有 root 用户拥有读取并且输入权限。

  • ouid=0

    ouid 输入栏记录了对象所有者的用户 ID。

  • ogid=0

    ogid 输入栏记录对象拥有者的群组 ID。

  • rdev=00:00

    rdev 输入栏包含记录的设备识别器只用于特殊文件。在这种情况下,正常文件是不用来作为记录文件的。

  • obj=system_u:object_r:etc_t:s0

    obj 输入栏记录了 SELinux 语境,运用此语境可以在执行时间中标注分析进程。

以上分析过的审核事件是事件所包含的所有可能位置栏的一小部分。为了列出所有事件的位置栏及解释,请参考〈第 B.1 节 “审核事件字段”〉。为了列出所有事件类型以及解释,请参考〈第 B.2 节 “审核记录类型”〉。

参考

1
2
3
4
5
6
7
https://blog.csdn.net/qwertyupoiuytr/article/details/58278349
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-understanding_audit_log_files
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-defining_audit_rules_and_controls
https://www.jianshu.com/p/4a7cc1944ea7
https://www.daimajiaoliu.com/daima/4795a4ea61003fc
https://paper.seebug.org/1594/#31
http://blog.chinaunix.net/uid-20662820-id-5326690.html

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!