使用 audit2allow 工具添加SELinux权限的方法

1. audit2allow工具的使用

audit2allow 命令的作用是分析日志,并提供允许的建议规则或拒绝的建议规则。

1.1 audit2allow的安装

sudo apt-get install policycoreutils

sudo apt install policycoreutils-python-utils

1.2 auditallow的命令

命令含义用法
-v--version显示程序的版本号并退出
-h--help显示此帮助消息并退出
-b--boot自最近启动的audit的审计消息,与-i冲突
-a--all从审计的log中读取输入,与-i冲突
-i<输入文件>--input从输入文件中读取输入

1.3 audit2allow的使用

第一步:从android log中获取对应的avc log文件

直接抓取avc log命令如下:

adb logcat –b all | grep avc >avc_log.txt

也可以从抓取到的android log中,筛选导出avc log

一般avc_log.txt内容如下:

06-25 04:39:15.811 4534 4534 I auditd : type=1400 audit(0.0:122): avc: denied { execute } for comm="gripper-backgro" path="/data/user/10/tv.danmaku.bilibilihd/lib-main/libijkffmpeg.so" dev="dm-39" ino=37776 scontext=u:r:platform_app:s0:c522,c768 tcontext=u:object_r:app_data_file:s0:c522,c768 tclass=file permissive=0

第二步:处理log文件

此时需要将生成的log文件最后一行未打全的log进行删除

第三步:使用audit2allow工具生成te文件

在ubuntu终端下使用audit2allow工具,直接分析log生成对应的te文件

audit2allow –i avc_log.txt >avc_log.te

生成的avc_log.te对应的内容例如下:

#============= platform_app ==============

allow platform_app app_data_file:file execute;

第四步:根据抓取的生成的te文件确定需要添加的文件名

此时========platform_app.te========

表示需要在platform_app.te这个文件下添加提示的te语句

allow platform_app app_data_file:file execute;

第五步:编译打包

重新对Android源代码进行编译打包生成img文件

第六步:将ubuntu下编译的镜像刷写进入机器中

android侧常用刷写指令

fastboot devices:列出所有已经进入fastboot模式的设备

fastboot erase system 擦除设备指定的分区

fastboot flash system system.img 将指定的image文件刷入设备的指定分区

fastboot reboot:重启设备

第七步:验证

开机启动后,找到之前报avc错platform_app对应的进程名:tv.danmaku.bilibilihd

ps -A|grep tv.danmaku.bilibilihd

然后抓取avclog,自己添加的te语句对应的avc log是否出现,若未出现,则修改成功。

logcat -b all --pid=3584|grep avc

或者直接看对应的程序有没有正常运行,若正常运行,则修改成功

2.audit2allow无法使用的问题

2.1 问题

在使用audit2allow工具自动生成avc语句时,可能会出现此问题

$ audit2allow -i avc_audit.txt > avc_audit.te
ValueError: You must specify the -p option with the path to the policy file.


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/bin/audit2allow", line 381, in <module>
    app.main()
  File "/usr/bin/audit2allow", line 365, in main
    audit2why.init()
SystemError: <built-in function init> returned a result with an error set

2.2 解决方案

对/usr/bin/audit2allow文件进行修改,具体修改方案如下:

$ cd /usr/bin/
$ sudo gedit audit2allow

//把文件的第362行到365行注销掉,保存即可

2.3 验证

重新执行audit2allow –i avc_denied.txt >avc_deniedte.te语句,若正常生成te,则修改成功

SELinux(Security-Enhanced Linux)是一种强制访问控制(MAC)机制,用于增强Linux系统的安全性。在Android系统中,SELinux被广泛使用来限制应用程序和进程对系统资源的访问权限SELinux将资源和进程分为不同的域(domain),并定义了一系列的规则来控制这些域之间的访问。 在Android系统中,文件和目录通常被分为不同的SELinux上下文(context),例如`private`和`vendor`。`private`上下文通常用于存储应用程序的私有数据,而`vendor`上下文则用于存储与硬件和厂商相关的文件。 如果你需要将`private`权限转成`vendor`,可以通过以下几种方式实现: 1. **修改SELinux策略文件**: - 编写自定义的SELinux策略文件,定义新的规则来允许特定的进程或应用程序访问`vendor`上下文中的文件。 - 使用`audit2allow`工具来生成策略文件。`audit2allow`可以根据SELinux的审计日志生成允许特定操作的规则。 2. **使用`chcon`命令临时更改文件上下文**: - `chcon`命令可以临时更改文件的SELinux上下文。例如: ```bash chcon -t vendor_file_t /path/to/private/file ``` - 这种更改是临时的,系统重启后会失效。 3. **使用`restorecon`命令恢复文件上下文**: - `restorecon`命令可以恢复文件的默认SELinux上下文。例如: ```bash restorecon -v /path/to/private/file ``` 4. **使用`setfiles`命令设置文件上下文**: - `setfiles`命令可以设置文件的SELinux上下文。例如: ```bash setfiles /path/to/context/file_contexts /path/to/private/file ``` 5. **在`init.rc`文件中添加规则**: - 在`init.rc`文件中添加规则来设置文件的SELinux上下文。例如: ```bash setprop selinux.file_context /path/to/private/file u:object_r:vendor_file_t:s0 ``` 通过上述方法,你可以将`private`权限转成`vendor`,从而允许特定的进程或应用程序访问`vendor`上下文中的文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JerryHe

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值