注意:
- 此教程在 Oracle 提供的免费实验室环境中提供。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成练习后,将这些值替换为特定于云环境的值。
使用 Auditd 审计 Oracle Linux
简介
Auditd 是一个用户空间系统守护进程,在后台运行,生成有关在 Oracle Linux 上执行的不同活动的日志。
本教程将指导您完成安装、配置和使用 auditd。
目标
在此实验室中,您将学习:
- 安装审计软件包
- 管理审计服务
- 创建审计规则
- 搜索审计日志
先决条件
- 安装有 Oracle Linux 8 的系统具有以下配置:
- 具有
sudo权限的非 root 用户
- 具有
安装审计软件包
注意:使用免费实验室环境时,请参见 Oracle Linux Lab Basics 了解连接和其他使用说明。
默认情况下,Oracle Linux 会安装审计软件包。
如果尚未连接,请打开一个终端并通过 ssh 连接到 ol8-server 系统。
ssh oracle@<ip_address_of_ol8-server>
检查系统是否预安装了 audit 软件包。
sudo dnf list installed "audit"
如果不在系统上,请安装它。
sudo dnf install -y audit
auditd 守护进程的缺省配置文件位于 /etc/audit/auditd.conf。
管理审计服务
安装审计软件包后,启动 auditd 服务。首先,检查当前状态。
sudo systemctl status auditd
输出示例:
[oracle@ol8-server ~]$ sudo systemctl status auditd * auditd.service - Security Auditing Service Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor pres> Active: active (running) since Fri 2022-04-01 23:59:52 GMT; 2min 38s ago Docs: man:auditd(8) https://github.com/linux-audit/audit-documentation Main PID: 1385 (auditd) Tasks: 2 (limit: 100140) Memory: 2.5M CGroup: /system.slice/auditd.service `-1385 /sbin/auditd Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: enabled 1 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: failure 1 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: pid 1385 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: rate_limit 0 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_limit 8192 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: lost 0 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog 0 Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000 Apr 01 23:59:52 localhost.localdomain systemd[1]: Started Security Auditing Ser> lines 1-21/21 (END)
输出显示服务为 (running) 和 enabled。
enabled 状态指示我们已将服务配置为在引导时启动。如果不是这样,请以 root 用户身份启动服务以收集审计信息并将其写入日志。
启动服务。
sudo service auditd start
将 auditd 配置为在引导时启动。
sudo systemctl enable auditd
注:仅与 auditd 守护进程进行适当交互的方式使用
service命令。
service命令可确保记录auid值。仅将systemctl命令与enable和status操作一起使用。
临时启用和禁用审计
审计控制实用程序 auditctl 与内核审计组件交互,以管理规则并控制事件生成过程的许多设置和参数。
检查内核审计子系统的状态。
sudo auditctl -s
输出示例:
[oracle@ol8-server ~]$ sudo auditctl -s enabled 1 failure 1 pid 1399 rate_limit 0 backlog_limit 8192 lost 0 backlog 0 backlog_wait_time 60000 loginuid_immutable 0 unlocked
临时禁用 auditd。
sudo auditctl -e 0
重新启用 auditd。
sudo auditctl -e 1
注:
pid显示了auditd服务进程 ID。pid值0指示服务未运行。
auditctl -e 启用标志还接受值 2,这将锁定审计配置。
如果以这种方式锁定了审计配置,则需要重新引导才能解锁该配置。man auditctl 中提供了更多详细信息。
查找审计规则和日志
默认情况下,Oracle Linux 将审计日志存储在 /var/log/audit/audit.log 中。
审计规则位于 /ect/audit/audit.rules 中。Oracle Linux 从文件 /etc/audit/rules.d/audit.rules 生成默认规则集。
sudo cat /etc/audit/audit.rules
sudo cat /etc/audit/rules.d/audit.rules
输出示例:
## First rule - delete all -D ## Increase the buffers to survive stress events. ## Make this bigger for busy systems -b 8192 ## This determine how long to wait in burst of events --backlog_wait_time 60000 ## Set failure mode to syslog -f 1
具有审计控制实用程序的规则
使用 auditctl 程序控制行为、获取状态以及添加或删除规则。
添加一个审计规则,记录任何读取或修改 /etc/ssh/sshd_config 文件的尝试。
sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config
其中:
-w:在给定路径创建监视。-p:设置触发监视的权限 [读取,写入,执行,属性]。-k:设置用于唯一标识规则生成的审计记录的密钥筛选器。
显示规则。
sudo auditctl -l
新规则将添加到列表底部,但也可以将其添加到顶部。
检查是否已将新规则添加到 /etc/audit/audit.rules 文件中。
sudo cat /etc/audit/audit.rules
输出示例:
[oracle@ol8-server ~]$ sudo cat /etc/audit/audit.rules ## This file is automatically generated from /etc/audit/rules.d -D -b 8192 -f 1 --backlog_wait_time 60000
规则不显示在文件中。为什么不呢?
auditctl 创建的规则不会添加到 audit.rules 文件中。因此,这些更改是瞬态的,在系统重新引导后不会保留。
通过将规则添加到 /etc/audit/rules.d/my.rules 中的定制规则集文件,使规则成为永久性规则。添加的规则格式与不使用 auditctl 的 auditctl 命令的语法匹配。应按行编写规则并进行组合以优化性能。
sudo tee /etc/audit/rules.d/my.rules > /dev/null <<'EOF'
-w /etc/ssh/sshd_config -p rwxa -k sshd_config
EOF
显示规则。
sudo cat /etc/audit/rules.d/my.rules
测试规则。
cat /etc/ssh/sshd_config
该命令返回 cat: /etc/ssh/sshd_config: Permission denied,并在 audit.log 中生成以下事件。
sudo cat /var/log/audit/audit.log | grep sshd_config
输出示例:
type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1AUID="oracle" type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"ARCH=x86_64 SYSCALL=openat AUID="oracle" UID="oracle" GID="oracle" EUID="oracle" SUID="oracle" FSUID="oracle" EGID="oracle" SGID="oracle" FSGID="oracle" type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0OUID="root" OGID="root"
搜索审计日志
搜索日志的另一种方法是使用 ausearch 命令。
使用此命令获取相同的信息。
sudo ausearch --key sshd_config
输出示例:
Email option is specified but /usr/lib/sendmail doesn't seem executable. ---- time->Sat Apr 2 17:02:03 2022 type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1 ---- time->Sat Apr 2 18:19:43 2022 type=PROCTITLE msg=audit(1648923583.793:268315): proctitle=636174002F6574632F7373682F737368645F636F6E666967 type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=CWD msg=audit(1648923583.793:268315): cwd="/home/oracle" type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
根据输出格式,ausearch 的输出更易于使用和读取。我们可以添加 -i 或 --interpret 选项,以便于阅读日志。此选项将数字实体解释为文本,例如将 uid 转换为帐户名称。
sudo ausearch -i -k sshd_config
输出示例:
Email option is specified but /usr/lib/sendmail doesn't seem executable. ---- type=CONFIG_CHANGE msg=audit(04/02/2022 17:02:03.746:266810) : auid=oracle ses=15792 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=sshd_config list=exit res=yes ---- type=PROCTITLE msg=audit(04/02/2022 18:19:43.793:268315) : proctitle=cat /etc/ssh/sshd_config type=PATH msg=audit(04/02/2022 18:19:43.793:268315) : item=0 name=/etc/ssh/sshd_config inode=67688941 dev=fc:00 mode=file,600 ouid=root ogid=root 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 cap_frootid=0 type=CWD msg=audit(04/02/2022 18:19:43.793:268315) : cwd=/home/oracle type=SYSCALL msg=audit(04/02/2022 18:19:43.793:268315) : arch=x86_64 syscall=openat success=no exit=EACCES(Permission denied) a0=0xffffff9c a1=0x7ffd08b6c575 a2=O_RDONLY a3=0x0 items=1 ppid=3406680 pid=3428336 auid=oracle uid=oracle gid=oracle euid=oracle suid=oracle fsuid=oracle egid=oracle sgid=oracle fsgid=oracle tty=pts0 ses=15792 comm=cat exe=/ usr/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=sshd_config
有关搜索 audit.log 的更多格式设置选项和方法,请参见 man ausearch。
加载预配置规则
Oracle Linux 提供了合并 /etc/audit/rules.d 中找到的所有组件审计规则文件的脚本。合并后,新文件将替换现有的 /etc/audit/audit.rules。此脚本内置在 auditd 服务文件中并在服务启动时运行。
检查是否存在任何要加载的现有规则更改。
sudo augenrules --check
输出状态为 Rules have changed and should be updated。此更改是因为我们以前创建的 my.rules 文件位于 /etc/audit/rules.d 中。
删除以前添加的 sshd_config 自定义规则以轻松跟踪新规则添加。
sudo auditctl -D -k sshd_config
合并 my.rules 定制规则文件。
sudo augenrules --load
输出示例:
[oracle@ol8-server ~]$ sudo augenrules --load No rules enabled 1 failure 1 pid 1395 rate_limit 0 backlog_limit 8192 lost 0 backlog 0 backlog_wait_time 60000 enabled 1 failure 1 pid 1395 rate_limit 0 backlog_limit 8192 lost 0 backlog 0 backlog_wait_time 60000 enabled 1 failure 1 pid 1395 rate_limit 0 backlog_limit 8192 lost 0 backlog 0 backlog_wait_time 60000
检查活动的审计规则。
sudo auditctl -l
输出示例:
[oracle@ol-lab-2022-03-23-182415-0 ~]$ sudo auditctl -l -w /etc/ssh/sshd_config -p rwxa -k sshd_config
向新文件 new.rules 添加其他规则。
注:只有以
.rules结尾的文件才由augenrules读取并加载。
sudo tee /etc/audit/rules.d/new.rules > /dev/null <<'EOF'
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
EOF
加载新规则。
sudo augenrules --load
重新检查有效规则。
sudo auditctl -l
新规则将加载并合并到 audit.rules 文件中。
sudo cat /etc/audit/audit.rules
系统在合并过程中创建了一个备份文件 /etc/audit/audit.rules.prev。
sudo ls -l /etc/audit
Oracle Linux 审计系统提供的信息有助于入侵检测。
有关显示的实用程序,请查看 man 页面。然后,使用所学内容向系统添加定制审计规则以用于特定的日志记录事件。
详细信息
请参阅其他相关资源:
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle 学习资源管理器。
有关产品文档,请访问 Oracle 帮助中心。