
Ich habe die Anleitung von Gitlab befolgt, um die schnelle Suche nach autorisierten SSH-Schlüsseln zu aktivieren. Die Anleitung weist darauf hin, AuthorizedKeysCommand zu verwenden. Der autorisierte Befehl ruft den lokalen HTTPS-Server auf. Diese Befehlskette führt zu einem Verstoß gegen die SELinux-Richtlinie.
Ich erhalte den folgenden Fehler:
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
Wenn ich mich nicht irre, brauche ich eine benutzerdefinierte SELinux-Richtlinie. Alle Anleitungen, die ich finden konnte, sind jedoch zu komplex. Das Schreiben einer Richtliniendatei, die diese Ausnahme zulässt, sollte eine triviale Aufgabe sein.
Irgendwelche Ideen, wie eine Richtliniendatei (.te) aussehen sollte, die Prozessen mit sshd_t die Verwendung von transproxy_port_t erlaubt?
Bearbeiten. Gitlab konfiguriert die erforderliche Richtlinie, wenn Unicorn im Standardport (8080) ausgeführt wird.
Antwort1
Du kannst das:
# 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
Es gibt einen kürzeren Weg, aber dabei wird die .te-Zwischendatei nicht erstellt. Die .te-Datei ist praktisch für Archivierungs- und Verständniszwecke :-).
Der kürzere Weg geht so:
# 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
Für Bildungszwecke sieht die .te-Datei folgendermaßen aus:
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;