18
Configurar un servidor ftp con Vsftpd en openSUSE linux Dejar a punto un servicio ftp con Vsftpd lleva buen tiempo, unos cuantos días de trabajo e investigación, así que bien vale la pena trabajar un poquito más para dejar una buena guía que en el futuro haga de ayuda memoria, ya que las lagunas mentales son mas frecuentes de lo que uno cree y siempre aparecen en los momentos más inoportunos. El manual primeramente ofrece una configuración básica del servicio y luego lo complementa con configuraciones más avanzadas como es el soporte de usuarios virtuales, de conexiones seguras mediante ssl y otras funcionalidades más. Instalación 1. Para instalar el paquete del servidor Vsftpd lo podemos hacer mediante el comando zypper como se muestra a continuación: testsrv:~ # zypper install vsftpd 2. Cuando hayamos culminado con la instalación, configuramos los niveles de ejecución y probamos arrancar y parar el servicio, todo ello ejecutando los siguientes comandos: 3. testsrv:~ # chkconfig --add vsftpd 4. testsrv:~ # service vsftpd start 5. testsrv:~ # service vsftpd stop

Configurar un servidor ftp con Vsftpd en openSUSE linux

Embed Size (px)

DESCRIPTION

Conoce como Configurar un servidor ftp con Vsftpd en openSUSE linux

Citation preview

Page 1: Configurar un servidor ftp con Vsftpd en openSUSE linux

Configurar un servidor ftp con Vsftpd en openSUSE linux

Dejar a punto un servicio ftp con Vsftpd lleva buen tiempo, unos cuantos días de trabajo e investigación, así que bien vale la pena trabajar un poquito más para dejar una buena guía que en el futuro haga de ayuda memoria, ya que las lagunas mentales son mas frecuentes de lo que uno cree y siempre aparecen en los momentos más inoportunos.

El manual primeramente ofrece una configuración básica del servicio y luego lo complementa con configuraciones más avanzadas como es el soporte de usuarios virtuales, de conexiones seguras mediante ssl y otras funcionalidades más.

Instalación

1. Para instalar el paquete del servidor Vsftpd lo podemos hacer mediante el comando zypper como se muestra a continuación:

testsrv:~ # zypper install vsftpd

2. Cuando hayamos culminado con la instalación, configuramos los niveles de ejecución y probamos arrancar y parar el servicio, todo ello ejecutando los siguientes comandos:

3. testsrv:~ # chkconfig --add vsftpd4. testsrv:~ # service vsftpd start5. testsrv:~ # service vsftpd stop

6. Concluido con estos pasos, continuamos con la configuración del servicio en sí.

Configuración Básica

El archivo de configuración del servidor Vsftp 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

Page 2: Configurar un servidor ftp con Vsftpd en openSUSE linux

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 ;).

1. Como primer paso tenemos que abrimos el archivo de configuración Vsftp conectados como root:

testsrv:~ # vi /etc/vsftpd.conf

En los siguientes pasos se citarán las principales directivas que deberán estar definidas (descomentadas) en el archivo de configuración seguidos de sus respectivos parámetros, hay muchas otras directivas que se pueden consultar en ésta dirección, toda línea que lleve al principio el carácter almohadilla (#) es interpretado como comentario.

2. Configuraciones Generales:

Las siguientes directivas permiten activar la capacidad de escritura para subir nuevos archivos y habilitar mensajes de navegación y conexión.

#!/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 bienvenidaftpd_banner=Bienvenido al servidor ftp de GK - Powered by openSUSE

3. Configuración para usuarios Locales:

El siguiente compendio de directivas permiten realizar configuraciones relacionadas a los usuarios del servicio vsftpd.

# Local FTP user Settings## Permite que usuarios locales puedan conectarse.local_enable=YES

Page 3: Configurar un servidor ftp con Vsftpd en openSUSE linux

# 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 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

4. Continuación de la configuración del archivo vsftpd en la sección Anonymus FTP user Settings:

La configuración de las directivas que vienen a continuación definen las condiciones con las que podrán acceder y operar los usuarios anónimos con el servicio vsftpd.

# 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

# En 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

Page 4: Configurar un servidor ftp con Vsftpd en openSUSE linux

# máxima transferencia de datos para los usuarios anónimos.# Fui un poco drástico jeje (2kb/s)anon_max_rate=2048

5. Configuración de logs:

En esta sección del archivo vsftpd se realizan las configuraciones relacionadas a archivos logs.

# 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

6. Configuraciones relacionadas a Transferencias:

Con las siguientes directivas es posible configurar varias opciones del servicio relacionadas a velocidades de transferencias y al comportamiento que seguirá cuando los usuarios intenten conectarse.

# 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.

Page 5: Configurar un servidor ftp con Vsftpd en openSUSE linux

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=40000pasv_max_port=40020

7. Creando directorio para albergar a usuarios Anónimos

En base a la configuración realizada 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, 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:

testsrv:~ # cd /srv/ftptestsrv:/srv/ftp # mkdir anonimo

asignándole el dueño:grupo y los permisos de forma idéntica a la carpeta ftp que se encuentra en /srv, esto lo comento porque cuando coloqué otros permisos a la carpeta anonimo, las conexiones anónimas no funcionaron correctamente.

testsrv:/srv/ftp # chmod 755 anonimo/testsrv:/srv/ftp # chown root:root anonimo/

Con esto ya tenemos lista la carpeta que será la encargada de contener los archivos para los usuarios anónimos.

8. Bueno, hasta este punto ya tenemos configurado un servidor ftp básico que acepta conexiones de usuarios locales que pueden realizar downloads & uploads así como también acepta conexiones de usuarios anónimos que solamente tienen autorización para realizar descargas. Para poner nuevamente en marcha

Page 6: Configurar un servidor ftp con Vsftpd en openSUSE linux

el servicio guardamos y salimos del archivo de configuración y ejecutamos el comando:

testsrv:~ # service vsftpd start

9. No hay que olvidarse de autorizar los puertos correspondientes al servicio vsftpd y del rango de puertos destinados a las conexiones pasivas en el Firewall de openSUSE, en el caso de que el mismo se encuentre activo. Para ello editamos el archivo SuSEfirewall2 del directorio /etc/sysconfig y le asignamos el servicio vsftpd a la directiva FW_CONFIGURATIONS_EXT si tenemos nuestra interfaz de red asignada a la zona externa, quedaría como se muestra a continuación:

10. testsrv:~ # vi /etc/sysconfig/SuSEfirewall2FW_CONFIGURATIONS_EXT="netbios-testsrv samba-testsrv vsftpd"

Luego, en el mismo archivo deberíamos buscar la directiva FW_SERVICES_EXT_TCP a la cual le asignamos los números de puertos del protocolo TCP mencionado:

FW_SERVICES_EXT_TCP="40000:40020"

Guardamos los cambios del archivo y reiniciamos el firewall con lo que el servicio ya quedará disponible:

testsrv:~ # rcSuSEfirewall2 restartStarting Firewall Initialization (phase 2 of 2) SuSEfirewall2: Warning: no default firewall zone defined, assuming 'ext'donetestsrv:~ #

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.

1. 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.

Page 7: Configurar un servidor ftp con Vsftpd en openSUSE linux

testsrv:/etc/vsftpd # touch logins.txt

le establecemos permisos de lectura y escritura solo para el usuario root con el siguiente comando:

testsrv:/etc/vsftpd # chmod 600 logins.txt

y le agregamos un contenido similar a:

user_gabrielpass_gabrieluser_luispass_luis

donde la primera línea corresponde al login del usuario virtual gabriel y la segunda a la contraseña del mismo, ya en la tercera línea se agrega otro nuevo login, en este caso luis y que sigue el mismo procedimiento que las 2 primeras líneas (Arriba login y abajo la contraseña).

2. Una vez que hayamos ingresado todos los usuarios virtuales que deseamos, preparamos un script que ejecutará una serie de comandos para generar la tabla db que es interpretable por el módulo pam. Para el script creamos otro nuevo archivo también en el directorio /etc/vsftpd/ llamado generar_db.sh y le agregamos el siguiente texto:

3. #!/bin/bash4. # Primeramente se borra el archivo "vsftpd_login.db" si es5. # que ya existe.6. rm -f vsftpd_login.db7.8. # Genera el archivo "db" que contiene los usuarios virtuales9. # del servicio vsftpd.10. db_load -T -t hash -f logins.txt vsftpd_login.db11.12. # Se asignan permisos de seguridad solo para root.13. chmod 600 vsftpd_login.db

14. le asignamos el permiso de ejecución al archivo generar_db.sh:

testsrv:/etc/vsftpd # chmod 700 generar_db.sh

15. y luego ejecutamos el script:16. testsrv:/etc/vsftpd # ./generar_db.sh

Con esto creamos el archivo vsftpd_login.db en el directorio /etc/vsftpd/, listo para ser utilizado.

17. 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

Page 8: Configurar un servidor ftp con Vsftpd en openSUSE linux

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:

18. # Para usuarios virtuales. En caso de que se19. # utilice un OS con arquitectura 64 bits (x86_64),20. # la ruta correcta para el archivo "pam_userdb.so"21. # es "/lib64/security/pam_userdb.so".22. auth required /lib/security/pam_userdb.so

db=/etc/vsftpd/vsftpd_login23. account required /lib/security/pam_userdb.so

db=/etc/vsftpd/vsftpd_login

Estas líneas permiten que los usuarios que se conecten al servicio ftp sean validados contra los registros que contiene la tabla vsftpd_login.db que hemos creado.

24. 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:

25. # Usuarios Virtuales26. #27. # Activamos el uso de usuarios virtuales.28. guest_enable=YES29.30. # Esta directiva permite especificar el usuario que se

encargará de31. # manejar los usuarios Virtuales, por defecto si no se

especifica esta32. # línea en openSUSE es "ftp" que como ya sabemos tiene su home33. # en /srv/ftp/, pero puede ser cualquier otro usuario si lo

deseamos.34. guest_username=ftp35.36. # Especificamos el directorio de donde el servicio obtendrá la37. # configuración personal de cada usuario virtual que agregamos38. # a la tabla “vsftpd_login.db”.39. user_config_dir=/etc/vsftpd/config_por_usuario

40. Guardamos los cambios del archivo vsftpd.conf y creamos el directorio indicado en la directiva user_config_dir dentro de la carpeta /etc/vsftpd/:

Page 9: Configurar un servidor ftp con Vsftpd en openSUSE linux

testsrv:/etc/vsftpd # mkdir config_por_usuario

41. En su interior creamos por cada usuario virtual que agregamos a la tabla vsftpd_login.db un archivo de texto plano con el mismo nombre del login del usuario.

testsrv:/etc/vsftpd/config_por_usuario # touch gabriel luis

42. Por ejemplo editamos el archivo gabriel recientemente creado y le agregamos las siguientes líneas:

43. #!/bin/bash44. # Indicamos cual será el directorio personal del usuario

gabriel.45. local_root=/srv/ftp/gabriel46.47. # La directiva "write_enable=YES" es innecesaria con la

configuración48. # de este ejemplo ya que la siguiente directiva

virtual_use_local_privs49. # le asigna a este usuario virtual los mismos privilegios que

se50. # especificaron en el archivo /etc/vsftpd.conf para los

usuarios51. # locales, en el cual ya se encuentra definida esta directiva.52. # write_enable=YES53.54. # Con virtual_use_local_privs igualado a YES, supone indicar

que55. # los usuarios virtuales tendrán los mismos privilegios que

los56. # usuarios locales.57. virtual_use_local_privs=YES

Lo mismo podemos agregar al archivo luis, obviamente indicando otro directorio personal.

58. Ahora solo nos resta crear los directorios personales para ambos usuarios virtuales (gabriel y luis) en el directorio /srv/ftp/, cambiarlos de dueño y asignar los permisos correspondientes:

59. testsrv:~ # cd /srv/ftp60. testsrv:/srv/ftp # mkdir gabriel luis61. testsrv:/srv/ftp # chown -R ftp:ftp gabriel62. testsrv:/srv/ftp # chown -R ftp:ftp luis63. testsrv:/srv/ftp # chmod -R 744 gabriel64. testsrv:/srv/ftp # chown -R 744 luis

65. El siguiente paso es reiniciar el servicio para comprobar su funcionamiento con los usuarios virtuales que hemos agregado, además las conexiones anónimas deberán seguir funcionando, solamente los usuarios locales ya no podrán conectarse al servidor.

Page 10: Configurar un servidor ftp con Vsftpd en openSUSE linux

testsrv:~ # service vsftpd restart

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 mediante el escaneado de paquetes. Para aumentar la seguridad se puede activar la encriptación de paquetes utilizado ssl para tener un servicio ftp menos vulnerable (ftps).

1. 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:

testsrv:/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 preparar el certificado, el comando openssl nos solicitará que ingresemos varios datos como ser país, provincia, ciudad, empresa, nombre, email, etc., esta información luego aparecerá en el certificado que cualquier usuario deberá aceptar para hacer uso del protocolo seguro. Cuando finalice tendremos el certificado concluido con el nombre vsftpd.pem.

2. Para el siguiente paso editamos el archivo de configuración vsftpd.conf, nos dirigimos hasta el final donde agregaremos las siguientes líneas:

3. # Secure FTP4. # 5. # Activamos el soporte SSL6. ssl_enable=YES7.8. # No se obliga el establecimiento de conexiones encriptadas

mediante9. # SSL para suarios locales.10. force_local_logins_ssl=NO11.12. # No se obliga a que las transferencias de datos locales sean13. # encriptados con SSL.14. force_local_data_ssl=NO15.16. # Se habilitan los soportes para las diversas versiones de

SSL.17. ssl_tlsv1=YES18. ssl_sslv2=YES19. ssl_sslv3=YES20.

Page 11: Configurar un servidor ftp con Vsftpd en openSUSE linux

21. # Soluciona el problema de incompatibilidad entre la suite cipher

22. # implementada por FileZilla y la implementada por defecto en vsftpd

23. # (DES-CBC3-SHA). Ref: http://trac.filezilla-project.org/ticket/7873

24. ssl_ciphers=HIGH25.26. # Se especifica la ubicación del Certificado Generado.27. rsa_cert_file=/etc/ssl/certs/vsftpd.pem28. rsa_private_key_file=/etc/ssl/certs/vsftpd.pem

29. Por ultimo reiniciamos nuevamente el servicio vsftpd:

testsrv:~ # service vsftpd restart

Podemos probar establecer conexiones seguras utilizando clientes que soportan esta funcionalidad como ser los clientes FilleZilla, gfTP, etc. Para establecer una conexión segura desde la aplicación cliente Filezilla debemos agregar un sitio en el gestor de sitios con la opción Tipo de Servidor = FTPES (FTP sobre TLS/SSL explícito).

Cambiar directorio raíz de usuarios virtuales

En esta sección voy a anexar una configuración que me habían consultado, que consiste en cambiar el root_local (directorio raíz) original (/srv/ftp) para todos los usuarios virtuales a otro lugar, específicamente a un directorio de un usuario local como por ejemplo /home/gabriel/descargas. Tomando en cuenta la configuración de usuarios virtuales que comenté en el manual, tuve que modificar y agregar unas cositas al archivo vsftpd.conf que muestro a continuación:

1. Primeramente cambie la directiva guest_username para colocarle el usuario local que manejará los usuarios virtuales y en cuyo home estará la carpeta raíz para los mismos, después le comenté con # la línea de la directiva user_config_dir para que ya no busque las configuraciones específicas de cada usuario virtual y por último le agregué dos nuevas líneas, una para especificar el directorio raíz con la directiva local_root y la otra para que le otorgue a los usuarios virtuales los mismos privilegios que tienen los usuarios locales con la directiva virtual_use_local_privs=YES. El archivo vsftpd.conf en la sección de usuarios virtuales me quedó como sigue:

2. # Usuarios Virtuales3. #4. # Activamos el uso de usuarios virtuales.5. guest_enable=YES6.7. # Esta directiva permite especificar el usuario que8. # se encargará de manejar los usuarios Virtuales.9. guest_username=gabriel

Page 12: Configurar un servidor ftp con Vsftpd en openSUSE linux

10.11. # Especificamos el directorio de donde el servicio obtendrá12. # la configuración personal de cada usuario virtual que13. # agregamos a la tabla "vsftpd_login.db". ESTA LINEA14. # LA COMENTE PARA QUE NO SEA INTERPRETADA.15. #user_config_dir=/etc/vsftpd/config_por_usuario16.17. # Directorio raíz para usuarios registrados en vsftpd_login.db18. # a partir del home de tu usuario local, en mi caso la carpeta19. # estará en "/home/gabriel/descargas".20. local_root=descargas21.22. # Esta directiva ya es conocida y supone indicar que los

usuarios23. # virtuales tendrán los mismos privilegios que los usuarios

locales.24. virtual_use_local_privs=YES

Con eso el archivo vsftpd.conf ya tiene todo lo que necesita.

25. Solo resta verificar que exista el directorio descargas, en mi caso lo tuve que crear sin necesidad de asignarle ningún permiso (por defecto 755 está ok) ni cambiarle de dueño:

gabriel@testsrv:~> mkdir descargas

26. Por último hay que reiniciar el servicio y la nueva configuración debería funcionar sin problemas.

testsrv:~ # service vsftpd restart

También se puede redirigir el directorio raíz para las conexiones anónimo al mismo directorio en donde los usuarios locales o virtuales suben sus archivos modificando la directiva anon_root:anon_root=/home/gabriel/descargas

Así los usuarios anónimos podrán descargar los archivos que subieron los demás.

Usuarios virtuales en MySQL

Me puse a investigar como hacer para que los usuarios virtuales y sus contraseñas sean almacenados en una base de datos MySQL, en vez de ser almacenados en una base de datos del tipo Berkeley como se detalla anteriormente. En esta sección simplemente se detallará la forma en que se deberá almacenar los datos de los usuarios virtuales en la base de datos MySQL y como deberá estar definido el método de autenticación PAM para el servicio vsftpd.

Page 13: Configurar un servidor ftp con Vsftpd en openSUSE linux

Este post no abarcará la instalación y configuración de la base de datos MySQL y sus respectivas herramientas de administración (como phpMyAdmin, etc.).Una vez que hayamos configurado el servicio vsftpd con la implementación de usuarios virtuales almacenados en la base de datos Berkeley, no será demasiado trabajoso modificar el esquema para que los usuarios virtuales sean almacenados en una base de datos MySQL.

1. El primero de los pasos es crear una nueva base de datos en MySQL, yo lo hecho ejecutando la siguiente sentencia SQL desde la aplicación phpMyAdmin:

2. CREATE DATABASE vsftpd DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;

3. El siguiente paso consiste en agregar un nuevo usuario llamado vsftpd, a este usuario se le asignan todos los privilegios de la base de datos recientemente agregada:

4. CREATE USER 'vsftpd'@'localhost' IDENTIFIED BY 'vsftpd';5. GRANT USAGE ON *.* TO 'vsftpd'@'localhost' IDENTIFIED BY

'vsftpd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

6. GRANT ALL PRIVILEGES ON vsftpd.* TO vsftpd@localhost WITH GRANT OPTION;

7. Luego hay que crear una tabla en la base de datos vsftpd en la cual se van a registrar los usuarios virtuales con sus respectivas contraseñas, la sentencia SQL para este paso es la siguiente:

8. CREATE TABLE IF NOT EXISTS `usuarios` (9. `numero` int(11) NOT NULL AUTO_INCREMENT,10. `usuario` varchar(50) NOT NULL,11. `password` varchar(50) NOT NULL,12. PRIMARY KEY (`numero`),13. UNIQUE KEY `usuario` (`usuario`)14. ) ENGINE=MyISAM AUTO_INCREMENT=1;

15. Para agregar un nuevo usuario virtual a la tabla debemos ejecutar una sentencia SQL similar a la que sigue:

16. INSERT INTO usuarios (usuario, password) VALUES('login_usuario', PASSWORD('contraseña_en_texto_plano'));

Donde en reemplazo a la palabra login_usuario irá el nombre del usuario virtual y en reemplazo de la palabra contraseña_en_texto_plano la contraseña de ese usuario virtual, la función PASSWORD de MySQL convertirá la contraseña de texto plano a un código hash que ocultará la contraseña original en la tabla.

17. Cumplidos todos los pasos anteriores ya podemos pasar a configurar el método de autenticación PAM para el servicio vsftpd, para ello nos dirigimos al directorio /etc/pam.d, creamos una copia de seguridad del archivo vsftpd y luego lo editamos, ya en el archivo comentamos todas las lineas activas y al final del archivo agregamos las siguientes lineas:

Page 14: Configurar un servidor ftp con Vsftpd en openSUSE linux

18. auth required pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2

19. account required pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2

20. Con estas configuración la implementación debería quedar funcionando, ni siquiera es necesario reiniciar el servicio vsftpd, sin embargo, en mi caso tuve que instalar un paquete al sistema operativo para obtener la librería pam_mysql.so, ya que sin ella el servicio PAM no tiene la interfaz necesaria para relacionarse con la base de datos MySQL, para la distro openSUSE, el módulo PAM para MySQL se puede instalar mediante el método 1-Click Install, podemos buscar el paquete en el sitio de openSUSE.