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
?