首页 电脑教程

安全增强式Linux(SELinux,Security-Enhanced Linux)是一个Linux内核的安全模块,其提供了访问控制安全策略机制,包括了强制访问控制(Mandatory Access Control,MAC)。[WikiPedia]

功能介绍

SELinux作为安全模块,可以提供对一些目录或者文件和命令读取,写入,搜寻等一系列操作进行保护,也可以防护恶意软件写入系统文件导致的破坏。
美国国家安全局的安全增强式Linux团队称:

安全增强式Linux是一组给Linux核心的补丁,并提供一些更强、更安全的强制访问控制架构来和核心的主要子系统共同运作。基于机密及完整性原则,它提供一个架构来强制信息的分离,以对付入侵的威胁或任何企图略过安全架构的应用程序。借此限制恶意或设计不良的程序可能造成的破坏。它包含一组安全性原则配置配置文件的范本以符合一般的安全性目标。

规则

在te文件中常见的四种命名的规则:
allow:赋予某项权限。
allowaudit:audit含义就是记录某项操作。默认情况下是SELinux只记录那些权限检查失败的操作。allowaudit则使得权限检查成功的操作也被记录。注意,allowaudit只是允许记录,它和赋予权限没关系。赋予权限必须且只能使
用allow语句。
dontaudit:对那些权限检查失败的操作不做记录。
neverallow:用来检查安全策略文件中是否有违反该项规则的allow语句。如果有违反,则构建失败。

简单撰写

我们使用adb shell dmesg | grep 'avc'读取规则
例如:

avc: denied { getpgid } for scontext=u:r:system_server:s0 tcontext=u:r:app_zygote:s0:c512,c768 tclass=process permissive=0

这是system_server需要getpgid app_zygote进程,所以我们在system_server.te撰写

allow system_server app_zygote:process { getpgid };

常见错误

1.授权untrusted_app
不要授权untrusted_app任意权限,这相当于第三方软件可以随意进行这些操作,相当危险,如果这个软件是你需要授权的,请在seapp_context进行配置。否则任意第三方软件都可以获取到此权限。
2.过度拒绝权限[AOSP教程]:
以下示例规则类似于锁着前门,但开着窗户:

allow { domain -untrusted_app } scary_debug_device:chr_file rw_file_perms

该规则的意图很明确:除了第三方应用之外,其他所有应用都可以访问调试设备。
该规则存在几个方面的缺陷。排除 untrusted_app 所起到的效果微不足道,因为所有应用都可以选择在 isolated_app 网域中运行服务。同样,如果第三方应用的新网域被添加到了 AOSP,它们也可以访问 scary_debug_device。该规则过于宽容。对于大多数网域来说,能够访问该调试工具并不能使它们获益。该规则应编写为仅允许需要访问该调试工具的域。

3.过度依赖aduit2allow
虽然aduit2allow可以加速SELinux的撰写过程,但是很容易出现权限过宽的问题,这样过度授权可以约等于是Permissive模式,需要仔细检查权限,例如一些第三方软件的allow规则。



文章评论

目录