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 .