`
koliy
  • 浏览: 148651 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android- 启动文件权限

 
阅读更多

在system.img和data.img,我们发现目录和文件有自己的UID/GID及相应的访问权限
但在Android的编译环境中,这些目录和文件目录并没有对此有相应的配置。
事实上,这些修改是有mkyaffs2image工具完成的。分析mkyaffs2image.c源代码,其过程如下:1. 预制条件. 当我们使用 mkyaffs2image 工具生成yaffs2文件系统时,这里有两个预制条件:
a. 使用'-f'标志
/external/yaffs2/yaffs2/utils/mkyaffs2image.c.
如果'-f',代码中fixstats标志会被设置,一些特殊操作将会根据标志来操作
        if (strcmp(argv[1], "-f") == 0) {
            fixstats = 1;
            argc--;
            argv++;
        }b. 输入的文件夹的名字必须是"data"或者"system"
    if (fixstats) {
        int len = strlen(argv[1]);
       
        if((len >= 4) && (!strcmp(argv[1] + len - 4, "data"))) {
            source_path_len = len - 4;
        } else if((len >= 7) && (!strcmp(argv[1] + len - 6, "system"))) {
            source_path_len = len - 6;
        } else {           
            fprintf(stderr,"Fixstats (-f) option requested but filesystem is not data or android!\n");
            exit(1);
        }
        fix_stat(argv[1], &stats);
    }2. 正常配置:访问权限、UID/GID.
mkyaffs2image 给所有的目录和文件uid:gid/ROOT:ROOT,使用在编译环境中得到原始的访问权限3. Android特殊的配置如果fixstats标志被设置了,mkyaffs2image 将会做一些特殊的配置用于Android操作系统 /external/yaffs2/yaffs2/utils/mkyaffs2image.c.
main() -> process_directory() -> fix_stat() -> fs_config() -> fs_config() 定义在 sysem/core/include/private/android_filesystem_config.h.
该函数根据android_dirs和android_files数据结构做Android相关的配置4. android_dirs和android_files数据结构定义在system/core/include/private/android_filesystem_config.h文件中:static struct fs_path_config android_dirs[] = {
    { 00770, AID_SYSTEM, AID_CACHE,  "cache" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/app" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/app-private" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/dalvik-cache" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data/data" },
    { 00771, AID_SHELL,  AID_SHELL,  "data/local/tmp" },
    { 00771, AID_SHELL,  AID_SHELL,  "data/local" },
    { 01771, AID_SYSTEM, AID_MISC,   "data/misc" },
    { 00770, AID_DHCP,   AID_DHCP,   "data/misc/dhcp" },
    { 00771, AID_SYSTEM, AID_SYSTEM, "data" },
    { 00750, AID_ROOT,   AID_SHELL,  "sbin" },
    { 00755, AID_ROOT,   AID_SHELL,  "system/bin" },
    { 00755, AID_ROOT,   AID_SHELL,  "system/xbin" },
    { 00755, AID_ROOT,   AID_ROOT,   "system/etc/ppp" },
    { 00777, AID_ROOT,   AID_ROOT,   "sdcard" },
    { 00755, AID_SYSTEM, AID_SYSTEM, "system/midletbox" },
    { 00777, AID_SYSTEM, AID_SYSTEM, "system/bin/midletvm" },
    { 00755, AID_ROOT,   AID_ROOT,   0 },
};
static struct fs_path_config android_files[] = {
    { 00440, AID_ROOT,      AID_SHELL,     "system/etc/init.goldfish.rc" },
    { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.goldfish.sh" },
    { 00440, AID_ROOT,      AID_SHELL,     "system/etc/init.trout.rc" },
    { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.ril" },
    { 00550, AID_ROOT,      AID_SHELL,     "system/etc/init.testmenu" },
    { 00550, AID_DHCP,      AID_SHELL,     "system/etc/dhcpcd/dhcpcd-run-hooks" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/dbus.conf" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/main.conf" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/input.conf" },
    { 00440, AID_BLUETOOTH, AID_BLUETOOTH, "system/etc/bluez/audio.conf" },
    { 00444, AID_RADIO,     AID_AUDIO,     "system/etc/AudioPara4.csv" },
    { 00555, AID_ROOT,      AID_ROOT,      "system/etc/ppp
    { 02755, AID_ROOT,      AID_NET_RAW,   "system/bin/ping" },
    { 02755, AID_ROOT,      AID_INET,      "system/bin/netcfg" },
        
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/su" },
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/librank" },
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/procrank" },
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/procmem" },
    { 06755, AID_ROOT,      AID_ROOT,      "system/xbin/tcpdump" },
    { 04755, AID_ROOT,      AID_ROOT,      "system/bin/fota" },
    { 00755, AID_ROOT,      AID_SHELL,     "system/bin/*" },
    { 00755, AID_ROOT,      AID_SHELL,     "system/xbin/*" },
    { 00750, AID_ROOT,      AID_SHELL,     "sbin/*" },
    { 00755, AID_ROOT,      AID_ROOT,      "bin/*" },
    { 00750, AID_ROOT,      AID_SHELL,     "init*" },
    { 00644, AID_ROOT,      AID_ROOT,       0 },
};

分享到:
评论

相关推荐

    Android-Android-FileBrowser-FilePicker一个Android文件浏览和选择控件

    5. **权限处理**:自动处理Android的存储权限请求,确保在需要时向用户请求访问文件系统的权限。 6. **易于集成**:简单的API接口,使得开发者能够快速将文件选择功能集成到自己的项目中。 **使用步骤:** 1. **...

    Android修改系统文件访问权限

    5. **修改文件权限**:在Linux(包括Android)系统中,文件权限由read(读)、write(写)和execute(执行)三个基本权限组成,分别用r、w、x表示。这些权限可以针对文件所有者、同一组用户和其他用户进行设置。修改...

    android-sdk_r24.4.1-windows.zip

    通过运行此程序以管理员权限启动,可以确保所有安装过程顺利完成,避免权限问题导致的错误。 2. **AVD Manager.exe**:Android Virtual Device(AVD)管理器,用于创建、管理和配置模拟器实例。开发者可以通过AVD...

    frida-server-16.0.13-android-arm64

    1. **frida-server**:这是实际的二进制文件,需要安装到Android设备上,并通过ADB(Android Debug Bridge)或其他方式启动。启动后,它可以监听来自Frida客户端(如`frida`命令行工具或Frida GUI)的连接,执行传入...

    android-doc-picker,一个简单易用的文档选择器android库。从设备中选择任何文档,如pdf、ppt、文本、word或媒体文件.zip

    【Android Doc Picker】是一个专为Android开发者设计的开源文档选择器库,它的主要目标是提供一个简洁、用户友好的界面,使用户能够方便地从他们的设备中选取各种类型的文档,包括PDF、PPT、文本文件、Word文档以及...

    Android Studio Linux(android-studio-ide-141.1890965-linux.zip )

    - 添加可执行权限给解压后的`bin/studio.sh`文件,通过命令`chmod +x /opt/android-studio/bin/studio.sh`。 - 创建桌面快捷方式,方便启动。在终端输入以下命令,根据个人需求修改路径和图标: ``` nano ~/....

    android-support-v4.zip

    v4库提供了Intent、FileProvider等类,可以帮助构建更新流程,例如创建下载任务、管理文件权限,以及启动安装过程。通过将`android-support-v4.jar`导入到Unity的Android插件目录(通常为Android/libs),可以调用...

    赋予ANDROID-root权限

    ### 赋予ANDROID模拟器Root权限详解 在Android开发过程中,有时我们需要对模拟器进行更深层次的操作,比如安装特定的应用、修改系统设置等。这时就需要获取模拟器的root权限。本文将详细介绍如何通过ADB(Android ...

    Android使用android-beacon-library接收beacon

    为了接收Beacon信号,你需要在`AndroidManifest.xml`文件中添加必要的权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission....

    Android-android7.0访问文件打开相机功能

    1. **Android 7.0 文件访问权限** 在Android 6.0(API级别23)引入运行时权限后,Android 7.0进一步加强了对存储空间的访问控制。应用不再能直接访问外部存储(SD卡)上的所有文件,而是需要使用`FileProvider`来...

    Android-Android冷启动优化app启动速度(视觉上提高启动速度)

    - **资源加载**: Android系统会加载应用的资源文件,包括图片、布局等,优化资源文件的大小和格式可以有效缩短启动时间。 - **初始化组件**: Activity、Service、BroadcastReceiver等组件的初始化会消耗时间,合理...

    Android不需要文件存储权限将文件保存至手机

    在Android系统中,传统的文件存储方式通常需要应用获取相应的文件读写权限,以便在外部存储(如SD卡)上保存和访问数据。然而,随着Android系统的更新,特别是自Android 6.0(Marshmallow)引入运行时权限管理以来,...

    Android-PWA-Wrapper,android包装器,用于从支持脱机的渐进式web应用程序创建本地android应用程序.zip

    Android-PWA-Wrapper 是一个开源项目,其主要目标是帮助开发者将支持离线功能的渐进式Web应用程序(PWA)转化为原生的Android应用程序。这个工具为开发者提供了一个便捷的方式,让他们能够利用已有的PWA,通过简单的...

    android-23

    1. **运行时权限**:Android 6.0引入了运行时权限模型,用户可以在安装应用后对权限进行控制,而不是在安装时一次性授权所有权限。这对用户隐私保护和应用安全有重大意义。 2. **Doze模式**:为了提高电池续航,...

    android-simpl3r-文件上传master.zip

    使用`Intent.ACTION_GET_CONTENT`启动文件选择器,然后使用`ContentResolver`读取选定文件的内容。 4. **上传逻辑**: 文件上传的流程通常包括以下步骤: - 读取文件内容到内存或临时文件。 - 创建RequestBody...

    android-29.rar

    "android-29.rar"这个压缩包文件,正如其名所示,包含了针对Android SDK版本29的相关资源,对应的是Android 10.0系统。Android 10.0是Google于2019年发布的操作系统版本,它带来了许多新特性和改进,旨在提高用户...

    Android-6.0动态申请权限工具类

    在Android 6.0(API级别23)及以上版本,系统引入了运行时权限管理机制,这使得开发者需要在应用运行时向用户请求敏感权限,而不是像以前那样在安装时一次性获取所有权限。为了简化这一过程,我们可以创建一个名为...

    需要配合trinea-android-demo这个程序使用

    9. **Android权限**:如果涉及读写本地文件,需要正确声明和处理相关权限。 10. **开源许可**:理解并遵守项目的开源许可协议,确保合法使用和分发代码。 总的来说,“android-auto-scroll-view-pager-master”项目...

    Android-一款实用Android平台上的应用开机启动项管理

    7. **权限管理**:考虑到安全因素,BootManager需要获得相应的系统权限才能管理其他应用的启动项,比如读取应用信息、修改系统设置等。 8. **数据备份与恢复**:为了防止误操作或在新设备上快速设置,BootManager...

Global site tag (gtag.js) - Google Analytics