Dlaczego WordPress potrzebuje mojego prywatnego klucza ssh do aktualizacji?

13

Konfiguracja WordPress do aktualizacji w aplikacji (tj. WordPress) jest dla mnie idealna ze względu na wygodę. Niemniej jednak niepokoją mnie wymagania. Wymagane pola, które pojawiają się po zainstalowaniu ssh2 dla php, pytają nie tylko o mój klucz publiczny, ale także o mój klucz prywatny. Sądzę, że wymagany byłby co najwyżej tylko klucz publiczny.

Czy WordPress faktycznie przekazuje mój klucz prywatny serwerowi, aby serwer mógł załadować odpowiedni pakiet oprogramowania na mój serwer? Wiem, jak działają klucze prywatne / publiczne SSH i dlatego jestem zdezorientowany, dlaczego WordPress tego potrzebuje. Jeśli cokolwiek, sądzę, że mechanizm aktualizacji nie potrzebowałby nawet tego protokołu; po prostu użyje http lub ftp do serwera pakietów, a następnie pobierze / zainstaluje / aktywuje z tego miejsca.

Dlaczego WordPress potrzebuje moich kluczy ssh? Czy istnieją tutaj obawy dotyczące bezpieczeństwa?

Avery Chan
źródło

Odpowiedzi:

11

Zasadniczo WordPress musi ponownie połączyć się z serwerem, na którym faktycznie działa.

Istnieje kilka możliwych sposobów, za pomocą których WordPress może zapisywać pliki, a tym samym „nadpisywać” się podczas aktualizacji. Z punktu widzenia bezpieczeństwa ważną częścią tego procesu jest to, że nowe pliki muszą mieć takie same prawa własności jak stare pliki.

Tak więc WordPress najpierw wykonuje test, pisząc plik bezpośrednio i sprawdzając, kto jest właścicielem wynikowym. Jeśli właściciel pasuje do plików PHP, to wie, że może zapisywać pliki z poprawnym prawem własności (oznacza to, że proces jest „setuid” dla właściciela pliku).

Jeśli plik wynikowy jest własnością innego identyfikatora użytkownika (co jest prawdopodobne, jeśli Apache / PHP działa jako inny użytkownik, np. Użytkownik „www” lub „apache”), WordPress musi użyć innej metody do tworzenia plików za pomocą właściwy właściciel.

Jednym z podejść jest prosty FTP. Jeśli nawiąże połączenie FTP z serwerem, na którym jest włączony, a następnie zapisze pliki, wynikowe pliki będą własnością każdego, kto zaloguje się jako FTP. Pyta więc użytkownika o informacje FTP.

Ale FTP nie jest zbyt bezpieczny. Jak już odkryłeś, inną metodą jest SSH2. Korzystając z biblioteki SSH dla PHP, może w ten sam sposób nawiązać połączenie SSH z serwerem. I że dlatego potrzebuje klucza prywatnego, ponieważ jest przy użyciu tego, aby połączenie wychodzące z powrotem do siebie. Nawiązując to połączenie, można ustawić poświadczenia i zapisywać pliki jako użytkownik, który ma te poświadczenia.

Jeśli martwisz się, że posiadasz te klucze, wygeneruj nowy zestaw kluczy i użyj ich wyłącznie do tego celu.

Aby odpowiedzieć na twoje bezpośrednie pytanie, nie, WordPress nigdzie nie „daje” kluczy. Pobiera pakiet aktualizacji, rozpakowuje go, a następnie używa tych kluczy, aby nawiązać połączenie z powrotem z własnym serwerem (w zasadzie sprzężenie zwrotne), a następnie kopiuje pliki przez to połączenie. W ten sposób poświadczenia oznaczają, że pliki mają poprawną własność i pozwalają uniknąć problemów związanych z bezpieczeństwem posiadania plików WordPress przez główny proces Apache / www / php.

Otto
źródło
Świetna odpowiedź. To rozwiało moje obawy. Czy jest to gdziekolwiek udokumentowane?
Avery Chan,
Tak, choć możliwe, że z różną ilością szczegółów: codex.wordpress.org/Filesystem_API
Otto
kiedy mówisz, wykonaj połączenie „z powrotem do siebie”. Czy mówisz, że PHP jest klientem FTP i łączy się z tym samym serwerem, na którym działa?
dangel
Tak, dokładnie to.
Otto,