android - 如何操作應(yīng)用的私有數(shù)據(jù)目錄(刪除, 重新創(chuàng)建后的linux權(quán)限/selinux權(quán)限恢復(fù))
注: 需root
應(yīng)用私有數(shù)據(jù)目錄, 通常在 /data/data/[packageName] 下.
"通常" 是指的的是不涉及"android多用戶"的時(shí)候, 注意是android多用戶, 不是linux或其他的什么多用戶.
/data/data/[packageName] 路徑等價(jià)于 /data/user/0/[packageName].
"/data/user/0/[packageName]" 里面的0就是用戶 id, 多用戶下, 其他用戶的id替換這個(gè)0 就是其他用戶下, 本應(yīng)用的私有數(shù)據(jù)路徑.
可以參考小米/魅族 手機(jī)的"應(yīng)用分身功能" 即基于android多用戶.你root了手機(jī), 就可以手動(dòng)操作應(yīng)用私有數(shù)據(jù).(反之, 不root, 你用adb無法訪問)
廢話不多說, 直接上操作:(操作圖/ 操作解說)
image.png
// 1> 應(yīng)用私有目錄被刪除:
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> 嘗試恢復(fù)/重新創(chuàng)建之:
moasm:~/_tmp/0512/files/logs$ adb shell mkdir /data/data/com.duoxxx.xxxx/
// 3> 進(jìn)入手機(jī)shell, 進(jìn)一步設(shè)置權(quán)限(linux權(quán)限-用戶,用戶組,讀寫權(quán)限), selinux context)
// 注: 命令提示符前面的 # , 表示我已經(jīng)事先 root了手機(jī), 并 adb root獲取了root權(quán)限
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實(shí)際上是 uid, uid = (userId*10000 + appId) )
walleye:/data/data # dumpsys package com.duoxxx.xxxx | grep userId
userId=10242
// 5> 看上去讀寫權(quán)限(drwxrwxrwx) > 原來的(drwx------ 或 drwxr-x--x), 懶得改了, 要改使用chmod咯.
// 6> 恢復(fù)文件的group:user權(quán)限: 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> 查看當(dāng)前文件 selinux context狀態(tài), 對(duì)比其他類似app, 找規(guī)律:
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> 恢復(fù)selinux context
// 參考技術(shù)文檔: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
好了, 看上去這個(gè)目錄各種權(quán)限都恢復(fù)啦, 跟沒刪除一樣~
end