具有system权限的进程无法访问sdcard
最近遇到一个问题,之前运行好好的程序,在最近的daily build版本上无法正常运行,后来发现问题是:
我的程序在SDCard中找文件时找不到,而我shell进去后看到文件明明存在,而程序对该文件却视而不见。折腾了颇久,发现了一个问题:
正常版本上 adb shell mount 后:
/dev/block/vold/179:19 /storage/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
不可使用的版本:
/dev/block/vold/179:19 /storage/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
后来问模块owner才知道:
平台做的改进,禁止具有system权限的进程访问sdcard,防止sdcard unmount时,导致system_server进程发生crash,从而被kill掉。
一听到这个理由后,我真是发飙了,为了解决某个问题而对系统做这么大的改变,真想投诉那家伙。
后来到网上搜了一下,发现很多程序员遇到这个问题。看来谷歌也是这么做的,我还能说什么呢,认命了。
访问SDcard成功的要素:
androidManifest..xml中包含:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
不能包含: android:sharedUserId="android.uid.system"
如果有system权限又想访问sdcard,怎么办?
android2.2以后修改
修改/system/core/vold/Volume.cpp 文件
将
Fat::doMount(devicePath, "/mnt/secure/staging", false, false, false,
1000, 1015, 0702, true))
修改为:
[html]
Fat::doMount(devicePath, "/mnt/secure/staging", false, false, false,
1000, 1015, 0002, true))
参数含义:
1000代表的是uid,即sytem
1015代表的是gid,
0002:是对权限的掩码
0002:表示 system: rwx-rwxr-x,此时system有读写执行权限
如果system不需要写权限可以将0002改为
0202: 表示 r-xrwxr-x。
默认的0702代表 ---rwxr-x
。
然后将vold重新编译一下,用adb push 命令push到 /system/bin/目录下。重新启动一下机器就OK了。
对于android 2.1以下:
可以
修改/system/core/vold/volmgr_vfat.c
[html]
rc = mount(devpath, vol->mount_point, "vfat", flags,"utf8,uid=1000,gid=1000,fmask=711,dmask=700,shortname=mixed");
改为
[html]
rc = mount(devpath, vol->mount_point, "vfat", flags,"utf8,uid=1000,gid=1000,fmask=0,dmask=0,shortname=mixed");
这里的dmask和fmask和上面的作用类似。通过改写711和700可以配置出不同的权限。
具有system权限的进程无法访问sdcard相关推荐
- 如何在SYSTEM权限下实现屏幕监控
屏幕监控是远控软件的基本功能之一. 版权声明 作者:iprowq 现在很多远控程序的服务端通常为DLL形式,通过远程线程注入等方法插入到services.svchost等SYSTEM权限的进程中去,而 ...
- 获取本地System权限
作为C++方面的第一片文章,就先说说获取权限方面的东西吧!首先是获取DeBug权限(它是做其他进一步工作的基础),想必大家对这个方法应该很熟悉吧,网上有关这个的文章已经很多了,所以我就直接贴代码了! ...
- win10_x64下shellcode提权工具(SYSTEM权限)
之前写过一篇远线程注入与一篇shellcode编写的文章: Win10_X64远线程注入dll(非CreateRemoteThread) Windows 10_X64环境shellcode编写 上一次 ...
- 后台服务显示右下角弹窗 -- system权限创建用户权限进程
windows编程的人都知道,在其操作系统下,进程被创建,通常被赋予很多属性,其中一项属性就是用户名,及进程所属的权限.打开任务管理器,可查看到(查看不到,点击查看,选择列即可) 通常桌面系统expl ...
- system 权限程序不能访问sd卡问题
在android中有system权限的应用是无法访问sd卡的,这是因为vold在挂接sd卡指定mask的原因,估计是出于安全原因.如果你有android的源代码,可以去除这个限制: 对于android ...
- 简单使用系统System(超级管理员)权限运行进程-提权
获得这个权限,有很多办法: 创建服务,服务本身以System权限运行(这应该也是PsExec的方法) 偷梁换柱,对一些系统程序进行替换,比如将屏幕键盘osk或者放大镜换成cmd,在Alt+Ctrl+D ...
- 【报错】python删除图片遇到权限问题:[WinError 32] 另一个程序正在使用此文件,进程无法访问。
问题: 报错:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问. 修改前代码: img = Image.open(file) if img.size ...
- Windows服务器SYSTEM权限Webshell无法添加3389账户情况突破总结
转自:http://bbs.blackbap.org/thread-2331-1-1.html 近好多Silic的朋友在Windows下SYSTEM权限的php webshell下添加账户,但是却无法 ...
- win7系统怎么获取system权限?
日常使用系统中,经常有一些像恶意顽固程序及无法删除文件.需要高权限操作.丢失密码.要求最高私密性的问题.在本文中,将教你如何使用Windows 7最高权限账户system,解决各位TX的所有此类问题! ...
- 奇特的Local System权限(转载)
转载自:http://mp.weixin.qq.com/s?__biz=MzA3NTM1MzE4Nw==&mid=202597764&idx=1&sn=0cef1a40fb3c ...
最新文章
- springmvc学习笔记--Interceptor机制和实践
- stm32f030cc 替换 stm32f030c8 后程序下载失败问题
- unrecognized font family iconfont2
- 利用套接字实现 CS 模型
- js压缩图片_Web 性能优化: 图片优化让网站大小减少 62%
- 人月神话:微软开发模式和原则[转]
- 2018年AI如何发展?普华永道做出了8点预测 | 报告下载
- Fixcel电子表格——报表模块(二)
- JavaScript小技巧总结
- 任务21 :了解ASP.NET Core 依赖注入,看这篇就够了
- 【转】Java工程师成神之路
- MATLAB 非对称矩阵求逆
- python怎样下载numpy_python下载numpy的方法是什么
- win10共享打印机搜索不到计算机,Win10系统搜不到共享打印机的解决方法
- 包无法更新、相关性或冲突验证解决方案
- DeFCN debug记录(训练过程),以及对cvpods框架的分析
- 为什么需要Secondary Index
- Retrofit 2简单使用教程
- 从时间管理到管理情绪,这些自我管理的技巧你知道几个?
- 网络重置最详细解决方法