我在 Docker 容器中运行 Amazon Linux 2023,我希望能够将一些自定义审计规则加载到内核中,并确保在容器重新启动时保留这些规则。我已将规则添加到该文件中,并可以在尝试使用该文件加载规则/etc/audit/rules.d/audit.rules
时看到它们。但是,当我运行此命令时,我得到的输出是cat
augenrules --load
/usr/sbin/augenrules: No change
You must be root to run this program.
即使使用 sudo ( ) 运行命令,我也收到相同的响应sudo augenrules --load
。我已经以 root 身份登录(whoami
返回root
)。
我想知道是否可能是因为auditd
服务未启动(在这种情况下,的输出augenrules
具有误导性),但我无法检查此服务的状态,因为service auditd status
(以及任何其他服务命令,如service auditd start
)命令给我
Redirecting to /bin/systemctl status auditd.service
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
ps -p1
表示 PID 1 是 bash
PID TTY TIME CMD
1 pts/0 00:00:00 bash
我猜这是因为我在容器中运行,但不知道这是否就是为什么augenrules
当我是 root 用户时即使使用也拒绝运行的原因sudo
。
什么原因导致了这种行为?
将审计规则提供给内核是主机操作系统的工作,而不是容器的工作。容器中没有内核:只有主机系统才有内核。您的容器似乎也没有任何类型的
init
系统,尽管其他容器可以设置一个系统。说“我在 Docker 容器中运行 Amazon Linux 2023”有点误导,因为容器永远不是一个完整的操作系统。更准确的说法是,你有一个由 Amazon Linux 2023 的用户空间部分构建的容器,它只包含足够的部分来实现容器的设计目的,无论这个目的是什么。
在容器中,您可能拥有 UID 0(= 成为 root 的传统定义),但容器的 UID 编号会映射到每个容器的更高值范围,以便它们不会与主机系统或其他容器中分配的 UID 重叠。当您尝试使用 时
augenrules --load
,内核会看到映射的 UID,并且由于它不是 0,因此会拒绝该请求。