🔐 Sicherheit
Einführung
Sicherheit hat in Semaphore UI höchste Priorität. Ob Sie kritische Infrastrukturaufgaben automatisieren oder den Teamzugriff auf sensible Systeme verwalten – Semaphore UI ist darauf ausgelegt, von Haus aus einen robusten und sicheren Betrieb zu bieten. Dieser Abschnitt beschreibt, wie Semaphore mit Sicherheit umgeht und was Sie beim Einsatz in der Produktion beachten sollten.
Authentifizierung & Autorisierung
Semaphore unterstützt sichere Authentifizierung und flexible Autorisierungsmechanismen:
-
Anmeldemethoden:
-
Benutzername/Passwort
Standardmethode mit Anmeldedaten, die in der Semaphore-Datenbank gespeichert sind. Passwörter werden niemals im Klartext gespeichert; sie werden mit Argon2id gehasht (siehe Passwort-Hashing). -
LDAP
Ermöglicht die Integration mit Unternehmensverzeichnisdiensten. Unterstützt Benutzer-/Gruppenfilterung und sichere Verbindungen über LDAPS. -
OpenID Connect (OIDC)
Ermöglicht Single Sign-on mit Identitätsanbietern wie Google, Azure AD oder Keycloak. Unterstützt benutzerdefinierte Claims und Gruppenzuordnungen.
-
-
Zwei-Faktor-Authentifizierung (2FA)
TOTP-basierte 2FA ist verfügbar und wird für alle Benutzer empfohlen. Sie kann pro Benutzer aktiviert werden und unterstützt optionale Wiederherstellungscodes. Siehe die Konfigurationsoptionenmfa.totp.enabledundmfa.totp.allow_recovery. -
Rollenbasierte Zugriffskontrolle
Sie können Benutzern unterschiedliche Rollen wie Admin, Maintainer oder Viewer zuweisen und so den Zugriff entsprechend der Verantwortung einschränken. -
Sitzungsverwaltung
Sitzungen werden durch sichere HTTP-Cookies geschützt. Sitzungsablauf und Abmeldemechanismen sorgen für eine minimale Angriffsfläche.
Passwort-Hashing
Argon2id-Passwort-Hashing ist seit Semaphore 2.20 verfügbar. Frühere Versionen verwenden bcrypt.
Passwörter lokaler Benutzer werden mit Argon2id gehasht, dem von OWASP für die Passwortspeicherung empfohlenen Algorithmus. Semaphore verwendet die OWASP-Mindestparameter:
| Parameter | Wert |
|---|---|
| Speicher | 19 MiB (m=19456) |
| Iterationen | 2 (t=2) |
| Parallelität | 1 (p=1) |
| Salt | 16 zufällige Bytes pro Passwort |
| Hash-Länge | 32 Bytes |
Hashes werden im standardisierten PHC-String-Format gespeichert, zum Beispiel $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash>, sodass die für jeden Hash verwendeten Parameter gemeinsam mit ihm festgehalten werden.
Das gilt für jede Art, ein Passwort zu setzen: die Weboberfläche, die API und die CLI-Befehle semaphore user add, semaphore user change-by-login und semaphore setup.
Upgrade von Versionen vor 2.20. Versionen vor 2.20 haben Passwörter mit bcrypt gehasht. Ein Migrationsschritt ist nicht erforderlich:
- Bestehende bcrypt-Hashes werden bei der Anmeldung weiterhin akzeptiert, sodass alle Benutzer nach dem Upgrade weiterarbeiten können.
- Bei der ersten erfolgreichen Anmeldung wird das Passwort transparent mit Argon2id neu gehasht und der bcrypt-Hash ersetzt.
- Wenn die Argon2id-Parameter von Semaphore in einer künftigen Version verstärkt werden, werden mit den älteren Parametern erzeugte Hashes bei der nächsten Anmeldung auf dieselbe Weise aktualisiert.
Da das erneute Hashen nur bei der Anmeldung erfolgt, behalten Benutzer, die sich nie wieder anmelden, ihren bcrypt-Hash. Um ein Upgrade für solche Konten zu erzwingen, setzen Sie deren Passwort mit semaphore user change-by-login --password ... oder über die Admin-Oberfläche zurück.
Wiederherstellungscodes für die Zwei-Faktor-Authentifizierung sind keine Benutzerpasswörter und verwenden weiterhin bcrypt.
Geheimnisse & Anmeldedaten
Die sichere Verwaltung von Geheimnissen ist eine Kernfunktion:
-
Verschlüsselter Schlüsselspeicher
Anmeldedaten und geheime Variablen werden im Ruhezustand mit AES-Verschlüsselung verschlüsselt. -
Umgebungsisolation
Geheimnisse werden Jobs nur zur Laufzeit übergeben und nicht direkt in der Container-Umgebung offengelegt. -
SSH-Schlüssel und Token
Benutzer sind dafür verantwortlich, gültige SSH-Schlüssel und Token hochzuladen. Diese werden verschlüsselt und nur beim Ausführen von Tasks verwendet. -
HashiCorp-Vault-Integration (Pro)
Geheimnisse können in einer externen Vault-Instanz gespeichert werden. Wählen Sie den Speicherort pro Geheimnis beim Erstellen oder Bearbeiten eines Geheimnisses.
Datenverschlüsselung
Sensible Daten werden in verschlüsselter Form in der Datenbank gespeichert. Sie sollten die Konfigurationsoption access_key_encryption in der Konfigurationsdatei setzen, um die Verschlüsselung der Access Keys zu aktivieren. Der Schlüssel muss mit folgendem Befehl generiert werden:
head -c32 /dev/urandom | base64
Ausführen von nicht vertrauenswürdigem Code / Playbooks
Semaphore führt benutzerdefinierte Playbooks und Befehle aus, was riskant sein kann:
-
Container-Isolation
Tasks werden in isolierten Docker-Containern ausgeführt. Diese Container haben keinen Zugriff auf das Hostsystem. -
Execution-Isolation
Standardmäßig ist ein Task ein gewöhnlicher Prozess auf dem Semaphore-Server und hat dessen Dateisystem- und Netzwerkzugriff. Isolation ist optional: Geben Sie den Task an einen Runner mit demdocker- oderk8s-Executor, und jeder Task erhält einen frischen Container bzw. Pod, der nach dem Ende verworfen wird. -
Minimale Rechte
Mit dem Docker- und dem Kubernetes-Executor wählen Sie Image, Netzwerk und Service-Account selbst, sodass ein Task nur das bekommt, was er braucht. -
Prozessbenutzer für Tasks
Tasks können unter einem dedizierten Systembenutzer ohne Root-Rechte (z. B.semaphore) ausgeführt werden, um die Auswirkungen potenzieller Exploits zu verringern. Dies ist optional und kann entsprechend den Systemrichtlinien konfiguriert werden.
Sichere Bereitstellung
Um sicherzustellen, dass Semaphore sicher bereitgestellt wird:
-
HTTPS verwenden
Semaphore unterstützt HTTPS sowohl über die integrierte TLS-Unterstützung als auch über einen Reverse-Proxy wie Nginx. Es wird dringend empfohlen, HTTPS in der Produktion zu aktivieren.Um die integrierte HTTPS-Unterstützung zu aktivieren, fügen Sie folgenden Block zur config.json hinzu:
{
...
"tls": {
"enabled": true,
"cert_file": "/path/to/cert/example.com.cert",
"key_file": "/path/to/key/example.com.key"
}
...
} -
Hinter einer Firewall betreiben
Beschränken Sie den Zugriff auf Semaphore UI und die Datenbank auf vertrauenswürdige IP-Adressen. -
Datenbanksicherheit
Verwenden Sie starke Passwörter und beschränken Sie den Datenbankzugriff ausschließlich auf Semaphore.
Updates & Patch-Management
Sicherheitsupdates werden regelmäßig veröffentlicht:
-
Aktuell bleiben
Verwenden Sie immer die neueste stabile Version. -
Changelog
Prüfen Sie die Änderungen auf GitHub, bevor Sie aktualisieren. -
Automatische Updates
Wenn Sie Docker verwenden, ziehen Sie Automatisierungs-Pipelines für regelmäßige Updates in Betracht.
Melden von Schwachstellen
Sie haben eine Schwachstelle gefunden? Helfen Sie uns, Semaphore sicher zu halten:
- Verantwortungsvolle Offenlegung
Bitte senden Sie uns eine E-Mail an[email protected].
Zielfristen für die Behebung von Schwachstellen
Wir streben an, gemeldete Schwachstellen innerhalb der folgenden Zeitfenster zu beheben:
- Kritisch: innerhalb von 30 Tagen
- Hoch: innerhalb von 60 Tagen
- Mittel: innerhalb von 90 Tagen
- Niedrig: nach bestem Bemühen, in der Regel innerhalb von 180 Tagen
Für aktiv ausgenutzte Probleme, die die neuesten stabilen Versionen betreffen, können außerplanmäßige Patches veröffentlicht werden.
Werkzeuge für die Codesicherheit
Wir verwenden CodeQL, Codacy, Snyk und Renovate, um den Code und die Abhängigkeiten zu analysieren und Abhängigkeitsupdates zu automatisieren.
-
Keine öffentlichen Exploits
Veröffentlichen Sie Schwachstellen nicht, bevor sie gepatcht sind. -
Danksagungen
Sicherheitsforscher können auf Wunsch in den Versionshinweisen genannt werden.