Anterior: Usando o recurso de descarregamento, Acima: Configurando o daemon [Conteúdo][Índice]
O Guix inclui um arquivo de políticas do SELinux em etc/guix-daemon.cil que pode ser instalado em um sistema em que o SELinux está ativado, para rotular os arquivos do Guix e especificar o comportamento esperado do daemon. Como o Guix System não fornece uma política básica do SELinux, a política do daemon não pode ser usada no Guix System.
Nota: O script de instalação binária
guix-install.sh
se oferece para executar as etapas abaixo para você (veja Instalação de binários).
Para instalar a política, execute esse comando como root:
semodule -i /var/guix/profiles/per-user/root/current-guix/share/selinux/guix-daemon.cil
Então, como root, renomeie o sistema de arquivos, possivelmente depois de torná-lo gravável:
mount -o remount,rw /gnu/store restorecon -R /gnu /var/guix
Neste ponto, você pode iniciar ou reiniciar guix-daemon
; em uma
distribuição que usa systemd como seu gerenciador de serviços, você pode
fazer isso com:
systemctl restart guix-daemon
Depois que a política é instalada, o sistema de arquivos foi rotulado
novamente e o daemon foi reiniciado, ele deve estar em execução no contexto
guix_daemon_t
. Você pode confirmar isso com o seguinte comando:
ps -Zax | grep guix-daemon
Monitore os arquivos de log do SELinux enquanto executa um comando como
guix build hello
para se convencer de que o SELinux permite todas as
operações necessárias.
Esta política não é perfeita. Aqui está uma lista de limitações ou peculiaridades que devem ser consideradas ao implementar a política SELinux fornecida para o daemon Guix.
guix_daemon_socket_t
isn’t actually used. None of the socket
operations involve contexts that have anything to do with
guix_daemon_socket_t
. It doesn’t hurt to have this unused label, but
it would be preferable to define socket rules for only this label.
guix gc
não pode acessar links arbitrários para perfis. Por design, o
rótulo do arquivo do destino de uma ligação simbólica é independente do
rótulo do arquivo do próprio link. Embora todos os perfis em
$localstatedir estejam rotulados, as ligações para esses perfis
herdam o rótulo do diretório em que estão. Para as ligações no diretório
pessoal do usuário, será user_home_t
. Mas, para ligações do diretório
pessoal do usuário root, ou /tmp, ou do diretório de trabalho do
servidor HTTP etc., isso não funcionará. guix gc
seria impedido de
ler e seguir essas ligações.
/gnu/store/.+-(guix-.+|profile)/bin/guix-daemon
recebem o rótulo
guix_daemon_exec_t
; isso significa que qualquer arquivo com
esse nome em qualquer perfil poderá ser executado no domínio de
guix_daemon_t
. Isto não é o ideal. Um invasor pode criar um pacote
que forneça esse executável e convencer um usuário a instalar e executá-lo,
o que o eleva ao domínio de guix_daemon_t
. Nesse ponto, o SELinux não
poderia impedir o acesso a arquivos permitidos para processos nesse domínio.
Você precisará renomear o diretório store após todas as atualizações para
guix-daemon, como após executar guix pull
. Supondo que o store
esteja em /gnu, você pode fazer isso com restorecon -vR /gnu
,
ou por outros meios fornecidos pelo seu sistema operacional.
Poderíamos gerar uma política muito mais restritiva no momento da
instalação, para que apenas o nome do arquivo exato do executável
guix-daemon
atualmente instalado seja rotulado com
guix_daemon_exec_t
, em vez de usar um amplo expressão regular. A
desvantagem é que o root precisaria instalar ou atualizar a política no
momento da instalação sempre que o pacote Guix que fornece o executável
guix-daemon
em execução efetiva for atualizado.
Anterior: Usando o recurso de descarregamento, Acima: Configurando o daemon [Conteúdo][Índice]