Na operação de sistemas com SELinux Eu destacou alguns casos interessantes, soluções que dificilmente descreve a Internet. Hoje eu decidi compartilhar com vocês minhas observações na esperança de que o número de apoiantes do SELinux vai crescer um pouco mais 🙂

0. Reiniciar o pacote de políticas

 

Se você não sabe o que relatar: todo o SELinux por meio do arquivo, e nenhuma mágica lá. Portanto, podemos reta enquanto o SELinux reinstalar a política pacote se algo deu errado.
Exemplo 7 centos e selinux-policy-mínimo

 

#!/bin/sh setenforce 0 semanage export > exports.semanage yum remove -y selinux-policy-minimum rm -rf /etc/selinux/minimum yum install -y selinux-policy-minimum semodule -RB semanage import -f exports.semanage

 

1. SELinux no modo permissivo, mas alguns comandos não funciona

 

contexto processo inválido

 

A razão é que alguns programas tentam alterar o contexto (semelhante ao setuid / setgid) antes do exec (3), mas usar o contexto errado para isso.

 

EXEMPLO: daemon crond que lida com usuário crontab, o contexto é desconhecida. Neste caso, execlp (3) retorna um erro ‘contexto inválido’.

 

decisão

 

  1. Faça recarga política (-R semodule)
  2. Veja qual o usuário é usado
  3. Ver um usuário SELinux para ele (semanage -l login)
  4. Certifique-se de que o arquivo / etc / selinux / $ type / contextos / usuários / $ username
  5. Se o arquivo não está presente – para repor as predefinições utilizando o pacote de políticas reinstalação.

 

contexto de arquivo inválido

 

Se por algum motivo não avtoreleybl ocorreu e o arquivo foi deixado sem qualquer contexto ou com o lixo em vez de contexto, o acesso a ele como o mesmo pode ser bloqueado devido ao fato de que aberta (3) cai ao tentar comparar contextos.

 

decisão

 

  1. Faça restorecon / path -rv
  2. Garantir os contextos correta e que todos os módulos carregados
  3. Faça recarga política (-R semodule)
  4. Se você não ajudar – redefinir para as configurações padrão usando pacote de políticas reinstalação.

 

2. Depois de ligar SELinux e reiniciar todos os processos em execução no kernel_t / Os logs muitos erros sobre o acesso a kernel_t

 

Como é que a inclusão do SELinux?

 

  1. Criando arquivo /.autorelabel
  2. Reinicie o kernel vê este arquivo e começa autorelabeling
  3. Reiniciar novamente e executar o kernel_t contexto kernel.

 

Problemas ocorrem na etapa dois: o kernel só sabe módulos contextos que foram explicitamente habilitados antes de uma reinicialização. Por exemplo, se o módulo não foi incluído systemd, então:

 

  • O kernel está sendo executado com o contexto kernel_t
  • contexto da transição das regras kernel_t systemd a falhar, porque relabel não nomeou contexto init_exec_t, systemd herda contexto kernel_t
  • Para daemon que executa systemd, também, não funcionam no contexto de regras de transição, porque as regras são escritas para o contexto init_t, ao invés de kernel_t. Todos os demônios correndo de kernel_t.
  • ….
  • FALHA

 

decisão

 

  • Antes de criar /.autorelabel manualmente permitir que todos os módulos necessários comandar $ módulo -e semodule, ou
  • Faça restorecon -R / após o reinício e novamente, ou reiniciar o sistema
  • Faça systemctl daemon-reexec e reiniciar todos os daemons manualmente, se a segunda reinicialização é inaceitável
  • Use o offrestorecon utilidade * em vez /.autorelabel

 

3. Após o pacote de políticas de atualização não funcionar, todas as equipes escrever erro

 

Este problema ocorre quando após a actualização não podem ser resolvidos dependências cíclicos entre módulos ou contextos. Por exemplo:

 

  • Na versão 1.0, os ajustes foram feitos e acrescentou módulo local_module
  • contexto estatístico exportação local_module_file_t local_module
  • Neste contexto usando semanage foi nomeado para “/opt/local(/.*)?”

 

Quando você atualizar para a versão módulo 1.1 local_module será instalado depois que as configurações de contexto será aplicada a “/ opt / local”, o que pode levar a uma dependência cíclica. Na verdade, de um módulo isso é raro, mas quando eram 30 e referem-se uns aos outros e fazem parte das definições de “fora” (ou através semanage fcontext porta semanage por exemplo) -, então o problema é quase garantida.

 

decisão

 

  • Reorganizar o pacote de políticas (ver parágrafo. 0), ou
  • Executar de forma consistente para atualizar
    semanage export > outfile semanage fcontext -D semanage user -D semanage port -D semanage login -D # update your packages semanage import -f outfile

 

4. restart longa quando o SELinux

 

Autorelabeling – dor para os proprietários de grandes servidores. O banco de dados média servidor pode ser recarregado 3-4 horas devido à inclusão do SELinux, o que é absolutamente inaceitável para o negócio.

 

decisão

 

Na verdade, o rótulo dos arquivos estão nas estendido atributos do sistema de arquivos, acesso ao que pode ser obtido usando equipes getfattr (1) / setfattr (1) / attr (1). Atribuí-la chamado security.selinux e compreende um contexto como uma string. No entanto, mesmo em off SELinux funciona equipe matchpathcon de libselinux-utils, que mostra o contexto padrão para uma ou outra maneira.

 

Combinando estes dois fatos, temos a oportunidade de conversar audorelabel enquanto o servidor estiver em execução, não gastar tempo com isso quando você reiniciar.

 

Esta tarde, eu coloquei o seu código nos github , um utilitário chamado offrestorecon. Não se esqueça de incluir todos os módulos necessários e remover /.autorelabel arquivo!

 

5. Após a reinicialização, voou todas as configurações variáveis

 

decisão

 

Use setsebool chave -P, ou boolean semanage

 

em vez de um epílogo

 

Se você está interessado no tema do SELinux, enviar comentários sobre seus casos estranhos e suas decisões, vou adicioná-los a este artigo. É possível que isso fará com que a vida das seguintes segurança-administradores pouco mais fácil.

Anúncios