SELinux: root 进程需要申请capability permissions吗?

结论

先结论:Android中的root进程,在使用到capability时,也需要在sepolicy中定义 allow capability规则,以申请capability permissions。

备注:如果不引入SELinux,例如在Ubuntu环境下,capability的主要作用不是对root进程本身直接施加限制,而是:通过授予最小的capability,使需要特权操作的程序,可以在非root状态下完成工作。

背景

在分析AndroidL的sepolicy规则时,我们发现,即使有效集和许可集满装的root进程,也仍需要在规则定义 allow capability权限。

以capability:dac_overrride为例,具有dac_override权限的系统服务主要包括:

ueventd.te(7):allow ueventd self:capability { chown mknod net_admin setgid fsetid sys_rawio dac_override fowner };
zygote.te(7):allow zygote self:capability { dac_override setgid setuid fowner chown };
netd.te(44):allow netd self:capability { dac_override chown fowner };
runas.te(14):dontaudit runas self:capability dac_override;
vold.te(20):allow vold self:capability { net_admin dac_override mknod sys_admin chown fowner fsetid };
installd.te(6):allow installd self:capability { chown dac_override fowner fsetid setgid setuid };
tee.te(9):allow tee self:capability { dac_override };

我们可以发现,上述申请了dac_override 的域各自对应的进程中,除了installd,其他进程实际上都是root进程。
对于这些由init启动的root进程,实际上,其有效集、许可集的所有bit都是为1的:

CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff

问题

dac_override提供的是旁路所有DAC检查的能力,普通进程有此能力后就可以访问任意的文件。而对于root进程,天然可以读写任意文件,旁路任意DAC检查,况且其dac_override 也是默认为1的。但是为什么这些进程域还需要额外申请capability:dac_override 了? 难道这些规则是多余的吗?

root进程也需要申请dac_override ? 比较难于理解,但是验证发现的确如此。

你需要将root进程的uid和gid号“去特权化”,不再认为其具有旁路DAC检查的特权。这时候,如果客体的DAC访问掩码设置 并未容许other的访问权限,你就需要为该进程申请dac_override capability了。

举个栗子

root进程pMonitor 希望访问/sys/power/state,其各自的安全标签如下:

u:r:powermanager:s0 root 614 1 /system/usr/bin/pMonitor
-rw-rw—- system system u:object_r:sysfs:s0 state

虽然已经定义了powermanager域对sysfs的读写规则,但是我们仍观察到如下日志:

<14>[ 22.962939] type=1400 audit(1262304009.139:63): avc: denied { dac_override } for pid=634 comm=”pMonitor” capability=1 scontext=u:r:tios_powermanager:s0 tcontext=u:r:tios_powermanager:s0 tclass=capability permissive=1

解决方法很简单,让pMonitor在启动时以system用户启动:

u:r:tios_powermanager:s0 system 623 1 /system/usr/bin/pMonitor

问题解决了


版权声明:本文为bhghost原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。