Ist es unsicher, einen ansiblen Benutzer mit passwortlosem sudo zu haben?

10

Ich bin neu bei Ansible. Die meisten VPS-Bereitstellungshandbücher, die ich bisher gesehen habe, tun dies:

  1. Deaktivieren Sie die Anmeldung von root
  2. Erstellen Sie einen neuen Benutzer, der sich nur mit ssh(kein Passwort) anmelden kann.
  3. Fügen Sie den neuen Benutzer wheelmit kennwortloser Sudo- Berechtigung zur Gruppe hinzu

Ich verstehe (1) und (2), aber nicht (3).

Sicherlich ist passwortlos sudowie das Anmelden als root? Ich verstehe den Nutzen (Bequemlichkeit), aber ist das nicht sehr unsicher?

Mir ist klar, dass Administratoren ihre Netzwerke auf verschiedene Arten betreiben, und dies kann als "subjektiv" bezeichnet werden, aber dies ist eine SEHR gängige Praxis. Sie wird sogar in verschiedenen offiziellen Ansible-Dokumenten sowie in Leitfäden gezeigt, die von Hosting-Unternehmen veröffentlicht werden. Es widerspricht dem gesunden Menschenverstand. Was ist die Logik dahinter?

lonix
quelle
1
Ansible ist für die Automatisierung von Verwaltungsaufgaben vorgesehen und benötigt daher im Allgemeinen Zugriff auf oberster Ebene (Root-Ebene), daher "passwortloses Sudo". Wenn Sie es jedoch nur benötigen, um eine Teilmenge der auf Ihrem System verfügbaren Befehle auszuführen, können Sie es auf nur diese Befehle mit einer detaillierteren sudo-Konfiguration beschränken. Passwortloses sudo bedeutet nicht unbedingt den Zugriff auf alles , was root tun kann (obwohl dies schwierig zu erzwingen ist, wenn Sie feststellen, dass der Benutzer Ihre sudo-Konfiguration möglicherweise über sudo ändern kann, um sich selbst mehr Kontrolle zu verschaffen ...).
David Spillett
@DavidSpillett Ich habe mich darüber gewundert - dh definiert, welche sudo-Befehle in der sudoers-Datei zugelassen werden sollen ... aber ich habe irgendwo gelesen, dass ansible alles durch Interpretation über komplexe Python-Befehle erledigt und dass dieser Ansatz schnell chaotisch werden würde.
Lonix

Antworten:

18

Wenn das Dienstkonto passwortloses Sudo ausführen kann, müssen Sie den Zugriff auf dieses Konto schützen.

Wenn das Konto kein Kennwort hat und sich nur mit SSH-Schlüsseln anmeldet, wird dies erreicht, vorausgesetzt, Sie können den privaten SSH-Schlüssel auch sicher aufbewahren.

Michael Hampton
quelle
Ich habe also "irgendwie" Recht, wenn ich mich durch diese Konvention gestört fühle - und doch ist dies die Konvention für Ansible, aus Notwendigkeit / Pragmatismus.
Lonix
Sie sagen also, dass ich die Kernsicherheit im Wesentlichen vom VPS auf mein lokales System "verschiebe", das den SSH-Schlüssel des ansible-Kontos enthält? In diesem Fall ist der Schwachpunkt nicht der VPS selbst, sondern ich! Und ich muss besonders wachsam sein, um diesen SSH-Schlüssel zu schützen, im Gegenzug für den Komfort, den mir eine ansible Automatisierung bietet.
Lonix
6
Der mit ssh-agent geschützte ssh-Schlüssel ist ein ziemlich guter Berechtigungsnachweis.
John Mahowald
@lonix Alle gesicherten Systeme benötigen Anmeldeinformationen. Gesicherte Systeme sind höchstens so sicher wie die Maßnahmen, die Sie zur Sicherung dieser Anmeldeinformationen ergreifen, da diese einen 100% igen Zugriff darauf ermöglichen. Ja, Sie können nicht damit rechnen, Ihren VPS zu sichern, wenn Sie Ihren SSH-Schlüssel (oder Ihr Root-Passwort oder was auch immer) nicht richtig sichern. Die Tatsache, dass Sie sudo ohne Passwort konfigurieren, bedeutet aus dieser Sicht nichts. Wenn Sie sudo mit Passwort aktivieren, ändert dies nichts an der Tatsache, dass Sie den SSH-Schlüssel unbedingt sichern müssen.
Giacomo Alzetta
@GiacomoAlzetta Ich weiß, dass ich oben gemeint habe, dass die Verantwortung von der Fernbedienung auf den lokalen Computer verlagert wird. Da die Sudo-Eskalation ohne Passwort erfolgt, wird der Schwachpunkt lokal.
Lonix
4

Der in (2) erstellte neue Benutzer kann sich nur mit dem SSH-Schlüssel und ohne Kennwort anmelden. Der SSH-Schlüssel ermöglicht den indirekten Root-Zugriff. Dies entspricht also nur dem Zulassen der Root-Anmeldung mit einem Schlüssel.

Da das Konto kein Passwort hat, ist es nicht möglich sudo, nach einem Passwort zu fragen. Außerdem muss Ansible in der Lage sein, Befehle auszuführen. Ein zusätzliches Kennwort am selben Ort wie der Schlüssel würde die Sicherheit nicht erhöhen.

RalfFriedl
quelle
2

Das Problem ist, dass ansible für Administratoren und die Automatisierung bestimmt ist. Wenn Sie also ein Kennwort eingeben müssen, um ein Skript auszuführen, ist dies nicht der beste Weg. Es ist auch nicht sicher, das Passwort für sudo in einer Datei oder Datenbank zu speichern und es jedes Mal abzurufen, wenn das Playbook ausgeführt wird. Die Kombination von passwortlosem sudo und der Authentifizierung mit ssh Keys ist daher die beste Methode, um Sicherheit und keine richtigen Probleme durch Ausführen des Playbooks zu gewährleisten. Auch Sie sind Administrator und wissen, was Sie im Playbook programmieren. Das Playbook kann also Ihre Server nicht zerstören.

NicoKlaus
quelle
Playbooks können Ihre Systeme zerstören. Wenn Sie jedoch nur Schlüssel für separate Testumgebungen verwenden, werden die Produktionshosts nicht zerstört.
John Mahowald
Genau dies ist hoffentlich eine Voraussetzung für die Arbeit an produktiven Systemen.
NicoKlaus
1
Ansible verfügt über "Ansible-Vault" und Plugins / Module / Bibliotheken, mit denen Geheimnisse in vielen geheimen Speichersystemen von Drittanbietern wie Bitwarden, Hashicorp-Vault, Keepass usw. Gespeichert werden können.
Zoredache