3 votos

¿Por qué los intentos de escritura de /sistema/priv-app hacen que /sistema cambie a sólo lectura?

Estoy tratando de escribir archivos en el directorio /system/priv-app. Arranco en recuperación (TWRP) y ejecuto adb shell.

~ # mount /system
~ # mount
rootfs on / type rootfs (rw,seclabel)
...
/dev/block/mmcblkXXXX on /system type ext4 (rw,seclabel,relatime,data=ordered)

Entonces puedo correr:

~ # mkdir /system/tmp
~ # touch /system/tmp/test

Esto funciona bien: No tengo problemas para modificar el sistema. (También puedo borrar cosas de /system/priv-app.) Pero si luego intento escribe a /sistema/priv-app obtengo lo siguiente:

~ # mkdir /system/priv-app/test
mkdir: can't create directory '/system/priv-app/test': Read-only file system
~ # mount
rootfs on / type rootfs (rw,seclabel)
...
/dev/block/mmcblkXXXX on /system type ext4 (ro,seclabel,relatime,data=ordered)

¡Ahora /sistema se monta de repente sólo de lectura! Los permisos y la propiedad son idénticos en /sistema y en /sistema/priv-app y estoy corriendo como Root.

~ # ls -al /
...
drwxr-xr-x   18 root     root          4096 Nov 25 07:32 system
~ # ls -al /system
...
drwxr-xr-x   59 root     root          4096 Aug  5  1972 priv-app

Mientras que en TWRP, SELinux se establece como permisivo:

~ # getenforce
Permissive

Estoy corriendo Lineage OS 14.1 (Turrón Android) en una Moto G 2015 (alias Moto G3). Está basado en el complemento oficial de Lineage su. También probé con Magisk y obtuve el mismo resultado.

Me he quedado sin ideas, y no puedo encontrar los términos de búsqueda correctos, porque he intentado un montón de cosas y no he encontrado nada.

¿Cómo puedo habilitar la escritura en /system/priv-app?

1voto

Jack Wade Puntos 231

Proteger Android de códigos maliciosos siempre ha sido una prioridad para Google, los fabricantes de equipos originales y los proveedores de SOC. Incluso la protección contra escritura del sistema / ha sido implementado a nivel del núcleo por algunos fabricantes de equipos originales. Y por defecto, los soportes para Android /system sólo de lectura para evitar cualquier cambio intencional o accidental para AVB/dm-verity para que funcione correctamente. Sólo las actualizaciones de OTA pueden modificar la partición del sistema.
Sin embargo, si dm-verity está desactivada mientras se arranca el dispositivo o cuando parpadea el kernel personalizado/ROM, podemos montar /system read/write para las modificaciones. Pero algunos programas tienen un código incorporado para comprobar si /sistema está montado rw y, si es así, revertir el estado a ro . Explorador Sólido estados:

Si el punto de montaje se monta en modo r/o se volverá a montar temporalmente en r/w. Después de que la operación se complete (con éxito o no), la aplicación vuelve a montar la partición en el estado r/o.

La TWRP también tiene una opción mount_sys_ro_chk y por defecto monta el sistema sólo de lectura .
Así que la solución es cambiar el punto de montaje de /system a otra cosa ya que eso no se comprobará normalmente.

Otro factor que puede forzar ro El montaje de una partición es la opción de montaje del núcleo de Linux errores=remount-ro . Esta opción de montaje suele estar predeterminada en un sistema de archivos recién creado:

~# tune2fs -l /dev/block/bootdevice/by-name/system | grep Error
Errors behavior:          Remount read-only

Así que el sistema de archivos se montará como de sólo lectura si se produce un error, por ejemplo. Max Mount Count se alcanza y e2fsck no es correr. Sin embargo, esto es raramente el caso en Android. Puede ver el registro del kernel para cualquier error de este tipo:

~# dmesg | grep mount

Cambiar el comportamiento predeterminado no es recomendable y puede ser realmente dañino:

~# mkdir /system-temp
~# mount -o rw,errors=continue /dev/block/bootdevice/by-name/system /system-temp

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