Warum benötigt WordPress meinen privaten SSH-Schlüssel zum Aktualisieren?

13

Das Konfigurieren von WordPress zur Aktualisierung innerhalb der Anwendung (z. B. WordPress) ist für mich aufgrund seiner Benutzerfreundlichkeit ideal. Trotzdem stören mich die Anforderungen. Die angeforderten Felder, die nach der Installation von ssh2 für PHP angezeigt werden, fragen nicht nur meinen öffentlichen, sondern auch meinen privaten Schlüssel. Ich würde denken, dass höchstens der öffentliche Schlüssel erforderlich wäre.

Gibt WordPress meinen privaten Schlüssel tatsächlich an einen Server weiter, damit der Server das richtige Softwarepaket auf meinen Server hochladen kann? Ich bin mit der Funktionsweise von privaten / öffentlichen SSH-Schlüsseln vertraut, weshalb ich verwirrt bin, warum WordPress dies benötigt. Wenn überhaupt, würde ich denken, dass der Mechanismus zum Aktualisieren dieses Protokoll nicht einmal benötigt; Es würde nur http oder ftp zum Paket-Server verwenden und dann von dort herunterladen / installieren / aktivieren.

Warum braucht WordPress meine SSH-Schlüssel? Gibt es hier Sicherheitsbedenken?

Avery Chan
quelle

Antworten:

11

Grundsätzlich muss WordPress eine Verbindung zu dem Server herstellen, auf dem es ausgeführt wird.

Es gibt verschiedene Möglichkeiten, wie WordPress Dateien schreiben und sich so während eines Upgrades selbst "überschreiben" kann. Aus Sicherheitssicht ist der wichtige Teil dieses Prozesses, dass die neuen Dateien den gleichen Besitz wie die alten Dateien haben müssen.

Daher führt WordPress zuerst einen Test durch, indem eine Datei direkt geschrieben und überprüft wird, wer der resultierende Besitzer ist. Wenn der Eigentümer mit den PHP-Dateien übereinstimmt, weiß er, dass er Dateien mit dem richtigen Eigentümer schreiben kann (dies bedeutet, dass der Prozess "setuid" für den Dateieigentümer ist).

Wenn die resultierende Datei einer anderen Benutzer-ID gehört (was wahrscheinlich ist, wenn Apache / PHP als ein anderer Benutzer ausgeführt wird, wie der "www" - oder "apache" -Benutzer), muss WordPress eine andere Methode verwenden, um Dateien mit zu erstellen der richtige Besitzer.

Ein Ansatz ist einfaches FTP. Wenn es eine FTP-Verbindung zum Server herstellt, auf dem es sich befindet, werden Dateien darüber geschrieben. Die resultierenden Dateien gehören demjenigen, der sich über FTP anmeldet. Daher fordert es den Benutzer zur Eingabe von FTP-Informationen auf.

FTP ist jedoch nicht sehr sicher. Wie Sie gefunden haben, ist eine andere Methode über SSH2. Mit der SSH-Bibliothek für PHP kann auf dieselbe Weise eine SSH-Verbindung zum Server hergestellt werden. Aus diesem Grund benötigt es einen privaten Schlüssel, da dieser verwendet wird, um eine ausgehende Verbindung zu sich selbst herzustellen. Durch Herstellen dieser Verbindung können Anmeldeinformationen festgelegt und Dateien als der Benutzer geschrieben werden, der über diese Anmeldeinformationen verfügt.

Wenn Sie Bedenken haben, dass diese Schlüssel vorhanden sind, erstellen Sie einen neuen Schlüsselsatz und verwenden Sie diese ausschließlich für diesen Zweck.

Um Ihre direkte Frage zu beantworten: Nein, WordPress "gibt" die Schlüssel nirgendwo her. Es lädt das Upgrade-Paket herunter, entpackt es und verwendet diese Schlüssel, um eine Verbindung zu seinem eigenen Server (im Grunde genommen Loopback) herzustellen. Anschließend werden die Dateien über diese Verbindung kopiert. Auf diese Weise bedeuten die Anmeldeinformationen, dass die Dateien den korrekten Besitz erhalten und die Sicherheitsprobleme vermieden werden, wenn die WordPress-Dateien dem Hauptprozess Apache / www / php gehören.

Otto
quelle
Gute Antwort. Dies besänftigte meine Bedenken. Ist das irgendwo dokumentiert?
Avery Chan
Ja, obwohl möglicherweise mit unterschiedlichem Detaillierungsgrad: codex.wordpress.org/Filesystem_API
Otto
Wenn Sie sagen, stellen Sie eine Verbindung "zurück zu sich selbst" her. Wollen Sie damit sagen, dass PHP der FTP-Client ist und eine Verbindung zu demselben Server herstellt, auf dem er ausgeführt wird?
Dangel
Ja genau das
Otto