125 lines
4.2 KiB
YAML
125 lines
4.2 KiB
YAML
---
|
|
# 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
|