WordPress permite que una instalación pueda ser actualizada y que nuevos temas o plugins puedan ser instalados vía web, desde el propio menú de administración.
Este artículo implementa las configuraciones recomendadas por Updating WordPress y Servidor Debian proftpd para instalar un servicio FTP seguro que permita las actualizaciones automáticas de WordPress en un servidor.
Prerrequisitos
- Se parte de un sistema instalado según Cómo instalar wordpress sobre NGINX. Todas las referencias a directorios y archivos y demás datos se basan en los valores utilizados en este ejemplo.
- Se dispone de un nombre de dominio (FQDN) sobre el que se accederá al servicio de transferencia de ficheros. En este ejemplo será
ftp.example.org
. - Se cuenta con un certificado para el dominio. Ya sea auto-firmado como se explica en How to create SSL certificates u obtenidos por una central de autenticación como los provistos por [https://www.startssl.com/ Startcom Ltd.]. En cualquier caso se cuenta con un certificado alojado como
/etc/ssl/certs/ftp.example.org.cert
y una clave privada/etc/ssl/private/ftp.example.org.key
.
Instalación de software
Para implementar el servicio FTP seguro se instala proftpd e xinetd.
# aptitude install proftpd xinetd
Ante la pregunta del sistema acerca de cómo operará el servidor proftpd, se responde que se utilizará la opción
from inetd
.Creación de usuario administrativo
Se debe crear un usuario que será el dueño de los archivos que componen la aplicación pero que no podrá hacer login en el sistema.
Sobre este usuario, que en este ejemplo se denominawp‑adm
se realizarán las descargas de las actualizaciones.
Se crea el usuario con el comando:# adduser --home /var/local/wordpress --no-create-home wp-adm
Al ejecutar el comando anterior, el sistema solicita la clave del usuario y datos descriptivos del uso que se dará a esta cuenta.
Se debe tomar nota del nombre y la password del usuario ya que estos datos serán requeridos cada vez que se soliciten actualizaciones a través del cliente web.Se asocia el usuario al grupo
www‑data
para tener acceso a los directorios de la aplicación.# adduser wp-adm www-data
Y permitimos a los usuarios del grupo
www‑data
escribir sobre los directoriouploads
yupgrade
de WordPress.# chmod -R g+rw /var/local/wordpress/wp-content/uploads/ # chmod -R g+rw /var/local/wordpress/wp-content/upgrade/
Configuración del servicio
Configuración de proftpd.conf
Realizamos los siguientes ajustes en
/etc/proftdp/proftpd.conf
:- Se desactiva IPv6, se especifica el nombre del servidor y se activa el modo inetd de funcionamiento.
# Set off to disable IPv6 support which is annoying on IPv4 only boxes. UseIPv6 off # If set on you can experience a longer connection delay in many cases. IdentLookups off ServerName "ftp.example.org" ServerType inetd DeferWelcome off
- Se restringe el acceso de los usuarios a su propio directorio home
# Use this to jail all users in their homes DefaultRoot ~
- Se asigna el puerto IP por defecto del servicio.
# Port 21 is the standard FTP port. Port 21
- Se ajustan los permisos de manera que tanto el dueño como el grupo al que pertenece tengan permiso de escritura sobre los ficheros subidos mientras que el resto de los usuarios tengan bloqueado cualquier acceso.
# Umask 022 is a good standard umask to prevent new files and dirs # (second parm) from being group and world writable. Umask 007 007 # Normally, we want files to be overwriteable. AllowOverwrite on
- Se activa el logging manteniendo la zona horaria del servidor.
TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log # Logging onto /var/log/lastlog is enabled but set to off by default UseLastlog on # In order to keep log file dates consistent after chroot, use timezone info # from /etc/localtime. If this is not set, and proftpd is configured to # chroot (e.g. DefaultRoot or ), it will use the non-daylight # savings timezone regardless of whether DST is in effect. SetEnv TZ :/etc/localtime
- Se activa la configuración del modo de funcionamiento seguro.
# # This is used for FTPS connections # Include /etc/proftpd/tls.conf
Configuración de tls.conf
Habiendo habilitado la directiva
Include /etc/proftpd/tls.conf
, corresponde configurar el fichero/etc/proftpd/tls.conf
ajustando las siguientes directivas dentro del bloque<IfModule mod_tls.c> ... </IfModule>
:- Se activa el modo seguro, se permite logging y se especifica los niveles de protocolo a soportar.
TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23
- Se especifica el certificado y se ajustan las opciones del cliente.
TLSRSACertificateFile /etc/ssl/certs/ftp.example.org.cert TLSRSACertificateKeyFile /etc/ssl/private/ftp.example.org.key TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired
- Se fuerza el protocolo para opera exclusivamente en modo seguro.
TLSRequired on
- Se permiten las renegociaciones iniciadas por el cliente.
TLSRenegotiate required off
Configuración de xinetd
Se crea un fichero
/etc/xinetd.d/ftp
con el siguiente contenido:service ftp { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/proftpd server_args = -c /etc/proftpd/proftpd.conf }
Validación
Se accede con un cliente que soporte el protocolo (por ejemplo Filezilla usando la URL
ftpes://ftp.example.org
), se autentica con el usuariowp‑adm
y la clave asignada y se intentar subir y descargar algún archivo de los directorioswp‑content/upgrade
ywp‑content/uploads
.En caso de problemas asociados con la lectura del certificado, utilizar el comando que se muestra en proftpd: FTP and SSL/TLS
$ openssl s_client -connect ftp.example.org:21 -starttls ftp
- Se desactiva IPv6, se especifica el nombre del servidor y se activa el modo inetd de funcionamiento.