Pourquoi root ne peut pas accéder au répertoire ".android_secure" sur la carte SD externe? -- security domaine et external-sd domaine et storage domaine et app2sd domaine et file-permissions domain android en relation problème

Why root cannot access “.android_secure” directory on external SD card?



2
vote

problème

français

J'ai une tablette Android 9, enracinée par Magisk. Il a une carte SD externe montée sous forme sdfat sur 9988777661 qui est monté sur quatre autres points de montage, tous comme type sdcardfs , avec une certaine variation de Propriétaire et groupe.

à partir d'une fenêtre de terminal I Tapez ls -al /storage/1234-5678 . Beaucoup de fichiers et de répertoires sont affichés avec un message d'erreur:

ls: permission denied: .android_secure

J'essaie en tant que root. J'obtiens le même résultat. Utilisation /mnt/media_rw/1234-5678 et root, je peux voir l'entrée pour .android_secure . On me dit que .android_secure est vide.

  1. La carte SD externe est FAT32. Quelque chose sur elle a le même ensemble d'autorisations. Comment .android_secure différent de tout le reste de la carte?
  2. Même si .android_secure a des autorisations différentes des autres fichiers de l'annuaire, pourquoi est-ce que cela m'arrête de afficher l'entrée de répertoire?
  3. Je deviendrai root et je ne peux toujours pas afficher la saisie de répertoire pour /mnt/media_rw/1234-56780 . Comment cela peut-il être?

J'ai essayé /mnt/media_rw/1234-56781 . J'ai essayé /mnt/media_rw/1234-56782 . Néanmoins: /mnt/media_rw/1234-56783 .

J'ai lu Que contient le répertoire MNT / ASEC? mais cela ne répond pas à mes questions:

  1. Si j'ai les autorisations nécessaires à la liste des entrées d'annuaire, comment suis-je interdit de répertorier une entrée spécifique dans ce répertoire?

  2. Comment est-il possible de nier racine la possibilité de répertorier une entrée d'annuaire? (Puis modifier les protections sur cette entrée.)

Je peux accepter que le système de fichiers magique et / ou SELINUX permettent d'avoir des protections différentes sur un fichier. Je ne peux tout simplement pas comprendre la racine incapable de voir même quels ces différentes protections sont.

langue Anglaise

I have an Android 9 tablet, rooted by way of Magisk. It has an external SD card mounted as sdfat on /mnt/media_rw/1234-5678 which is mounted on four other mount points, all as type sdcardfs, with some variation in owner and group.

From a terminal window I type ls -al /storage/1234-5678. Lots of files and directories are shown with one error message:

ls: permission denied: .android_secure 

I try as root. I get the same result. Using /mnt/media_rw/1234-5678 and root, I can see the entry for .android_secure. I'm told that .android_secure itself is empty.

  1. The external SD card is FAT32. Anything on it has the same set of permissions. How is .android_secure different from everything else on the card?
  2. Even if .android_secure has different permissions from the other files in the directory, why is that stopping me from displaying the directory entry?
  3. I become root and I still can't even display the directory entry for .android_secure. How can that be?

I tried stat. I tried lsattr. Still: permission denied.

I have read What does /mnt/asec directory contain? but it doesn't answer my questions:

  1. If I have the permissions needed to list some directory entries, how am I being forbidden to list a specific entry in that directory?

  2. How is it ever possible to deny root the ability to list a directory entry? (And then change the protections on that entry.)

I can accept that the magic filesystem and/or SELinux makes it possible to have different protections on one file. I just can't understand root being unable to even see what those different protections are.

              
     
     

Liste de réponses

2
 
vote

Une recherche rapide révèle qu'il existe des questions similaires sans réponses ( ce , Ce et Ce ). Laissez-moi essayer de le démystifier, en commençant par une brève histoire.

Qu'est-ce que .android_secure ?

Afin de résoudre le problème de la pénurie d'espace en stockage interne, app2sd ( déplacer vers la carte SD ) était la fonction native de Android jusqu'à sucette. Avec cette méthode .apk fichiers (ou tout 9988777667 Les répertoires) sont déplacés comme cryptés < Code> .asec Fichiers à 9988777669 Dossier de la carte SD externe ou interne #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 0 partition (monté au #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 1 ou #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 2 ). Sur chaque démarrage #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 3 est linge monté sur #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 4 et le ( 99887776615 ) conteneurs ( #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 6 ) sont déchiffrés ( Utilisation #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 7 ) et monté sur des répertoires individuels (nommés d'après les noms de packages) dans un système de fichiers temporaire monté sur #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 8 par #!/bin/bash BY_NAME_DIR="/dev/block/platform/sprd-sdhci.3/by-name" for partition in $(adb shell ls $BY_NAME_DIR) do partition=$(tr -d ' '<<<$partition) echo Backing up $partition partition adb shell "su -c cat $BY_NAME_DIR/$partition 2> /dev/null"|sed 's/ $//' > ${partition}.img echo Calculating md5sum md5sum ${partition}.img > ${partition}.md5 echo Done backing up ${partition} done 9 . Symlinks à partir de 99887776620 et éventuellement 99887776621 indique vers Unknown sources2 et Unknown sources3

. .

Pourquoi l'accès à Unknown sources4 est restreint?

Du début Android, accès à 99887776625 (qui est devenu ultérieurement devenu Unknown sources6 ) a été restreint. commettre états:

afin de protéger le répertoire sur le répertoire amovible de VFAT d'être envoyé par des applications 3ème partie sur l'appareil, nous masquons le répertoire avec une taille en lecture seule et zéro < Code> Unknown sources8 monté sur le dessus.

Plus tard dans Android 4.4 quand FUSE a été lancé utilisé pour Émulation cartes SD < / a> du point de montage d'origine ( Unknown sources9 ) sur le chemin d'accès à l'utilisateur ( Settings > Security > Unknown sources0 ), la taille de la taille zéro Settings > Security > Unknown sources1 fonctionnalité ( Ignorer les tentatives de sécurité d'accès des fichiers sensibles ) était déplacé vers Settings > Security > Unknown sources2 démon qui a été utilisé pour monter le fusible. Dans Android 6 the Settings > Security > Unknown sources3 Méthode était abandonné en faveur du stockage adoptable (également FileSystem UUID a été inclus dans les points de montage).

dans Android 7 Settings > Security > Unknown sources4 Support a été ajouté en parallèle au fusible et le "Bloquer toujours les fichiers sensibles à la sécurité" la fonctionnalité était ajouté à Settings > Security > Unknown sources5 dans le noyau. Dans Android 9 Fuse a été complètement supprimé (de Settings > Security > Unknown sources6 Daemon) mais le 99887776637 Blocs toujours Création / Suppression de Settings > Security > Unknown sources8 Répertoires à la racine du système de fichiers émulés . Cependant, comme vous l'avez remarqué, il est possible d'accéder à la trajectoire via un point de montage original non émulé I.e. Settings > Security > Unknown sources .

Pour plus de détails sur l'émulation du système de fichiers, voir Qu'est-ce que c'est / stockage / émulé / 0 /?

Pourquoi la racine ne peut pas accéder à un répertoire?

Comment est-il possible de nier racine la possibilité de répertorier une entrée de répertoire?

.android_secure0 n'est que le chère utilisateur de noyau. Le noyau n'arrête pas l'UID 0 de faire du mal ou du bien. Mais il y a des choses qui sont plus chères au noyau que la racine. Il inclut Selinux 1 , Linux Capacités 2 et évidemment les restrictions du système de fichiers comme nous voyons avec le fusible 3 et .android_secure1 4 . Et comme la racine ne peut pas supprimer un fichier avec .android_secure2 attribut 5 . Il est possible de supprimer une telle restriction ou d'ajouter plus en modifiant la source du noyau.

1 voir explication et Exemple .
2 une simple démonstration:

.android_secure3

3 fusible Documentation < / a>:

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

4 uid 0 est coché après nom de fichier ( .android_secure4 ) est vérifié.
5 Pourquoi ne puis-je pas supprimer ce fichier en tant que root?

lié:

  • Le trajet de stockage de Android
  • Comment enregistrer des fichiers sur une carte SD externe?

 

A quick search reveals that there exist similar unanswered questions (this, this and this). Let me try to demystify it, starting with brief history.

WHAT IS .android_secure DIRECTORY?

In order to solve the problem of space shortage in internal storage, app2sd (Move to SD Card) was Android's native feature up to Lollipop. With this method .apk files (or whole /data/app/<pkg>/ directories) are moved as encrypted .asec files to .android_secure folder on external SD card or internal sdcard partition (mounted at /mnt/sdcard/ or /mnt/media_rw/sdcard[N]/). On every boot .android_secure is bind mounted to /mnt/secure/asec/ and the (ext4) filesystem containers (.asec) are decrypted (using dm-crypt) and mounted to individual directories (named after package names) in a temporary filesystem mounted at /mnt/asec/ by vold. Symlinks from /data/app/<pkg>/ and possibly /data/data/<pkg>/lib/ are pointing towards /mnt/asec/<pkg>/ and /mnt/asec/<pkg>/lib/.

WHY ACCESS TO .android_secure IS RESTRICTED?

From the early days of Android, access to android_secure folder (which later became .android_secure) was restricted. The commit states:

In order to protect the /android_secure directory on VFAT removable media from being mucked with by 3rd party applications on the device, we hide the directory with a read-only, zero-sized tmpfs mounted on-top.

Later in Android 4.4 when FUSE was started being used for emulating SD cards from original mount point (/mnt/media_rw/sdcard1) to user accessible path (/storage/sdcard1/), the zero-sized tmpfs functionality (Ignore attempts to access security sensitive files) was shifted to sdcard daemon which was used to mount FUSE. In Android 6 the app2sd method was abandoned in favor of Adoptable Storage (also filesystem UUID was included in mount points).

In Android 7 sdcardfs support was added in parallel to FUSE and the "Always block security-sensitive files" functionality was added to sdcardfs in kernel. In Android 9 FUSE was completely removed (from sdcard daemon) but the sdcardfs still blocks creation/deletion of .android_secure directories in the root of emulated filesystem. However as you noticed, it's possible to access the path through original non-emulated mount point i.e. /mnt/media_rw/[UUID]/.android_secure.

For details on filesystem emulation, see What is /storage/emulated/0/?

WHY ROOT CAN'T ACCESS A DIRECTORY?

How is it ever possible to deny root the ability to list a directory entry?

root is nothing but kernel's dear user. Kernel doesn't stop UID 0 from doing any harm or good. But there are things which are dearer to kernel than root. It includes SELinux 1, Linux capabilities 2 and obviously the filesystem restrictions like we see with FUSE 3 and sdcardfs 4. And like root cannot delete a file with immutable attribute 5. It's possible to remove any such restriction or add more by modifying kernel source.


1 See explanation and example.
2 A simple demonstration:

~# 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:

"No other user (including root) can access the contents of the mounted filesystem"

4 UID 0 is checked after filename (.android_secure) is checked.
5 Why can't I delete this file as root?


RELATED:

  • Android's Storage Journey
  • How to save files to external SD card?
 
 

Questions connexes

0  Build.Prop modifie bien. Mais pas mises à jour dans le système (par exemple sur la tablette dans les paramètres)  ( Build prop modifies okay but not updates in system e g about tablet in settin ) 
Je suis en cours d'exécution Android-X86 4.4 sur VirtualBox. Tout fonctionne bien. Mais lorsque je modifie Build.Prop (avec ES File Explorer ou BuildProp Edit...

4  Comment réparer les autorisations sur / system / app sur mon feu Kindle  ( How do i fix the permissions on system app on my kindle fire ) 
J'ai tenté de raconter mon Amazon Kindle. Cela semblait aller bien, mais quand j'ai essayé d'ajouter le marché de Google App, j'ai apparemment fait une grosse...

1  ES File Explorer a été refusé la permission d'un shell interactif  ( Es file explorer has been denied permission for an interactive shell ) 
J'ai un Nexus enraciné 7. J'utilise ES File Explorer avec elle. J'ai été capable de naviguer dans des fichiers, après avoir défini des outils / EXPLORATEUR DE...

2  Téléchargements non possibles après la racine  ( Downloads not possible after root ) 
J'ai enraciné mon Samsung Galaxy S5 (Android 5.0, SM G900F) récemment avec Odin. Pendant que je l'ai enraciné, j'ai eu kingroot installé. Depuis que Kingroot ...

3  Type de fichier inconnu contenant un virus  ( Unknown file type containing a virus ) 
Je vais essayer de garder l'histoire aussi courte que possible pour que vous puissiez avoir une vision plus claire de ce qui est ma préoccupation. Bien que je...

5  Quels systèmes de fichiers puis-je utiliser pour une carte SD de 128 Go sur Android 7.1, utilisée comme stockage portable  ( What file systems can i use for a 128gb sdcard on android 7 1 used as portable ) 
Je ne trouve pas de réponse à cela sur Stackexchange. J'ai un téléphone courant Beta ligneageos 14.1 (Android 7.1) et une carte SDXC de 128 Go que je souhaite...

2  Comment puis-je le faire pour que tout utilisateur puisse chmod dans mon formatage / sdcard monté par fusible?  ( How can i make it so that any user can chmod in my fuse mounted ext4 formatted ) 
J'ai un tampon de transformateur asus tf101. Je suis finalement arrondi pour l'enraciner juste maintenant. important: user1 est pas FAT32. C'est un sy...

2  Impossible d'écrire des fichiers sur une carte SD  ( Cannot write files to sd card ) 
Il y a quelques jours, ma carte SD est devenue inutilisable. J'ai essayé de copier quelques mp3 de mon ordinateur portable (Win 7) à mon téléphone (Samsung S2...

2  Impossible de copier des fichiers d'une / des données / données / répertoires à une autre (root)  ( Unable to copy files from one data data directory to another root ) 
J'essaie de copier un fichier de /data/data/com.application1/myfile à /data/data/com.application2/myfile Le fichier arrive avec le propriétaire et le gr...

0  Comment obtenir la permission de remplacer les fichiers dans / System / System / Polices Répertoire du téléphone Android  ( How to get permission for overwrite files in system fonts directory in android ) 
Je suis essai pour écraser les fichiers de polices (* .ttf) dans mon appareil Android (Dell Aero). Mes nouvelles polices sont résidieuses dans la carte SD et ...




© 2022 www.demandez.top All Rights Reserved. Questions et réponses Accueil Tous les droits sont réservés