破译特定的 SELinux/AVC 错误

破译特定的 SELinux/AVC 错误

这个 SELinux avc 错误(由 生成ausearch)让我很困惑。

time->Fri Nov 13 16:04:49 2015
type=PROCTITLE msg=audit(1447452289.136:242): proctitle="/opt/firefox/firefox"
type=SYSCALL msg=audit(1447452289.136:242): arch=c000003e syscall=9 success=yes exit=140443907256320 a0=0 a1=10000 a2=7 a3=22 items=0 ppid=3742 pid=4212 auid=4294967295 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=4294967295 comm="firefox" exe="/opt/firefox/firefox" subj=system_u:system_r:initrc_t:s0 key=(null)
type=AVC msg=audit(1447452289.136:242): avc:  denied  { execmem } for  pid=4212 comm="firefox" scontext=system_u:system_r:initrc_t:s0 tcontext=system_u:system_r:initrc_t:s0 tclass=process permissive=1

whereis在 Firefox 上做了一个,并被告知它的位置是/usr/bin/firefox。这是到 的符号链接/opt/firefox/firefox。进一步检查 Firefox 的上下文我发现:

 # ls -Z /usr/bin/firefox 
 system_u:object_r:bin_t:SystemLow /usr/bin/firefox
 # ls -Z /opt/firefox/firefox
 system_u:object_r:usr_t:SystemLow /opt/firefox/firefox

那么它是从哪里来initrc_t的呢?

另外,主题和目标是什么?我很确定这个主题是/opt/firefox/firefox,但考虑到上下文,我有疑问。目标是什么我完全不知道。

此外,execmem这个上下文中是什么? (就此而言,消息说syscall=9。我在哪里可以找到哪些系统调用编号映射到什么?)Google 仅显示它出现在 avc 错误中。

我更喜欢一个更好地找出 avc 错误的答案,而不是这个问题的具体答案。

答案1

如果您使用ausearch -i,那么-i将“解释”系统调用,以便它们对人们更有用。 Syscall 9 是“mmap”,基于 execmem 拒绝(这似乎在 SELinux 停止进程创建可写或可执行内存区域时发生)是有意义的。阻止它是个好主意 - 但如果绝对必须启用它,您可以通过将allow_execstack布尔值设置为 true 来实现。

initrc_t正在运行的用户的目标,而不是正在运行的文件。从审核消息来看,Firefox 可能是从这里的 init 脚本启动的(基于 initrc_t,审核 UID 是-1- 又称为“未初始化”,并且没有 TTY)。

我认为这个问题现在已经消失了,可能是因为 SELinux 被禁用了;这似乎是人们通常解决奇怪的 SELinux 问题的方式。 :) 但无论如何,这里有一个让下一个人开始的答案。

相关内容