如何审核 docker 容器内的 selinux 拒绝

How to audit the selinux denial inside a docker container

我有一个docker容器,当禁用selinux时,它运行良好; 但是当启用 selinux 时(即 docker 守护进程以 --selinux-enabled 启动),它无法启动。

所以失败应该是selinux denial导致的,但是selinux audit log中没有显示。当我使用 "ausearch -m XXX | audit2allow ..." 生成策略时,它不包含任何拒绝信息。

想知道如何获取容器内出现的 selinux 拒绝信息,以便我可以使用它来生成我的策略文件?

ps: 我检查了访问文件的标签信息,他们似乎是正确的,但是访问(ls)被拒绝:

# ls -dlZ /usr/bin
dr-xr-xr-x. root root system_u:object_r:container_file_t:s0:c380,c857 /usr/bin
# ls /usr/bin
ls: cannot open directory /usr/bin: Permission denied

更多:所选答案回答了问题,但现在的问题是审核日志显示访问权限是读取 "unlabeled_t",但正如 "ls -dZ /usr/bin" 显示的那样,它是 "container_file_t".我把它放在一个单独的问题中: Why SELinux denies access to container internal files and claims them as "unlabled_t"?

该政策可能包含 dontaudit 规则。 Dontaudit 规则不允许访问,但禁止记录特定访问。

您可以使用 semanage:

禁用 dontaudit 规则
semanage dontaudit off

解决问题后,您可能想重新打开 dontaudit 规则以减少日志噪音。

也可以使用 sesearch:

搜索可能的 dontaudit 规则
sesearch --dontaudit -t container_file_t