• selinux相关学习笔记-简单selinux部分的解决


    selinux问题判断:

    1 日志查看
    logcat -b all 查看所有日志
    如果自己程序有类似如下的avc:denied打印,基本上可以认为有selinux问题,这里有avc: denied相关的关键字

     I Thread-2: type=1400 audit(0.0:53): avc: denied { search } for name="leds" dev="sysfs" ino=26711 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:sysfs_leds:s0 tclass=dir permissive=1
    
    • 1

    2 再次验证是否selinux影响
    可以adb shell setEnforce 0 关闭selinux限制看看是否功能正常

    selinux问题修改方式:

    相关问题日志:

    I Thread-2: type=1400 audit(0.0:53): avc: denied { search } for name=“leds” dev=“sysfs” ino=26711 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:sysfs_leds:s0 tclass=dir permissive=1

    这里表示成了一种更加直观的语句如下:

    avc: denied { 操作 } for name=“leds” dev=“sysfs” ino=26711 scontext=u:r:主体type:s0:c512,c768 tcontext=u:object_r:客体type:s0 tclass=客体类别 permissive=1

    最简单allow语句:

    allow 主体type 客体type :客体类别 {操作权限}
    手写方式:

    allow platform_app sysfs_leds:dir search
    
    • 1
    自动生成相关的te的audit2allow工具:
    sudo apt-get install policycoreutils
    sudo apt-get install policycoreutils-python-utils
    
    • 1
    • 2
    test@test:~/tmp$ audit2allow -i input.txt -o out.txt
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    上面错误需要进行修改一下audit2allow源码:
    sudo vi /usr/bin/audit2allow
    在这里插入图片描述屏蔽上面四行代码

    最后工具帮我们写好如下:

    test@test:~/tmp$ audit2allow -i input-1.txt 
    
    
    #============= platform_app ==============
    allow platform_app sysfs_leds:dir search;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改地方:
    上面有#============= platform_app ==============提示
    既可以把这个语句放到platform_app.te中

    test@test:~/nx563j_xiaomi/system/sepolicy$ find -name platform_app.te
    ./private/platform_app.te
    ./public/platform_app.te
    ./prebuilts/api/30.0/private/platform_app.te
    ./prebuilts/api/30.0/public/platform_app.te
    ./prebuilts/api/33.0/private/platform_app.te
    ./prebuilts/api/33.0/public/platform_app.te
    ./prebuilts/api/29.0/private/platform_app.te
    ./prebuilts/api/29.0/public/platform_app.te
    ./prebuilts/api/32.0/private/platform_app.te
    ./prebuilts/api/32.0/public/platform_app.te
    ./prebuilts/api/31.0/private/platform_app.te
    ./prebuilts/api/31.0/public/platform_app.te
    ./prebuilts/api/28.0/private/platform_app.te
    ./prebuilts/api/28.0/public/platform_app.te
    test@test:~/nx563j_xiaomi/system/sepolicy$ 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    一般加载
    ./private/platform_app.te
    ./public/platform_app.te
    ./prebuilts/api/33.0/private/platform_app.te //33代表当前系统sdk版本
    在上面te中末尾加入

    allow platform_app sysfs_leds:dir search;

    selinux的编译和验证方式:

    1、编译make selinux_policy
    2、验证:

    adb push ./out/target/product/XXX/system/etc/selinux/*  /system/etc/selinux/
    adb push ./out/target/product/XXX/vendor/etc/selinux/*  /vendor/etc/selinux/
    
    adb push ./out/target/product/XXX/system/system_ext/etc/selinux/*  /system/system_ext/etc/selinux/
    
    adb push ./out/target/product/XXX/system/product/etc/selinux/*  /system/product/etc/selinux/
    adb push ./out/target/product/XXX/root/sepolicy  /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    更多framework干货课程优惠获取相关可以+V(androidframework007)
    在这里插入图片描述

  • 相关阅读:
    Go 学习之 Context 篇
    【libcurl】7.8.4 MT v142 构建
    【计算机网络实验】防火墙访问控制列表实验
    解决mac 下 docker-compose 不是命令
    AT实现PCIE模式切换
    nacos源码下
    众佰诚:抖音开网店新手怎么做才能做起来
    iCloud开发: key-value Storage,CloudKit,iCloud Documents
    springboot和spring使用@Async注意事项
    MySQL数据备份与恢复
  • 原文地址:https://blog.csdn.net/learnframework/article/details/133741962