Android Selinux 修改使system_app可以打开/dev/videoX(一)

一 查看文件的Selinux属性

    ls -Zd /dev/

drwxr-xr-x root     root              u:object_r:device:s0

    则/dev文件夹在android selinux中的domain是device

    ls -Z /dev/video0                                             
crw-rw---- system   camera            u:object_r:video_device:s0 video0

    则/dev/video0在android selinux中的domain是video_device

 

二 查看自己的app进程的Selinux属性

    ps -Z | grep XXX

u:r:system_app:s0              system    13218 308   xxx.xxx.xxx

    可以看到自己的app进程id为「system」, 在android selinux中的domain是system_app

 

三 查看自己的app在访问/dev/video0时被selinux阻止的规则

    点开自己的app(里面有打开/dev/video0的操作)

    adb shell su root dmesg | grep 'avc: ' 或者直接在logcat中,就可以看到相应的selinux阻止操作的打印

    <14>[  274.162831] type=1400 audit(10202.409:93): avc: denied { getattr } for pid=2233 comm=".xxx.xxx" path="/dev/video2" dev="tmpfs" ino=8650 scontext=u:r:system_app:s0 tcontext=u:object_r:video_device:s0 tclass=chr_file permissive=0


    <14>[  274.162959] type=1400 audit(10202.409:94): avc: denied { read } for pid=2252 comm=".xxx.xxx" name="/" dev="tmpfs" ino=9783 scontext=u:r:system_app:s0 tcontext=u:object_r:device:s0 tclass=dir permissive=0


    我这里有两个操作被阻止了

    1. 对/dev/video2的getattr操作

        denied { getattr }: 表明是getattr操作

        path="/dev/video2": 表明是对/dev/video2的操作

        scontext=u:r:system_app: 表明subject 的domain 是system_app

        tcontext=u:object_r:video_device: 表明 target 的doumain 是 video_device

        tclass=chr_file : 表明 target 的class 是chr_file

    2. 对/dev文件夹的open操作

        分析见上

 

四 那么如何修改sepolicy 使得权限对system_app放开呢

    因为我有boot.img所以直接修改ramdisk里的sepolicy

    1 解压boot.img

    2 使用xda 上提供的工具:selinux-inject修改sepolicy

       a) selinux-inject: http://forum.xda-developers.com/android/software/setools-android-sepolicy-inject-t2977563

       b) 修改规则:

       -s 是subject

       -t 是target

       -c 是class

       -p 是要添加的allow 的规则

       ./sepolicy-inject -s system_app -t video_device -c file -p getattr -P sepolicy2 -o sepolicy2    // 使得system_app对video_device有getattr权限

      ./sepolicy-inject -s system_app -t device -c dir -p open -P sepolicy2 -o sepolicy2     // 使得system_app对/dev有open权限

       sesearch -A -s system_app -t device -c dir sepolicy2

       sesearch -A -s system_app -t video_device -c chr_file sepolicy2    // 用来查看权限是否改成功了

    3 压缩回boot.img

    4 fastboot flash boot new_boot.img

       fastboot reboot

 

 

 


      

posted @ 2016-07-19 15:16  得即高歌失即休  阅读(9636)  评论(0编辑  收藏  举报