1 votos

¿Cómo hacer que SELinux sea permisivo con `systemless-Root` en un dispositivo `system-as-Root`?

Tengo un dispositivo Samsung S10 5G que en realidad es un system-as-root dispositivo. Lo he rooteado siguiendo las instrucciones dadas aquí .

Como el system-as-root dispositivos no tienen ramdisk en boot.img pero en recovery.img por lo que tengo que arrancar siempre el dispositivo con una combinación de recovery para conseguir el acceso Root.

Tengo una aplicación que requiere algunas políticas de SELinux para funcionar. Las he inyectado con la ayuda de sepolicy-inject utilizando los siguientes comandos:

    sepolicy-inject -s init -t su -c process -p transition -l
    sepolicy-inject -s su -t system_file -c file -p entrypoint -l
    sepolicy-inject -s init -t su -c process -p rlimitinh -l
    sepolicy-inject -s init -t su -c process -p siginh -l
    sepolicy-inject -s su -t shell_exec -c file -p read -l
    sepolicy-inject -s su -t shell_exec -c file -p execute -l
    sepolicy-inject -s su -t shell_exec -c file -p getattr  -l
    sepolicy-inject -s su -t vendor_toolbox_exec -c file -p execute_no_trans -l
    sepolicy-inject -s init -t su -c process -p noatsecure -l
    sepolicy-inject -s su -t toolbox_exec -c file -p getattr -l
    sepolicy-inject -s su -t toolbox_exec -c file -p execute -l
    sepolicy-inject -s su -t system_file -c file -p execute_no_trans -l
    sepolicy-inject -s su -t storage_file -c dir -p search -l
    sepolicy-inject -s su -t storage_file -c lnk_file -p read -l
    sepolicy-inject -s su -t tmpfs -c dir -p search -l
    sepolicy-inject -s su -t mnt_user_file -c dir -p search -l
    sepolicy-inject -s su -t mnt_user_file -c lnk_file -p read -l
    sepolicy-inject -s su -t sdcardfs -c dir -p search -l
    sepolicy-inject -s su -t sdcardfs -c file -p append -l
    sepolicy-inject -s su -t toolbox_exec -c file -p read -l
    sepolicy-inject -s su -t toolbox_exec -c file -p open -l
    sepolicy-inject -s su -t sdcardfs -c file -p read -l
    sepolicy-inject -s su -t sdcardfs -c file -p write -l
    sepolicy-inject -s su -t sdcardfs -c file -p open -l
    sepolicy-inject -s su -t media_rw_data_file -c file -p read -l
    sepolicy-inject -s su -t media_rw_data_file -c file -p write -l
    sepolicy-inject -s su -t media_rw_data_file -c file -p open -l
    sepolicy-inject -s su -t media_rw_data_file -c file -p append -l

pero después de reiniciar, necesito ejecutar este comando de nuevo ya que no son persistentes. No quiero usar una combinación de teclas en el dispositivo para usar mi aplicación en el modo Root del dispositivo. Por lo tanto, estoy buscando alguna forma de inyectarlos permanentemente.

Se me ocurren las siguientes soluciones:

  • Modificar init.rc archivo de system.img para ejecutar estos comandos pero cuando he intentado modificar init.rc con solo añadir un comentario y flashearlo en el dispositivo entonces ese comentario se pierde. No sé qué pasa. Lo he flasheado con todos los archivos Odin y dentro del archivo AP. Este archivo AP está parcheado por Magisk.
  • Cambia el SELinux de forzoso a permisivo. No estoy seguro de cómo puedo hacerlo con cualquiera de los dos Acceso a root o Flasheo de la ROM modificada .

¿Alguna sugerencia?

1voto

Jack Wade Puntos 231

Estoy buscando alguna forma de inyectarlos permanentemente.

Como he explicado en mi respuesta a su pregunta anterior: ¿Cómo hacer persistentes las reglas inyectadas de SELinux sin desempaquetar el boot.img? es necesario modificar el archivo de políticas de SELinux para inyectar reglas de forma permanente.

La política puede ser monolítica (precompilada sepolicy archivo en initramfs o /system o /vendor ) o dividir.

En este último caso puede ser una SEPolicy precompilada ( /vendor/etc/selinux/precompiled_sepolicy ) o debe compilarlo desde .cil archivos en /system/etc/selinux/ y /vendor/etc/selinux/ utilizando el compilador SEPolicy ( /system/bin/secilc ).

En el primer caso, los hashes de las políticas de la plataforma y de la no plataforma ( /system/etc/selinux/plat_and_mapping_sepolicy.cil.sha256 y /vendor/etc/selinux/precompiled_sepolicy.plat_and_mapping.sha256 ) deben coincidir, de lo contrario init no lo carga.

En cualquiera de los casos no se puede conservar el enfoque sin sistema.

Modificar init.rc archivo de system.img para ejecutar estos comandos pero cuando he intentado modificar init.rc con solo añadir un comentario y flashearlo en el dispositivo entonces ese comentario se pierde.

Como he explicado en mi respuesta a su pregunta anterior: ¿Cómo arrancar el dispositivo system-as-Root siempre como rooteado? en el dispositivo SAR rooteado system.img está montado en /system_root por Magisk init El contenido de ramdisk se copian en / limpiando todo lo existente anteriormente, se añaden / modifican archivos en rootfs / , /system_root/system está montado en /system y finalmente [/system]/init se ejecuta para el arranque normal. Por lo tanto, es necesario editar /system_root/init.rc para los cambios permanentes. Tenga en cuenta que la modificación de system.img (o vendor.img ) se rompería dm-verity y OTAs.

Cambiar el SELinux de enforcing a permissive. No estoy seguro de cómo puedo hacerlo con cualquiera de los dos Acceso a root o Flasheo de la ROM modificada .

SELinux está configurado enforcing por init (si no lo es ya enforcing ), por lo que hay que modificar init fuente. O en userdebug Las ROMs pasan androidboot.selinux=permissive parámetro de la línea de comandos del kernel. Para más detalles, consulte ¿Qué contexto sepolítico permitirá que cualquier otro contexto acceda a él?

Con el acceso Root sólo hay que ejecutar lo siguiente en cualquier .rc archivo:

on property:sys.boot_completed=1
    exec u:r:magisk:s0 -- /system/bin/setenforce 0

Para más detalles, véase ¿Cómo solucionar los errores de SELinux "avc: denied"?

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