Zum Inhalt

Sichere Server-Schaltflächen mit OliveTin erstellen

Veröffentlicht am 12. August 2026 · Geschätzte Lesezeit: 5 Minuten

OliveTin zeigt vorher festgelegte Shell-Befehle als große Schaltflächen im Browser. So kannst du zum Beispiel einen bestimmten Docker-Container neu starten, ohne auf dem Handy lange Befehle einzutippen. Mit lokaler Anmeldung und einer ersten Aktion ist OliveTin in etwa 20 Minuten eingerichtet.

Voraussetzungen

  • Ein Linux-Server mit Docker und Docker Compose
  • Eine feste private IP-Adresse für den Server
  • Port 1337/TCP ist im Heimnetz frei
  • SSH-Zugriff und ein Benutzer mit sudo-Rechten

1. Arbeitsordner und Docker-Gruppe vorbereiten

Führe die Befehle auf dem Docker-Server aus. Sie erstellen den Konfigurationsordner und wechseln direkt hinein:

sudo mkdir -p /opt/olivetin/config
sudo chown -R "$USER":"$USER" /opt/olivetin
cd /opt/olivetin

Ermittle die numerische Gruppen-ID des Docker-Sockets:

stat -c '%g' /var/run/docker.sock

Notiere die ausgegebene Zahl als <docker-gid>. OliveTin benötigt diese Gruppe, damit der Docker-Befehl im Container auf den Socket zugreifen kann.

2. Passwort-Hash erzeugen

Der folgende Befehl fragt das gewünschte OliveTin-Passwort verdeckt ab und erzeugt in einem kurzlebigen, netzwerklosen Container einen Argon2id-Hash. Das Klartext- Passwort landet dadurch nicht in der Shell-Historie:

read -rsp "OliveTin-Passwort: " OLIVETIN_PASSWORD; echo
printf '%s' "$OLIVETIN_PASSWORD" | docker run --rm -i --net=none leplusorg/hash sh -c 'argon2 "$(openssl rand -base64 16)" -id -t 4 -m 16 -p 6 -l 32 -e'
unset OLIVETIN_PASSWORD

Kopiere die vollständige Ausgabe, die mit $argon2id$ beginnt. Sie wird im nächsten Schritt als <argon2id-hash> eingesetzt und ist nicht das Klartextpasswort.

3. OliveTin sicher konfigurieren

Erstelle /opt/olivetin/config/config.yaml. Ersetze <argon2id-hash> durch die Ausgabe aus Schritt 2 und <container-name> durch den exakten Namen eines unkritischen Testcontainers, zum Beispiel uptime-kuma.

logLevel: "INFO"
authRequireGuestsToLogin: true

authLocalUsers:
  enabled: true
  users:
    - username: admin
      usergroup: admins
      password: "<argon2id-hash>"

accessControlLists:
  - name: admins
    addToEveryAction: true
    matchUsergroups:
      - admins
    permissions:
      view: true
      exec: true
      logs: true

actions:
  - title: "Docker-Container anzeigen"
    shell: "docker ps"
    timeout: 10

  - title: "<container-name> neu starten"
    shell: "docker restart <container-name>"
    timeout: 30

Der Benutzer admin muss sich anmelden. Die ACL erlaubt nur Mitgliedern der Gruppe admins, Aktionen zu sehen und auszuführen. Befehle sind fest vorgegeben; es gibt kein frei beschreibbares Terminalfeld.

Nur exakt benötigte Befehle freigeben

Veröffentliche OliveTin niemals direkt im Internet. Befehle wie rm, frei einsetzbare Benutzereingaben oder eine allgemeine Shell-Schaltfläche gehören nicht in die Konfiguration. Jede Aktion läuft mit den Rechten des Containers.

4. Compose-Datei erstellen

Erstelle /opt/olivetin/compose.yaml. Ersetze <server-ip> durch die private IP des Servers und <docker-gid> durch die Zahl aus Schritt 1.

services:
  olivetin:
    image: jamesread/olivetin:latest
    container_name: olivetin
    restart: unless-stopped
    ports:
      - "<server-ip>:1337:1337"
    group_add:
      - "<docker-gid>"
    volumes:
      - ./config:/config:ro
      - /var/run/docker.sock:/var/run/docker.sock

Die Konfiguration wird schreibgeschützt eingebunden. Der Docker-Socket ermöglicht die beiden Container-Aktionen, verleiht aber weitreichenden Zugriff auf Docker.

Docker-Socket entspricht praktisch Administratorzugriff

Wer OliveTin-Aktionen oder die Konfiguration kontrolliert, kann über Docker den gesamten Host beeinflussen. Beschränke Port 1337 auf das vertrauenswürdige Heimnetz, nutze ein starkes Passwort und sichere den Server zusätzlich mit einer Firewall.

5. Konfiguration prüfen und starten

Prüfe zuerst die Compose-Datei:

cd /opt/olivetin
docker compose config --quiet

Starte OliveTin und kontrolliere die Protokolle:

docker compose up -d
docker compose logs --tail=100 olivetin

Die Datei muss exakt config.yaml heißen. Bei einem YAML-Fehler nennt das Protokoll meist die betroffene Zeile.

6. Anmeldung und erste Aktion testen

Öffne http://<server-ip>:1337/login und ersetze <server-ip> durch die private Server-IP. Melde dich als admin mit dem Passwort aus Schritt 2 an.

Klicke zuerst auf Docker-Container anzeigen. Die Ausgabe sollte die laufenden Container zeigen. Prüfe danach den Zielnamen der Neustart-Schaltfläche noch einmal und teste sie nur mit einem Dienst, dessen kurzer Neustart keine Daten gefährdet.

Kontrolliere parallel im Terminal den Status:

docker ps --format 'table {{.Names}}\t{{.Status}}'

7. Weitere Aktionen vorsichtig ergänzen

Bearbeite config/config.yaml und füge nur einzelne, vollständig festgelegte Befehle hinzu. Eine harmlose Diagnoseaktion kann zum Beispiel den freien Platz des OliveTin-Konfigurationsordners anzeigen:

  - title: "Freien Speicher anzeigen"
    shell: "df -h /config"
    timeout: 10

Starte OliveTin nach jeder Änderung neu und prüfe die Protokolle:

cd /opt/olivetin
docker compose restart olivetin
docker compose logs --tail=50 olivetin

Eine Änderung nach der anderen

Teste jede Aktion zuerst direkt im passenden Container oder auf einem Testsystem. So erkennst du fehlende Programme, falsche Namen und unerwünschte Nebenwirkungen, bevor jemand die Schaltfläche verwendet.

8. Backup und Rückweg

Stoppe OliveTin kurz und sichere Compose-Datei und Konfiguration:

cd /opt/olivetin
docker compose down

Erstelle ein datiertes, nur für Administratoren lesbares Archiv:

sudo mkdir -p /var/backups
sudo tar -czf "/var/backups/olivetin-$(date +%F).tar.gz" -C /opt olivetin
sudo chmod 600 "/var/backups/olivetin-$(date +%F).tar.gz"

Starte OliveTin wieder:

cd /opt/olivetin
docker compose up -d

Für den sofortigen Rückweg stoppst du den Stack mit docker compose down. Die anderen Container laufen weiter. Entferne bei einem Sicherheitsverdacht außerdem die Freigabe von Port 1337 und prüfe alle definierten Aktionen.

9. Aktualisieren und Fehler finden

Lege vor einem Update ein Backup an. Aktualisiere anschließend den Container:

cd /opt/olivetin
docker compose pull
docker compose up -d
  • OliveTin startet nicht: Dateiname config.yaml, YAML-Einrückung und Protokollmeldungen prüfen.
  • Anmeldung schlägt fehl: Den vollständigen Argon2id-Hash einschließlich aller $-Zeichen kontrollieren und bei Bedarf einen neuen Hash erzeugen.
  • permission denied am Docker-Socket: <docker-gid> erneut mit stat ermitteln und Container neu erstellen.
  • No such container: Exakten Namen mit docker ps --format '{{.Names}}' anzeigen und in beiden Stellen der Aktion ersetzen.
  • Befehl endet nach drei Sekunden: Für die Aktion einen passenden timeout- Wert setzen; nie unbegrenzt lange Aktionen verwenden.

10. Quellen und Video

Fertig

OliveTin stellt nun nur angemeldeten Administratoren die festgelegten Server-Schaltflächen bereit. Die Funktionsprüfung ist bestanden, wenn die Containerliste angezeigt wird, der gewählte Testcontainer sauber neu startet und kein nicht angemeldeter Browser auf die Aktionen zugreifen kann.