
He estado siguiendo la guía de Gitlab para habilitar la búsqueda rápida de claves SSH autorizadas. La guía indica cómo utilizar AuthorizedKeysCommand. El comando autorizado llama al servidor https local. Esta cadena de comandos da como resultado una violación de la política de SELinux.
El error que recibo es el siguiente:
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
Si no me equivoco, necesito una política SELinux personalizada. Sin embargo, todas las guías que pude encontrar son demasiado complejas. Escribir un archivo de política que permita esta excepción debería ser una tarea trivial.
¿Alguna idea de cómo debería verse un archivo de política (.te) que permite que el proceso con sshd_t use transproxy_port_t?
Editar. Gitlab configura la política requerida cuando ejecuta Unicorn en el puerto estándar (8080)
Respuesta1
Puedes hacerlo:
# 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
Hay una forma más corta, pero no creará el archivo intermedio .te. El archivo .te es útil para archivar y comprender :-).
El camino más corto es el siguiente:
# 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 fines educativos, el archivo .te tiene este aspecto:
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;