Aunque existen otras muchas maneras de trasegar archivos con un servidor lo cierto es que nada supera todavía la facilidad de uso y conveniencia del viejo protocolo FTP (File Transfer Protocol). Por ello, en cualquier servidor tendrás que instalar casi con total seguridad un servidor FTP que permita a tus usuarios conectarse y transferir archivos. Incluso aunque no tengas usuarios, para el propio trabajo de administrador del servidor te vendrá bien disponer de un servidor FTP.
El servidor FTP más conocido y (probablemente) más utilizado del mundo es Filezilla Server. El motivo es que, aunque es un tanto espartano y se actualiza menos de lo que nos gustaría a todos sus usuarios, es gratuito y Open Source, funciona bajo Windows y ofrece casi todas las características que cabría esperar de un servidor de FTP profesional, incluyendo la posibilidad de usar protocolos seguros.
Todo desarrollador web tarde o temprano acaba teniendo que montar y gestionar un servidor FTP, y FileZilla es sin duda una opción muy interesante.
No voy a explicar aquí cómo instalarlo o cómo configurar sus diversas opciones. En esta ocasión me voy a centrar en una cuestión muy concreta pero muy importante y muy poco documentada: cómo configurar el servicio para que tengamos mucho más control sobre su seguridad.
Para ello lo que vamos a hacer es cambiar el usuario bajo el que se ejecuta el servicio de FTP de modo que disminuyamos la posible superficie de ataque y consigamos un control más granular sobre los permisos.
Con ello conseguiremos:
- Disminuir los efectos de un posible agujero de seguridad.
- Proteger de manera más selectiva los archivos y carpetas que expongamos a nuestros usuarios a través de FTP.
Nota: En realidad todo lo explicado aquí sirve para otros servidores FTP y de otra índole que tengamos. Solo hay que entender lo que se está haciendo y cómo funcionan para establecer los permisos apropiados, así que puede venirte bien para otros casos también.
Vamos a ver cómo.
Paso a paso: Cómo configurar de manera segura el servicio FTP de FileZilla Server
Lo primero que advertimos cuando instalamos Filezilla Server es que se crea un nuevo servicio de Windows, que se ejecuta todo el tiempo en segundo plano, y que es el encargado de habilitar el protocolo FTP.
Abre la gestión de servicios de Windows:
Y localiza el servicio "Filezilla Server FTP Server":
Como puedes comprobar en la columna "Logon as" o en sus propiedades, el servicio, por defecto, utiliza la cuenta del sistema local:
Esto le facilita mucho la vida a los que lo tienen que instalar, pero es un peligro de seguridad importante. El usuario "Local System" es una cuenta especial del sistema con los máximos privilegios. Es decir, tiene acceso a todo. Dado que el servicio se ejecuta bajo esta cuenta de usuario, si alguien logra comprometer el servidor remotamente debido a algún problema de seguridad no parcheado, tiene el potencial de hacer cualquier cosa en el servidor. Por ello no es conveniente tener servicios que estén abiertos al exterior ejecutándose bajo una cuenta con unos privilegios tan altos.
Vamos a solucionarlo.
Lo primero que vamos a hacer es crear un nuevo usuario que usaremos en exclusiva para ejecutar el servidor FTP. Para ello busca la administración del PC usando el botón derecho sobre el botón de inicio en Windows Server 2012:
O bien el botón derecho sobre "Mi PC" y luego sobre "Administrar" en versiones anteriores de Windows Server:
Esto te llevará a la gestión del sistema y en el árbol de la derecha encontrarás la gestión de usuarios y roles. Vete a la gestión de usuarios y crea uno nuevo. Llámale por ejemplo "FilezillaServer" o algo similar y marca las opciones que se muestran en esta figura:
Para la clave asegúrate de utilizar una larga y segura. No hace falta ni que la anotes porque solo la vas a usar aquí y un poco más adelante, pero luego nunca más será necesaria. Es importante que sea larga y segura para garantizar que no pueda ser adivinada y se pueda ver comprometido el acceso físico al servidor (por Terminal Server no podrá usarse porque el usuario no será parte del grupo de administradores (será un usuario con los mínimos permisos) y por lo tanto no se podrá conectar en remoto).
Yo, para generar claves seguras utilizo el buscador DuckDuckGo al que le puedes pedir algo como "password strong 20" y te la generará de inmediato:
Usa una clave generada así y ponla dos veces en la pantalla de creación de usuario. Acepta y tendrás creado un nuevo usuario para Filezilla.
Ahora vamos a configurar el servicio.
Vete a los servicios del sistema, localiza el de Filezilla como hemos visto antes y para el servicio FTP pulsando sobre el botón de "Stop" del mismo en la gestión de servicios (como se ve en una figura anterior).
Ahora pulsa con el botón derecho sobre el mismo para ver sus propiedades. En la segunda pestaña "Log On" que ya hemos visto antes, observarás que está marcada la opción de usar la cuenta local del sistema. Pulsa sobre la opción de usar otra cuenta (This account) y luego el botón de examinar. En el diálogo que aparece escribe el nombre del usuario que acabamos de crear y acepta. Esto hará que se selecciona el usuario "FilezillaServer" como cuenta a utilizar para ejecutar el servicio. Finalmente escribe la misma clave anterior en los dos campos ("clave" y "confirmar clave", puedes pegarla del portapapeles directamente):
Al darle a aceptar saldrá un mensaje informativo diciendo que se le han tenido que otorgar permisos a esa cuenta para actuar como servicio:
Esto es normal ya que por defecto las cuentas de usuario básicas no tienen esta capacidad, pero por suerte el administrador de servicios ya se encarga de hacerlo por nosotros.
Todavía no arranques el servicio. Si lo intentas te dará un error y no podrás hacerlo, y aunque hubiese funcionado, está tan "capado" que no podría hacer su trabajo de todas formas.
Aún tenemos que configurar unas cuantas cosas más.
En el explorador de archivos vete a la carpeta en la que has instalado FileZilla Server (por regla general "C:\Program Files(x86)\FileZilla Server") y pulsa con el botón derecho sobre ella para mostrar sus propiedades, y vete a la pestaña de "Seguridad". Una vez allí pulsa sobre el botón "Añadir" (o "Add" si tienes el sistema en inglés) y agrega permisos para el usuario FileZillaServer que creamos antes. Marca la casilla de "Control total" y acepta. Deberías ver algo como esto:
Es decir, todas las casillas de "Permitir" marcadas, con control total sobre la carpeta del programa.
Con esto ya podremos arrancar el servicio, pero todavía necesitamos otorgar permisos sobre las carpetas y archivos que queremos servir a través de FTP.
Normalmente expondremos una carpeta concreta (o muy pocas) hacia el exterior, por lo que debería ser un proceso rápido. Por ejemplo, supongamos que la raíz de nuestro servidor FTP está en "C:\FTPRoot" que es un lugar muy habitual. Dentro de esta carpeta estarán todas las carpetas y archivos a los que el servidor FTP tiene acceso para permitir su gestión remota. Lo que debemos hacer es otorgarle permisos de control total al usuario "FileZillaServer" sobre esta carpeta, asegurándonos de que se propagan/heredan a todas las subcarpetas y archivos contenidos en la carpeta "FTPRoot". De este modo el servicio podrá utilizarlas y permitirá su gestión remota.
Nota: Cuando le demos permisos al usuario "FileZillaServer" sobre la carpeta de archivos a exponer hacia el exterior, dependiendo de la cantidad de archivos que haya puede llegar a tardar varios minutos en propagarse por todo el árbol de archivos, así que ten paciencia.
Hay que acordarse de dar permisos a este usuario en todas las carpetas que queramos exponer a través de FTP. Esto puede ser algo tedioso si son muchas y dispersas, pero desde luego no debería ser lo normal. En cualquier caso lo fácil (que es usar un usuario con altos privilegios para el servicio) puede suponer un grave problema de seguridad, por lo que mejor pasar un poco de trabajo
Una ventaja adicional de utilizar este usuario específico para el servicio es que, además de tener una menor probabilidad de que sea explotado a través de un fallo de seguridad, obtenemos un mayor control sobre cómo exponer los archivos hacia el exterior.
Por ejemplo, imaginemos un archivo o una carpeta que están dentro de la carpeta expuesta a través de FTP pero que no queremos que se pueda descargar o que, aunque sí queremos que se pueda descargar no nos interesa que nadie la pueda modificar a través de FTP. En ese caso FileZilla Server no nos servirá de gran ayuda ya que no permite establecer permisos sobre archivos individuales y menos de manera global. Gracias a que ahora tenemos un usuario especializado podemos ir a las propiedades de seguridad del archivo o carpeta que nos interese y cambiar los permisos como sea conveniente. Por ejemplo, le denegamos explícitamente la escritura a ese usuario sobre ese archivo y entonces nadie podrá sobrescribirlo a través de FTP.
Esto supone una gran ventaja y es algo que no podríamos hacer solo con FileZilla Server.
Finalmente, una vez bien configurados los permisos, lo único que nos queda es arrancar el servicio FTP de nuevo pulsando el botón de "Play" en el gestor de servicios del sistema. Filezilla Server estará en marcha con la nueva configuración y tendremos un servidor más seguro.
En una próxima ocasión, si hay interés, explicaré cómo podemos configurarlo para servir los archivos a través de una conexión segura, protegiendo así también las comunicaciones.
¡Espero que te resulte útil!