
Tenho seguido o guia do Gitlab para ativar a pesquisa rápida de chaves SSH autorizadas. O guia instrui a usar AuthorizedKeysCommand. O comando autorizado está chamando o servidor https local. Esta cadeia de comando resulta em violação da política do SELinux.
O erro que recebo é o seguinte:
type=AVC msg=audit(1559126095.648:64173782): avc: denied { name_connect } for pid=13839 comm="gitlab-shell-au" dest=8081 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket permissive=0
Se não me engano, preciso de uma política SELinux personalizada. No entanto, todos os guias que encontrei são excessivamente complexos. Escrever um arquivo de políticas que permita essa exceção deve ser uma tarefa trivial.
Alguma idéia de como deve ser a aparência de um arquivo de política (.te) que permite que processos com sshd_t usem transproxy_port_t?
Editar. O Gitlab configura a política necessária ao executar o unicórnio na porta padrão (8080)
Responder1
Você consegue fazer isso:
# generate the policy .te file
echo "type=AVC msg=audit(1559126095.648:64173782): avc: denied { name_connect } for pid=13839 comm="gitlab-shell-au" dest=8081 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket permissive=0" | audit2allow -m gitlabfix1 > gitlabfix1.te
# create a module from the .te file
checkmodule -M -m -o gitlabfix1.mod gitlabfix1.te
# package it
semodule_package -o gitlabfix1.pp -m gitlabfix1.mod
# install it
semodule -i gitlabfix1.pp
Existe um caminho mais curto, mas que não criará o arquivo intermediário .te. O arquivo .te é útil para fins de arquivamento e compreensão :-).
O caminho mais curto é assim:
# generate the policy module package in one go
echo "type=AVC msg=audit(1559126095.648:64173782): avc: denied { name_connect } for pid=13839 comm="gitlab-shell-au" dest=8081 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket permissive=0" | audit2allow -M gitlabfix2
# and load it
semodule -i gitlabfix2.pp
Para fins educacionais, o arquivo .te fica assim:
module gitlabfix1 1.0;
require {
type transproxy_port_t;
type sshd_t;
class tcp_socket name_connect;
}
#============= sshd_t ==============
allow sshd_t transproxy_port_t:tcp_socket name_connect;