A execução deste serviço como init_t provavelmente não é uma ótima ideia.
O motivo pelo qual você obtém esse comportamento é porque tvheadend é provavelmente rotulado bin_t e não existe nenhuma regra de transição para remover um arquivo desse tipo do contexto init_t .
Você pode pesquisar isso para saber com certeza.
$ sesearch -s init_t --type -c process | grep bin_t
Este comando não retorna nenhum resultado. Nenhuma transição de init_t para um processo bin_t .
Você também deve evitar a execução desse tipo em initrc_t , já que não é apropriado para o serviço. De um modo geral, a melhor solução seria escrever uma política confinada para o seu serviço, mas isso está além do escopo desta resposta.
Em vez disso, você precisa tirar seu processo de init_t de outro tipo. Como não existe política para este aplicativo, provavelmente é melhor movê-lo para unconfined_t , para o qual existe uma transição de tipo.
$ sesearch -s init_t --type -c process -t unconfined_exec_t
Found 1 semantic te rules:
type_transition init_t unconfined_exec_t : process unconfined_t;
Também podemos verificar se a regra que está sendo atingida na política não será atingida em unconfined_t (o que não deveria).
$ sesearch -s avahi_t -p send_msg -c dbus -t unconfined_t --allow
Found 2 semantic av rules:
allow avahi_t unconfined_t : dbus send_msg ;
allow system_bus_type unconfined_t : dbus send_msg ;
Para isso, basta reclassificar seu programa tvheadend para unconfined_exec_t .
semanage fcontext -a -t unconfined_exec_t -f f /usr/bin/tvheadend
Em seguida, restaure.
restorecon /usr/bin/tvheadend
Agora, volte a executar o seu serviço deve funcionar. Se você executar novamente o ps -AZ | grep tvheadend , verá o processo em execução em unconfined_t .
Idealmente, uma nova diretiva deve ser usada para este programa, mas se nenhuma diretiva existir, é melhor executá-la sem diretivas no domínio unconfined_t . initrc_t e init_t não são realmente usados para rodar serviços (embora alguns executem incorretamente), initrc_t foi originalmente concebido para rodar scripts de shell SYSV e init_t é para rodar o próprio systemd / init .