¿Por qué WordPress necesita mi clave ssh privada para actualizar?

13

Configurar WordPress para actualizar dentro de la aplicación (es decir, WordPress) es ideal para mí debido a su conveniencia. Sin embargo, estoy preocupado por los requisitos. Los campos solicitados que aparecen después de instalar ssh2 para php preguntan no solo mi clave pública, sino también mi clave privada. Creo que, a lo sumo, solo se requeriría la clave pública.

¿WordPress realmente entrega mi clave privada a un servidor para que el servidor pueda cargar el paquete de software correcto en mi servidor? Estoy familiarizado con el funcionamiento de las claves privadas / públicas SSH, por lo que estoy confundido por qué WordPress necesita esto. En todo caso, creo que el mecanismo de actualización ni siquiera necesitaría este protocolo; solo usaría http o ftp para el servidor de paquetes y luego descargar / instalar / activar desde allí.

¿Por qué WordPress necesita mis claves ssh? ¿Hay problemas de seguridad aquí?

Avery Chan
fuente

Respuestas:

11

Esencialmente, WordPress necesita conectarse de nuevo al servidor donde realmente se está ejecutando.

Hay varias formas posibles en que WordPress puede usar para escribir archivos y, por lo tanto, "sobrescribirse" durante una actualización. Desde una perspectiva de seguridad, la parte importante de este proceso es que los archivos nuevos deben tener la misma propiedad que los archivos antiguos.

Entonces, WordPress realiza una prueba primero escribiendo un archivo directamente y verificando quién es el propietario resultante. Si el propietario coincide con los archivos PHP, entonces sabe que puede escribir archivos con la propiedad correcta (esto significa que el proceso es "setuid" para el propietario del archivo).

Si el archivo resultante es propiedad de una identificación de usuario diferente (que es probable si Apache / PHP se ejecuta como un usuario diferente, como el usuario "www" o "apache"), entonces WordPress tiene que usar un método diferente para crear archivos con El dueño correcto.

Un enfoque es simple FTP. Si realiza una conexión FTP de vuelta al servidor en el que está, luego escribe archivos sobre eso, los archivos resultantes serán propiedad de quien inicie sesión a través de FTP. Por lo tanto, solicita al usuario información FTP.

Pero FTP no es muy seguro. Entonces, como ha encontrado, otro método es a través de SSH2. Usando la biblioteca SSH para PHP, puede hacer una conexión SSH de regreso al servidor de la misma manera. Y que por ello tiene una clave privada, porque se trata de utilizar que volver a hacer una conexión saliente a sí mismo. Al hacer esa conexión, puede establecer credenciales y escribir archivos como el usuario que tiene esas credenciales.

Si le preocupa que tenga esas claves, genere un nuevo conjunto de claves y utilícelas exclusivamente para este propósito.

Para responder a su pregunta directa, no, WordPress no "da" las claves en ningún lado. Descarga el paquete de actualización, lo descomprime y luego usa esas claves para hacer una conexión de regreso a su propio servidor (loopback, básicamente), y luego copia los archivos a través de esa conexión. Al hacerlo, las credenciales significan que los archivos obtienen la propiedad correcta y evitan los problemas de seguridad de tener los archivos de WordPress propiedad del proceso principal de Apache / www / php.

Otón
fuente
Gran respuesta. Esto calmó mis preocupaciones. ¿Está documentado en alguna parte?
Avery Chan
Sí, aunque posiblemente con diferentes cantidades de detalles: codex.wordpress.org/Filesystem_API
Otto
cuando dices hacer una conexión "de vuelta a sí mismo". ¿Estás diciendo que PHP es el cliente FTP y te estás conectando al mismo servidor en el que se está ejecutando?
peligroso
Si, exactamente eso.
Otto