`
quanminchaoren
  • 浏览: 924290 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android安全和权限①----ShareUserId和文件访问(File Access)--Security and Permission

阅读更多

关于SharedUserId的总结:

 我们知道一般每个app都有一个唯一的linux user ID,则这样权限就被设置成该应用程序的文件只对该用户可见,只对该应用程序自身可见,而我们可以使他们对其他的应用程序可见,这会使我们用到 SharedUserId,也就是让两个apk使用相同的userID,这样它们就可以看到对方的文件。为了节省资源,具有相同ID的apk也可以在相同 的linux进程中进行(这儿需要注意,并不是一定要在一个进程里面运行),共享一个虚拟机。

我们可以建立两个application,分别为test_a和test_b,我们的目的就是让test_b访问test_a里面的文件或者是数据:具体做法如下

在test_a应用程序的包com.test1的manifest里面添加anroid:shareuserid=“com.test2”(注:这 儿test_a是被访的apk,so 加上这句  android:exported="false"说明它是私有的,然后会让shareuserid应用更有力)

具体内容如下:

  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. < manifest   xmlns:android = "http://schemas.android.com/apk/res/android"   
  3.       package = "com.test1"   
  4.       android:sharedUserId = "com.test2"   
  5.       android:exported = "false"   
  6.       android:versionCode = "1"   
  7.       android:versionName = "1.0" >   
  8.     < application   android:icon = "@drawable/icon"   android:label = "@string/app_name" >   
  9.         < activity   android:name = ".TestAcitvity1"   
  10.                   android:label = "@string/app_name" >   
  11.             < intent-filter >   
  12.                 < action   android:name = "android.intent.action.MAIN"   />   
  13.                 < category   android:name = "android.intent.category.LAUNCHER"   />   
  14.             </ intent-filter >   
  15.         </ activity >   
  16.     </ application >   
  17.   
  18.   
  19. </ manifest >    

然后再应用程序test_b的包com.test2下的manifest.xml中添加anroid:shareuserid=“com.test2”

然后在test_b的TestActivity2中添加如下代码:

  1. private  Button.OnClickListener button_listener =  new  Button.OnClickListener() {  
  2.         public   void  onClick(View v) {  
  3.             Intent intent = new  Intent();  
  4.               
  5.             intent.setClassName("us.imnet.iceskysl.db" , "us.imnet.iceskysl.db.DBSharedPreferences" );  
  6.             //intent.setClassName("com.test1","com.test1.TestActivity1");   
  7.   
  8.               
  9.             startActivity(intent);  
  10.         }  
  11.     };  

这样就可以调整跳转,然后就可以运行。完整代码是:

  1. package  com.test2;  
  2.   
  3. import  android.app.Activity;  
  4. import  android.content.Intent;  
  5. import  android.os.Bundle;  
  6. import  android.view.View;  
  7. import  android.widget.Button;  
  8.   
  9. public   class  TestActivity2  extends  Activity {  
  10.     /** Called when the activity is first created. */   
  11.     @Override   
  12.     public   void  onCreate(Bundle savedInstanceState) {  
  13.         super .onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.         find_and_modify_button();  
  16.     }  
  17.     private   void  find_and_modify_button(){  
  18.         Button change_test1 = (Button) findViewById(R.id.change_test1);  
  19.         change_test1.setOnClickListener(button_listener);  
  20. }  
  21.     private  Button.OnClickListener button_listener =  new  Button.OnClickListener() {  
  22.         public   void  onClick(View v) {  
  23.             Intent intent = new  Intent();  
  24.               
  25.             intent.setClassName("us.imnet.iceskysl.db" , "us.imnet.iceskysl.db.DBSharedPreferences" );  
  26.             //intent.setClassName("com.test1","com.test1.TestActivity1");   
  27.   
  28.               
  29.             startActivity(intent);  
  30.         }  
  31.     };  
  32. }  

运行结果是:从test_b的TestActivity1中进去,然后跳到TestActivity2中,这样可以读取到它里面的数据出来

文件访问:

可以通过getSharedPreferences(String, int) , openFileOutput(String, int) 或者 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory) 创建一个新文件时, 你可以同时或分别使用 MODE_WORLD_READABLE MODE_WORLD_WRITEABLE 标志允许其它包读 / 写此文件。

下面是用getSharedPreferences(String, int) ,创建到文件,修改它的属性为MODE_WORLD_WRITEABLE 则看到它的文件权限的变化:

(补充):关于linux下面文件权限

第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:   
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。   
w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。   
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。   
-:表示不具有该项权限

0
0
分享到:
评论

相关推荐

    Android Security- Attacks and Defenses

    Explaining the Android security model and architecture, the book describes Android permissions, including Manifest permissions, to help readers analyze applications and understand permission ...

    Linux-Security-Module.rar_LSM_SELinux_linux lsm

    例如,`security_file_permission()`函数在用户尝试访问文件时被调用,以确定该访问是否被允许。每个钩子函数都提供了插入安全检查的机会。 二、Security-Enhanced Linux (SELinux) SELinux是LSM框架下的一个具体...

    spring-security

    Spring Security 使用访问决策管理器(Access Decision Manager)和访问决策投票器(Access Decision Voter)来决定用户是否有权限访问资源。 4. **Roles and Permissions**: 在 Spring Security 中,角色(Role)...

    Security Managers and Permissions

    在Java编程语言中,安全管理器(Security Manager)和权限(Permissions)是确保应用程序安全的关键组件。它们构成了Java安全模型的核心,防止恶意代码对系统资源进行未经授权的访问或操作。这篇博文将深入探讨这两...

    JAVA 2平台安全技术-结构API设计和实现

    - `java.security.Permission`类及其子类:如`FilePermission`、`SocketPermission`等,表示不同的权限类型。 - `java.security.Principal`接口:表示认证的实体,如用户或组。 - `java.security.cert.Certificate`...

    java权限设计

    3. **访问控制与安全性**:Java的安全模型基于类加载器和访问权限,防止恶意代码对敏感资源的访问。Java安全管理器(Security Manager)负责检查运行时的权限。 4. **Java Security Manager**:这是Java平台的一...

    JAVA 2平台安全技术-结构,API设计和实现

    本书首先概述了计算机和网络安全概念并解释了Java安全模型,并在此基础上,详细描述了Java 2平台中新增加的许多安全结构方面的措施,同时对Java安全性的实施提出了使用指导,描绘了如何定制、扩展和精化安全结构以及...

    Java2平台安全技术-结构,API设计和实现

    Java Security API包含了一系列的接口和类,如`java.security.AccessController`用于执行权限检查,`java.security.Policy`定义安全策略,`java.security.Principal`代表认证的实体,以及`java.security.Permission`...

    security_javasecurity_security_

    在Java中,安全性主要体现在三个方面:类加载器(Class Loaders)、访问控制(Access Control)和权限管理(Permissions)。下面我们将详细探讨这些关键知识点。 1. 类加载器: Java的类加载机制是其安全模型的...

    hadoop 客户端权限问题

    这个特定的错误日志"org.apache.hadoop.security.AccessControlException: Permission denied: user=xudsa, access=WRITE, inode="/uploaddemo1.txt":hadoop:supergroup:-rw-r--r--"表明用户"xudsa"试图对文件"/...

    java权限安全

    在Java中,权限管理基于Java安全模型,该模型通过类加载器和安全策略来实现。下面将详细介绍Java权限控制的相关知识点。 1. **Java安全模型**: Java安全模型是Java平台的基础,它定义了如何限制代码的执行权限。...

    permissiondemo2.zip

    Java的安全模型是基于类的,它通过权限(Permission)类来定义和控制对系统资源的访问。以下是一些相关的Java权限管理知识点: 1. **安全管理器(SecurityManager)**:Java中的安全管理器是实现安全策略的核心组件...

    java用户权限设计

    同时,`java.security.Permission`类用于表示具体的权限,比如`FilePermission`用于文件操作,`SocketPermission`用于网络连接。 授权策略是权限设计的核心,它决定了用户请求的资源访问是否被批准。Java提供了多种...

    Java 2平台安全技术-结构,API设计和实现

    3.6.4 java.io.FilePermission 31 3.6.5 java.net.SocketPermission 33 3.6.6 java.security.BasicPermission 35 3.6.7 java.util.PropertyPermission 36 3.6.8 java.lang.RuntimePermission 37 3.6.9 java.awt....

    CommonsWare.The.Busy.Coders.Guide.to.Android.Development.Version.8.2.2017

    It will help you more quickly climb the Android learning curve, so you can create the “killer app” you’ve dreamed of…or perhaps just a quick-and-dirty application for you and your friends. ...

    spring-security-sample:弹簧安全样品

    2. **授权(Access Control)**:Spring Security 通过角色和权限的概念来实现细粒度的授权。它可以控制对特定资源或操作的访问,例如限制只有管理员才能访问某些URL。在"spring-security-sample"中,你将学习到如何...

    java权限实现实例

    此外,Java通过`java.security.Permission`类及其子类(如FilePermission、SocketPermission等)来定义和管理各种操作的权限。 在数据库设计的场景中,权限管理通常涉及到用户角色和权限分配。例如,我们可以创建...

Global site tag (gtag.js) - Google Analytics