¡La raíz real no puede cambiar nada en los archivos originales del sistema!

En mi dispositivo rooteado con Android 4.2.2, tengo instaladas las siguientes herramientas:

  1. Emulador de terminal
  2. Busy Box Gratis

En Terminal Emulator, suel comando cambia con éxito al usuario a una raíz real:

root@hwH30-U10:/ # id -u
uid=0(root) gid=0(root)

Entonces yo remount /systemcomo R/W:

root@hwH30-U10:/ # mount | grep system
/emmc@android /system ext4 rw,realtime,noauto_da_alloc,commit=1,data=ordered 0 0

Entonces yo incluso:

root@hwH30-U10:/ # chmod 777 /system

¡Pero no puedo cambiar nada, por ejemplo, permisos o contenidos de /systemarchivos originales como /system/build.prop!

Estoy seguro de que los permisos y los montajes están bien porque puedo crear un nuevo archivo /system/tmp.prop, cambiar su contenido y permisos mediante Terminal Emulator.

Realmente no tengo idea de por qué estas operaciones no están permitidas desde el punto de vista de Linux, ¡todo está bien para que root haga estos cambios!

¿Hay alguna protección adicional codificada dentro de Android, por ejemplo, en el kernel?

¿Cómo resolver esto, por favor?

¿Cuál es el resultado de la ejecución chmod? ¿Ha probado alguna aplicación de exploración raíz como ES File Explorer en modo raíz para cambiar los permisos de archivo? ¿Cuál es su aplicación de administración de raíz y la versión de Android?
Uso SuperSU, 3C Toolbox y BusyBox en Marshmallow y KitKat sin ningún problema.
@TamoghnaChowdhury, chmoddice Operation not permitted. y sí, ES File Explorer en modo raíz, FileExpert y muchas otras aplicaciones no pueden cambiar nada. Mi aplicación de administración de root está KingRooten Android 4.2.2 (como mencioné, id -ume Terminal Emulatordice que soy realmente root con id 0).
¿Podría ser que se hayan aplicado algunas medidas de SELinux? No estoy seguro de si el lsdispositivo lo admite, pero puede probarlo con cualquiera de los parámetros -Z/ --context/ --lcontext/ --scontextpara que se muestre cualquier contexto potencial de SELinux.
@Izzy, ls -Zno diga nada sobre ningún contexto, sin embargo, Google dice que SELinux se ha instalado en Android desde la versión 4.3. el mio es 4.2.2.
Desde la terminal raíz puede realizar estos pasos: cp /system/build.prop /system/build.prop.orig; echo lolcat > /system/build.prop; cat /system/build.prop; mv /system/build.prop.orig /system/build.prop. Estoy interesado en la salida del comando cat.
@Firelord, echo lolcat > /system/build.propfalla k_shell/10210:17681: can't create /system/build.prop: Permission deniedcomo supuse. echo lolcat > /system/build.prop.orig¡obras! y mv /system/build.prop.orig /system/build.propfalla con failed on ' /system/build.prop.orig': Operation not permittedlo que supuse. Entonces, la salida del catcomando no es interesante; Es el contenido original.
Interesante. ¿Puedes dar el resultado de lsattr /system/build.prop?
@Firelord, el resultado de lsattr /system/build.propes -----i--A----, cinco guiones, luego i, luego dos guiones, luego A y luego cuatro guiones.
Ahí está el problema. Está establecido en un atributo inmutable, lo que significa que el archivo no se puede eliminar ni modificar. Cámbielo así: chattr -i /system/build.propy luego pruebe ese comando lsattr. Si el resultado es diferente esta vez, prueba mis comandos lolcat y di el resultado.
@Firelord, ¡excelente! Estaba al tanto de su iatributo, pero en Linux vi, el comando :w!puede escribir incluso con este atributo, ¡pero parece que BusyBox vino puede! de todos modos, muchas gracias! Si lo desea, agregue una respuesta y la marcaré como respuesta; O responderé a mi pregunta. Gracias de nuevo :)
En realidad, es extraño si vi puede editar un archivo que tiene un atributo inmutable. ¿Está seguro de que el atributo se estableció cuando probó vi en ese archivo? No puedo guardar la modificación en el archivo, incluso con vi, por lo que el atributo inmutable funciona como se esperaba en mi sistema.
@Firelord, Anteriormente recibí mensajes como (add ! to override)y :w!podía escribir. Pero ahora creé un archivo chattr +iy tienes razón, ¡ vino puedo omitir el iatributo! Desafortunadamente, no pude recordar los archivos anteriores, lsattrpero estoy seguro de que :w!podría resolver algunos mensajes como (add ! to override). Pero no puedo reproducirlo ahora.

Respuestas (1)

Según mi comentario y el comentario posterior de Yasser , puedo concluir que el problema fue el conjunto de atributos inmutables en el archivo build.prop. Si otros archivos y directorios tampoco se pueden editar o eliminar, es posible que también tengan el mismo atributo o un atributo de solo agregar.

El remedio es usar este comando con privilegios de root:

chattr -i FILE_PATH    # FILE_PATH is the file which currently has immutable attribute

Use -iRseguido de la ruta de un directorio para eliminar el atributo inmutable de un directorio de forma recursiva.

Cabe señalar que OP ya tiene Busybox instalado. chattry lsattrno son las utilidades que se encuentran de forma nativa en Android.

Puede encontrar información relevante sobre el comando chattr usado y el atributo de solo agregar en mi respuesta aquí .

Una nota para los lectores: un archivo con atributo inmutable representa que no se puede editar, eliminar, mover o renombrar. Puede leer acerca de los atributos de archivos compatibles con Linux aquí: linux.die.net/man/1/chattr