我们正在根据 CIS 基准规则进行 Linux 操作系统强化。我们使用此命令提示符来验证我们的规则“确保禁用 SSH root 登录(自动)”。
输入命令:
find <partition> -xdev \( -perm -4000 -o -perm -2000 \) -type f |
awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>='"$(awk '/^\s*UID_MIN/{print $2}' /etc/login.defs)"' -F auid!=4294967295 -k privileged" }'
输出命令:
验证所有生成的行都是
.rules
中的文件/etc/audit/rules.d/
和auditctl -l
.
我们在 ansible 的帮助下配置了 Linux Defender 防火墙,并尝试在命令提示符中获取值。但是在命令提示符下/etc/audit/rules.d
,当我们更改任何 .rules 文件的内容时,我们无法使用上述输入命令并手动使用分区以及在文件夹中获取权限进程,即使系统重新启动后,更改也不会反映在auditctl -l
命令中。
您能帮助我们编写 ansible 脚本来获得所需的输出吗?
答案1
请注意,应<partition>
替换为您希望为其创建审核规则的文件系统的任何部分。最常见的情况可能是为整个系统创建审核规则:在这种情况下,您应该<partition>
仅替换为/
.
命令示例的措辞在这里有点误导:在这种情况下<partition>
,不是参考一个磁盘分区类似/dev/sda1
,但只是您希望为其创建审核规则的文件系统树的一部分。
该命令会将规则输出到标准输出:要使用它们,您应该将输出重定向到适当的文件。如果你是创造审计规则,您可以简单地将输出重定向到例如/etc/audit/rules.d/cis.rules
,然后运行auditctl -R /etc/audit/rules.d/cis.rules
以使它们立即生效:
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f |
awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>='"$(awk '/^\s*UID_MIN/{print $2}' /etc/login.defs)"' -F auid!=4294967295 -k privileged" }' \
> /etc/audit/rules.d/cis.rules
如果你是验证现有规则,您应该将输出重定向到临时文件,然后将其与/etc/audit/rules.d/
目录中的现有规则文件进行比较。为了便于比较,您可能需要首先对两个文件进行排序,以便可以使用diff
类似工具轻松查看任何差异。
所以一个简单的验证脚本可能是:
#!/bin/sh
ACTUAL_RULES=/etc/audit/rules.d/cis.rules
# Create a temporary directory and set it to auto-delete on script exit
WORKDIR=$(mktemp -d) && trap "rm -rf $WORKDIR" EXIT
# Create a sorted set of what the rules should be
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f |
awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>='"$(awk '/^\s*UID_MIN/{print $2}' /etc/login.defs)"' -F auid!=4294967295 -k privileged" }' |
sort > $WORKDIR/cis.rules.sorted.should-be
# sort the actual rules
sort < $ACTUAL_RULES >$WORKDIR/cis.rules.sorted.actual
# compare expected vs. actual
diff -u $WORKDIR/cis.rules.sorted.should-be $WORKDIR/cis.rules.sorted.actual
如果脚本没有输出(返回码为0),则验证成功。
如果预期规则与实际规则之间存在差异,脚本将退出并返回代码 1,输出diff -u
将指示额外规则(以单个 前缀+
)和缺失规则(以单个 前缀-
)。如果diff
可以在您的发行版中对其输出进行着色,则额外的规则将以绿色输出,缺少的规则将以红色输出。