做网站电脑开一天用多少钱,怎么做网页动图,数据中台厂商,做爰全过程免费网站Android中读写目录涉及到的权限一般有三个#xff0c;一个是selinux, 另一个是用户组, 还有一个是目录本身权限问题#xff0c;本文章针对这三点做详细解析
目录
一: Selinux权限问题
1: 先查看进程SSSPID的标签
2: 再查看要访问的目录的标签
二: 被访问目录本身权限问…Android中读写目录涉及到的权限一般有三个一个是selinux, 另一个是用户组, 还有一个是目录本身权限问题本文章针对这三点做详细解析
目录
一: Selinux权限问题
1: 先查看进程SSSPID的标签
2: 再查看要访问的目录的标签
二: 被访问目录本身权限问题
三: 用户组权限问题 一: Selinux权限问题
假设目录为/mnt/vendor/, 进程SSSPID需要在这个目录下创建一个文件名为newfile 那这个流程应该是SSSPID进程先search /mnt/vendor目录再open /mnt/vendor/目录open一般伴有的权限是getattr, 然后再在这个目录下创建一个新文件newfile那SSSPID需要对/mnt/vendor/目录拥有创建文件的权限创建文件的权限一般是SSSPID先拥有对mnt/vendor这个目录即dir进行 read write add_name remove_name的权限然后再在在这个目录下创建文件即对file拥有create append open getattr ioctl setattr read write unlink的权限 怎么加权限呢那要先知道进程SSSPID的标签是什么再知道要访问的目录的标签是什么
1: 先查看进程SSSPID的标签
adb shell
ps -A -Z| grep SSSPID
然后回车一般输出内容如下那么SSSPIDSelinux就是SSSPID进程的标签
u:r:SSSPIDSelinux:s0 ystem 1020 1 27016 4432 0 0 S SSSPIDservice2: 再查看要访问的目录的标签
adb shell
cd mnt
ls -l -Z
然后回车结果如下那么mnt/vendor 的标签就是mnt_vendor_file
drwxr-x--- 3 root media_rw u:object_r:mnt_user_file:s0 60 1970-01-08 04:57 user
drwxr-xr-x 7 root root u:object_r:mnt_vendor_file:s0 140 1970-01-08 04:57 vendor
... 如果遇到以下这种情况的话也就是很多信息用表示那说明普通用户对此目录没有权限访问需要执行adb root再去查看标签即可获取标签信息
drwxr-x--- 3 root media_rw u:object_r:mnt_user_file:s0 60 1970-01-08 04:57 user
d????????? ? ? ? ? ? ? vendor
3: 添加Selinux权限
好目前看主体和客体的Selinux信息我们都知道了主体即SSSPIDSelinux客体即mnt_vendor_file那我们就可以愉快的加标签了
allow SSSPIDSelinux mnt_vendor_file:dir { read write open add_name getattr search remove_name };
allow SSSPIDSelinux mnt_vendor_file:file { create append open getattr ioctl setattr read write unlink };
其他目录也是一样的方法
二: 被访问目录本身权限问题
要查看被访问目录本身的权限我们要看一下如果我们的用户组和被访问目录的不一致的时候能否访问这个怎么看呢通过adb也可以看出来,如下
adb shell
cd mnt
ls -l
drwxr-x--- 3 root media_rw 60 1970-01-08 04:57 user
drwxr-xr-x 7 root root 140 1970-01-08 04:57 vendor
看到mnt/vendor 目录的权限是drwxr-xr-x
mnt/vendor目录权限说明
drwxr-xr-x 代表这是个目录和本进程同user,同group的可读可写可执行和本进程不同user,同group的可读可执行和本进程同user,不同group的可读可执行
可以临时修改mnt/vendor的目录权限使其他用户组用户可读可写权限命令如下
adb shell
cd mnt
chmod 777 vendor
ls -l
drwxrwxrwx 7 root root 140 1970-01-08 04:57 vendor
但这个目录的权限一般不能随便改所以建议不改此处那怎么修改我们的权限呢紧接着就到了下一节-用户组权限问题修改这个地方就可以解决这个问题
三: 用户组权限问题
这个问题一般是进程与要访问的进程不在一个用户组里导致的比如你的进程如果属于system用户组你是不能访问用户组是root的文件的这个怎么查看呢可以在你的rc文件中查看例如下
service SSSPID /system/bin/SSSPIDclass coreuser systemgroup systemoneshot
那可以看到 SSSPID的user是systemgroup也是system, 我们再check一下mnt/vendor 的用户组是什么
adb shell
cd mnt
ls -l
drwxr-x--- 3 root media_rw 60 1970-01-08 04:57 user
drwxr-xr-x 7 root root 140 1970-01-08 04:57 vendor
由上图可以看到mnt/vendor 的用户user是rootgroup是root那如果现在SSSPID要在mnt/vendor下创建文件那是不可能的这时候如果看log是没有异常输出的但可以在SSSPID中用Access函数去看一下SSSPID进程有没有权限去read和write这个目录答案是有read但无法write那我们就需要改一下SSSPID进程的用户组了修改为如下重新push进机器即可
service SSSPID /system/bin/SSSPIDclass coreuser rootgroup system rootoneshot