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?