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

 

 

 


      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM