android - 如何操作應(yīng)用的私有數(shù)據(jù)目錄(刪除, 重新創(chuàng)建后的linux權(quán)限/selinux權(quán)限恢復(fù))

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。