欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

android - 如何操作应用程序的私人数据目录(删除、使用 linux 权限重新创建/恢复selinux 权限)

最编程 2024-05-04 15:57:34
...

android - 如何操作应用的私有数据目录(删除, 重新创建后的linux权限/selinux权限恢复)

注: 需root

应用私有数据目录, 通常在 /data/data/[packageName] 下.
"通常" 是指的的是不涉及"android多用户"的时候, 注意是android多用户, 不是linux或其他的什么多用户.
/data/data/[packageName] 路径等价于 /data/user/0/[packageName].
"/data/user/0/[packageName]" 里面的0就是用户 id, 多用户下, 其他用户的id替换这个0 就是其他用户下, 本应用的私有数据路径.
可以参考小米/魅族 手机的"应用分身功能" 即基于android多用户.

你root了手机, 就可以手动操作应用私有数据.(反之, 不root, 你用adb无法访问)

废话不多说, 直接上操作:(操作图/ 操作解说)

image.png
// 1> 应用私有目录被删除:
moasm:~/_tmp/0512/files/logs$ adb shell ls -alh /data/data/com.duoxxx.xxxx/
ls: /data/data/com.duoxxx.xxxx/: No such file or directory

// 2> 尝试恢复/重新创建之:
moasm:~/_tmp/0512/files/logs$ adb shell mkdir /data/data/com.duoxxx.xxxx/

// 3> 进入手机shell, 进一步设置权限(linux权限-用户,用户组,读写权限), selinux context)
// 注: 命令提示符前面的 # , 表示我已经事先 root了手机, 并 adb root获取了root权限
moasm:~/_tmp/0512/files/logs$ adb shell 
walleye:/ # cd /data/data/
walleye:/data/data # ls -alh | grep xxx -C 2
drwxr-x--x   4 u0_a43         u0_a43         4.0K 2020-05-06 11:03 com.android.wallpaperpicker
drwx------   4 u0_a58         u0_a58         4.0K 2020-05-11 17:15 com.android.webview
drwxrwxrwx   2 root           root           4.0K 2020-05-12 14:49 com.duoxxx.xxxx
drwx------   4 u0_a92         u0_a92         4.0K 2019-08-23 19:56 com.example.emptyactivity
drwx------   7 u0_a188        u0_a188        4.0K 2020-02-16 10:27 com.example.lhztest1

// 4> 通过dumpsys package 获取xxx的 uid(注: 原生的bug, 这里的userId实际上是 uid, uid = (userId*10000 + appId) )
walleye:/data/data # dumpsys package com.duoxxx.xxxx | grep userId
    userId=10242

// 5> 看上去读写权限(drwxrwxrwx) > 原来的(drwx------ 或 drwxr-x--x), 懒得改了, 要改使用chmod咯.


// 6> 恢复文件的group:user权限:  chown
1|walleye:/data/data # chown u0_a242:u0_a242 com.duoxxx.xxxx                                                                                                                                                                                 
walleye:/data/data # ls -alh | grep xxx -C 2                                                                                                                                                                                                
drwxr-x--x   4 u0_a43         u0_a43         4.0K 2020-05-06 11:03 com.android.wallpaperpicker
drwx------   4 u0_a58         u0_a58         4.0K 2020-05-11 17:15 com.android.webview
drwxrwxrwx   2 u0_a242        u0_a242        4.0K 2020-05-12 14:49 com.duoxxx.xxxx
drwx------   4 u0_a92         u0_a92         4.0K 2019-08-23 19:56 com.example.emptyactivity
drwx------   7 u0_a188        u0_a188        4.0K 2020-02-16 10:27 com.example.lhztest1

// 7> 查看当前文件 selinux context状态, 对比其他类似app, 找规律:
walleye:/data/data # ls -alhZ | grep xxx -C 2                                                                                                                                                                                               
drwxr-x--x   4 u0_a43         u0_a43         u:object_r:app_data_file:s0:c512,c768           4.0K 2020-05-06 11:03 com.android.wallpaperpicker
drwx------   4 u0_a58         u0_a58         u:object_r:app_data_file:s0:c58,c256,c512,c768  4.0K 2020-05-11 17:15 com.android.webview
drwxrwxrwx   2 u0_a242        u0_a242        u:object_r:system_data_file:s0                  4.0K 2020-05-12 14:49 com.duoxxx.xxxx
drwx------   4 u0_a92         u0_a92         u:object_r:app_data_file:s0:c92,c256,c512,c768  4.0K 2019-08-23 19:56 com.example.emptyactivity
drwx------   7 u0_a188        u0_a188        u:object_r:app_data_file:s0:c188,c256,c512,c768 4.0K 2020-02-16 10:27 com.example.lhztest1


// 8> 恢复selinux context 
// 参考技术文档:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-security-enhanced_linux-working_with_selinux-selinux_contexts_labeling_files

walleye:/data/data # chcon --help 
usage: chcon [-hRv] CONTEXT FILE...

Change the SELinux security context of listed file[s].

-h change symlinks instead of what they point to
-R recurse into subdirectories
-v verbose output

walleye:/data/data # chcon u:object_r:app_data_file:s0:ca242,c256,c512,c768 com.duoxxx.xxxx
walleye:/data/data # ls -alhZ | grep xxx -C 2                                                                                                                                                                                               
drwxr-x--x   4 u0_a43         u0_a43         u:object_r:app_data_file:s0:c512,c768            4.0K 2020-05-06 11:03 com.android.wallpaperpicker
drwx------   4 u0_a58         u0_a58         u:object_r:app_data_file:s0:c58,c256,c512,c768   4.0K 2020-05-11 17:15 com.android.webview
drwxrwxrwx   2 u0_a242        u0_a242        u:object_r:app_data_file:s0:ca242,c256,c512,c768 4.0K 2020-05-12 14:49 com.duoxxx.xxxx
drwx------   4 u0_a92         u0_a92         u:object_r:app_data_file:s0:c92,c256,c512,c768   4.0K 2019-08-23 19:56 com.example.emptyactivity
drwx------   7 u0_a188        u0_a188        u:object_r:app_data_file:s0:c188,c256,c512,c768  4.0K 2020-02-16 10:27 com.example.lhztest1


好了, 看上去这个目录各种权限都恢复啦, 跟没删除一样~

end