我已经以“许可”模式安装了SELinux随附的特定ROM。这是唯一适合我的设备的(好)ROM,无法更改SELinux的状态。
现在,我不确定这个决定的后果是什么,如果有人可以向我解释这个决定,我会很高兴的。所说的ROM的根源是“已禁用”,因此该设备据说是无根的,但是我不确定它如何与SELinux相适应。
我已经以“许可”模式安装了SELinux随附的特定ROM。这是唯一适合我的设备的(好)ROM,无法更改SELinux的状态。
现在,我不确定这个决定的后果是什么,如果有人可以向我解释这个决定,我会很高兴的。所说的ROM的根源是“已禁用”,因此该设备据说是无根的,但是我不确定它如何与SELinux相适应。
Answers:
TL; DR:如果愿意,请随意直接跳至底部的结论:)!
SELinux的目标是通过执行强制性策略来防止特权升级,该策略限制了非特权用户和特权用户的可能操作。
此处的“用户”一词还包括设备上运行的任何进程,无论它是否与实际的用户操作(人类,您;)直接相关,因为每个进程都使用某个系统的“用户”帐户运行。
过去,基于Unix的系统上的权限是使用所谓的自由访问控制(DAC)系统处理的。在此模型中:
root
在基于Unix的系统上称为),该超级用户是管理用户,可以访问系统上的所有内容。可以由人员(通常是系统管理员)以交互方式使用此帐户来维护或维修设备,但是通常,此帐户通常将由需要此类特权级别的后台或低级服务使用:设备驱动程序,网络配置服务,服务需要访问每个用户的文件或处理内部用户间的通信。这非常好,并且已经提供了良好的安全性。但是,诸如此类的情况呢?
root
发现运行中的服务存在错误,该错误会使攻击者诱使该服务运行某些任意代码,将会发生什么情况?这样的攻击者将获得对设备的完全访问权限。举一些具体的例子,可以通过向电话发送特制的网络配置信息(DHCP)或MMS来触发此类错误。SELinux来了。
SELinux是强制性访问控制(MAC)系统。在先前描述的DAC系统中,用户负责对自己的资源设置适当的权限,而对于MAC系统,特权和非特权用户都将执行系统范围的策略(由操作系统提供)。
这样可以通过以下方式解决上述两个问题:
DAC和MAC系统不是互斥的,相反,MAC系统(SELinux)充当DAC系统之后的第二层防御(传统的类Unix许可)。SELinux的工作是阻止任何违反该政策的活动,而该政策仅在给定DAC系统的情况下才会被接受。
棘手的是,这种策略的编写可能非常复杂:实际上,它必须涵盖每种设备的组件,以便在各种情况下都可以使用。实际上,无论采取哪种行动在您所处的情况下都是合法的:如果政策中没有采取该措施,则禁止这样做。因此,设计不当的策略可能会带来随机后果,例如应用程序崩溃,无法使用的功能等。
这就是为什么默认情况下,发布SELinux的第一个Android版本将其包含在“ Permissive”模式下的原因。在这种模式下,SELinux将记录违反策略的情况,但不会尝试阻止关联的活动。通过分析生成的日志文件,可以纠正和增强策略,直到仅剩下的违反策略确实是恶意或不良行为的时候。此时,SELinux可以变成“强制”模式:它现在不仅会记录日志,而且还会阻止所有有问题的操作。
SELinux是一种缓解技术。它不会阻止攻击者进入您的手机,但可以确保一旦攻击者能够做的事越少越好,理想情况下没有任何用处,因此首先消除了攻击手机的兴趣。
ROM越旧,打开这种访问权限的安全漏洞数量就越大。尽管存在这些已知的漏洞,但SELinux将是保持最低安全性的有效方法,但是要使其正常运行,SELinux依赖于复杂的策略。
如果您的ROM默认情况下随SELinux一起以“允许”模式提供,则可能意味着它包含的策略不够可靠,无法安全地切换到“强制”模式。
如果您具有足够的技术水平并且可以访问电话日志(dmesg
至少,但通常它们也被复制到logcat
:有一些应用程序可以查看后者,但是取决于您的Android版本,它们可能需要root访问权限),您可以检查是否您会找到“ avc”条目:这些消息告诉您SELinux刚刚检测到违反该策略的操作。
这是从CyanogenMod的网站获取的此类示例:
type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace"
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t
tcontext=system_u:object_r:sysfs_t tclass=file
如果没有,则只有少数几个,或者由于某些原因您认为它们可能无法使您无法使用手机,则可以尝试将SELinux切换到“ Enforcecing”模式。在较旧的CyanogenMod ROM中,这很容易,并且可以通过在GUI中使用隐藏选项(无需root手机或安装任何特定应用程序)来实现,我不知道其他ROM是否提供相同的功能,但是由于您使用了CyanogenMod标签我想你可能很幸运;)。
setenforce 1
从终端仿真器(以root用户身份)发行?