INSTALACIÓN
CONFIGURACIÓN BÁSICA
Configuraciones GeneralesUSUARIOS VIRTUALES
Configuración para usuarios Locales
Configuración para usuarios Anónimos
Configuración de logs
Configuraciones relacionadas a Transferencias
CONEXIONES SEGURAS UTILIZANDO SSL
ENLACES
INTRODUCCIÓN
Este pequeño documento tiene como objetivo indicar los principales pasos para configurar un servicio ftp en openSUSE utilizando el reconocido servidor VSFTPD(Very Secure FTPD). Aclaro que en la mayoría de los casos las configuraciones son realizadas editando directamente los archivos de configuración, para esto pueden utilizar el editor de texto de su preferencia (Yo utilizo el Vim =)).
INSTALACIÓN
Para instalar el paquete del servidor VSFTPD lo hacemos desde “Yast → Software → Instalar/desinstalar Software” donde buscamos el paquete con nombre “vsftpd”, lo seleccionamos, comprobamos las dependencias y lo instalamos.
Todas los demás paquetes que necesitaremos más adelante posiblemente ya han sido instalados por defecto con el sistema operativo (paquetes pam, openssl, openssl-certs, db-utils, etc.) ya que son paquetes fundamentales para otras aplicaciones básicas, no obstante, podemos verificar su instalación desde Yast.
Cuando hayamos culminado con la instalación probamos levantar el servicio abriendo una consola en la cual nos conectamos como root (gabriel@superserver:~> su -) y ejecutamos el siguiente comando:
Código:
superserver:/ # service vsftpd start
Código:
Starting vsftpd done
CONFIGURACIÓN BÁSICA
El archivo de configuración del servidor VSFTPD se encuentra en el directorio /etc/ y se llama vsftpd.conf, el cual vamos a tener que modificar con cualquier editor de texto que sea de nuestra preferencia.
Las directivas o comandos que se van a especificar en esta sección son las necesarias para montar un servidor ftp básico que permite la conexión de usuarios locales del sistema operativo como así también de usuarios anónimos.
Obs: Antes de comenzar a modificar un archivo de configuración, nunca hay que olvidarse de hacer una copia de seguridad del mismo, así siempre tendremos a mano una versión original para restaurar la configuración por defecto sin perder mucho tiempo .
Abrimos el archivo conectados como root:
Código:
superserver:/ # vi /etc/vsftpd.conf
Configuraciones Generales:
Código:
#!/bin/bash
# Ejemplo del archivo de configuración /etc/vsftpd.conf
# General Settings
#
# Permite el modo escritura.
write_enable=YES
# Activa mensajes de directorio.
dirmessage_enable=YES
# Mensaje de bienvenida
ftpd_banner=Bienvenido al servidor ftp de GK - Powered by openSuSE 10.3
Código:
# Local FTP user Settings # # Permite que usuarios locales puedan conectarse. local_enable=YES # Enjaula a los usuarios locales dentro de su propio directorio personal, # esta opción mejora la seguridad. chroot_local_user=YES # Permite especificar una lista con los usuarios locales a los cuales no # se les enjaulará cuando la opción chroot_local_user = YES. chroot_list_enable=YES # Especifica la ruta en donde se encuentra la lista, en mi caso he creado una # carpeta en el directorio /etc llamada “vsftpd”, en la cual coloqué el archivo # de texto (vsftpd.chroot_list) que contiene la lista. chroot_list_file=/etc/vsftpd/vsftpd.chroot_list # Esta directiva la he dejado comentada, pero puede resultar muy interesante # para los casos en que sea necesario limitar la velocidad de transferencia para # los usuarios locales, por defecto la velocidad de transferencia es ilimitada. #local_max_rate=7200
La configuración que viene más adelante está ideada para que los usuarios que se conectan anónimamente, no puedan subir archivos, sino solamente descargar aquellos compartidos por el administrador del servicio.
Antes de comenzar con la modificación de las directivas de la sección “Anonymus FTP user Settings” del archivo vsftpd.conf, necesitamos crear una carpeta en el sistema de archivos que será utilizada como el directorio raíz para las conexiones anónimas, con la instalación por defecto del servidor vsftpd en openSUSE 10.3, el directorio para usuarios anónimos se encuentra por defecto en /srv/ftp/, este directorio es el HOME del usuario de sistema “ftp” dueño del servicio (Ver Yast → Seguridad y Usuarios → Gestión de Usuarios → Definir Filtro: Usuarios del Sistema → Usuario FTP → Ver Detalles). Previendo la posterior utilización de dicho directorio para albergar a los usuarios virtuales, coloqué una nueva carpeta en dicho directorio llamada anónimo (/srv/ftp/anonimo) :
Código:
superserver: # cd /srv/ftp superserver:/srv/ftp # mkdir anonimo
Código:
superserver:/srv/ftp # chmod 755 anonimo/ superserver:/srv/ftp # chown root:root anonimo/
Continuación de la configuración del archivo vsftpd en la sección “Anonymus FTP user Settings”:
Código:
# Anonymus FTP user Settings # # Permitir conexiones anónimas. anonymous_enable=YES # Directorio raíz para los usuarios anónimos. Carpeta creada en /srv/ftp/ como # se comentó anteriormente. anon_root=anonimo # Solo permite descargar a los usuarios anónimos aquellos archivos que tengan # permisos de lectura. anon_world_readable_only=YES # Para mi caso especifiqué con la siguiente directiva que los usuarios anónimos # no tengan permisos para subir archivos al servidor. anon_upload_enable=NO # Esta directiva permite a los usuarios anónimos a crear carpetas en ciertos # casos. anon_mkdir_write_enable=NO # Directiva que permite establecer el límite de la velocidad máxima de # transferencia de datos para los usuarios anónimos. Fui un poco drástico jeje # (2kb/s) anon_max_rate=2048
Código:
# Log Settings
#
# Activa la generación de registros logs por cada uploads/downloads.
xferlog_enable=YES
# Define cual será el archivo log.
vsftpd_log_file=/var/log/vsftpd.log
# Si esta directiva no se encuentra comentada activa el registro (log) de todas
# las peticiones/respuestas del servidor.
log_ftp_protocol=YES
Código:
# Transfer Settings # # (ftp-data). connect_from_port_20=YES # Tiempo de espera para mantener establecidas conexiones inactivas. idle_session_timeout=600 # Tiempo de espera para mantener establecidas conexiones de datos inactivas. data_connection_timeout=120 # Comando que permite activar/desactivar conexiones pasivas. pasv_enable=YES # PAM setting. Suele estar configurado por defecto. pam_service_name=vsftpd # Configura listen=YES para que vsftpd corra en modo standalone. listen=YES # Máximos clientes simultáneos conectados. Ejemplo: max_clients=5 # Máximas conexiones simultáneas por IP. Ejemplo: max_per_ip=3 # Como tenemos activado el uso de conexiones pasivas especificamos el rango de # puertos que serán utilizados por este método de conexión. pasv_min_port=40000 pasv_max_port=40020
Código:
superserver:/ # service vsftpd start
Código:
Starting vsftpd done
Servicio vsftpd autorizado en el firewall.
Rangos de puertos para conexiones pasivas autorizados en la ventana
de Opciones Avanzadas.
USUARIOS VIRTUALES
Vamos a incorporar un punto más a favor de la seguridad evitando usar los usuarios locales para conectarnos al servidor ftp, para ello vamos a implementar el método de autenticación combinando PAM y bases de datos db (Berkeley Database) que son muy simples de manipular, para ello necesitamos tener instalados los paquetes db-utils y pam, que ya suelen estar instalados por defecto.
Para generar la tabla que contendrá los usuarios virtuales y sus respectivas contraseñas primeramente debemos crear un archivo de texto plano donde cargaremos esos datos, para ello nos dirigimos al directorio /etc/vsftpd que creamos anteriormente, ahí adentro creamos un nuevo archivo llamado por ejemplo “logins.txt”
Código:
superserver:/etc/vsftpd # touch logins.txt
Código:
superserver:/etc/vsftpd # chmod 600 logins.txt
Código:
user_gabriel pass_gabriel user_jorge pass_jorge
Para el script creamos otro nuevo archivo también en el directorio /etc/vsftpd/ llamado “generar_db.sh” y le agregamos el siguiente texto:
Código:
#!/bin/bash # PRIMERAMENTE SE BORRA EL ARCHIVO "vsftpd_login.db" si es que ya existe. rm -f vsftpd_login.db # Genera el archivo "db" que contiene los usuarios virtuales # del servicio vsftpd. db_load -T -t hash -f logins.txt vsftpd_login.db # Se asignan permisos de seguridad solo para root. chmod 600 vsftpd_login.db
Código:
superserver:/etc/vsftpd # chmod 700 generar_db.sh
Código:
superserver:/etc/vsftpd # ./generar_db.sh
El siguiente paso consiste en modificar el archivo de configuración PAM del servicio vsftpd, este archivo lo podemos encontrar en el directorio /etc/pam.d/ y debería llevar el mismo nombre especificado en la directiva “pam_service_name”, en este caso “vsftpd”.
Antes de editar el archivo, hacemos una copia de seguridad del mismo y nos aseguramos que el servicio ftp no esté corriendo, verificado esto, editamos el archivo comentando todas sus líneas anteponiendo el carácter #, y le agregamos las siguientes líneas:
Código:
# Para usuarios virtuales. OBS: En caso de que se utilice un OS con arquitectura # 64 bits (x86_64), la ruta correcta para el archivo “pam_userdb.so” es # “/lib64/security/pam_userdb.so”. auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
Como de ahora en más ya no se podrá acceder con los usuarios locales, se tiene que especificar al servidor vsftpd que un usuario local se encargará de gestionar todos los usuarios virtuales que se conecten, también aprovecharemos para agregar el directorio de donde el servidor vsftpd tendrá que buscar la configuración personal de cada usuario virtual, para lo que nuevamente editamos el archivo de configuración /etc/vsftpd.conf y agregamos las siguientes líneas al final del archivo:
Código:
# Usuarios Virtuales
#
# Activamos el uso de usuarios virtuales.
guest_enable=YES
# Esta directiva permite especificar el usuario que se encargará de manejar los
# usuarios Virtuales, por defecto si no se especifica esta línea en openSUSE es
# “ftp” que como ya sabemos tiene su home en /srv/ftp/, pero puede ser cualquier
# otro usuario si lo deseamos.
guest_username=ftp
# Especificamos el directorio de donde el servicio obtendrá la configuración
# personal de cada usuario virtual que agregamos a la tabla “vsftpd_login.db”.
user_config_dir=/etc/vsftpd/config_por_usuario
Código:
superserver:/etc/vsftpd # mkdir config_por_usuario
Código:
superserver:/etc/vsftpd/config_por_usuario # touch gabriel jorge
Código:
#!/bin/bash # Indicamos cual será el directorio personal del usuario gabriel local_root=/srv/ftp/gabriel # Le damos permisos de escritura para su directorio personal. write_enable=YES # Con virtual_use_local_privs igualado a YES, supone indicar que los usuarios # virtuales tendrán los mismos privilegios que los usuarios locales. virtual_use_local_privs=YES
Código:
superserver: # cd /srv/ftp superserver:/srv/ftp # mkdir gabriel jorge superserver:/srv/ftp # chown -R ftp:ftp gabriel superserver:/srv/ftp # chown -R ftp:ftp jorge superserver:/srv/ftp # chmod -R 744 gabriel superserver:/srv/ftp # chmod -R 744 jorge
CONEXIONES SEGURAS UTILIZANDO SSL
Como el protocolo ftp no encripta la información que fluye entre la aplicación cliente y el servidor, los datos como ser contraseñas, logins, etc. pueden ser obtenidos con mucha facilidad por personas con malas intenciones o simplemente curiosos mediante el escaneado de paquetes que circulan a través de la red. Para evitar estos casos, se puede activar la encriptación de paquetes utilizado ssl para tener un servicio ftp seguro (ftps).
El primer paso consiste en generar un Certificado SSL, para ello necesitamos tener instalados los paquetes openssl y openssl-certs. Nos dirigimos al directorio /etc/ssl/certs y ahí ejecutamos el siguiente comando:
Código:
superserver:/etc/ssl/certs# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem
Para el siguiente paso paramos el service ftp en el caso de que lo tengamos corriendo (service vsftpd stop) y editamos el archivo de configuración vsftpd.conf, nos dirigimos hasta el final donde agregaremos las siguientes líneas
Código:
# Secure FTP
#
# Activamos el soporte SSL
ssl_enable=YES
# No se obliga el establecimiento de conexiones encriptadas mediante SSL para
# usuarios locales.
force_local_logins_ssl=NO
# No se obliga a que las transferencias de datos locales sean encriptados con
# SSL.
force_local_data_ssl=NO
# Se habilitan los soportes para las diversas versiones de SSL
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
# Se especifica la ubicación del Certificado Generado.
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
ENLACES
Sitio Web de Vsftpd: http://vsftpd.beasts.org/
Completa Lista de Directivas para el archivo vsftpd.conf: http://vsftpd.beasts.org/vsftpd_conf.html