Estoy intentando escribir archivos en el directorio /system/priv-app. Arranco en recovery (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 ejecutar:
~ # mkdir /system/tmp
~ # touch /system/tmp/test
Esto funciona bien: no tengo problemas para modificar /system. (También puedo eliminar cosas de /system/priv-app). Pero si intento escribir en /system/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 /system se monta repentinamente en modo de solo lectura! Los permisos y la propiedad son idénticos en /system y /system/priv-app y estoy ejecutando 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 está en TWRP, SELinux está configurado como permisivo:
~ # getenforce
Permissive
Estoy ejecutando Lineage OS 14.1 (Android Nougat) en un Moto G 2015 (también conocido como Moto G3). Está enraizado con el complemento oficial Lineage su. También probé Magisk y obtuve el mismo resultado.
Me he quedado sin ideas y no puedo descifrar los términos de búsqueda correctos, porque probé un montón de cosas y no encontré nada.
¿Cómo puedo habilitar la escritura en /system/priv-app?
Proteger Android de códigos maliciosos siempre ha sido una prioridad para Google, los OEM y los proveedores de SOC. Incluso la protección contra escritura /system ha sido implementada a nivel de kernel por algunos OEM. Y, de forma predeterminada, Android monta /system
solo lectura para evitar cambios intencionales o accidentales para que AVB/dm-verity funcione correctamente. Solo las actualizaciones OTA pueden modificar la partición del sistema.
Sin embargo, si dm-verity está deshabilitado mientras se rootea el dispositivo o cuando se actualiza el kernel/ROM personalizado, podemos realizar /system read/write
modificaciones. Pero algunos programas tienen un código incorporado para verificar si /system está montado rw
y, de ser así, revertir el estado a ro
. Estados de Solid Explorer :
Si el punto de montaje se monta en modo r/o, se volverá a montar temporalmente en r/w. Una vez que se completa la operación (con éxito o no), la aplicación vuelve a montar la partición en el estado r/o.
TWRP también tiene una opción mount_sys_ro_chk y, de forma predeterminada, monta /system read-only .
Entonces, la solución es cambiar el punto de montaje /system
a otra cosa, ya que eso no se verificará normalmente.
Otro factor que puede forzar ro
el montaje de una partición es la opción de montaje del kernel de LinuxERROR =remount-ro . Esta opción de montaje suele ser predeterminada en un sistema de archivos recién creado:
~# tune2fs -l /dev/block/bootdevice/by-name/system | grep Error
Errors behavior: Remount read-only
Por lo tanto, el sistema de archivos se montará como de solo lectura si se produce un error, por ejemplo, Max Mount Count
se alcanza y e2fsck
no se ejecuta. Sin embargo, este rara vez es el caso en Android. Puede ver el registro del kernel para ver si hay errores de este tipo:
~# dmesg | grep mount
No se recomienda cambiar el comportamiento predeterminado y puede ser realmente dañino:
~# mkdir /system-temp
~# mount -o rw,errors=continue /dev/block/bootdevice/by-name/system /system-temp
el.cauchy