Servidor FTP vsftpd

_images/ftp.png

¿Qué es un servidor FTP?

FTP es un protocolo de red especialmente diseñado para la transferencia de archivos. Es una buena opción para tener tus archivos siempre accesibles, aunque se debería evitar con información sensible porque la transferencia de datos se produce en texto plano, es decir, es fácilmente accesible por cualquier atacante. En este punto hay que aclarar que hay aplicaciones que sí permiten el cifrado de datos, pero aún así es mejor no usarlo con datos personales.

Existen multitud de aplicaciones servidor para el protocolo FTP disponibles en GNU/Linux, pero para esta entrada voy a hacer uso de vsftpd, una opción popular, ligera y que soporta la transferencia segura de datos. Como cliente FTP recomiendo software libre Filezilla.

_images/filezilla1.png

Instalación vsftpd

sudo apt-get install vsftpd

Una vez instalado se creará el archivo /etc/vsftpd.conf desde el que configuraremos todo, hay que editarlo como root.

cd /etc/

Por si la fastidiamos en cualquier punto, o quieres tenerlo como referencia, haz una copia de seguridad del archivo de configuración original:

cp vsftpd.conf /home/pi/vsftpd.conf.old

Ahora editamos el fichero:

sudo nano /etc/vsftpd.conf

A continuación las variables que me parecen más interesantes para configurar. Si quieres una lista completa o más información puedes leer la entrada del manual correspondiente al archivo:

man 5 vsftpd.conf

Antes de editar el archivo, hay que tener en cuenta varias cosas:

  1. La configuración original incluye ya muchas de las variables de las que voy a hablar. Si una variable está presente varias veces en el archivo, es posible que el programa falle o simplemente tome una de las dos (probablemente la última que aparezca), es decir, que se conseguirá un funcionamiento errático. Para evitar esto hay que buscar cualquier variable nueva por si ya está presente antes de añadirla.
  2. La sintaxis del archivo es muy sencilla. Las líneas que comienzan por # son ignoradas (se denominan comentarios y son usados para aclarar ciertos puntos). El resto de líneas se corresponden cada una a una variable diferente y se asignan de la siguiente forma: variable=valor. Los valores válidos varían de una a otra, pero muchas son tiempo (generalmente en segundos), otras son cadenas de texto (rutas a archivos, nombres de usuario,…) y la mayoría simplemente admiten ser activadas (YES) o desactivadas (NO).

Configurar el tiempo de desconexión

Cuando una conexión no es utilizada durante un tiempo, el servidor ftp puede anularla requiriendo al usuario en cuestión volver a conectarse la siguiente vez. Esto se hace por varios motivos:

  1. Recursos: si el servidor tiene muchas peticiones un usuario conectado que no está realmente haciendo ninguna tarea consume unos recursos que podrían ser muy valiosos para seguir sirviendo a otros usuarios.
  2. Seguridad: si el usuario ha abandonado la máquina desde la que se conecta a tu servidor es posible que otra persona se aprovechase del momento para acceder con esa cuenta sin ni siquiera saber la contraseña.

Hay varias formas de desconexión según el tipo de actividad:

  • Acabar con una conexión de datos inactiva: para cerrar una conexión de datos (un usuario subiendo/bajando un archivo) que lleva un tiempo sin avanzar se utiliza la variable data_connection_timeout a la que habrá que asignar el tiempo, en segundos, de inactividad tras la que se cerrará la conexión.
  • Acabar con una sesión en reposo: tiempo desde que el cliente mostró actividad por última vez para que se cierre su conexión. La variable, en segundos, es idle_session_timeout

Hay que tener en cuenta las necesidades de los usuarios al asignar estos valores, ya que puede ser un engorro para ellos que cada 30s-1min de inactividad tengan que reconectarse.

Configurar el acceso anónimo

  • Acceso anónimo: Los servidores ftp puedes ser accesibles de dos formas, anónimamente o con cuentas de usuario. Si se configura para que se pueda entrar de manera anónima, cualquiera podrá acceder al servidor, mientras que al configurarse cuentas de usuario solo aquel con el nombre y la contraseña podrá entrar. Si se quiere activar el acceso anónimo busca la variable anonymous_enabley asígnale el valor YES (o NO si prefieres desactivarlo). Aunque esté activo, el acceso anónimo puede ser restringido en mayor o menor medida.
  • Permitir la subida de archivos a los usuarios anónimos: En el punto anterior decidiste si deseabas acceso anónimo o no a tu servidor. Aún si lo activaste, puede ser una buena idea no permitir a estos usuarios anónimos subir nada, es decir, darles únicamente permisos de lectura. Para ello existe la variable anon_upload_enabled
  • A parte de subir archivos, también puedes restringir a los usuarios anónimos crear carpetas. La variable es: anon_mkdir_write_enable
  • Cambiar el propietario de los archivos subidos en conexiones anónimas: Para que el servidor cambie automáticamente quién será el nuevo propietario de los archivos subidos por usuarios anónimos hay activar (YES) la variable chown_uploads y luego asignar el nombre de usuario elegido a la variable chown_username
  • Asignar el directorio raíz para los accesos anónimos: ten en cuenta que no solo será la carpeta que se seleccionará por defecto para las conexiones anónimas sino que podrá acceder a ningún directorio superior anon_root
  • Usuario que gestiona las conexiones anónimas: este es el usuario del sistema que será el propietario de los archivos subidos por usuarios anónimos. Por defecto es ftp aunque se puede cambiar con ftp_username

Configurar usuarios y permisos

  • Permitir al resto de usuarios subir archivos: Aquí eliges si tu servidor será únicamente de lectura (solo estarán disponibles en él los archivos que tú, el administrado, establezca desde la máquina servidor) o si cualquier usuario cliente podrá subir archivos (luego se puede restringir esto). La variable es write_enable
  • Puedes restringir a determinados usuarios locales acceder al servidor FTP (por ejemplo, aquellos que sepas o que es probable que tengan contraseñas débiles y no vayan a utilizar el servidor o, como el usuario root, que tengan demasiados permisos y no es recomendable acceder con sus cuentas) añadiendo su nombre al archivo /etc/ftpusers. Entre los que tienen acceso restringido por defecto se incluye el usuario administrador (root).

Aplicar cambios

Para aplicar cambios es necesario reiniciar el servidor:

sudo service vsftpd restart

Os dejo un ejemplo de mi fichero de configuración /etc/vsftpd.conf tal como lo tengo, es totalmente funcional:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
connect_from_port_20=YES
ftpd_banner=Bienvenido a mi Servidor FTP
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem