2 votes

Pourquoi Root ne peut pas accéder au répertoire ".android_secure" sur une carte SD externe ?

J'ai une tablette Android 9, enracinée par le biais de Magisk. Elle a une carte SD externe montée comme sdfat en /mnt/media_rw/1234-5678 qui est monté sur quatre autres points de montage, tous de type sdcardfs avec une certaine variation dans le propriétaire et le groupe.

Dans une fenêtre de terminal, je tape ls -al /storage/1234-5678 . De nombreux fichiers et répertoires sont affichés avec un seul message d'erreur :

ls: permission denied: .android_secure

J'essaie comme Root. J'obtiens le même résultat. En utilisant /mnt/media_rw/1234-5678 et Root, je peux voir l'entrée pour .android_secure . On m'a dit que .android_secure lui-même est vide.

  1. La carte SD externe est en FAT32. Tout ce qui se trouve dessus a le même ensemble de permissions. Comment est .android_secure différent de tout le reste de la carte ?
  2. Même si .android_secure a des permissions différentes de celles des autres fichiers du répertoire, pourquoi cela m'empêche-t-il de en affichant l'entrée du répertoire ?
  3. Je deviens Root et je n'arrive toujours pas à afficher l'entrée du répertoire pour .android_secure . Comment est-ce possible ?

J'ai essayé stat . J'ai essayé lsattr . Encore : permission denied .

J'ai lu Que contient le répertoire /mnt/asec ? mais ça ne répond pas à mes questions :

  1. Si j'ai les autorisations nécessaires pour lister certaines entrées du répertoire, comment m'interdit-on de lister une entrée spécifique de ce répertoire ?

  2. Comment est-il possible de refuser à Root la possibilité de lister une entrée de répertoire ? (Et ensuite changer les protections sur cette entrée).

Je peux accepter que le système de fichiers magique et/ou SELinux permettent d'avoir différentes protections sur un même fichier. Mais je ne peux pas comprendre que Root ne puisse même pas voir ce que ces différentes protections sont.

1 votes

Cela répond-il à votre question ? Que contient le répertoire /mnt/asec ?

0 votes

@alecxs Je ne crois pas que cela réponde à mes questions.

0 votes

Vous ne pouvez pas changer les permissions ------ parce que la façon dont il est monté askubuntu.com/questions/429848

2voto

Irfan Latif Points 16863

Une recherche rapide révèle qu'il existe des questions similaires sans réponse ( este , este y este ). Permettez-moi d'essayer de le démystifier, en commençant par un bref historique.

QU'EST-CE QUE .android_secure RÉPERTOIRE ?

Afin de résoudre le problème du manque d'espace dans le stockage interne, app2sd ( Déplacer vers la carte SD ) était la fonction native d'Android jusqu'à Lollipop. Avec cette méthode .apk (ou des fichiers entiers) /data/app/<pkg>/ ) sont déplacés sous forme chiffrée .asec pour .android_secure sur une carte SD externe ou interne sdcard (montée à /mnt/sdcard/ o /mnt/media_rw/sdcard[N]/ ). À chaque démarrage .android_secure est monté sur /mnt/secure/asec/ et le ( ext4 ) conteneurs de système de fichiers ( .asec ) sont décryptés (en utilisant dm-crypt ) et montés dans des répertoires individuels (nommés d'après les noms des paquets) dans un système de fichiers temporaire monté à l'adresse suivante /mnt/asec/ por vold . Liens symétriques de /data/app/<pkg>/ et éventuellement /data/data/<pkg>/lib/ sont orientés vers /mnt/asec/<pkg>/ y /mnt/asec/<pkg>/lib/ .

POURQUOI L'ACCÈS .android_secure EST RESTREINT ?

Dès les premiers jours d'Android, l'accès à android_secure (qui est devenu plus tard .android_secure ) a été restreint. Le site commettre États :

_Afin de protéger le /android_secure sur les supports amovibles VFAT, nous cachons le répertoire avec un fichier en lecture seule et de taille nulle. tmpfs monté sur le dessus._

Plus tard, dans Android 4.4, lorsque FUSE a commencé à être utilisé pour émulation de cartes SD à partir du point de montage original ( /mnt/media_rw/sdcard1 ) vers le chemin accessible à l'utilisateur ( /storage/sdcard1/ ), la taille zéro tmpfs fonctionnalité ( Ignorer les tentatives d'accès à des fichiers sensibles sur le plan de la sécurité ) a été déplacé vers sdcard démon qui a été utilisé pour monter FUSE. Dans Android 6, le app2sd méthode était abandonné en faveur de l'Adoptable Storage (l'UUID du système de fichiers est également inclus dans les points de montage).

Dans Android 7 sdcardfs a été ajouté parallèlement à FUSE et à l'initiative de la "Toujours bloquer les fichiers sensibles à la sécurité" La fonctionnalité était ajouté à sdcardfs dans le noyau. Dans Android 9, FUSE a été complètement supprimé (de sdcard ) mais le sdcardfs bloque toujours la création/suppression de .android_secure répertoires dans la racine du système de fichiers émulé. Cependant, comme vous l'avez remarqué, il est possible d'accéder au chemin par le biais du point de montage original non émulé, à savoir /mnt/media_rw/[UUID]/.android_secure .

Pour plus de détails sur l'émulation des systèmes de fichiers, voir Qu'est-ce que /storage/emulated/0/ ?

POURQUOI Root ne peut pas accéder à un répertoire ?

Comment est-il possible de refuser à Root la possibilité de répertorier une entrée de répertoire ?

root n'est rien d'autre que le cher utilisateur du noyau. Le noyau n'empêche pas UID 0 de faire du mal ou du bien. Mais il y a des choses qui sont plus chères au noyau que Root. Cela inclut SELinux 1 Linux capacités 2 et évidemment les restrictions du système de fichiers comme nous le voyons avec FUSE 3 y sdcardfs 4 . Et comme Root ne peut pas supprimer un fichier avec immutable attribut 5 . Il est possible de supprimer ces restrictions ou d'en ajouter d'autres en modifiant les sources du noyau.


1 Voir explication y exemple .
2 Une démonstration simple :

~# setpriv --bounding-set -sys_admin -- sh -c 'id; mount -o ro,remount /'
uid=0(root) gid=0(root) groups=0(root)
mount: permission denied (are you root?)

3 FUSE documentation :

"Aucun autre utilisateur ( y compris Root ) peut accéder au contenu du système de fichiers monté "

4 L'UID 0 est vérifié après filename ( .android_secure ) est vérifié.
5 Pourquoi je ne peux pas supprimer ce fichier en tant que Root ?


RELATION :

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