Android 修改系统文件 访问权限
来源:互联网 发布:ubuntu高级选项怎么用 编辑:程序博客网 时间:2024/05/16 01:02
我这里编译都是在Android源码包下,文章比较针对系统开发人员。以proc/cmdline为例,连接手机敲入命令可以看到默认情况下普通用户没有proc/cmdline的任何操作权限,如下所示:
root@android:/ # cat /proc/cmdline
console=ttymxc0,115200 androidboot.console=ttymxc0 vmalloc=400M init=/init video=mxcfb0:dev=ldb,LDB-1k,if=RGB666,bpp=32 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off fbmem=28M androidboot.hardware=freescale
root@android:/ # ll /proc/cmdline
-r--r----- root radio 0 2014-04-25 05:29 cmdline
root@android:/ #
修改权限的大致思路就,
1、用c语言编写编译出一个脚本,我们运行该脚本来修改文件访问权限。
2、在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
- Android如何修改系统文件访问权限
- Android 修改系统文件 访问权限
- 修改系统文件访问权限的方法
- 修改系统文件访问权限的方法
- Android系统修改硬件设备访问权限
- Android系统修改硬件设备访问权限
- 修改android系统文件,只读权限
- Ubuntu系统下修改文件/文件夹的访问权限
- Android文件访问权限
- Android文件访问权限
- Android文件访问权限
- [Android] 修改设备访问权限
- Android修改文件权限
- Android 修改文件权限
- Android应用获取root权限,修改系统文件
- Android系统文件安全权限检测/system/build.prop修改
- 修改windows系统文件权限
- linux系统文件权限修改
- iphone系统架构以及各层提供的主要服务
- ImageSwitcher 使用方法
- Android客户端抓包笔记
- 计算机视觉领域重要资源
- 做大的艺术 - 大型网站的架构设计
- Android 修改系统文件 访问权限
- C语言拾遗:ifndef/define/endif 与 #pragma once
- Spring事务代理
- 鸟哥私房菜学习笔试(三)——/etc/passwd和/etc/shadow 文件格式
- Android Ant打包笔记
- android ScrollVIew中嵌套GridView,和ListView显示不全解决方法
- 一个简单的反射连接程序
- 第53天
- elasticsearch中文分词集成