linux文件组
avc: denied { dac_read_search } for capability=2 scontext=u:r:xxx:s0 avc: denied { dac_override } for capability=1 scontext=u:r:xxx:s0 tcontext=u:r:xxx:s0 tclass=capability permissive=0
1、当报这种dac的 avc selinux权限是一般是因为不在同一个用户组导致的无法访问。
2、我们可以查看需要访问的文件的用户组:
ls -lZ
或者有时候不知道需要在哪个组里才能访问我们需要的文件时,我们可以查看当前可以访问该文件的进程所在的用户组:
adb shell ps -AlZ | grep -Ei "xxx" u:r:xxx_app:s0 5 S 1000 7867 1610 0 19 0 - 3727967 0 ? 00:00:00 android.xxxtest
首先查找进程的id号,这里是7867
adb shell cat proc/7867/status
输入 上面的命令查看 android.xxxtest 进程的信息
Name: android.xxxtest Umask: 0077 State: S (sleeping) Tgid: 7867 Ngid: 0 Pid: 7867 PPid: 1610 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 1000 1000 1000 1000 FDSize: 64 Groups: 0 1000 1000 1003 1004 1007 1065 1077 2001 2901 3001 3002 3003 3007 9997 VmPeak: 15187360 kB VmSize: 14911868 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 78300 kB VmRSS: 68440 kB RssAnon: 2576 kB RssFile: 65468 kB RssShmem: 396 kB VmData: 667424 kB VmStk: 8192 kB VmExe: 28 kB VmLib: 147056 kB VmPTE: 940 kB VmSwap: 36704 kB CoreDumping: 0 THP_enabled: 0 Threads: 17 SigQ: 3/12941 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000080001204 SigIgn: 0000000000000001 SigCgt: 0000006e400084f8 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: 0000000000000000 CapAmb: 0000000000000000 NoNewPrivs: 0 Seccomp: 2 Speculation_Store_Bypass: thread vulnerable Cpus_allowed: 3f Cpus_allowed_list: 0-5 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 39 nonvoluntary_ctxt_switches: 45
这里可以看到就是我们需要的用户组信息:
Groups: 0 1000 1000 1003 1004 1007 1065 1077 2001 2901 3001 3002 3003 3007 9997
通过命令查看对应的数字代表的具体用户组:
id 9997 uid=9997(everybody) gid=9997(everybody) groups=9997(everybody) context=u:r:su:s0
可以看到9997 是everybody 组
3、给我们自己的进程添加组:
在init.xxx.rc里
service lala /vendor/bin/lala class core user root socket lala stream 0666 root root seclabel u:r:lala:s0 group root diag everybody external_storage sdcard_rw sdcard_r media_rw reserved_disk graphics system oem_2901
将我们的service 在group中添加需要的组即可
通过”ps -e” 可以看到,Android系统中存在很多User
当前运行的进程的UID很多样,root,system,radio,u0_a*等等,
其中前缀为u0_a代表的是APP进程的UID