SELinux权限
SELinux简介
SELinux是2.6版本Linux内核中提供的强制访问控制系统,selinux默认配置在/etc/sysconfig/selinux。
默认有三种级别
- enforcing Linux下 selinux所设置的安全策略都会被启用.所有与selinux安全策略有关的服务或者程序都会被策略阻止.也就是,所有操作都会进行权限检查。
- permissive Linux下 selinux所设置的安全策略都会被启动,但是所有与selinux安全策略有关的服务或者程序不会被策略阻止,但是会收到警告.也就是,所有操作都被允许(即没有 MAC),但是如果有违反权限的话,会记录日志
- disable 关闭 selinux,相当于系统没有安装 selinux一样
SELinux Policy语言介绍
规则定义语法:
规则名称 类型集 类型集:类别集 许可集;每个规则都要包含下面五个元素:
规则名称: allow,dontaudit,auditallow和neverallow
源类型:授予访问的类型,通常是进程的域类型
目标类型:客体的类型,它被授权可以访问的类型
客体类别:客体的类可
许可:表示主体对客体访问时允许的操作类型(也叫做访问向量)。
例如:allow kernel block_device:blk_file write;
其中allow是规则名称,kernel是主体类型,block_device是客体类型,blk_file是客体类别,write是许可类型。
权限修改
adb查看SELinux权限
getenforce //获取当前seLinux状态
setenforce 1 //打开seLinux
setenforce 0 //关闭seLinux
ls -Z #可以查看当前SELinux权限
从内核中关闭SELinux权限
通过修改
kernel/arch/arm64/configs/xxx_defconfig
文件,关闭CONFIG_SECURITY_SELINUX=y
配置项即可or
system/core/init/init.c
中 将函数security_setenforce(is_enforcing);
里的参数is_enforcing
强制赋值为0,然后重新编译kernel,烧录boot.img即可在系统启动阶段就关闭安全策略。在sepolicy中添加权限
debug和修改依据,定为系统需要的权限
adb logcat | denied
oradb shell logcat -v threadtime > e:\logcat3.txt
确定权限修改步骤
- 找到源类型.te 文件,
external/sepolicy device/qcom/sepolicy/common
- 标志性日志格式
avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
- 修改方案
#在相应te文件或system_app.te文件中,添加下面语句: allow system_app shell_data_file:dir{getattr read};