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