• 我这里编译都是在Android源码包下,文章比较针对系统开发人员。以proc/cmdline为例,连接手机敲入命令可以看到默认情况下普通用户没有proc/cmdline的任何操作权限,如下图所示 修改权限的大致思路就,...

    转载:http://blog.csdn.net/goleftgoright/article/details/7389420


    我这里编译都是在Android源码包下,文章比较针对系统开发人员。以proc/cmdline为例,连接手机敲入命令可以看到默认情况下普通用户没有proc/cmdline的任何操作权限,如下图所示



    修改权限的大致思路就,1、用c语言编写编译出一个脚本,我们运行该脚本来修改文件访问权限。2、在system/core/rootdir/init.rc里需要配置一个service,并为service指定要执行的脚本。这样我们就可以通过启动service运行其指定的脚本。3、通过jni来启动服务,主要接口就是 property_set("ctl.start",serviceName);


    下面逐步介绍如何修改系统文件访问权限:

    1、新建文件夹chgperexe并在文件夹下新建两个文件Android.mk及openper.c

    Android.mk内容如下:

    LOCAL_PATH:= $(call my-dir)

    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS := optional
    LOCAL_SHARED_LIBRARIES := libcutils liblog
    LOCAL_MODULE := openfileper
    LOCAL_SRC_FILES := openper.c
    LOCAL_PRELINK_MODULE := false
    include $(BUILD_EXECUTABLE)

    openper.c内容如下:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    system("chmod 444 /proc/cmdline");
            return 0;
    }

    chmod 444 /proc/cmdline”命令就是将/proc/cmdline的访问权限修改为 "-r--r--r--",不建议使用命令"chmod o+r /proc/cmdline",因为我用该命令修改权限失败。

    在Android源码下编译chgperexe,编译成功后会在system/bin目录下生成名为openfileper的脚本(一个可执行文件)。

    2、配置init.rc。

    在init.rc中加入以下内容,我声明了一个名为perservice的服务,并指定服务启动后执行/system/bin/openper脚本。

    service  perservice  /system/bin/openfileper

    oneshot

    disabled


    备注:oneshot:在服务退出后不重启。

      disabled:这个服务的级别将不会自动启动,它必须被依照服务名指定启动才可以启 动。如果需要service自动启动就不需要配置这一项了,那么第三步就不用看了。


    3、ok,现在我们来看如何启动服务。我是通过jni来启动服务,新建文件夹chgperjni,在文件夹下新建文件chgperjni.c,Android.mk及文件夹inc。inc中需要一个properties.h文件,它是一个系统文件,可以在system/core/include/cutils下找到,直接拷贝过来就行了。

    chgperjni.c的内容如下:

    #include <string.h>
    #include <jni.h>

    #include "properties.h"
    #include "utils.h"

    jint Java_mobile_chgper_ChgperActivity_startPerService(JNIEnv* env,jobject thiz){
    return (jint)property_set("ctl.start","openper");
    }


    jint Java_mobile_chgper_ChgperActivity_stopPerService(JNIEnv* env,jobject thiz){
    return (jint)property_set("ctl.stop","openper");
    }

    Android.mk的内容如下:

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS :=optional
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc 

    LOCAL_SHARED_LIBRARIES :=libcutils

    LOCAL_MODULE    := chgperjni
    LOCAL_SRC_FILES := chgperjni.c
    LOCAL_PRELINK_MODULE := false
    include $(BUILD_SHARED_LIBRARY)

    编译chgperjni在system/libs下生成so文件。

    4、新建一个工程Chgper。工程也要放到源码下编译,同时工程必须具有System权限。如何使工程具有System权限可以参考http://my.unix-center.net/~Simon_fu/?p=531这篇文字,写的很好哦。


    工程编译完后安装apk,打开应用后proc/cmdline的访问权限就改变了,如下图。




    chgperexe,chgperjni,工程Chgper都已打包上传至http://download.csdn.net/detail/goleftgoright/4169056,仅攻参考。



    展开全文
  • 1 mount -o remount,rw /system 有的系统必须要remount/system这个目录才能成功

    1 mount -o remount,rw /system
    有的系统必须要remount/system这个目录才能成功

    展开全文
  • Android 系统文件权限

    2013-07-12 10:16:26
    本文不是写android 系统文件权限的作用与原理,仅仅是普通设置与如何用数字权限而已。 更改系统文件权限众所周知必须先获取root权限,用rootexplore(R.E.文件管理器)更改文件权限非常方便。 当放入...

    本文不是写android 系统文件权限的作用与原理,仅仅是普通设置与如何用数字权限而已。

    更改系统文件权限众所周知必须先获取root权限,用rootexplore(R.E.文件管理器)更改文件权限非常方便。

    当放入或更改某些系统文件时需要更改权限,内存卡里所有文件的权限都是777无法更改,所以某些文件放入系统替换首先将它放入系统任意位置修改权限后在移动或剪切到原位置替换。

    文件该设什么权限,基本上系统里每个文件夹下的文件权限都是相同的,部分文件夹里的文件不相同,如/system/app下所有的权限都是644。

    需要替换的文件设为与原文件一样,添加的文件一般与文件夹下其它文件一样。

     

    之前多点触控刚出来时,发在隔壁论坛的,现在也转过来当时翻译了关于2.2十点触控的某篇文章,里头有诸如:755, 644 权限的说法,貌似有不少童鞋不大了解,于是就搜搜查查了下。

    因为这个是unix里头的说法,大家知道android是基于linux的,所以有了这个数字权限的说法。

    权限数字说明:数字由来是:

     

    文件权限

     

    读(R)

     

     

    写(W)

     

     

    执行(X)

     

    对应数字

     

    4

     

     

    2

     

     

    1

     

     

    用户

    分组

    其他

    对应权限

    r    w    x

    r    w    x

    r    w    x

    数字相加

    4    2    0

    4    0    0

    0    0    0

    644

    4    2   1

    4    0    1

    4    0    1

    755

    就是4+2=6。4+2+1=7

    或者直观:

     

     

    数字

     

     

    读权限(R)

     

     

    写权限(W)

     

     

    执行权限(X)

     

     

    0

     

     

    X

     

     

    X

     

     

    X

     

     

    1

     

     

    X

     

     

    X

     

     

     

     

    2

     

     

    X

     

     

     

     

    X

     

     

    3

     

     

    X

     

     

     

     

     

     

    4

     

     

     

     

    X

     

     

    X

     

     

    5

     

     

     

     

    X

     

     

     

     

    6

     

     

     

     

     

     

    X

     

     

    7

     

     

     

     

     

     

     

     

    0代表:没有

    1代表:执行权限

    2代表:写权限

    3代表:写,执行权限

    4代表:读权限

    5代表:读,执行权限

    6代表:读,写权限

    7代表:读,写,执行权限

    r即read 读的意思=4

    w即write 写的意思=2

    x即execute 执行的意思=1

    - 代表权限没勾选=0

    0代表---

    1代表--x

    2代表-w-

    3代表-wx

    4代表r--

    5代表r-x

    6代表rw-

    7代表rwx

    举例:644:

    第一个数字代表:用户,第二个数字代表:分组, 第三个是数字代表:其他.

    所以呢,644 权限:

    用户:读  写  X

    分组:读   X  X

    其他:读   X  X

    444 r--r--r--

    600 rw-------

    644 rw-r--r--

    666 rw-rw-rw-

    700 rwx------

    744 rwxr--r--

    755 rwxr-xr-x

    777 rwxrwxrwx

    4位以上的权限说明

    比如类似:

    chmod 06755 /system/xbin/su

    这个涉及到linux中的文件和目录特殊权限:

    一般用户若无特殊需求,不应该启用这些权限,避免安全方面出现严重漏洞,造成黑客入侵,甚至摧毁系统!!!

    所以我们要ROOT才会用到这个,在android系统目录下打开权限(CM7版本下)可以看到最下还有三个选项,分别是:

    Set UID , Set GID, Sticky

    其中:

    s或S(SUID,Set UID):可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。

    s或S(SGID,Set GID):设置在文件上面,其效果与SUID相同,只不过将文件所有者换成用户组,该文件就可以任意存取整个用户组所能使用的系统资源。

    T或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。

    因为SUID、SGID、Sticky占用x的位置来表示,所以在表示上会有大小写之分。

    SUID的代表数字是4,比如4755的结果是-rwsr-xr-x

    SGID的代表数字是2,比如6755的结果是-rwsr-sr-x

    Sticky的代表数字是1,比如7755的结果是-rwsr-sr-t

    加入同时开启执行权限和SUID、SGID、Sticky,则权限表示字符是小写的:

    -rwsr-sr-t

    如果关闭执行权限,则表示字符会变成大写:

    -rwSr-Sr-T

    Mfunz的weiweistudio有补充

            

    6=4+2,即同时设置UID和GID,所以6755也就是 rwsr-sr-x

    0:指定文件类型,“0” 表示该文件是一个普通文件。符号是 “-” (所创建的文件绝大多数是普通文件)

            所以

            0755、755、-rwxr-xr-x、rwxr-xr-x   表示的是同一个权限

            06755、6755、-rwsr-sr-x、rwsr-sr-x 表示的是同一个权限

     

    更改权限需要获取root权限,权限设置方法:

    第一种更改权限方法,用RE管理器(rootexplore)更改直观方便

    主要说的是第二种方法,通过adb或超级终端用命令更改

    如/system/abc.apk为例,命令如下:

    su

    busybox mount -o remount,rw /system

    上行命令挂载/system为可读写,用RE管理器更改也行。

    chmod 644 /system/abc.apk

    更改整个文件下所有文件为相同的权限,如将/system/app下所有文件权限都设为644:

    su

    busybox mount -o remount,rw /system

    chmod 644 /system/app/*

    展开全文
  • Android修改系统文件访问权限,在init.rc里配置service,通过启动service去执行脚本,在脚本里做修改文件访问权限操作。应用通过jni启动service。
  • 1、android文件系统

    android文件系统

    Android应用程序的数据是存储在Android文件系统的如下根目录中:/data/data/<package_name>/

    可以通过以下api实现对应用程序文件目录进行操作:


    在读取文件或者写入文件时,需要指定文件的打开模式,Android默认提供了以下几种模式:

    1. MODE_PRIVATE :该文件只能被当前应用程序读写
    2. MODE_WORLD_READABLE:该文件的内容可以被其他的应用程序读取
    3. MODE_WORLD_WRITEABLE:该文件的内容可以被其他程序读、写
    4. MODE_APPEND:以追加的方式在文件中添加内容
    通过以上的方法可以实现对/data/data/<package_name>/目录下的文件进行操作。

     
        public void data() {
            // 内部存储
    
            //   /data/data/com.zhangke.plugsubject/app_text
            System.out.println(getDir("text", Context.MODE_PRIVATE).getAbsolutePath());
            //   /data/data/com.zhangke.plugsubject/files
            System.out.println(getFilesDir().getAbsolutePath());
            //  /data/data/com.zhangke.plugsubject/cache
            System.out.println(getCacheDir().getAbsolutePath());
    
        }


    Android SD卡存储

    Android手机中一般都会带有内存存储卡,对于一些比较大的文件我们不会将其存储在应用程序的数据文件夹中,而是通过将数据存储在sd卡中达到存储数据的目的。


    Android系统为我们提供了用于操作sd卡的api。

    1、要想对sd卡中的文件进行操作,首先需要在AndroidManifest.xml需要为应用添加权限
        <!-- 允许创建和删除文件-->
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
        <!-- 允许从sd卡中读取文件 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <!-- 允许向sd卡中写入文件 -->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    2、在对sd卡进行操作前,要判断sd卡是否可用即sd卡是否已挂载
        public void storage() {
            //获得sd卡挂载状态
            if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {//已挂载
    
                //   /storage/emulated/0
                System.out.println(Environment.getExternalStorageDirectory().getAbsolutePath());
    
                //   /storage/emulated/0/Android/data/com.zhangke.plugsubject/cache
                System.out.println(getExternalCacheDir().getAbsolutePath());
    
                //   /storage/emulated/0/Android/data/com.zhangke.plugsubject/files/image
                System.out.println(getExternalFilesDir("image").getAbsolutePath());
    
            }
        }


    Android调用Linux命令修改文件权限

    在通过Context的getFileDir()或者getCacheDir()获取路径,并将文件存放在该路径下时,默认情况下,该文件时不能获得全部的读写权限。例如,对于apk的升级,如果将升级包放入到/data/data/packagename/files/或者/data/data/packagename/cache/目录下,会出现包解析错误,这就是因为在这两个目录在的文件没有读写权限导致的。大家都知道Android是基于Linux的,所以如果要改变文件的读写权限,可以通过在Android中执行Linux命令来改变权限。

    Linux数字权限

    在Linux中通过数字来代表数字是否具有权限
    读(R) : 4
    写(W) : 2
    执行(X)   : 1

    如图:



    执行Linux命令修改权限

    提示:
    如果要修改某个目录下文件的权限,首先要修改目录的权限,要不依然不能对文件进行操作。

    代码如下:
    //通过linux命令修改apk更新文件读写权限
    String[] command = {"chmod", "777", "文件或者目录路径"};  
    ProcessBuilder builder = new ProcessBuilder(command);  
    try {  
    	builder.start();  
    } catch (IOException e) {  
    	e.printStackTrace();  
    }  


    展开全文
  • Android 修改文件权限

    2018-07-11 08:33:26
    Linux 文件权限 1 [001] 执行权限 x 2 [010] 只写权限 w 4 [100] 只读权限 r sudo chmod 600 ××× (只有所有者有读和写的权限) sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限) ...
    

    Linux 文件权限 
    1 [001] 执行权限 x 
    2 [010] 只写权限 w 
    4 [100] 只读权限 r 
    sudo chmod 600 ××× (只有所有者有读和写的权限) 
    sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限) 
    sudo chmod 700 ××× (只有所有者有读和写以及执行的权限) 
    sudo chmod 666 ××× (每个人都有读和写的权限) 
    sudo chmod 777 ××× (每个人都有读和写以及执行的权限) 
    其中×××指文件名(也可以是文件夹名,不过要在chmod后加-ld)。

    Android修改文件权限命令 
    chmod 600 ××× (只有所有者有读和写的权限) 
    chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限) 
    chmod 700 ××× (只有所有者有读和写以及执行的权限) 
    chmod 666 ××× (每个人都有读和写的权限) 
    chmod 777 ××× (每个人都有读和写以及执行的权限)

    Android使用代码修改文件权限 
    在apk中,有时候需要root权限,例如通过apk更新系统库等system的文件等,避免升级固件,或者在apk中需要直接访问某些设备等。下面是在apk中获取root权限的方法,前提是设备已经root过了。

    通过执行su产生一个具有root权限的进程: 
    Process su = Runtime.getRuntime().exec(“su”); 
    写入命令(可以写入多条命令,使用换行(\n)): 
    String cmd = “chmod 666 /dev/video0\nexit\n”; 
    su.getOutputStream().write(cmd.getBytes()); 
    判断命令执行结果: 
    su.waitFor() ==0 表示命令执行成功

    实例:使用代码打开/dev/video0的读写权限 
    //获取权限 
    File device = new File(/dev/video0); 
    if (!device.canRead() || !device.canWrite()) { 
    try { 
    /* Missing read/write permission, trying to chmod the file */ 
    Process su; 
    su = Runtime.getRuntime().exec(“su”); 
    String cmd = “chmod 666 /dev/video0\nexit\n”; 
    su.getOutputStream().write(cmd.getBytes()); 
    if ((su.waitFor() != 0) || !device.canRead() 
    || !device.canWrite()) { 
    showNotPremessionDialog(); 
    return; 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    showNotPremessionDialog(); 
    return; 
    } 
    }

    展开全文
  • 我这里编译都是在Android源码包下,文章比较针对系统开发人员。以proc/cmdline为例,连接手机敲入命令可以看到默认情况下普通用户没有proc/cmdline的任何操作权限,如下图所示 修改权限的大致思路就,1、用...
  • 修改android手机文件权限 默认情况下,一个应用肯定是读取不了另外一个应用的数据的,因为权限不够。但是我们一定要读,怎么办? 修改我们要读取文件的权限。 Android是基于Linux的,所以修改权限的方法和Linux...
  • 博文 Android 文件系统的权限设置:...Android 预制文件权限增加: https://blog.csdn.net/dengli990350982/article/details/53434260 疑问 在init.rc中设置权限和预置权限的区别是什么?作用范围有什么区别?
  • android系统文件权限

    2012-03-31 15:40:16
    android是基于linux开发的,因此想要了解android系统文件权限,需要从Linux说起。 Linux系统权限简介: 一个文件一共有三个组别:用户、群组、其它 其中每个组包含三种权限:读r、写w、执行x 也就是说一个...
  • 最近在做android-ndk开发,因为需要涉及到动态库(so)问题,需要对手机文件进行读写,结果发现手机文件系统不让写,搜索了一翻。 解决: 在终端输入:$ mount 截图1: 可以发现只有读的权限(/dev/block/...
  • 更改系统文件权限众所周知必须先获取root权限,用rootexplore(R.E.文件管理器)更改文件权限非常方便。当放入或更改某些系统文件时需要更改权限,内存卡里所有文件的权限都是777无法更改,所以某些文件放入系统替换...
  • Android程序运行时权限文件系统权限 1,Linux 文件系统权限。不同的用户对文件有不同的读写执行权限。在android系统中,system和应用程序是分开的,system里的数据是不可更改的。 2,Android中有3种权限,进程权限...
  • Android系统权限说明 首先对Android权限等级进行一下说明,简单的分为一般用户、系统用户和超级用户。 一般的用户权限在Manifest.xml文件中使用标签进行申请,比如sd卡读写权限、网络使用权限等等; 系统用户...
  • Android中有一个精简版的linux系统,因为是linux系统,那么有时候在写Android应用程序的时候会遇到权限问题。我们都知道在shell中可以通过chmod命令来修改权限,所以就希望通过程序来执行shell中的命令,如何来做...
  • 在硬件抽象层模块文件(so)文件中,提供的函数调用open函数来打开设备文件,比如/dev/gpio,如果不修改设备文件/dev/gpio的访问权限,那么应用程序通过JNI接口来调用硬件抽象层提供的函数接口来调用open函数打开设备...
  • 随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq... apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置。(一)linux...
  • 1、AndroidManifest.xml 文件添加: 2、onCreate()或其他访问文件位置添加授权 private void checkPermission() { //检查权限(NEED_PERMISSION)是否被授权 PackageManager.PERMISSION...
  • 1.手机需要先获取root权限。 2.cd 进入sdk中的platform-tools文件 3.通过cmd,输入adb shell 4.此时就已经进入了手机的root目录。 5.切换到data目录下, cd data 6.执行su ,切换到超级用户 7.chmod -...
1 2 3 4 5 ... 20
收藏数 81,576
精华内容 32,630