2 votos

¿Por qué el usuario root no puede acceder al directorio ".android_secure" en la tarjeta SD externa?

Tengo una tableta Android 9, con acceso root a través de Magisk. Tiene una tarjeta SD externa montada como sdfat en /mnt/media_rw/1234-5678 la cual está montada en otros cuatro puntos de montaje, todos como tipo sdcardfs, con algunas variaciones en propietario y grupo.

Desde una ventana de terminal escribo ls -al /storage/1234-5678. Aparecen muchos archivos y directorios con un mensaje de error:

ls: permiso denegado: .android_secure

Intento como root y obtengo el mismo resultado. Usando /mnt/media_rw/1234-5678 y root, puedo ver la entrada de .android_secure. Me dicen que .android_secure en sí está vacía.

  1. La tarjeta SD externa es FAT32. Todo en ella tiene el mismo conjunto de permisos. ¿Cómo es que .android_secure es diferente de todo lo demás en la tarjeta?
  2. Incluso si .android_secure tiene permisos diferentes de los otros archivos en el directorio, ¿por qué eso me impide mostrar la entrada del directorio?
  3. Me convierto en root y aún así no puedo ni siquiera mostrar la entrada del directorio para .android_secure. ¿Cómo es posible?

Intenté con stat. Intenté con lsattr. Aún así: permiso denegado.

He leído ¿Qué contiene el directorio /mnt/asec? pero no responde mis preguntas:

  1. Si tengo los permisos necesarios para listar algunas entradas de directorio, ¿cómo se me prohíbe listar una entrada específica en ese directorio?

  2. ¿Cómo es posible negarle a root la capacidad de listar una entrada de directorio? (Y luego cambiar las protecciones en esa entrada.)

Puedo aceptar que el sistema de archivos mágico y/o SELinux permite tener diferentes protecciones en un archivo. Simplemente no puedo entender que root sea incapaz de ver siquiera cuáles son esas diferentes protecciones.

1 votos

¿Esto responde a tu pregunta? ¿Qué contiene el directorio /mnt/asec?

0 votos

@alecxs No creo que aborde mis preguntas.

0 votos

No puedes cambiar los permisos ------ porque la manera en que está montado askubuntu.com/questions/429848

2voto

Jack Wade Puntos 231

Una búsqueda rápida revela que existen preguntas similares sin respuesta (esta, esta y esta). Permíteme intentar desmitificarlo, comenzando con una breve historia.

¿QUÉ ES EL DIRECTORIO .android_secure?

Para resolver el problema de la falta de espacio en el almacenamiento interno, app2sd (Mover a la tarjeta SD) era una característica nativa de Android hasta Lollipop. Con este método, los archivos .apk (o directorios completos /data/app//) se movían como archivos encriptados .asec al directorio .android_secure en la tarjeta SD externa o la partición de tarjeta sdcard interna (montada en /mnt/sdcard/ o /mnt/media_rw/sdcard[N]/). En cada inicio, .android_secure se montaba enlazado a /mnt/secure/asec/ y los contenedores del sistema de archivos (.asec) se descifraban (usando dm-crypt) y se montaban en directorios individuales (nombrados según los nombres de los paquetes) en un sistema de archivos temporal montado en /mnt/asec/ por vold. Los enlaces simbólicos desde /data/app// y posiblemente /data/data//lib/ apuntan hacia /mnt/asec// y /mnt/asec//lib/.

¿POR QUÉ SE RESTRINGE EL ACCESO A .android_secure?

Desde los primeros días de Android, el acceso al directorio android_secure (que luego se convirtió en .android_secure) estaba restringido. El commit indica:

_Para proteger el directorio /android_secure en los medios extraíbles VFAT de ser alterado por aplicaciones de terceros en el dispositivo, ocultamos el directorio con un tmpfs de solo lectura y de tamaño cero montado encima._

Más tarde, en Android 4.4, cuando se comenzó a usar FUSE para emular tarjetas SD desde el punto de montaje original (/mnt/media_rw/sdcard1) hasta la ruta accesible para el usuario (/storage/sdcard1/), la funcionalidad de tmpfs de tamaño cero (Ignorar intentos de acceder a archivos sensibles de seguridad) se trasladó al demonio sdcard que se utilizaba para montar FUSE. En Android 6, el método app2sd fue abandonado a favor del Almacenamiento Adoptable (también se incluyó UUID de sistema de archivos en los puntos de montaje).

En Android 7, se añadió soporte para sdcardfs en paralelo a FUSE y la funcionalidad de "Bloquear siempre archivos sensibles de seguridad" se añadió a sdcardfs en el kernel. En Android 9, FUSE fue completamente eliminado (del demonio sdcard) pero sdcardfs sigue bloqueando la creación/eliminación de directorios .android_secure en la root del sistema de archivos emulado. Sin embargo, como has notado, es posible acceder a la ruta a través del punto de montaje original no emulado, es decir, /mnt/media_rw/[UUID]/.android_secure.

Para más detalles sobre la emulación del sistema de archivos, consulta ¿Qué es /storage/emulated/0/?

¿POR QUÉ ROOT NO PUEDE ACCEDER A UN DIRECTORIO?

¿Cómo es posible negar a root la capacidad de listar una entrada de directorio?

root no es más que el querido usuario del kernel. El kernel no impide que el UID 0 cause daño o haga algo bueno. Pero hay cosas que son más queridas para el kernel que root. Esto incluye SELinux 1, las capacidades de Linux 2 y obviamente las restricciones del sistema de archivos como vemos con FUSE 3 y sdcardfs 4. Y así como root no puede eliminar un archivo con el atributo immutable 5. Es posible eliminar cualquier restricción de este tipo o agregar más modificando el origen del kernel.


1 Consulta la explicación y el ejemplo.
2 Una demostración 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 Documentación de FUSE :

[

"Ningún otro usuario (incluido root) puede acceder al contenido del sistema de archivos montado"

](https://github.com/libfuse/libfuse/blob/74596e2929c9b9b065f90d04ab7a2232652c64c4/README.md#security-implications)

4 Se comprueba el UID 0 después de que se comprueba el nombre de archivo (.android_secure).
5 ¿Por qué no puedo borrar este archivo como root?


RELACIONADO:

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X