0 votes

Pourquoi l'appel à setuid() renvoie-t-il "Mauvais appel système" ?

Alors en fait, j'ai Android 13. Le problème se situe dans mon code C (probablement?). Quand j'appelle setuid(0) ou setuid(getuid()) sur mon téléphone, j'obtiens cette sortie:

Mauvais appel système

Pendant ce temps, sur mon ordinateur portable avec Ubuntu, setuid() ne lance aucune erreur, et renvoie -1 (donc c'est comme ça que ça devrait être).

Alors pourquoi est-ce qu'Android lance une erreur avec setuid()? Et si Mauvais appel système est normal pour Android, alors comment le système Android peut-il appeler setuid() pour chaque application Java (uid 10000 et plus)?

1voto

John Dallman Points 123

Android bloque certains appels système pour les applications. Cela est mis en œuvre par le filtre seccomp à partir d'Android 8. Cela provoque intentionnellement des plantages d'applications qui tentent d'appeler des appels système bloqués, et c'est ce que vous rencontrez.

Android utilise des uid Linux pour les applications individuelles, plutôt que différents utilisateurs. Chaque application a un uid individuel par rapport à toutes les autres applications sur un appareil. Les uids sous lesquels les applications s'exécutent ont des noms comme u0_a40 ou u0_a121, au lieu d'être définis par l'application. Ils semblent être choisis au moment de l'installation, plutôt que d'être choisis par le développeur de l'application.

Il existe également un certain nombre d'uids spéciaux intégrés à Android, tels que l'uid shell sous lequel s'exécutent les sessions adb shell, system et wifi. Des versions personnalisées d'Android ont d'autres uids nommés comme vendor_samsungcloud que je peux voir sur mon Samsung 'phone Android 14. Pour explorer cela un peu plus :

L$ adb shell               # À l'invite de commande Linux
A$ ps -A | more            # À l'invite de commande Android

Vous constaterez qu'il y a quelques cas de processus multiples s'exécutant sous le même uid u0_aXYZ, mais les noms des processus semblent indiquer qu'ils font partie de la même application.

Accorder des uids individuels aux applications fournit un moyen simple de rendre leurs données privées les unes des autres. Leurs fichiers sont la propriété de leurs uids, donc s'ils ont des autorisations -rw-------, ils ne sont accessibles qu'à l'application.

ART (Android Run Time), qui héberge les applications, a probablement un moyen de changer l'uid d'une application, probablement en contournant le filtre seccomp pour lui permettre d'appeler setuid().

Android utilise un noyau Linux, mais ce n'est pas un système d'exploitation Linux conventionnel. Essayer de le traiter comme tel est une exercice de frustration. Essayer de trouver un moyen d'appeler setuid() vous-même est un comportement semblable à un logiciel malveillant. Vous devez apprendre la manière de faire propre à Android.

Android est bien plus verrouillé qu'Ubuntu car il est conçu pour être difficile à manipuler par des personnes qui pensent comprendre les ordinateurs, mais se trompent complètement. Un exemple de ce niveau de stupidité qu'un ami a dû gérer dans les années 1990 : un utilisateur de Windows 95 qui a décidé de supprimer tous les fichiers qu'il ne reconnaissait pas de son répertoire c:\windows, et quand son ordinateur a cessé de fonctionner, a appelé son fournisseur d'accès Internet pour se plaindre d'une attaque de logiciels malveillants.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X