1 votos

¿Cómo agregar la política SELinux en una ROM de depuración de usuario que tiene un esquema de política `dividido`?

Tengo un Sony dispositivo que admita treble e es system-as-root y A/B dispositivo. Tiene un usuario de depuración de la ROM instalada, así, sus adb shell tiene root.

He desactivado dm-verity uso de adb disable-verity después de ejecutar adb root y adb remount comandos.

Como se documenta aquí, este dispositivo también ha split políticas en /system/etc/selinux(la 'plataforma' parte de la política) y /vendor/etc/selinux(el 'nonplat' parte de la política).

Estoy tratando de ejecutar test.sh utilizando el siguiente guión:

#/etc/init/m_daemon.rc

# define service, use executable here if script not needed
service m_daemon /system/xbin/test.sh

    # don't start unless explicitly asked to
    disabled

    # Use `seclabel u:r:magisk:s0` to run with unrestricted SELinux context to avoid avc denials
    # can also use "u:r:su:s0" on userdebug / eng builds if no Magisk.
    # It's required if SELinux is enforcing and service needs access
    # to some system resources not allowed by default sepolicy
    # seclabel u:object_r:qlogd_exec:s0
    seclabel u:r:su:s0

# start the service when the boot is completed
on property:sys.boot_completed=1
    # Use it to start the service
    start m_daemon

/system/xbin/test.sh archivo tiene el siguiente contenido:

#!/system/bin/sh
echo `date` > /sdcard/test

Cuando el reinicio del dispositivo, a continuación, no se ejecute con el siguiente error:

202.932913 / 11-26 20:21:04.074 de auditoría: type=1400 de auditoría(1574763664.074:213): avc: denegado { transición } pid=8534 comm="init" path="/system/xbin/test.sh" dev="sda24" ino=8150 scontext=u:r:init:s0 tcontext=u:r:su:s0 tclass=proceso permisiva=0

202.933268 / 11-26 20:21:04.074 init: no se puede execve('/system/xbin/test.sh'): Permiso denegado

Para solucionarlo, he utilizado sepolicy-inject y ejecute los siguientes comandos:

sepolicy-inject -s init -t su -c process -p transition -P /sys/fs/selinux/policy -l
sepolicy-inject -s init -t su -c process -p noatsecure -P /sys/fs/selinux/policy -l
sepolicy-inject -s init -t su -c process -p rlimitinh -P /sys/fs/selinux/policy -l
sepolicy-inject -s init -t su -c process -p siginh -P /sys/fs/selinux/policy -l

pero estas necesidades para ejecutar de nuevo después de reiniciar el sistema.

Así, he tratado de parche precompiled_sepolicy usando los siguientes comandos:

sepolicy-inject -s init -t su -c process -p transition -P /vendor/etc/selinux/precompiled_sepolicy -l
sepolicy-inject -s init -t su -c process -p noatsecure -P /vendor/etc/selinux/precompiled_sepolicy -l
sepolicy-inject -s init -t su -c process -p rlimitinh -P /vendor/etc/selinux/precompiled_sepolicy -l
sepolicy-inject -s init -t su -c process -p siginh -P /vendor/etc/selinux/precompiled_sepolicy -l

pero las políticas no son inyectados: ni vive ni después de reiniciar el sistema.

Para probar, me acaba de verificar la fecha en /sdcard/test archivo.

Así, sólo quiero saber:

  • Por qué parches precompiled_policy no funcionan?
  • Donde a la revisión de las políticas requeridas mediante rooteado adb shell que debe persistir después de un reinicio?

1voto

Giacomo Puntos 56

Para parchear las políticas, haga lo siguiente:

  1. Cambie el valor en /system/etc/selinux/plat_and_mapping_sepolicy.cil.sha256 O vacíe este archivo.
  2. Inyecte las políticas requeridas en /system/etc/selinux/plat_sepolicy.cil
  3. "Cargando la política SELinux compilada" debería aparecer en los registros y el servicio init se ejecutará correctamente.

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