--- # Deployt die eigentliche Jumphost-Anwendung als gehaertete systemd-Unit. # KEK und Session-Secret werden ueber systemd-creds verschluesselt abgelegt # (Konzept 6.4) -- niemals als Klartext-Env-Variable im Unit-File. - name: Konfigurationsverzeichnis anlegen ansible.builtin.file: path: /etc/jumphost state: directory owner: root group: "{{ jumphost_app_group }}" mode: "0750" - name: Pruefen ob systemd-creds verfuegbar ist (systemd >= 250 empfohlen) ansible.builtin.command: systemd-creds --version register: _creds_check changed_when: false failed_when: false - name: Warnung ausgeben, falls systemd-creds fehlt ansible.builtin.debug: msg: > WARNUNG: systemd-creds nicht verfuegbar. Fallback auf Env-Variablen (JUMPHOST_KEK/JUMPHOST_SESSION_SECRET) in einer 0600-EnvironmentFile -- weniger sicher als LoadCredentialEncrypted=, siehe Konzept 6.4. when: _creds_check.rc != 0 - name: KEK verschluesselt ablegen (systemd-creds) ansible.builtin.shell: | set -o pipefail echo -n '{{ vault_jumphost_kek }}' | systemd-creds encrypt --name=jumphost_kek - /etc/jumphost/jumphost_kek.cred args: creates: /etc/jumphost/jumphost_kek.cred executable: /bin/bash when: _creds_check.rc == 0 no_log: true - name: Session-Secret verschluesselt ablegen (systemd-creds) ansible.builtin.shell: | set -o pipefail echo -n '{{ vault_jumphost_session_secret }}' | systemd-creds encrypt --name=jumphost_session_secret - /etc/jumphost/jumphost_session_secret.cred args: creates: /etc/jumphost/jumphost_session_secret.cred executable: /bin/bash when: _creds_check.rc == 0 no_log: true - name: Fallback-EnvironmentFile (nur falls systemd-creds fehlt) ansible.builtin.copy: dest: /etc/jumphost/env owner: root group: "{{ jumphost_app_group }}" mode: "0640" content: | JUMPHOST_KEK={{ vault_jumphost_kek }} JUMPHOST_SESSION_SECRET={{ vault_jumphost_session_secret }} when: _creds_check.rc != 0 no_log: true - name: systemd-Unit fuer die Jumphost-App ausrollen ansible.builtin.template: src: jumphost-app.service.j2 dest: /etc/systemd/system/jumphost-app.service owner: root group: root mode: "0644" notify: - reload systemd - restart jumphost-app service - name: Jumphost-App aktivieren und starten ansible.builtin.systemd: name: jumphost-app 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