【问题标题】:How to reset android /data/data/com.xxx.xxx permissions linux?如何重置 android /data/data/com.xxx.xxx 权限 linux?
【发布时间】:2011-06-17 09:29:52
【问题描述】:

我做了一些更改,但我的应用程序崩溃了。不知何故,我的应用程序的权限和用户名与 /data/data 文件夹不一致。每个应用程序的用户名与文件系统上的应用程序用户名不一致。我需要以某种方式重置文件系统或用户名。

我需要应用程序用户名/组分配文件的名称,或重置所有应用程序权限的方法。

【问题讨论】:

  • 恢复出厂设置?不确定您做了什么修改,但在大多数非 root 手机或开发手机上,该文件夹应该具有受限权限。
  • 你知道 chmod 755 dirName 等吗? (这可能有效,但我不知道来自android ;-)。 ...祝你好运!

标签: android linux bash permissions


【解决方案1】:

我没有使用过 Android,但我认为它是基于 Linux 的。所以它应该有一些常见的标准命令。所以输入这个:

stat -c '%a %n' /data

在终端中。 [你确实有终端,对吗?] 无论如何,这将告诉您 /data 文件夹的权限。 [如果此文件夹没有正确的权限,请用 /data 替换具有正确权限的文件夹]。示例输出如下:

755 /data

这意味着 /data 有 755 个权限。假设 755 是您的输出,键入此以递归更改权限:

chmod -R 755 /data/data/com.xxx.xxx

或者,如果您想更改 /data/data 中的所有内容,那么您可以这样做而不是 /data/data/com.xxx.xxx。

一旦权限确定,接下来就是所有权。如果您知道某个目录拥有正确的所有权,请输入:

ls -ld /root/root/com.correct_ownership_app

这是我的/var 文件夹中的输出:

drwxr-xr-x 14 root root 4096 2010-12-16 18:51 /var/

“root root”意味着root是所有者[我认为“root”是组]。首先,使用您的一个应用程序检查所有权。如果相同,则权限一定是导致应用程序崩溃的原因。如果是这样的话,那么你应该完成。

否则,递归更改所有者:

chown -R USER /data/data

确保将 USER 更改为应为的任何用户!

【讨论】:

    【解决方案2】:

    在执行以下操作之前备份您的资料,因为您很有可能会损坏您的手机。

    不是一个完整的答案,但简而言之,一些应用程序倾向于将其用户信息存储为/data/system/packages.list 中的空格分隔值,而其他应用程序倾向于将用户信息存储为/data/system/packages.xml 中的 XML 格式。此外,在终端中看到的所有权看起来与它们在这些文件中的外观有些不同。例如,在我的手机上,Whatsapp 是 Unix 用户 u0_a70,而它的 XML 条目将其标识为 userId="10070"。

    因此,“仅修复”用户权限有点困难,因为您需要 2 个不同的脚本来查看 2 个完全不同的数据集,而且 Android Linux 并不完全附带 XML 解析器。所需的用户 ID 转换也无济于事,因为它并不总是适用。

    如果您准备好迎接挑战,使用 BusyBox 箱的起点如下:

    # Generate a permissions fixer from /data/system/packages.list:
    cat /data/system/packages.list | awk '{print "chown u0_a" $2-10000 ":u0_a" $2-10000 " /data/data/"$1" -R"}' > /data/media/fix_perms.sh
    chmod +x /data/media/fix_perms.sh
    

    这将生成一个如下所示的行列表:

    chown u0_a17:u0_a17 /data/data/com.google.android.gsf -R
    chown u0_a6:u0_a6 /data/data/com.android.keyguard -R
    chown u0_a52:u0_a52 /data/data/com.google.android.calendar -R
    chown u0_a48:u0_a48 /data/data/com.android.chrome -R
    chown u0_a55:u0_a55 /data/data/jackpal.androidterm -R
    

    这是有希望的。但是,这不适用于像“蓝牙”、“无线电”和“系统”这样的用户,并且与这些用户的线路会产生如下垃圾:

    chown -8998:-8998 /data/data/com.android.bluetooth -R
    

    因此,您需要在运行脚本之前对所有内容进行全面检查。解决此问题的一种天真的方法可能是将上述 cat..awk 导入| egrep -v '[0-9][0-9][0-9][0-9]:-[0-9][0-9][0-9][0-9]',但这是一个 hack 解决方案,并非在所有情况下都有效。如果这对您来说是可以接受的,那么您可以将以上内容组合成一行重定向到 /data/media/fix_perms.sh

    现在,这不会修复仅在 /data/system/packages.xml 中定义的任何内容,并且几乎可以保证任何常规脚本都会在设备上失败,因此我不会对此进行介绍。如果您确实想要一个可能的解决方案,请发表评论,我也会为 XML 文件编写一个模拟脚本。

    【讨论】:

    • 同时运行 restorecon -R <folder> 来恢复 SELinux 属性
    • cat /data/system/packages.list | awk '$2 > 10000 {print "chown u0_a" $2-10000 ":u0_a" $2-10000 " /data/data/"$1" -R"}' 是一个不太麻烦的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 2014-09-05
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2020-02-25
    • 2018-07-05
    相关资源
    最近更新 更多