【Android】SElinux(Security-Enhanced Linux)

作为安卓安全模型的一部分,安卓使用安全增强型Linux(SELinux)对所有进程实施强制性访问控制(MAC),甚至是以root/超级用户权限(Linux能力)运行的进程。许多公司和组织都为安卓的SELinux实现做出了贡献。有了SELinux,安卓可以更好地保护和限制系统服务,控制对应用程序数据和系统日志的访问,减少恶意软件的影响,并保护用户免受移动设备上代码的潜在缺陷。
SELinux根据默认拒绝的原则运作。任何没有明确允许的东西都会被拒绝。SELinux可以在两种全局模式下运行。

  • Permissive mode: 其中权限拒绝被记录下来,但不强制执行。
  • Enforcing mode: 其中权限拒绝被记录和强制执行。
  • Disabled:表示SELinux没有实际运行。
setenv append_bootargs androidboot.selinux=permissive
saveenv

getenforce、setenforce命令
可以通过getenforce和setenforce命令来查看和切换当前的模式,如:

# 查看当前系统SELinux模式
jyq@ubuntu:~$ getenforce
Permissive
# 将SELinux模式设置为Enforcing模式,1表示Enforing模式,0表示Permissive模式
jyq@ubuntu:~$ sudo setenforce 1
jyq@ubuntu:~$ getenforce
Enforcing

但是需要注意的是,setenforce命令无法在Disabled的模式下进行模式的切换,如果要切换Diabled模式,则通过上面的bootargs来实现。

SELinux概念

一个政策规则的形式是:

allow source target:class permissions;
  • Source - 规则主体的类型(或属性)。谁在请求访问?
  • Target - 对象的类型(或属性)。要求访问的是什么?
  • Class - 被访问对象的种类(如文件、套接字)。
  • Permissions - 正在进行的操作(或一组操作)(例如,读、写)。

一个规则的例子是:

allow untrusted_app app_data_file:file {
    read write };

这说明应用程序被允许读写标有app_data_file的文件。还存在其他类型的应用程序。例如,isolated_app用于其清单中带有isolatedProcess=true的应用服务。Android没有对这两种类型重复规则,而是对涵盖应用程序的所有类型使用一个名为appdomain的属性:

# 将属性appdomain与类型untrusted_app相关联。
typeattribute untrusted_app, appdomain;

# 将属性appdomain与类型isolated_app相关联。
typeattribute isolated_app, appdomain;

allow appdomain app_data_file:file {
    read write };
allow appdomain app_data_file:file {
    read write };
与
allow appdomain app_data_file:file rw_file_perms;
相等

当写下一条指定属性名称的规则时,该名称会自动扩展到与该属性相关的域或类型列表。一些值得注意的属性是。

  • domain - 与所有进程类型相关的属性。
  • file_type - 与所有文件类型关联的属性。

在调试SELinux策略或标记文件时(通过file_contexts或运行ls -Z时),你可能会遇到一个安全上下文(也称为标签)。

# ls -Z /sys/devices/platform
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值