A carga da política de segurança é feita durante o processo de inicialização (init), ou pode ser carregada no kernel em tempo real, sem necessidade de reinicialização do sistema. Durante o boot, o SELinux realiza uma tarefa importante: uma vez que todos os processos precisam ser rotulados com o seu domínio apropriado, init realiza algumas ações essenciais:
- Depois que o kernel é carregado durante o boot, o processo inicial é associado com o SID (security identifier) pré-definido kernel. Identificadores de segurança (SID) são usados para o boot antes que a política é carregada;
- /sbin/init monta /proc, e procura por sistemas de arquivos do tipo selinuxfs. Se ele estiver presente, isso significa que o SELinux está habilitado no kernel;
- Se o init não encontrar o SELinux no kernel, descobre se ele foi desabilitado pelo parâmetro de boot ``selinux=0'', ou se o arquivo de configuração do SELinux
/etc/selinux/config especifica ``SELINUX=disabled'', e o boot continua com um sistema sem SELinux;
- Ao mesmo tempo, init configura o status de enforcing em tempo de execução se ele for diferente do que está em /etc/selinux/config. Isso acontece quando o parâmetro é passado durante o boot. O modo padrão é permissivo até que a política seja carregada, e depois o modo é configurado conforme a configuração no arquivo /etc/selinux/config ou pelos parâmetros de boot enforcing=0 ou enforcing=1;
- Se o SELinux estiver habilitado, o sistema de arquivos /selinux é montado;
- O kernel verifica /selinux/policyvers para versão suportada da política. O processo init verifica em /etc/selinux/config se a política está ativa, como política targeted (aplicada), por exemplo, e carrega o arquivo binário de políticas em
$SELINUX_POLICY/policy.
version
. Se o binário da política não for a versão suportada pelo kernel, o processo init tenta carregar o arquivo de política da versão anterior para prover compatibilidade com versões antigas da política;
- Se as configurações em /etc/selinux/targeted/booleans forem diferentes daquelas compiladas na política, o processo init modifica a política em memória baseado nessas configurações;
- Os SIDs iniciais são mapeados para contextos de segurança na política, como definido em $SELINUX_SRC/initial_sid_contexts. No caso da política targeted, o novo domínio é user_u:system_r:unconfined_t. O kernel pode agora começar a pegar contextos de segurança dinamicamente do servidor de segurança;
- O processo init então se reexecuta a si mesmo para poder realizar transição para um domínio diferente, se a política assim definir. A partir do Fedora Linux 8, para a política targeted versão 21, o init muda para o domínio init_t (como constantemente a política está sendo modificada e o SELinux evoluindo, é necessário sempre especificar qual a versão do sistema operacional, distribuição e da política que está sendo usada);
- A partir desse ponto, o processo init continua com o processo normal de inicialização.
Figure Figura 3.5::
Contextos de Segurança Targeted na Inicialização do Linux
|
|
Subsections
Jeronimo Zucco
2008-04-26