
-rwxr-x--x system system 4156 2010-04-30 16:13 testapk
代表的是相应的用户/用户组及其他人对此文件的访问权限,与此文件运行起来具有的权限完全不相关。
比如上面的例子只能说明system用户拥有对此文件的读写执行权限;system组的用户对此文件拥有读、执行权限;其他人对此文件只具有执行权限。
而testapk运行起来后可以干哪些事情,跟这个就不相关了。
千万不要看apk文件系统上属于system/system用户及用户组,或者root/root用户及用户组,就认为apk具有system或root权限
(二)Android的权限规则
(1)Android中的apk必须签名
这种签名不是基于权威证书的,不会决定某个应用允不允许安装,而是一种自签名证书。
重要的是,android系统有的权限是基于签名的。比如:system等级的权限有专门对应的签名,签名不对,权限也就获取不到。
默认生成的APK文件是debug签名的。
获取system权限时用到的签名,见:如何使Android应用程序获取系统权限
(2)基于UserID的进程级别的安全机制
大家都知道,进程有独立的地址空间,进程与进程间默认是不能互相访问的,是一种很可靠的保护机制。
Android通过为每一个安装在设备上的包(apk)分配唯一的linux userID来实现,名称为"app_"加一个数字,比如app_43
不同的UserID,运行在不同的进程,所以apk之间默认便不能相互访问。
Android提供了如下的一种机制,可以使两个apk打破前面讲的这种壁垒。
在AndroidManifestxml中利用sharedUserId属性给不同的package分配相同的userID,通过这样做,两个package可以被当做同一个程序,
系统会分配给两个程序相同的UserID。当然,基于安全考虑,两个package需要有相同的签名,否则没有验证也就没有意义了。
(这里补充一点:并不是说分配了同样的UserID,两程序就运行在同一进程, 下面为PS指令摘取的,
显然,system、app_2分别对应的两个进程的PID都不同,不知Android到底是怎样实现它的机制的)
User PID PPID
system 953 883 187340 55052 ffffffff afe0cbcc S system_server
app_2 1072 883 100264 19564 ffffffff afe0dcc4 S comandroidinputmethod
system 1083 883 111808 23192 ffffffff afe0dcc4 S androidprocessomsservi
app_2 1088 883 156464 45720 ffffffff afe0dcc4 S androidprocessacore
(3)默认apk生成的数据对外是不可见的
实现方法是:Android会为程序存储的数据分配该程序的UserID。
借助于Linux严格的文件系统访问权限,便实现了apk之间不能相互访问似有数据的机制。
例:我的应用创建的一个文件,默认权限如下,可以看到只有UserID为app_21的程序才能读写该文件。
-rw------- app_21 app_21 87650 2000-01-01 09:48 testtxt
如何对外开放?
<1> 使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE 标记。
When creating a new file with getSharedPreferences(String, int), openFileOutput(String, int), or openOrCreateDatabase(String, int, SQLiteDatabaseCursorFactory), you can use the MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE flags to allow any other package to read/write the file When setting these flags, the file is still owned by your application, but its global read and/or write permissions have been set appropriately so any other application can see it
(4)AndroidManifestxml中的显式权限声明
Android默认应用是没有任何权限去 *** 作其他应用或系统相关特性的,应用在进行某些 *** 作时都需要显式地去申请相应的权限。
一般以下动作时都需要申请相应的权限:
A particular permission may be enforced at a number of places during your program's operation:
At the time of a call into the system, to prevent an application from executing certain functions
When starting an activity, to prevent applications from launching activities of other applications
Both sending and receiving broadcasts, to control who can receive your broadcast or who can send a broadcast to you
When accessing and operating on a content provider
Binding or starting a service
在应用安装的时候,package installer会检测该应用请求的权限,根据该应用的签名或者提示用户来分配相应的权限。
在程序运行期间是不检测权限的。如果安装时权限获取失败,那执行就会出错,不会提示用户权限不够。
大多数情况下,权限不足导致的失败会引发一个 SecurityException, 会在系统log(system log)中有相关记录。
(5)权限继承/UserID继承
当我们遇到apk权限不足时,我们有时会考虑写一个linux程序,然后由apk调用它去完成某个它没有权限完成的事情,很遗憾,这种方法是行不通的。
前面讲过,android权限是经营在进程层面的,也就是说一个apk应用启动的子进程的权限不可能超越其父进程的权限(即apk的权限),
即使单独运行某个应用有权限做某事,但如果它是由一个apk调用的,那权限就会被限制。
实际上,android是通过给子进程分配父进程的UserID实现这一机制的。
(三)常见权限不足问题分析
首先要知道,普通apk程序是运行在非root、非system层级的,也就是说看要访问的文件的权限时,看的是最后三位。
另外,通过system/app安装的apk的权限一般比直接安装或adb install安装的apk的权限要高一些。
言归正传,运行一个android应用程序过程中遇到权限不足,一般分为两种情况:
(1)Log中可明显看到权限不足的提示。
此种情况一般是AndroidManifestxml中缺少相应的权限设置,好好查找一番权限列表,应该就可解决,是最易处理的情况。
有时权限都加上了,但还是报权限不足,是什么情况呢?
Android系统有一些API及权限是需要apk具有一定的等级才能运行的。
比如 SystemClocksetCurrentTimeMillis()修改系统时间,WRITE_SECURE_SETTINGS权限好像都是需要有system级的权限才行。
也就是说UserID是system
(2)Log里没有报权限不足,而是一些其他Exception的提示,这也有可能是权限不足造成的。
比如:我们常会想读/写一个配置文件或其他一些不是自己创建的文件,常会报javaioFileNotFoundException错误。
系统认为比较重要的文件一般权限设置的也会比较严格,特别是一些很重要的(配置)文件或目录。
如
-r--r----- bluetooth bluetooth 935 2010-07-09 20:21 dbusconf
drwxrwx--x system system 2010-07-07 02:05 data
dbusconf好像是蓝牙的配置文件,从权限上来看,根本就不可能改动,非bluetooth用户连读的权利都没有。
/data目录下存的是所有程序的私有数据,默认情况下android是不允许普通apk访问/data目录下内容的,通过data目录的权限设置可知,其他用户没有读的权限。
所以adb普通权限下在data目录下敲ls命令,会得到opendir failed, Permission denied的错误,通过代码filelistfiles()也无法获得data目录下的内容。
<strong>黑阈权限说明</strong>
1INTERNET 拥有完全的网络访问权限。黑阈需要本地网络权限访问“黑阈服务”。
2ACCESS_NETWORK_STATE 查看网络连接,检查网络状态,必要时提供“更新网络检测”去除网络叹号。
3RECEIVE_BOOT_COMPLETED 开机启动,开机以后提示“黑阈没有启动”,有 Root 时直接启动。
4 comandroidvendingBILLING Google Play 结算服务提供 Google Play 支付。
5FOREGROUND_SERVICE 运行前台服务Android O 起,开机自启需要使用“前台服务”;Android P 起,需要申请该权限。
6comandroidlauncherpermissionINSTALL_SHORTCUT创建桌面快捷方式,用于临时启用,GCM 应用等。
你的手机里面没有谷歌服务框架!就不能安装谷歌官方的市场,没有官方的市场,许多软件就不能通过官方市场验证你的手机,那么这些软件就不能用,这些软件一般都是付费的软件,要想用就得安装google市场,得有谷歌服务框架,一般行货手机,在中国是不允许有google服务的,所以需要刷机,自己安装,不是填写个ID就能解决的,这个软件不能直接安装,你到论坛上找找你机型个谷歌服务包(这里面包含账号验证等一堆软件,包括google play),然后按照教程刷机就ok了~然后google play 就能用了!
android 哪些 *** 作需要系统权限
如果你的应用manifest中声明了运行时权限(也就是说,这些权限可能会影响用户隐私和设备的普通 *** 作),系统会明确的让用户决定是否授予这些权限。系统请求用户授予这些权限的方式是由当前应用运行的系统版本来决定的
安卓系统需要卸载360需要系统权限什么意思你好朋友这个不需要权限的,打开手机设置里的应用管理,在里边找到它后就可卸载。
XP系统权限,可以限制受限用户哪些功能,如何 *** 作?只有XP专业版有用户组的管理,首先确认你的系统版本
更改权限的具体办法是右击"我的电脑"
点击管理选项
然后在用户管理的地方可以添加或删除管理员或者受限用户并对其编组
也可以在策略组里设置具体什么内容受限用户能更改什么内容不能受限更改
在运行里面输入:CMD 回车
跳出命令提示符
在里面输入: gpeditmsc 回车
d出计算机和用户策略组,在里面改
也要XP专业版才能改
filezilla 需要什么系统权限FileZilla是一个免费开源的FTP客户端软件,分为客户端版本和服务器版本,具备所有的FTP软件功能可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户端工具,而FileZilla Server则是一个小巧并且可靠的支持FTP&SFTP的FTP服务器软件
1 功能强大。和CuteFTP和LeechFTP很像。支持多线程下载(不过考虑到各位FTP管理员的感受,我把这个功能关闭了,呵呵),支持raw FTP指令。
2 界面简洁。界面其实也和CuteFTP很像的,嘻嘻,而且我很欣赏它的“目录树视图”,在FTP站点目录结构复杂的时候不用转来转去了。不过不能像FlashFXP那样用ShellFolder视图是一个遗憾,要到“我的文档”之类的shell文件夹就比较麻烦了。什么时候看能不能把这个改过来。
菜鸟问题,关于 *** 作系统权限的硬盘高级属性里面,看是否有administrator的权限。要不添加进去看看。
*** 作系统权限的破解或者避开
1、你的ID是不是管理员?
2、如果不是的话,除了重装没有办法。(现在好像有的系统盘会破管理员密码,没试过)
3、如果是的话,打开管理工具党中的本地安全设置,好好去研究一下所有的策略,应该在用户权利指派里,网管有所更改。(如果公司是用特殊软件锁住电脑的话也没什么好办法,只能以毒攻毒)
android 系统的定位功能需要哪些权限?手机内置GPS功能不存在使用权限问题。只要手机上有内置GPS,且处在工作状态,任何有需求的软件都可以自由调用它的信号。
功能定位就是在广告活动中突出产品的独特的功能,使其在同类产品中有明显区别,以增加其竞争力。
功能定位以同类产品定位为基础,选择有别于同类产品额优异性作为广告宣传的重点。功能定位是产品定位的一个重要内容之一。
突出产品能给消费者带来同类产品所不能给予的利益和好处,是功能定位的一种常见的形式,也可以称之为“利益定位”。利益定位就是根据产品所能满足的需求或所提供的利益、所解决问题的程度来定位。
如何获取android系统权限
安卓系统可以安装一个ROOT工具,如Z4这款软件来获取ROOT权限。
删除文件时要系统权限怎么弄删除系统文件的话右击要删除的文件,属性-安全-高级,选中你的用户名,更改权限,再点你的用户名,编辑,选择完全控制,确定 ,返回到安全,上面选择用户名,编辑,点完全控制,OK
WIN7系统“您需要权限来执行此 *** 作”360 杀毒安装目录,安全软件都会开启自保设置的,你就是获取管理员权限也不可能移动它,要想移动它,你就必须完全退出 360 杀毒程序包括后台进程。
你如果真的这样 *** 作了,那你系统里360杀毒也就崩溃了,运行时就会提示出错。
最好的方法是:先卸载360杀毒,然后再重装下载安装包,重装安装,安装时选择自定义安装,指定安装路径,才会使这个360杀毒安装目录位于你想要的位置下
android怎么在代码里获得系统文件的读写权限
1、必须是Android系统开发人员,否则你无法修改initrc等文件。
2、你的应用程序必须要获得system权限。
在应用层 你要想用代码获得系统文件权限,除非你手机root了
要么你自己做rom。 自己修改 init,rc
本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1 在应用程序的AndroidManifestxml中的manifest节点中加入
android:sharedUserId="androiduidsystem"这个属性。
2 修改Androidmk文件,加入LOCAL_CERTIFICATE := platform这一行
3 使用mm命令来编译,生成的apk就有修改系统时间的权限了。
第二个办法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:
1 同上,加入android:sharedUserId="androiduidsystem"这个属性。
2 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
3 用压缩软件打开apk文件,删掉META-INF目录下的CERTSF和CERTRSA两个文件。
4 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,
首先找到密钥文件,在我的Android源码目录中的位置
是"build argetproductsecurity",下面的platformpk8和platformx509pem
两个文件。
然后用Android提供的Signapk工具来签名,signapk的源代码是
在"build oolssignapk"下,
用法为"signapk platformx509pem platformpk8 inputapk outputapk",
文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。
这样最后得到的apk和第一个方法是一样的。
最后解释一下原理,首先加入android:sharedUserId="androiduidsystem"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成androiduidsystem,也就是要让程序运行在系统进程中,这样就有权限来修改系统时间了。
只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform
key,就是上面第二个方法提到的platformpk8和platformx509pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到 platformpk8和platformx509pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android 中的key来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package has no signatures that match those in shared user androiduidsystem",这样也是保护了系统的安全。
Java代码
1、必须是Android系统开发人员,否则你无法修改initrc等文件。 2、你的应用程序必须要获得system权限。
在应用层 你要想用代码获得系统文件权限,除非你手机root了
要么你自己坐rom。。。。 自己修改 init,rc
1、必须是Android系统开发人员,否则你无法修改initrc等文件。 2、你的应用程序必须要获得system权限。 在应用层 你要想用代码获得系统文件权限,除非你手机root了 要么你自己坐rom。。。。 自己修改 init,rc
支持原作者 : >
以上就是关于Android的权限都有哪些全部的内容,包括:Android的权限都有哪些、请不要限制黑阈获取Android id、怎么获取手机的Android Device ID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)