Primeiro de tudo: parabéns por não desativar o SELinux e tentar, em vez disso, entendê-lo e configurá-lo adequadamente.
Filtrar as recusas do AVC que você postou na sua pergunta deixa muito mais claro qual poderia ser o problema:
# cat avc_denials | audit2allow
#============= httpd_sys_script_t ==============
allow httpd_sys_script_t gitosis_var_lib_t:dir { read search open getattr };
allow httpd_sys_script_t gitosis_var_lib_t:file { read getattr open ioctl append };
O método usual para depurar negações do AVC, no entanto, faz uso do comando ausearch(8)
:
# ausearch -m avc -ts recent | audit2allow
Verifique a página de manual para mais informações sobre os switches que você pode usar.
Com essas informações, agora você sabe o que está acontecendo: o processo chamado httpd_sys_script_t
, possivelmente o código CGI gitolite3
usa para publicar seus repositórios, está sendo negado o acesso aos arquivos e diretórios rotulados gitosis_var_lib_t
(os repos) para executar operações diferentes ( read
, search
, open
, ...).
Agora, você deve determinar se concederá ou não esse acesso. Vamos supor que você queira conceder acesso. Você precisaria criar um módulo de política personalizado descrevendo as regras que definem o acesso que você deseja conceder. Isso é mais ou menos simples dependendo da complexidade do processo:
# ausearch -m avc -ts 10:40:00 | audit2allow -m my_gitolite3 > my_gitolite3.te
Isso produzirá uma descrição de type enforcement
como esta:
module my_gitolite3 1.0;
require {
type httpd_sys_script_t;
type gitosis_var_lib_t;
class dir { read search open getattr };
class file { read getattr open ioctl append };
}
#============= httpd_sys_script_t ==============
allow httpd_sys_script_t gitosis_var_lib_t:dir { read search open getattr };
allow httpd_sys_script_t gitosis_var_lib_t:file { read getattr open ioctl append };
Você deve proceder à revisão do código para garantir sua exatidão (neste caso, é bastante simples). O próximo passo é compilar o código type enforcement
em um module
:
# checkmodule -M -m -o my_mygitolite3.mod my_gitolite3.te
O módulo deve ser empacotado em policy package
para que você possa carregá-lo e descarregá-lo à vontade:
# semodule_package -o my_gitolite3.pp -m my_gitolite3.mod
Agora, você pode carregar a política usando:
# semodule -i my_gitolite3.pp
Verifique se está corretamente carregado:
# semodule -l | grep my_gitolite3
Em seguida, tente acionar as negações novamente e veja se há mais alertas (diferentes) no registro de auditoria referentes a esse mesmo processo.
Outras edições do código type enforcement
precisarão que o version
( 1.0
) seja atualizado ou o carregamento do pacote falhará. A atualização do policy package
será feita:
# semodule -u my_gitolite3.pp
Há muito a aprender quando se inicia com o SELinux. Algumas referências úteis:
- As páginas de manual dos comandos
- Verifique também a saída de
apropos selinux
,gitosis_selinux
ehttpd_selinux
, será de interesse aqui
A partir dos documentos do RHEL
Uma boa apresentação introdutória de Dave Quigley: