Android11 SELinux 添加权限后不生效

在Android11系统上,针对QCS6125硬件平台的应用尝试写入节点chip_power时遇到Selinux权限问题。即使添加了allowplatform_appyft_temperature_file规则,仍收到avc拒绝写入的错误。问题在于platform_app缺少mlstrustedobject权限,但由于CTS测试要求,不能直接修改platform_app的类型。解决方案是修改yft_temperature_file的类型,添加mlstrustedobject属性并重新编译生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件平台:Android11

硬件平台:QCS6125

Android 11上需要对一个节点进行写操作,但是添加了Selinux以后还是报错

allow platform_app yft_temperature_file:file { write read getattr open };

加了权限还是一直报avc

01-26 09:40:55.556  7891  7891 W yft.factorymode: type=1400 audit(0.0:361): avc: denied { write } for name="chip_power" dev="sysfs" ino=42191 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:yft_temperature_file:s0 tclass=file permissive=0 app=com.yft.factorymode

发现需要确实是Android 11 platform_app 缺少mlstrustedobject

但是因为要过cts,不能直接修改platform_app的type

修改yft_temperature_file即可

-type yft_temperature_file, fs_type, sysfs_type;
+type yft_temperature_file, fs_type, sysfs_type, mlstrustedobject;

修改后编译生效
 

### Android 中关闭 SELinux 权限的方法 在 Android 系统中,SELinux 是一种强制访问控制 (MAC) 安全机制,默认情况下处于 Enforcing 模式。为了将 SELinux 从 Enforcing 模式切换到 Permissive 模式,可以通过修改系统属性或直接操作设备上的 `setenforce` 命令来实现。 #### 使用 ADB 修改 SELinux 模式 通过 ADB 工具可以在开发环境中快速更改 SELinux 的模式。以下是具体方法: 1. **连接设备并获取 root 权限** 首先需要确保设备已启用开发者选项,并允许 USB 调试功能。接着,在命令行输入以下指令以获得 root 访问权限: ```bash adb shell su ``` 2. **临时更改为 Permissive 模式** 执行以下命令可立即将 SELinux 切换至 Permissive 模式[^2]: ```bash setenforce 0 ``` 此命令仅对当前会话有效,重启设备后将恢复默认配置。 3. **验证 SELinux 当前状态** 可以通过以下命令确认 SELinux 是否成功切换为 Permissive 模式: ```bash getenforce ``` 如果返回值为 `Permissive`,则表示切换成功;如果是 `Enforcing`,说明尚未生效。 #### 编辑启动脚本永久更改 SELinux 模式 对于希望长期保持 Permissive 或 Disabled 模式的场景,可通过编辑 `/sepolicy` 文件或其他相关文件完成设置。以下是具体步骤: 1. **挂载系统分区为可写入** 默认情况下,Android 的系统分区通常是只读的。因此需先将其重新挂载为可写入状态: ```bash mount -o remount,rw /system ``` 2. **修改 sepolicy 文件** 将 `/sys/fs/selinux/enforce` 文件的内容由 `1` 改为 `0` 即可使 SELinux 运行于 Permissive 模式下[^3]。例如: ```bash echo 0 > /sys/fs/selinux/enforce ``` 3. **保存更改并重启设备** 更改完成后记得同步数据并安全退出,最后重启设备以应用新设置: ```bash sync && exit reboot ``` 需要注意的是,虽然禁用 SELinux(即设置为 Disabled 模式)能够提升某些应用程序的兼容性和性能,但这也会大幅削弱系统的整体安全性,不建议用于生产环境中的设备。 ```python # Python 示例代码展示如何模拟上述逻辑流程 def change_selinux_mode(mode: str): if mode.lower() not in ['permissive', 'enforcing']: raise ValueError('Invalid mode specified.') command = f'setenforce {mode.capitalize()}' result = os.system(command) if result != 0: print(f'Failed to switch SELinux to {mode} mode.') else: print(f'Successfully switched SELinux to {mode} mode.') change_selinux_mode('permissive') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值