Nota: Si no te importa leer todo esto, salta a la sección "Las Preguntas".
El Problema Real
Tengo problemas de permisos de escritura tanto con mis almacenamientos externos (es decir, tarjeta SD externa) como internos en mi caja de Android con root (es decir, es ROM ViperOS, si eso ayuda) (montado en /storage
), especialmente el externo. El comportamiento en la terminal y la GUI es, extrañamente, diferente.
(Problema de almacenamiento externo solamente) Usando tanto Termux como la aplicación Terminal interna, cuando intento hacer operaciones de escritura desde un usuario no root (por ejemplo, crear un directorio, eliminar un archivo), obtengo el error "Permiso denegado" (Sin embargo, desde un usuario no root de ADB, nunca obtengo errores). El permiso de almacenamiento no es un problema aquí, ya que está concedido.
Usando la GUI, la única operación problemática es la eliminación de directorios (ya sea vacíos o no), y como resultado, también mover directorios (es decir, en realidad, se copian, pero la fuente no se elimina). Incluso renombrar directorios es posible. Todas las operaciones de archivo también son posibles.
Sin embargo, hay una diferencia en donde se realiza la operación problemática: desde el portátil con el teléfono conectado a él, la operación falla; pero desde una aplicación (por ejemplo, la aplicación de Archivos predeterminada) dentro del teléfono (sin ningún permiso de root), se realiza, pero ¡muestra que falló!
Lo Que He Intentado
Estos son todos problemas de permisos (¡oh, en serio?!). Para hacer las cosas más fáciles, me enfocaré solamente en el almacenamiento externo (es decir, la tarjeta SD externa). Está ubicado (es decir, montado) en /storage/9B6C-CF9F/
.
Nota: Dado que los resultados de ADB y la terminal interna son de alguna manera diferentes, y parece que los resultados de la interna son más confiables, los publicaré en su lugar. Además, ten en cuenta que, #
significa que el comando se está ejecutando como root. Cosas no relacionadas son reemplazadas con ...
.
Inicialmente, ejecuté stat
:
# stat /storage/9B6C-CF9F/
File: `/storage/9B6C-CF9F/'
Size: 8192 Blocks: 16 IO Blocks: 512 directory
Device: 19h/25d Inode: 0 Links: 4
Access: (755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 9997/everybody)
...
Y de inmediato me di cuenta de que solamente root tiene permisos de escritura en /storage/9B6C-CF9F/
(es decir, mi almacenamiento externo). Intenté chmod
. Sin errores. ¿Funcionó? No. stat
es igual que antes, lo que significa que no se cambiaron los permisos. ¿Por qué?! Intenté descifrarlo:
# mount | grep /storage/9B6C-CF9F
/dev/fuse on /storage/9B6C-CF9F type fuse (rw,nosuid,nodev,noexec,noatime,user_id=1023,group_id=1023,default_permissions,allow_other)
El problema está aquí: El punto de montaje es del tipo FUSE, y sé poco al respecto. Entonces:
Las Preguntas
-
¿Cómo (montar o) remontar una partición FUSE, posiblemente con una o más opciones especificadas, especialmente opciones relacionadas con permisos (como
rootmode
), utilizando el comandomount
(en Android)? -
¿Cómo encontrar la ubicación del dispositivo real detrás de ese sistema de archivos FUSE, en el directorio
/dev/
(¿Existe algún dispositivo subyacente en absoluto)?
Otras preguntas:
-
(Si has leído las dos secciones anteriores,) ¿Existe una forma alternativa de solucionar el problema de permisos mencionado?
-
Si root solamente tiene permisos de escritura en mi almacenamiento externo, entonces ¿cómo las aplicaciones escriben datos en él?
Notas
-
Mientras estaba leyendo la página del manual de
fuse
en Fedora, encontré que hay algunas opciones de montaje de FUSE relacionadas con permisos, comorootmode
yumask
. Sin embargo, el problema es que no sé cómo montarlo con estas opciones, y cómo/dev/fuse
sabe dónde encontrar mi almacenamiento externo (o incluso interno). -
Hay una discusión sobre dónde se encuentra el archivo
fstab
de Android. Lo encontré en mi dispositivo, sin embargo, no hay ninguna línea que apunte al tipofuse
. Las únicas líneas relacionadas que pude encontrar son:# cat /fstab.sc8830 ... # VOLD : fstab_dt_otg.sc8830 /devices/sdio_sd/mmc_host/mmc1* auto auto defaults voldmanaged=sdcard1:auto,encryptable=userdata /devices/20200000.usb/usb* auto auto defaults voldmanaged=usb:auto ...
¿Qué significan estos? ¿Están relacionados o no? Realmente no sé. Además, no hay ningún archivo llamado
fstab_dt_otg.sc8830
allí (es decir, en/
).