umbau 1.3.2
This commit is contained in:
@ -255,59 +255,24 @@
|
||||
group: root
|
||||
mode: "0755"
|
||||
|
||||
- name: guacd nur an localhost binden
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/guacamole/guacd.conf
|
||||
regexp: '^bind_host'
|
||||
line: "bind_host = 127.0.0.1"
|
||||
create: true
|
||||
- name: guacd.conf vollstaendig ausrollen
|
||||
# Ersetzt vier fruehere lineinfile-Tasks (bind_host, bind_port und zwei
|
||||
# Fehlversuche fuer die Protokollierstufe). lineinfile haengt neue Zeilen
|
||||
# ans Dateiende und damit in den zuletzt geoeffneten INI-Abschnitt -- bei
|
||||
# guacd.conf, wo jeder Parameter in genau einen Abschnitt gehoert, fuehrt
|
||||
# das verlaesslich zu einem Startabbruch von guacd. Siehe Kopfkommentar
|
||||
# der Vorlage.
|
||||
ansible.builtin.template:
|
||||
src: guacd.conf.j2
|
||||
dest: /etc/guacamole/guacd.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
# Vor dem Ueberschreiben eine Sicherung anlegen: die Datei koennte auf
|
||||
# einem bestehenden Host von Hand angepasst worden sein.
|
||||
backup: true
|
||||
notify: restart guacd
|
||||
|
||||
- name: guacd-Port setzen
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/guacamole/guacd.conf
|
||||
regexp: '^bind_port'
|
||||
line: "bind_port = {{ guacd_port }}"
|
||||
create: true
|
||||
notify: restart guacd
|
||||
|
||||
- name: Falsch benannte Protokollierstufe aus guacd.conf entfernen
|
||||
# BUGFIX (3.9.): hier stand zuerst "log_level = ...". Diesen Parameter
|
||||
# kennt guacd.conf NICHT -- er heisst "max_log_level" (guacd.conf(5):
|
||||
# pid_file, max_log_level, bind_host, bind_port, server_certificate,
|
||||
# server_key). guacd bricht bei einem unbekannten Schluessel den Start
|
||||
# komplett ab ("Parse error at line N: Invalid parameter or section name"),
|
||||
# es gibt also keine stille Fehlbedienung -- der Dienst startete gar nicht
|
||||
# mehr. Diese Aufraeumzeile entfernt die falsche Zeile auf Hosts, auf denen
|
||||
# die fehlerhafte Fassung bereits ausgerollt wurde.
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/guacamole/guacd.conf
|
||||
regexp: '^\s*log_level\s*='
|
||||
state: absent
|
||||
notify: restart guacd
|
||||
|
||||
- name: guacd-Protokollierstufe setzen
|
||||
# Auf "info" (Standard) protokolliert guacd bereits, ob die
|
||||
# Zertifikatspruefung wegen ignore-cert uebersprungen wurde
|
||||
# ("Certificate validation bypassed") oder fehlgeschlagen ist -- die
|
||||
# entscheidende Unterscheidung bei "Ziel nicht erreichbar (Code 519):
|
||||
# SSL/TLS connection failed". Fuer den konkreten FreeRDP-/OpenSSL-Fehler
|
||||
# guacd_log_level voruebergehend auf "debug" setzen (siehe defaults).
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/guacamole/guacd.conf
|
||||
regexp: '^\s*max_log_level\s*='
|
||||
line: "max_log_level = {{ guacd_log_level }}"
|
||||
create: true
|
||||
notify: restart guacd
|
||||
|
||||
- name: RDP-Laufwerksumleitungs-Verzeichnisse anlegen (Filetransfer, Konzept 4.3)
|
||||
ansible.builtin.file:
|
||||
path: "/var/lib/jumphost/rdp-drives"
|
||||
state: directory
|
||||
owner: guacd
|
||||
group: guacd
|
||||
mode: "0750"
|
||||
|
||||
- name: TLS-Kompatibilitaetskonfiguration fuer guacd ausrollen (nur wenn eingeschaltet)
|
||||
# Greift ausschliesslich ueber Environment=OPENSSL_CONF in der guacd-Unit
|
||||
# und damit nur fuer diesen einen Prozess -- siehe Kopfkommentar der
|
||||
@ -331,6 +296,91 @@
|
||||
when: not (guacd_tls_legacy_compat | bool)
|
||||
notify: restart guacd
|
||||
|
||||
# --- OpenSSL-Sicherheitsstufe fuer FreeRDP (Befund 3.9., siehe files/*.c) ---
|
||||
#
|
||||
# Nur aktiv, wenn guacd_tls_seclevel gesetzt ist. Standardmaessig leer.
|
||||
|
||||
- name: Uebersetzer fuer die Sicherheitsstufen-Zwischenschicht sicherstellen
|
||||
# Auf dem Quellcode-Pfad ist gcc ueber build-essential ohnehin da; auf dem
|
||||
# apt-Pfad (Ubuntu) nicht. Die Zwischenschicht bindet bewusst KEINE
|
||||
# OpenSSL-Header ein, deshalb reicht gcc -- kein libssl-dev noetig.
|
||||
ansible.builtin.apt:
|
||||
name: gcc
|
||||
state: present
|
||||
when: guacd_tls_seclevel | string | length > 0
|
||||
|
||||
- name: Quelle der Sicherheitsstufen-Zwischenschicht ablegen
|
||||
ansible.builtin.copy:
|
||||
src: guacd_tls_seclevel_shim.c
|
||||
dest: /usr/local/src/guacd_tls_seclevel_shim.c
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
when: guacd_tls_seclevel | string | length > 0
|
||||
register: _shim_quelle
|
||||
|
||||
- name: Verzeichnis fuer die uebersetzte Zwischenschicht anlegen
|
||||
ansible.builtin.file:
|
||||
path: /usr/local/lib/jumphost
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
when: guacd_tls_seclevel | string | length > 0
|
||||
|
||||
- name: Sicherheitsstufen-Zwischenschicht uebersetzen
|
||||
ansible.builtin.command:
|
||||
cmd: >-
|
||||
gcc -shared -fPIC -O2 -Wall -Wextra
|
||||
-o /usr/local/lib/jumphost/guacd-tls-seclevel-shim.so
|
||||
/usr/local/src/guacd_tls_seclevel_shim.c -ldl
|
||||
when: guacd_tls_seclevel | string | length > 0
|
||||
register: _shim_build
|
||||
changed_when: true
|
||||
notify: restart guacd
|
||||
|
||||
- name: Pruefen, ob FreeRDP die OpenSSL-Sicherheitsstufe tatsaechlich selbst setzt
|
||||
# Die Zwischenschicht kann nur wirken, wenn FreeRDP
|
||||
# SSL_CTX_set_security_level dynamisch aufruft. Taete es das nicht, waere
|
||||
# sie wirkungslos -- und das soll auffallen, statt dass jemand spaeter
|
||||
# raetselt, warum die Einstellung nichts bewirkt.
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
lib=$(ldconfig -p | awk '/libfreerdp[0-9]*\.so/ {print $NF; exit}')
|
||||
if [ -z "$lib" ]; then echo "KEINE_LIB"; exit 0; fi
|
||||
if grep -qa 'SSL_CTX_set_security_level' "$lib"; then echo "JA $lib"; else echo "NEIN $lib"; fi
|
||||
args:
|
||||
executable: /bin/bash
|
||||
register: _freerdp_seclevel
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
when: guacd_tls_seclevel | string | length > 0
|
||||
|
||||
- name: Abbrechen, wenn die Zwischenschicht wirkungslos waere
|
||||
ansible.builtin.fail:
|
||||
msg: >-
|
||||
guacd_tls_seclevel ist gesetzt, aber die gefundene FreeRDP-Bibliothek
|
||||
ruft SSL_CTX_set_security_level nicht auf ({{ _freerdp_seclevel.stdout }}).
|
||||
Die Zwischenschicht bliebe wirkungslos. Entweder guacd_tls_seclevel
|
||||
wieder leeren, oder die Ursache erneut mit
|
||||
scripts/diagnose_rdp_tls.py eingrenzen.
|
||||
when:
|
||||
- guacd_tls_seclevel | string | length > 0
|
||||
- _freerdp_seclevel.stdout is defined
|
||||
- _freerdp_seclevel.stdout is not match('^JA ')
|
||||
|
||||
- name: Sicherheitsstufen-Zwischenschicht wieder entfernen, wenn abgeschaltet
|
||||
# Damit ein Leeren von guacd_tls_seclevel die Absenkung auch tatsaechlich
|
||||
# zurueckdreht und keine verwaiste Bibliothek liegen bleibt.
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- /usr/local/lib/jumphost/guacd-tls-seclevel-shim.so
|
||||
- /usr/local/src/guacd_tls_seclevel_shim.c
|
||||
when: guacd_tls_seclevel | string | length == 0
|
||||
notify: restart guacd
|
||||
|
||||
- name: Override-Verzeichnis fuer guacd-Unit anlegen
|
||||
ansible.builtin.file:
|
||||
path: /etc/systemd/system/guacd.service.d
|
||||
|
||||
Reference in New Issue
Block a user