Ist eine zentrale Stelle für authorized_keys eine gute Idee?

29

Ich bin dabei, einen Cloud-Server so zu konfigurieren, dass er den folgenden Stack ausführt: Ruby, Passenger, Apache; unter Ubuntu 10.04 (Lucid Lynx).

Um die Verwaltung des Servers zu vereinfachen, richte ich RSA-Schlüssel ein root, www-datadamit ich sshauf den Server zugreifen kann. Das , was ich tat es nicht wie war das www-data‚s .sshVerzeichnis in sat /var/wwwdem das Standardverzeichnis Setup für Apache ist. Ich mache mir Sorgen, dass das .sshVerzeichnis verfügbar gemacht werden kann , wenn Apache nicht richtig konfiguriert ist .

Ich bin auf die Lösung gestoßen, die ~/.ssh/authorized_keysDatei durch Ändern von in an einen zentralen Speicherort AuthorizedKeysFilezu verschieben /etc/ssh/sshd_config. Dies bietet zwei Vorteile: Einen einzigen Speicherort für Schlüssel, und Sie müssen sich keine Gedanken über eine fehlerhafte Apache-Konfiguration machen. Der einzige Nachteil, den ich mir vorstellen kann, ist, dass jetzt jeder Benutzer für die Anmeldung auf dem Server verfügbar ist (eindeutig ein zweischneidiges Schwert der zentralen Schlüsseldatei).

Gibt es etwas, das ich in dieser Konfiguration vermisst habe? Habe ich mich überbelichtet oder ist dies eine bessere Lösung als einzelne authorized_keysDateien?

Ich bin grün, wenn es um Serververwaltung geht, aber ich bin bereit, schlechte Namen für schlechte Dinge zu nennen. : D

Gavin Miller
quelle
1
Zumindest öffentliche Schlüssel, die im Internet (schreibgeschützt) verfügbar gemacht werden, sind nicht das größte Risiko ... (Angreifer können möglicherweise feststellen, ob sie sich mit einem privaten Schlüssel, den sie an anderer Stelle erhalten haben, beim Server anmelden können, dies ist jedoch nicht der Fall.) Erlaube ihnen nicht, sich einzuloggen, indem sie nur das erhalten ...) (Die schwerwiegenden Probleme sind, wenn es eine id_rsaDatei gibt ~/.sshund sie es schaffen, das zu lesen)
Gert van den Berg

Antworten:

51

Alle Schlüsseldateien können in demselben Verzeichnis zentralisiert und nicht in derselben Datei gemischt werden.

Richten Sie die sshd_configDatei einfach so ein:

AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

Auf deinem Server:

  • www-Datenschlüssel werden in sein /etc/ssh/authorized_keys/www-data
  • Root-Schlüssel werden in sein /etc/ssh/authorized_keys/root

In Bezug auf die Zugriffsrechte werden diese Einstellungen von sshd akzeptiert:

/etc/ssh/authorized_keysgehört root:rootund hat den Modus 755. Schlüsseldateien gehören root:rootund haben den Modus 644.

Andere Modi funktionieren möglicherweise, aber ich habe sie nicht getestet.

mahn
quelle
3
+1, aber ich würde das andere Bit nicht setzen. Legen Sie den Besitz der% u-Dateien für den Benutzer fest, damit dies nicht erforderlich ist.
Aaron Copley
1
Eine gute Lösung für das Problem, dass böswillige Benutzer ihren ~ / .ssh / authorized_keys weitere öffentliche Schlüssel hinzufügen können, um anderen Zugriff zu gewähren.
bbaassssiiee
Ich habe gerade bestätigt, dass der Modus 600 für die autorisierte Schlüsseldatei eines Benutzers nicht funktioniert. Es muss Modus 644 sein
Luis E.
@bbaassssiiee Dieses Problem wird durch ABSOLUT NICHT gelöst. Sie können ihren privaten Schlüssel einfach mit jedem teilen, dem sie Zugriff gewähren möchten (diese Möglichkeit kann natürlich gemindert werden, aber diese Antwort ist absolut null, um sie zu mindern)
DylanYoung
1
@DylanYoung Ich gebe zu, dass das Teilen von privaten Schlüsseln möglich ist. Aber mit chattr kann ich den Schreibzugriff auf authorized_keys-Dateien widerrufen, damit ich diese exklusiv verteilen kann, wobei auch in jeder Datei eine einzelne Zeile geschützt ist.
bbaassssiiee
15

Im Allgemeinen würde ich nicht tun, was Sie vorschlagen. Es verstößt gegen gängige Annahmen (wie das ~/.ssh/authorized_keysArbeiten für Ihre Benutzer) und führt Probleme ein, die Sie bereits in Ihrer Frage angesprochen haben. Wenn Sie vor der Implementierung eklatante Probleme feststellen, ist Ihre Lösung nicht ideal.

Was die Sicherheit betrifft, halte ich es auch für eine SCHRECKLICHE Idee, dass jeder ein Dienstkonto teilt: Im Moment sind es nur Sie, und Sie wissen, dass Sie die Änderungen vornehmen. In 5 Jahren, wenn Sie 5 Administratoren haben, werden Sie wissen wollen, wer was geändert hat, und in den Audit-Protokollen nachsehen wollen, wer welchen Schlüssel wann verwendet hat.
Sie sind besser dran, wenn sich Leute als sich selbst anmelden und sudoetwas Ähnliches verwenden, um ihre Privilegien zu erweitern und das zu tun, was sie tun müssen.


Wenn Sie dennoch SSH-Schlüssel zentralisieren möchten, sollten Sie sich ein Bereitstellungssystem wie Puppet oder radmind ansehen , um die authorized_keysDateien in den entsprechenden ~user/.ssh/Verzeichnissen zu verwalten / zu verteilen (oder eine selbst entwickelte Lösung zu entwickeln, mit der SCPs eingesetzt werden können).
Wenn Sie auf mehrere Server erweitern, sollten Sie sich den LDAP-Patch für öffentliche Schlüssel für ältere Versionen von OpenSSH (oder die AuthorizedKeysCommandDirektive und ein entsprechendes Skript in einer neueren Version von OpenSSH) ansehen, damit Sie Ihre Benutzer zentralisieren und nicht verteilen müssen ihre Schlüssel in Ihrem gesamten Netzwerk, aber das ist wahrscheinlich ziemlich weit weg für Sie.

voretaq7
quelle
1
+1 für das Austauschargument. Kurz gesagt, weil ich einen Moment gebraucht habe, um die Implikation zu erkennen: Es sollte überhaupt kein ~ www-data / .ssh-Verzeichnis geben, also kein Sicherheitsrisiko für den Webbrowser.
Thiton
Danke für die Rückmeldung! Wenn ich dich richtig verstehe. Ich sollte weder über einen SSH-Schlüssel erreichbar rootnoch haben www-dataist das richtig?
Gavin Miller
1
Ein ~www-data/.sshVerzeichnis zu haben ist keine schreckliche Sache (mit entsprechenden Berechtigungen ist es kein wesentliches Risiko), aber wenn Sie es verwenden wollen, ist ~www-data/.sshes wahrscheinlich besser, Ihr Webroot nicht zu haben ~www-data(entweder das Webroot- oder www-datadas Home-Verzeichnis von Move ). Die Unterscheidung der Benutzer ist das größere Argument IMHO - Ich weiß, wenn ich mich anmelde, weiß jsmithich, dass es John Smith ist. Wenn ich www-dataLogin sehe, muss ich mehr graben, um herauszufinden, wer das war.
Voretaq7
Der Grund, warum ich einen SSH-Schlüssel für WWW-Daten benötigte, ist, dass ich Beanstalk (SCM & Deploy Tool) verwende, um die Deployments über SFTP durchzuführen. Sollte ich dann ein separates Konto für Beanstalk einrichten, um das FTP-Verfahren durchzuführen? Was wäre dort die beste Lösung?
Gavin Miller
1
Die Art und Weise ist es auf den meisten Systemen die AuthorizedKeysFilein /etc/ssh/sshd_configStandardwerten %h/.ssh/authorized_keys. Hier %hist ein Platzhalter für das Home-Verzeichnis. Was hält Sie davon ab, es auf /some/folder/ssh_keys_by_user/%h/oder sogar einzustellen /root/ssh_keys/%u. Sie können dem jeweiligen Benutzer sogar Schreibzugriff auf seine einzelne Datei gewähren (und nur seine), um die Datei mit dem Standardspeicherort (mit ln -s /root/ssh_keys_by_user/username /home/username/.ssh/authorized_keys) zu verknüpfen und die oben genannten Annahmen nicht zu verletzen.
Con-F-Use