2 votes

SELinux empêche l'exécution de ma commande init.rc

J'ai ajouté un exec à la fin de init.rc fichier.

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

Ce site exec fonctionne u:r:shell:s0 Contexte SELinux, de l'utilisateur shell et dans le groupe shell . Mais SELinux croit toujours au refus d'accès :

[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

C'est merveilleux quand je lance la même commande suivante en adb shell et il s'exécute avec succès, avec SELinux activé.

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

C'est 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

Alors, pourquoi mon exec échoue même s'il a exactement la même identité de adb shell ?

2voto

frogatto Points 157

J'ai finalement réussi à résoudre le problème. Il y a deux problèmes :

  • Vous n'utilisez pas le "exactement la même identité de adb shell " . Il y a quelques groupes auxquels adb shell appartient mais ils ne sont pas mentionnés dans ce exec commandement.

  • /system/bin/am en soi n'est pas exécutable, c'est un script shell et il doit être passé à /system/bin/sh à exécuter.

Donc, voici la version finale et fonctionnelle init.rc déclarations :

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

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X