2 Stimmen

Wie setzt man Android /data/data/com.xxx.xxx Berechtigungen linux zurück?

Ich habe einige Änderungen vorgenommen und meine Anwendungen stürzen ab. Irgendwie stimmen die Berechtigungen und Benutzernamen meiner Anwendungen nicht mit dem Ordner /data/data überein. Der Benutzername jeder App stimmt nicht mit dem Benutzernamen der Apps auf dem Dateisystem überein.ich muss das Dateisystem oder den Benutzernamen irgendwie zurücksetzen.

Ich benötige entweder den Namen der Datei für die Zuweisung von Anwendungsbenutzernamen und -gruppen oder eine Methode zum Zurücksetzen der Berechtigungen für alle Anwendungen.

2 Stimmen

Werksreset? Ich bin nicht sicher, welche Änderung Sie vorgenommen haben, aber auf den meisten nicht verwurzelten Telefonen oder Dev-Telefonen sollte dieser Ordner eingeschränkte Berechtigungen haben.

1 Stimmen

Sie kennen chmod 755 dirName , etc? (Das könnte funktionieren, aber ich kenne mich mit Android nicht aus ;-). ... Viel Glück!

3voto

aggregate1166877 Punkte 1647

Sichern Sie Ihre Daten, bevor Sie die folgenden Schritte durchführen, da die Wahrscheinlichkeit groß ist, dass Sie Ihr Telefon ruinieren werden.

Dies ist keine vollständige Antwort, aber kurz gesagt neigen einige Anwendungen dazu, ihre Benutzerinformationen als durch Leerzeichen getrennte Werte in /data/system/packages.list während bei anderen Anwendungen die Benutzerinformationen in der Regel im XML-Format in /data/system/packages.xml . Darüber hinaus sehen die Besitzverhältnisse in einem Terminal etwas anders aus als in diesen Dateien. Auf meinem Telefon ist Whatsapp zum Beispiel der Unix-Benutzer u0_a70, während der XML-Eintrag ihn als userId="10070" ausweist.

Es ist daher etwas schwierig, die Benutzerberechtigungen "einfach zu korrigieren", da man zwei verschiedene Skripte benötigt, die auf zwei völlig unterschiedliche Datensätze zugreifen, und Android-Linux wird nicht gerade mit XML-Parsern ausgeliefert. Die erforderliche Konvertierung der Benutzer-ID ist auch nicht hilfreich, da sie nicht immer anwendbar ist.

Wenn Sie sich der Herausforderung stellen wollen, können Sie mit BusyBox-Bins wie folgt beginnen:

# 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

Dadurch wird eine Liste von Zeilen erzeugt, die wie folgt aussieht:

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

was vielversprechend ist. Allerdings funktioniert dies nicht für Benutzer wie "bluetooth", "radio" und "system", und Zeilen mit diesen Benutzern erzeugen stattdessen Müll wie:

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

Sie müssen also alles auf seine Richtigkeit überprüfen, bevor Sie das Skript ausführen. Ein naiver Weg, dies zu beheben, könnte darin bestehen, die obige cat..awk in | egrep -v '[0-9][0-9][0-9][0-9]:-[0-9][0-9][0-9][0-9]' aber das ist eine Notlösung, die nicht in allen Fällen funktioniert. Wenn dies für Sie akzeptabel ist, können Sie die obigen Anweisungen in einer einzigen Zeile kombinieren, die zu /data/media/fix_perms.sh .

Damit wird nichts repariert, was nur in /data/system/packages.xml und jedes reguläre Skript ist fast garantiert geräteübergreifend fehlerhaft, daher werde ich das nicht behandeln. Wenn Sie eine mögliche Lösung wünschen, hinterlassen Sie einen Kommentar, und ich werde auch ein Mock-Skript für die XML-Datei schreiben.

1 Stimmen

Auch laufen restorecon -R <folder> um SELinux-Attribute wiederherzustellen

1 Stimmen

cat /data/system/packages.list | awk '$2 > 10000 {print "chown u0_a" $2-10000 ":u0_a" $2-10000 " /data/data/"$1" -R"}' ist eine weniger umständliche Lösung.

2voto

Matt Punkte 2542

Ich habe Android nicht verwendet, aber ich denke, es basiert auf Linux. daher sollte es ein paar gemeinsame Standardbefehle haben. also geben Sie dies ein:

stat -c '%a %n' /data

in einem Terminal. (Sie haben doch ein Terminal, oder?) Wie auch immer, das wird Ihnen die Berechtigungen des Ordners /data anzeigen. [Wenn dieser Ordner nicht die richtigen Berechtigungen hat, ersetzen Sie /data durch einen Ordner mit den richtigen Berechtigungen]. Ein Beispiel für die Ausgabe wäre dies:

755 /data

Das bedeutet, dass /data die Berechtigung 755 hat. Angenommen, 755 ist Ihre Ausgabe, geben Sie dies ein, um die Berechtigungen rekursiv zu ändern:

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

Oder wenn Sie alles in /data/data ändern wollen, können Sie dies anstelle von /data/data/com.xxx.xxx tun.

Wenn Sie ein Verzeichnis kennen, von dem Sie wissen, dass es die richtigen Rechte hat, geben Sie dies ein:

ls -ld /root/root/com.correct_ownership_app

Hier ist die Ausgabe auf meinem /var Ordner:

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

"Root Root" bedeutet, dass Root der Eigentümer ist [und ich denke, dass "Root" die Gruppe ist]. Überprüfen Sie zunächst die Eigentümerschaft mit einer Ihrer Anwendungen. Wenn es das gleiche ist, dann müssen die Berechtigungen die App zum Absturz gebracht haben.

Andernfalls wird der Besitzer rekursiv gewechselt:

chown -R USER /data/data

Stellen Sie sicher, dass Sie USER auf den gewünschten Benutzer ändern!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X