2 votos

SELinux previene que mi comando exec init.rc se ejecute

He agregado un comando exec al final del archivo init.rc.

on property:dev.bootcomplete=1
    exec u:r:shell:s0 shell shell -- /system/bin/am start -n com.example.package/com.example.package.MainActivity

Este exec se ejecuta en el contexto SELinux u:r:shell:s0, desde el usuario shell y en el grupo shell. Pero SELinux todavía niega el acceso:

[28.918751] init: Starting service 'exec 3 (/system/bin/am)'...
[28.920227] init: cannot execve('/system/bin/am'): Permission denied
[28.920356] type=1400 audit(22128374.236:11): avc: denied { entrypoint } for pid=3887 comm="init" path="/system/bin/am" dev="dm-0" ino=292 scontext=u:r:shell:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=0
[28.921791] init: Service 'exec 3 (/system/bin/am)' (pid 3887) exited with status 127

Lo curioso es que cuando emito el mismo comando siguiente en adb shell, se ejecuta con éxito, incluso con SELinux habilitado.

/system/bin/am start -n com.example.package/com.example.package.MainActivity

Este es el id de adb shell:

uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats) context=u:r:shell:s0

Entonces, ¿por qué falla mi comando exec a pesar de tener exactamente la misma identidad que adb shell?

2voto

Hi I'm Frogatto Puntos 101

Finalmente logré resolver el problema. Hay dos problemas:

  • No estás utilizando la "misma identidad exactamente de adb shell". Hay un par de grupos a los que pertenece adb shell pero no están mencionados en ese comando exec.

  • /system/bin/am por sí solo no es ejecutable, es un script de shell y debe ser pasado a /system/bin/sh para ser ejecutado.

Entonces, aquí están las declaraciones finales y funcionales de init.rc:

on property:dev.bootcomplete=1
    exec u:r:shell:s0 shell shell input log adb sdcard_rw sdcard_r net_bt_admin net_bt inet net_bw_stats -- /system/bin/sh /system/bin/am start -n com.example.package/com.example.package.MainActivity

0 votos

Todavía es válido para el último Oreo (probado en Lineage 15.1). ¡Gran trabajo!

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