POURQUOI ADB SE VOIT-IL REFUSER L'ACCÈS AU STOCKAGE MULTI-UTILISATEUR ?
L'accès à /storage/emulated/10
est refusé depuis adb shell
en raison de ce changement dans Android 9 :
Ajout du support "default_normal" à vold
.
Ce nouveau drapeau isole chaque utilisateur sur un appareil multi-utilisateur pour des raisons de sécurité.
La fonction de l'option de montage default_normal
dans sdcardfs
est expliquée ici :
_L'option default_normal
fait en sorte que les montages avec l'ID de groupe configuré à AID_SDCARD_RW
aient des IDs de groupe spécifiques à l'utilisateur, comme dans le cas normal._
Toute l'histoire concerne l'émulation du système de fichiers Android afin d'avoir un répertoire sans permission (/sdcard
) qui permet le partage de fichiers entre plusieurs utilisateurs UNIX (applications). Cela est réalisé à travers des espaces de nom de montage et différents VIEWs de /data/media
montés dans /mnt/runtime/
. Les applications appartenant à l'utilisateur secondaire ainsi qu'à l'utilisateur principal ont des espaces de nom de montage isolés. Pour plus de détails, veuillez consulter Qu'est-ce que l'UID “u#_everybody” ? et Qu'est-ce que /storage/emulated/0/ ?.
Au fait, mon /sdcard/
pointe toujours vers l'espace du premier utilisateur /storage/emulated/0
dans adb shell
peu importe qui est mon utilisateur actuel dans l'interface mobile.
[...]
COMMENT ACCÉDER AUX FICHIERS DE PLUSIEURS UTILISATEURS DEPUIS ADB
?
AVEC ACCÈS ROOT :
Vous pouvez monter le système de fichiers émulé sans l'option default_normal
:
~# umount /mnt/runtime/*/emulated
~# /system/bin/sdcard -u 1023 -g 1023 -m -w -G /data/media emulated
Ou pour rendre les modifications permanentes, remplacez le binaire sdcard
par un script shell :
~# cd /system/bin/; mv sdcard sdcard.bin; touch sdcard
~# chown 0.2000 sdcard*; chmod 0755 sdcard*
~# chcon u:object_r:system_file:s0 sdcard
~# chcon u:object_r:sdcardd_exec:s0 sdcard.bin
/system/bin/sdcard
(supprimer l'argument -i
passé par vold
) :
#!/system/bin/sh
set -- $(echo "$*" | sed 's/-i //')
/system/bin/sdcard.bin $*
Après le redémarrage, vous devriez être en mesure de lire les fichiers dans /storage/emulated/10
depuis adb shell
.
SANS ACCÈS ROOT :
Sur Android 9+, l'accès au niveau du système de fichiers aux utilisateurs/profiles secondaires n'est pas possible depuis adb
sur les ROMs user
(c'est-à-dire sans root). Seule l'interaction à travers des commandes adb prenant en charge l'option --user
(comme am
, pm
, content
, etc.) est possible. Documenté dans Ce qu'apporte Android 9 aux applications d'entreprise :
"Pour protéger les données professionnelles dans le profil professionnel, l'outil Android Debug Bridge (adb) ne peut pas accéder aux répertoires et fichiers du profil professionnel."
[...]