umbau 1.3
This commit is contained in:
@ -24,3 +24,18 @@ guacd_freerdp_dev_package: ""
|
||||
# wird. Default "main" (Standard-Branch von apache/guacamole-server auf
|
||||
# GitHub -- NICHT "master").
|
||||
guacd_git_ref: "main"
|
||||
|
||||
# Protokollierstufe von guacd (guacd.conf: trace|debug|info|warning|error).
|
||||
#
|
||||
# "info" ist der Standard und reicht fuer den Normalbetrieb -- auf dieser
|
||||
# Stufe protokolliert guacd bereits die fuer die RDP-Fehlersuche wichtigste
|
||||
# Zeile: "Certificate validation bypassed" (Zertifikatspruefung wurde wegen
|
||||
# ignore-cert uebersprungen) bzw. "Certificate validation failed".
|
||||
#
|
||||
# Auf "debug" hochsetzen, um bei einem fehlgeschlagenen RDP-Verbindungsaufbau
|
||||
# den KONKRETEN FreeRDP-/OpenSSL-Fehler zu sehen, statt nur guacds
|
||||
# zusammengefasste Meldung ("SSL/TLS connection failed ...", die im Browser
|
||||
# als "Ziel nicht erreichbar (Code 519)" ankommt). Danach wieder auf "info"
|
||||
# zuruecksetzen: "debug"/"trace" sind gespraechig und koennen Details der
|
||||
# Zielumgebung ins Journal schreiben.
|
||||
guacd_log_level: "info"
|
||||
|
||||
@ -271,6 +271,20 @@
|
||||
create: true
|
||||
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: '^log_level'
|
||||
line: "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"
|
||||
|
||||
@ -74,3 +74,51 @@
|
||||
daemon_reload: true
|
||||
enabled: true
|
||||
state: started
|
||||
|
||||
# --- Aufraeumen der RDP-Laufwerksverzeichnisse (Befund E6, Nachtrag 3.9.) ----
|
||||
#
|
||||
# Die App kann ihre eigenen Sitzungsverzeichnisse unter
|
||||
# {{ jumphost_data_dir }}/rdp-drives NICHT entfernen: das Verzeichnis gehoert
|
||||
# guacd (0750 guacd:guacd, Rolle "guacd"), die darin von guacd selbst
|
||||
# angelegten Sitzungsverzeichnisse haben Modus 0700 guacd:guacd, und der
|
||||
# App-Benutzer "{{ jumphost_app_user }}" ist nicht in der Gruppe "guacd".
|
||||
# Der bisherige shutil.rmtree()-Aufruf in app/rdp_proxy/ws_tunnel.py lief
|
||||
# deshalb seit jeher ins Leere -- und hat den PermissionError wegen
|
||||
# ignore_errors=True auch noch stillschweigend verschluckt. Aufgeraeumt wird
|
||||
# daher hier, per Timer und als root.
|
||||
|
||||
- name: Aufraeum-Skript fuer RDP-Laufwerke ausrollen
|
||||
ansible.builtin.copy:
|
||||
src: "{{ playbook_dir }}/../scripts/cleanup_rdp_drives.py"
|
||||
dest: "{{ jumphost_home }}/scripts/cleanup_rdp_drives.py"
|
||||
owner: root
|
||||
group: "{{ jumphost_app_group }}"
|
||||
mode: "0755"
|
||||
|
||||
- name: systemd-Unit fuer das Aufraeumen der RDP-Laufwerke ausrollen
|
||||
ansible.builtin.template:
|
||||
src: jumphost-rdp-drives-cleanup.service.j2
|
||||
dest: /etc/systemd/system/jumphost-rdp-drives-cleanup.service
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: reload systemd
|
||||
|
||||
- name: systemd-Timer fuer das Aufraeumen der RDP-Laufwerke ausrollen
|
||||
ansible.builtin.template:
|
||||
src: jumphost-rdp-drives-cleanup.timer.j2
|
||||
dest: /etc/systemd/system/jumphost-rdp-drives-cleanup.timer
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: reload systemd
|
||||
|
||||
- name: Anstehende systemd-Handler anwenden, bevor der Timer gestartet wird
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Aufraeum-Timer aktivieren und starten
|
||||
ansible.builtin.systemd:
|
||||
name: jumphost-rdp-drives-cleanup.timer
|
||||
daemon_reload: true
|
||||
enabled: true
|
||||
state: started
|
||||
|
||||
@ -0,0 +1,36 @@
|
||||
[Unit]
|
||||
Description=Jumphost: beendete RDP-Laufwerksverzeichnisse aufraeumen
|
||||
Documentation=file://{{ jumphost_home }}/scripts/cleanup_rdp_drives.py
|
||||
After=jumphost-app.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
# BEWUSST als root: /var/lib/jumphost/rdp-drives gehoert guacd (0750) und die
|
||||
# darin von guacd angelegten Sitzungsverzeichnisse haben Modus 0700 guacd:guacd.
|
||||
# Weder der App-Benutzer "{{ jumphost_app_user }}" noch guacd selbst koennen
|
||||
# sie zuverlaessig wieder entfernen (guacd kennt das Sitzungsende nicht) --
|
||||
# ausfuehrliche Begruendung im Kopfkommentar des Skripts.
|
||||
User=root
|
||||
Group=root
|
||||
Environment=JUMPHOST_DATA_DIR={{ jumphost_data_dir }}
|
||||
ExecStart={{ jumphost_venv }}/bin/python {{ jumphost_home }}/scripts/cleanup_rdp_drives.py
|
||||
|
||||
# Hardening: der Dienst braucht ausschliesslich Lesezugriff auf die
|
||||
# Sitzungsdatenbank und Schreibzugriff auf rdp-drives -- sonst nichts.
|
||||
NoNewPrivileges=true
|
||||
ProtectSystem=strict
|
||||
ProtectHome=true
|
||||
PrivateTmp=true
|
||||
PrivateDevices=true
|
||||
ProtectKernelTunables=true
|
||||
ProtectKernelModules=true
|
||||
ProtectControlGroups=true
|
||||
RestrictNamespaces=true
|
||||
# Kein Netzwerk noetig (reiner Datei-/SQLite-Zugriff).
|
||||
PrivateNetwork=true
|
||||
RestrictAddressFamilies=AF_UNIX
|
||||
RestrictSUIDSGID=true
|
||||
LockPersonality=true
|
||||
ReadWritePaths={{ jumphost_data_dir }}/rdp-drives
|
||||
ReadOnlyPaths={{ jumphost_data_dir }}
|
||||
UMask=0077
|
||||
@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Description=Jumphost: RDP-Laufwerksverzeichnisse regelmaessig aufraeumen
|
||||
|
||||
[Timer]
|
||||
# Alle 15 Minuten. Das Skript loescht ausschliesslich Verzeichnisse, deren
|
||||
# Sitzung in der Datenbank als BEENDET markiert ist -- ein kurzes Intervall
|
||||
# ist deshalb ungefaehrlich (keine Altersheuristik, die eine lange, aber
|
||||
# stille Sitzung mitten im Betrieb treffen koennte) und haelt die Zeitspanne
|
||||
# klein, in der uebertragene Dateien nach Sitzungsende noch auf der Platte
|
||||
# liegen.
|
||||
OnBootSec=5min
|
||||
OnUnitActiveSec=15min
|
||||
AccuracySec=1min
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
Reference in New Issue
Block a user