PDA

Ver la Versión Completa : Manual para configurar un Servidor FTP con Vsftpd



gabrielkfr
26-mar-2008, 07:35
He preparado un manual para configurar un servidor ftp con vsfptd que quería compartir con ustedes.

Índice de contenido

INTRODUCCIÓN
INSTALACIÓN
CONFIGURACIÓN BÁSICA
Configuraciones Generales
Configuración para usuarios Locales
Configuración para usuarios Anónimos
Configuración de logs
Configuraciones relacionadas a TransferenciasUSUARIOS VIRTUALES
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:

superserver:/ # service vsftpd startsi el servicio se levantó correctamente saldrá el siguiente mensaje:

Starting vsftpd done Paramos nuevamente el servicio con el comando service vsftpd stop, accedemos nuevamente al Yast y nos dirigimos a “Sistema → Editores de niveles de ejecución” donde verificamos que en modo experto estén marcadas las opciones 3 y 5 de los niveles de ejecución para el servicio vsftpd, lo que permite que el servicio se inicie automáticamente cada vez que se encienda el equipo. Concluido con estos pasos, continuamos con la configuración del servicio en sí.


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:

superserver:/ # vi /etc/vsftpd.conf A continuación 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 http://vsftpd.beasts.org/vsftpd_conf.html, toda línea que lleve al principio el carácter almohadilla (#) será interpretado como un simple comentario.

Configuraciones Generales:

#!/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.3Configuración para usuarios Locales:

# 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=7200Configuración para usuarios Anónimos:
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) :

superserver: # cd /srv/ftp
superserver:/srv/ftp # mkdir anonimoasigná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.

superserver:/srv/ftp # chmod 755 anonimo/
superserver:/srv/ftp # chown root:root anonimo/Esta carpeta (/srv/ftp/anónimo) será la que contendrá los archivos compartidos para los usuarios conectados como anónimos.

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

# 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=2048Configuración de 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=YESConfiguraciones relacionadas a Transferencias:

# 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 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 el servicio guardamos y salimos del archivo de configuración y ejecutamos el comando:

superserver:/ # service vsftpd starty si todo salió según lo planeado deberá aparecer una línea que indique que el servicio se inició correctamente:

Starting vsftpd done 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.

http://i27.tinypic.com/2iqoopk.jpg
Servicio vsftpd autorizado en el firewall.

http://i25.tinypic.com/2hyx5rt.jpg
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”

superserver:/etc/vsftpd # touch logins.txtle establecemos permisos de lectura y escritura solo para el usuario root con el comando:

superserver:/etc/vsftpd # chmod 600 logins.txty le agregamos un contenido similar a:

user_gabriel
pass_gabriel
user_jorge
pass_jorgedonde 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 jorge y que sigue el mismo procedimiento que las 2 primeras líneas (Arriba login y abajo la contraseña). 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:


#!/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.dble asignamos el permiso de ejecución al archivo “generar_db.sh”:

superserver:/etc/vsftpd # chmod 700 generar_db.shy luego ejecutamos el script:

superserver:/etc/vsftpd # ./generar_db.shCon esto creamos el archivo “vsftpd_login.db” en el directorio /etc/vsftpd/, listo para ser utilizado.

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:


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

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:


# 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 Guardamos los cambios del archivo vsftpd.conf y creamos el directorio indicado en la directiva “user_config_dir” dentro de la carpeta /etc/vsftpd/:

superserver:/etc/vsftpd # mkdir config_por_usuario 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.

superserver:/etc/vsftpd/config_por_usuario # touch gabriel jorge Por ejemplo editamos el archivo “gabriel” recientemente creado y le agregamos las siguientes líneas:


#!/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 Lo mismo podemos agregar al archivo “jorge”, obviamente indicando otro directorio personal. Ahora solo nos resta crear los directorios personales para ambos usuarios virtuales (gabriel y jorge) en el directorio /srv/ftp/, cambiarlos de dueño y asignar los permisos correspondientes:


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 El siguiente paso es activar nuevamente el servicio (service vsftpd start) 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.


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:


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

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


# 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 Por ultimo iniciamos nuevamente el servicio vsftpd (service vsftpd start) y probamos establecer conexiones seguras utilizando clientes que soportan esta funcionalidad como ser los clientes FilleZilla, gfTP, etc.


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

En mi blog que aún esta en pañales pero siempre habrá un manual mas actualizado, puedes echarle un vistazo: Servidor FTP con Vsftpd (http://www.tormentadebits.com/2012/02/configurar-ftp-vsftpd-opensuse-linux.html)

kilops
26-mar-2008, 11:05
Execelnte. :aplausos:

darkskimmer
26-mar-2008, 21:11
Genial! Muchas gracias! ;-)

head777
26-mar-2008, 21:46
Sin duda uno de los mejores que he visto, gracias por tremendo aporte.

larva_pro
27-mar-2008, 02:36
exelente manual gracias. pero una duda , como indicas un direcotorio en particular para el Vsftpd.. ejemplo supongamos que solo quiero que se mire el contenido de /home/larva/Descargas

salu2

gabrielkfr
28-mar-2008, 04:30
Antes que nada, gracias por sus mensajes, es una pequeña retribución a este foro que me enseñó mucho

como indicas un direcotorio en particular para el Vsftpd.. ejemplo supongamos que solo quiero que se mire el contenido de /home/larva/DescargasA mi parecer la mejor forma para realizar esto es con usuarios virtuales, y en ves de que el usuario local “ftp”(con home en /srv/ftp/) sea el encargado de manejar las conexiones virtuales o invitadas(guest), le asignamos otro usuario (en tu caso “larva” cuyo home es /home/larvar) y a partir de ahí le indicamos cual será el directorio raíz común para todos los usuarios con cuentas virtuales. 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:

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:


# 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.
guest_username=gabriel

# Especificamos el directorio de donde el servicio obtendrá la configuración
# personal de cada usuario virtual que agregamos a la tabla “vsftpd_login.db”.
# ESTA LINEA LA COMENTE PARA QUE NO SEA INTERPRETADA.
#user_config_dir=/etc/vsftpd/config_por_usuario

# Directorio raíz para usuarios registrados en vsftpd_login.db a partir del home de tu
# usuario local, en mi caso la carpeta estará en “/home/gabriel/descargas”
local_root=descargas

# Esta directiva ya es conocida y supone indicar que los usuarios virtuales tendrán los
# mismos privilegios que los usuarios locales.
virtual_use_local_privs=YES


Con eso el archivo vsftpd.conf ya tiene todo lo que necesita, 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@superserver:~> mkdir descargas

Por último reinicié el servicio y la configuración funcionó sin problemas.

También puedes redirigir el directorio raíz para las conexiones anónimo al mismo directorio 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.

Saludos.

larva_pro
07-abr-2008, 09:52
Muchas gracias amigo todo esta muy claro se agradece mucho, yo ya havia tenido antes Vsftp en Suse 10.2 pero no recordava lo de el directorio, no uso cuenta de usuarios ya que es un servidor de Cod2 y el ftp lo uso para los Mod's, asi que no necesitan cuenta.

gracias se agradece mucho.

gabrielkfr
08-abr-2008, 04:57
No hay problema amigo, es un placer poder ayudar en algo :dedosarri.

Saludos.

OZKAR
04-oct-2008, 06:34
HOLA HELLO MASTEER, DEJAME FELECITARTE EXCELENTE TUTORIAL...QUISIERA HACERTE UNA PREGUNTA ES Q YO QUIERO HACERLO PERO Q LOS USUARIOS SE AUTENTIQUEN EN UNA BASE DE DATOS MYSQL, Q DEBO DE INSTALAR PARA PODERLO HACER... Y LA OTRA PREGUNTA ESTOY TRBAJANDO CON LINUX SUSE 10 DONDE ENCUENTRO LOS PAQUETES ADICIONALES Q NUMBRASTE HAY COMO SON LOS db-utils y pam. MUCHAS GRACIAS POR TU APOYO...

maubalder
14-oct-2008, 23:16
Excelente tutorial ! :d ojotes: edosarri

larva_pro
17-oct-2008, 01:05
hola tengo una duda acerca de los usuarios virtules.

al poner los usuarios virtules la conexion con usuarios locales se desabilita estoy en lo correcto??

y si es asi como puedo hacerle para que ambas esten funcioanado??

gabrielkfr
29-oct-2008, 13:23
HOLA HELLO MASTEER, DEJAME FELECITARTE EXCELENTE TUTORIAL...QUISIERA HACERTE UNA PREGUNTA ES Q YO QUIERO HACERLO PERO Q LOS USUARIOS SE AUTENTIQUEN EN UNA BASE DE DATOS MYSQL, Q DEBO DE INSTALAR PARA PODERLO HACER... Y LA OTRA PREGUNTA ESTOY TRBAJANDO CON LINUX SUSE 10 DONDE ENCUENTRO LOS PAQUETES ADICIONALES Q NUMBRASTE HAY COMO SON LOS db-utils y pam. MUCHAS GRACIAS POR TU APOYO...
Hola, quería dejar un enlace con respecto a este tema que explica cómo autenticarse contra una base de datos mysql, la verdad que no lo pude probar pero parece muy sencillo, con la configuración de usuarios virtuales que he propuesto en mi manual solo sería necesario crear una base de datos en mysql y modificar la cadena de conexión en el archivo /etc/pam.d/vsftpd, el enlace es el siguiente: http://www.niraj.info/vsftpd-mysql


hola tengo una duda acerca de los usuarios virtules.
al poner los usuarios virtules la conexion con usuarios locales se desabilita estoy en lo correcto?? y si es asi como puedo hacerle para que ambas esten funcioanado??
Según el manpage on-line de vsftpd.conf, si la directiva guest_enable=YES entonces todos los usuarios no-anónimos que traten de loguearse al servicio serán identificados como invitados (espero haberlo traducido bien jeje), cito el texto original en inglés para dejar todo más claro:
guest_enable
If enabled, all non-anonymous logins are classed as "guest" logins. A guest login is remapped to the user specified in the guest_username setting.

Por lo visto no permite que un usuario local pueda conectarse de la forma tradicional, quizás con la configuración de usuarios virtuales deberías probar (digo) de definir en los archivos de configuración por cada usuario (ubicados en la ruta especificada con la directiva user_config_dir) la ruta a su respectivo home, y que los demás usuarios que no tengan un archivo de configuración en el directorio user_config_dir se rijan por las reglas de configuración globales, no lo he probado pero podría funcionar, es una idea más que nada.

Saludos desde Py.

larva_pro
30-oct-2008, 23:10
Hola, quería dejar un enlace con respecto a este tema que explica cómo autenticarse contra una base de datos mysql, la verdad que no lo pude probar pero parece muy sencillo, con la configuración de usuarios virtuales que he propuesto en mi manual solo sería necesario crear una base de datos en mysql y modificar la cadena de conexión en el archivo /etc/pam.d/vsftpd, el enlace es el siguiente: http://www.niraj.info/vsftpd-mysql


Según el manpage on-line de vsftpd.conf, si la directiva guest_enable=YES entonces todos los usuarios no-anónimos que traten de loguearse al servicio serán identificados como invitados (espero haberlo traducido bien jeje), cito el texto original en inglés para dejar todo más claro:
guest_enable
If enabled, all non-anonymous logins are classed as "guest" logins. A guest login is remapped to the user specified in the guest_username setting.

Por lo visto no permite que un usuario local pueda conectarse de la forma tradicional, quizás con la configuración de usuarios virtuales deberías probar (digo) de definir en los archivos de configuración por cada usuario (ubicados en la ruta especificada con la directiva user_config_dir) la ruta a su respectivo home, y que los demás usuarios que no tengan un archivo de configuración en el directorio user_config_dir se rijan por las reglas de configuración globales, no lo he probado pero podría funcionar, es una idea más que nada.

Saludos desde Py.

Solucione el problema agregando el usuario a la lista de usuarios virtuales. con la diferencia de que a ese usuario no le cree un user_confg y deje que trabajar con el vsftpd.conf original y en ese mismo config le di privilegios de usuario local con virtual_use_local_privs=YES y en la linea para enjaular usuario le puse que no. y puse una lista de usuarios a los cuales SI enjaularia en sus directorio.

todo salio perfector gracias. XD

wilfox
15-jul-2009, 11:06
Excelente aporte muchas gracias

mirasu
12-sep-2009, 22:21
Hola!

No consigo que funcionen los usuarios virtuales.
tengo opensuse 11.1 x64 ( he echo la modificacion de las lib64)

el problema empieza cuando pongo los usuarios virtuales, apartir de ahi no puedo entrar en el ftp.

el problema creo que esta en la db. ya que ponga lo que ponga en el txt siempre ocupa 12kb.

alquien me puede pasar un archivo de db con un uruario para probar?
o como puedo saber si esta bien el archivo?

Edito: solucionado :-D el problema era que no entendi bien lo de user_pepe y pass_pepe, pense que user_ y pass_ eran claves para la base de daros :-) asi que no los ponia en el ftp al registrarme
Gracias por el manual

Gracias!

mirasu
14-sep-2009, 20:45
Hola

siento contradecirme, pero la verdad es que me e dado cuenta que cuando funciono era con una mezcla de configuraciones en el vsftpd.config aparte de mi claro error :-D

la verdad es que algo e echo mal seguro, por eso quiero explicar lo que e echo, e cogido todo el codigo para poner en el vsftpd.config y lo e puesto por el mismo orden. solo no e puesto el ultimo correspondiente a la seguridad, paraevitr problemas. y claro segido las instrucciones de creacion de ficheros y directorios.

el problema es que solo puedo entrar sin logearme o sea ftp:127.0.0.1.

de la manera que me funciona es con el vsftpd.config por defecto mas el modulo virtuales.


# Example config file /etc/vsftpd.conf
dirmessage_enable=YES
nopriv_user=ftpsecure
anonymous_enable=NO
anon_world_readable_only=YES
syslog_enable=NO
connect_from_port_20=YES
listen=YES
ssl_enable=NO
# Limit passive ports to this range to assis firewalling
pasv_min_port=30000
pasv_max_port=30100
anon_mkdir_write_enable=NO
anon_root=/srv/ftp
anon_upload_enable=NO
chroot_local_user=NO
ftpd_banner=Hola
idle_session_timeout=900
local_enable=YES
log_ftp_protocol=NO
max_clients=10
max_per_ip=3
pasv_enable=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=YES
write_enable=YES

# Usuarios Virtuales
#

guest_enable=YES
guest_username=ftp
user_config_dir=/etc/vsftpd/config_por_usuario


pero no entiendo donde esta esa diferencia que lo hace funcionar y al del manual no. Creo que algo no lo e entendido. ademas me gusta mas tu codigo :-D porque no se ingles y lo entiendo muy bien, esta muy claro!

me gustaria que lo pudierais explicar! gracias!

gabrielkfr
18-sep-2009, 03:17
Hola Mirasu, para conectarte con un usuario virtual has probado colocar en la barra de direcciones de tu Firefox, del Dolphin, del Nautilus, o del Konqueror (cualquiera de ellos): ftp://nombre-usuario@127.0.0.1? me parece que te complicás mucho, has probado la configuración básica del manual? sin utilizar usuarios virtuales y sin la configuración de seguridad SSL? realmente necesitás utilizar usuarios virtuales?

El manual está preparado para ir de ha poco, prueba con la configuración básica y si eso funciona pasa al siguiente que es la configuración de usuarios virtuales siempre y cuando lo necesites. También te recomiendo en lo posible seguir fijamente lo que está en el manual, ya que a veces, si uno no tiene bien claro lo que está haciendo, el menor cambio puede resultar en un inconveniente.

Saludos.

karlggest
18-sep-2009, 09:30
HOLA HELLO MASTEER, DEJAME FELECITARTE EXCELENTE TUTORIAL...QUISIERA HACERTE UNA PREGUNTA ES Q YO QUIERO HACERLO PERO Q LOS USUARIOS SE AUTENTIQUEN EN UNA BASE DE DATOS MYSQL, Q DEBO DE INSTALAR PARA PODERLO HACER... Y LA OTRA PREGUNTA ESTOY TRBAJANDO CON LINUX SUSE 10 DONDE ENCUENTRO LOS PAQUETES ADICIONALES Q NUMBRASTE HAY COMO SON LOS db-utils y pam. MUCHAS GRACIAS POR TU APOYO...
Bienvenido al foro. Si no lo has hecho aún, desde el año pasado ;) , lee las normas. En especial la de no usar mayúsculas.

Salud!!

mirasu
22-sep-2009, 22:37
Hola hello_masters

pues no se que es lo que falla, lo volvere a intentar desde el princio, porque la configuracion que funcionaba. no lo hace muy bien

-no puedo escribir en el ftp
-puedo ver todas las carpetas o casi todas facilmente con firefox aunque no tendria que poder.

la otra vez segui el manual y funcionaba despues de cada modulo. pero al poner el virtual no podia entrar. pense que era al base de datos, pero ahora se que esta bien.
volvere a empezar. pero si alguien me pudiera decir que lo a echo asi y le va en el opensuse 11.1 y actualizado a la ultima

Gracias seguire intentandolo, hasta que saquen el filezilla server para linux :-)

gabrielkfr
25-sep-2009, 01:07
-no puedo escribir en el ftp
Deberías controlar que los permisos de las carpetas de los usuarios virtuales en la ruta /srv/ftp sean los adecuados, también controla que la directiva write_enable tenga el valor YES tanto en el archivo vsftpd.conf como en los archivos de configuración individual de cada usuario virtual.

-puedo ver todas las carpetas o casi todas facilmente con firefox aunque no tendria que poder.
Verifica la directiva chroot_local_user que debería tener asignado el valor YES, y si estas utilizando una lista de anti-enjaulado mediante la directiva chroot_list_enable=YES, recuerda NO agregarle a esa lista definida mediante la directiva chroot_list_file=/etc/vsftpd/vsftpd.chroot_list el usuario virtual al que no querés permitirle navegar libremente por toda la estructura de directorios del SO.

Saludos.

Jabali-porrero
28-sep-2009, 11:34
Hola Hello_Master,

Lo primero muchas gracias por el aporte, es un tutorial excelente y que estoy seguro habra ayudado a mucha gente.

He leido con atencion lo relativo a la gestion de usuarios locales/virtuales y enjaulamiento de los mismos, pero algo debo de hacer de mal porque tienen acceso al arbol de ficheros del servidor.

He probado ya casi todas las combinaciones posibles, pero pongo la que yo creo que en principio deberia funcionar, y si esta mal agradeceria vuestra ayuda:

chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

En la lista de enjaulamiento escribo el nombre de usuario: prueba que tiene su directorio raiz en /home/prueba. LLegados a este punto, me conecto al servidor mediante el cliente FTP Filezilla pero el user sigue podiendo navegar a su antojo por el arbol de ficheros? En cambio si pruebo a conectar por ftp en la consola, veo que navega pero en cambio no ve el listado de ficheros disponibles.
En mi caso necesito que un gran numero de usuarios se conecten a traves de un cliente Ftp grafico como Filezilla y esten enjaulados en su directorio raiz para poder subir unos archivos y desconectarse a continuacion. Alguna idea de como arreglarlo, o recomendaciones?

Gracias, un saludo a todos!

Edito: Ya lo solucione, al final era un fallo tonto de estos que te cuesta mucho darte cuenta.

mirasu
01-oct-2009, 18:51
Hola Jabali-porrero

Yo como has visto por arriba no es que me entienda mucho :-)

pero te doy un "consejo" haz el force_reload al servicio y prueba con otro ciente ftp. como internet explorer o otro filezilla en otra maquina. no se si los cookies, temporales/caches o algo que guardan los servidores/clientes ftp y web. juegan muy malas pasadas.

por cierto me podrias decir que version del vftpd y opensuse tienes? y si has seguido todo el manual?

Gracias!

rencymigk
04-oct-2009, 19:00
gracias por tu aporte :D ahora a practicar...!!

gabrielkfr
06-oct-2009, 17:05
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

Hola Jabali-porrero :p
Te comento que hay un problema de interpretación de las directivas:

1- Para que los usuarios estén enjaulados en su directorio FTP la directiva chroot_local_user tiene que tener asignada el valor YES:

chroot_local_user=YES

2- Los nombres de usuarios virtuales que agregas a la lista /etc/vsftpd/vsftpd.chroot_list serán aquellos usuarios que ""SI"" podrán navegar por todo el sistema de archivos cuando la directiva chroot_local_user=YES, por este motivo, solo tienes que agregar al archivo /etc/vsftpd/vsftpd.chroot_list aquellos usuarios que "necesitan" acceder a todo el sistema de archivos, y a todos aquellos usuarios virtuales que no son incluidos en el archivo /etc/vsftpd/vsftpd.chroot_list quedarán bien enjaulados.

Un ejemplo claro:
tengo 2 usuarios virtuales, gabriel y ramon, con la directiva chroot_local_user=YES especifico que ambos usuarios virtuales queden enjaulados, sin embargo, necesito que el usuario ramon NO quede enjaulado mientras que el usuario gabriel debe permanecer enjaulado, para lograr esto le agrego el nombre del usuario virtual ramon al archivo /etc/vsftpd/vsftpd.chroot_list, eso le habilitará al usuario ramon a navegar por todo el sistema de archivos...

Uff creo que escribí demasiado.. espero que no se haya complicado más de la cuenta.

Saludos.

piter332
19-nov-2009, 15:44
Wenas

Ante todo felicitarte po r el peaso de manual

Tengo una configuración basica en vsftpd

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


Pero no consigo que me deje ni mover, ni borrar archivos, con el filezilla me sale
550 Delete operation failed.

Y tampoco me deja conectarme como un usuario, solo me deja conectarme como admin
El archivo vsftpd.chroot_list esta en donde debe y el texto es
user_piter332
pass_piter332

El error que me da es

Conexión establecida, esperando el mensaje de bienvenida...
Respuesta: 220 Welcome to blah FTP service.
Comando: USER piter332
Respuesta: 331 Please specify the password.
Comando: PASS ******
Respuesta: 530 Login incorrect.
Error: Error crítico
Error: No se pudo conectar al servidor
Comentarte que uso Filezilla
Me puedes aconsejar ???

Gracias, como has dicho anteriormente, ahi que ir poco a poco.

gabrielkfr
19-nov-2009, 23:25
Hola



Pero no consigo que me deje ni mover, ni borrar archivos, con el filezilla me sale
550 Delete operation failed.

La configuración básica del manual solo abarca al uso del servicio vsftpd con usuarios del sistema operativo, la configuración que pasaste es incompleta, faltan varias directivas, si sigues el manual tal cual debería funcionar.. ahh y no te olvides de verificar que tengas en el firewall correctamente abiertos los puertos pasivos.



Y tampoco me deja conectarme como un usuario, solo me deja conectarme como admin
El archivo vsftpd.chroot_list esta en donde debe y el texto es
user_piter332
pass_piter332

El error que me da es

Conexión establecida, esperando el mensaje de bienvenida...
Respuesta: 220 Welcome to blah FTP service.
Comando: USER piter332
Respuesta: 331 Please specify the password.
Comando: PASS ******
Respuesta: 530 Login incorrect.
Error: Error crítico
Error: No se pudo conectar al servidor
Comentarte que uso Filezilla
Me puedes aconsejar ???
En el archivo vsftpd.chroot_list no se coloca ningún password, sino solamente los cuentas o logins de los usuarios a los que le querés autorizar a que puedan navegar libremente por el directorio raíz.

Te recomiendo leer los comentarios que se encuentran sobre las directivas, especialmente las siguientes 3 que están relacionadas con el enjaulamiento de usuarios y con la lista de "anti" enjaulamiento, algo que creo ya expliqué en post anteriores.


# 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

Saludos.

piter332
20-nov-2009, 00:31
Ok Muchas Gracias

nick
27-nov-2009, 23:36
Hola, primero felicitarte por el pedazo de tuto que has colgado :aplausos:, como puedes ver soy nuevo en la comunidad y cada día aprendo algo nuevo.

Mira, tengo un problema (la verdad que tenía muy poca idea de esto) el problema que tengo es que no me deja entrar como cliente:

En firefox escribo: ftp://nick@127.0.0.1

y cuando ingreso la contraseña que puse me dice:

500 OOPS: could not open chroot() list file:etc/vsftpd/vsftpd.chroot_list

Otra cosa:

Cuando he creado logins.txt solo puse:

"nick"
`contraseña`

Pense que user_ y pass_ son nombres del ejemplo, es correcto?

Y por cierto, cuando estás cambiando los permisos a las carpetas, una de ellas (la última) pusiste:

chown -R 744 nombre

Te referias a chmod no?

Otra cuestión: cuando creamos los usuarios en la carpeta config_por_usuario y en su interior ponemos un codigo bash ¿no tendriamos que ejecutarlos? ¿(chmod 700 nombre, y ./nombre)?

Si estoy diciendo algunas barbaridades porfavor corrígeme, que llevo muy poco tiempo en linux y me gusta aprender de los demás.

gabrielkfr
05-dic-2009, 13:24
Hola Nick



500 OOPS: could not open chroot() list file:etc/vsftpd/vsftpd.chroot_list

Con respecto a este error fíjate que en el archivo vsftpd.conf esté correctamente definida la ruta al archivo físico, no estoy seguro, pero en el mensaje de error a la ruta le falta la barra inicial: /etc/vsftpd/vsftpd.chroot_list


Cuando he creado logins.txt solo puse:
"nick"
`contraseña`
Pense que user_ y pass_ son nombres del ejemplo, es correcto?
Si son solo ejemplos, es correcto lo que hiciste.


chown -R 744 nombre
Te referias a chmod no?
Si, supongo jeje, ya he corregido el error, gracias!


Otra cuestión: cuando creamos los usuarios en la carpeta config_por_usuario y en su interior ponemos un codigo bash ¿no tendriamos que ejecutarlos? ¿(chmod 700 nombre, y ./nombre)?
No necesariamente, con la referencia al interprete bash se formatea la salida en pantalla, lo que permite identificar mejor las variables, texto, comentarios en cualquier editor de tu distro.

Por último solo quiero recomendarte que pruebes primero completar la configuración básica del tutorial, hacer las pruebas y si todo funciona correctamente pasar al siguiente nivel de complejidad, que sería agregar usuarios virtuales y/o conexiones seguras.

Saludos

changilca
20-may-2012, 09:16
Hola, gracias por tu gran aporte a este foro, pues nos ayudas a nosotros como novatos.

Aparte me ayudaste demasiado, dado que pelee literalmente para poder subir el server FTP, pero ya esta solucuinado, Gracias.

Solo me queda una duda, yo lo configure el doc vsftpd.conf desde webmin dado que es mas sencillo, aparte si me voy a mi carpeta raiz en ect/vsftpd/vsftpd.conf tal carpeta no existe y obiamente ni el archivo(por eso tube que usar webmin), entonces mi pregunta: Sabes a que se debe o me cuasa problemas en el futuro?....??

mi segundo problema es que al ejecutar la orden en la terminal: service vsftpd start o viseversa no me lo lee me dice "redirecting to systemctl", cual crees que es el problema?

Pero ante todo esto, el server ya funciona, Graacias de nuevo y me gustaria que contestaras mis dudas...
PD. Carlos Andres Chan Gil :aplausos:

gabrielkfr
14-jun-2012, 01:54
Hola, uff, hace tanto tiempo que no pasaba por acá,

Solo me queda una duda, yo lo configure el doc vsftpd.conf desde webmin dado que es mas sencillo, aparte si me voy a mi carpeta raiz en ect/vsftpd/vsftpd.conf tal carpeta no existe y obiamente ni el archivo(por eso tube que usar webmin), entonces mi pregunta: Sabes a que se debe o me cuasa problemas en el futuro?....??
Bueno, en realidad el archivo vsftpd.conf se encuentra en el directorio /etc (/etc/vsftpd.conf).


mi segundo problema es que al ejecutar la orden en la terminal: service vsftpd start o viseversa no me lo lee me dice "redirecting to systemctl", cual crees que es el problema?
El post ya tiene sus años, y cuando lo redacté el comando service era el encargado de manejar los servicios, actualmente systemctl es su reemplazo (que dicen es más potente) pero el nombre del comando service aún se mantiene por compatibilidad y cuando se usa se redirige la tarea a systemctl.

Para finalizar te comento que en mi blog se encuentra una versión más actualizada de este post, que lo puedes visitar aquí (http://www.tormentadebits.com/2012/02/configurar-ftp-vsftpd-opensuse-linux.html).

Saludos.

jhocor
23-jul-2012, 21:16
Segui el manual completo pero me arroja el error:
jcorredor@linux-rdaj:~> ftp 192.168.XXX.XXX
Connected to 192.168.XXX.XXX.
220 Bienvenido al servidor pruebas ftp de Sixbell OTRS.
Name (192.168.XXX.XXX:jcorredor): jorge
331 Please specify the password.
Password:
530 Login incorrect.
ftp: Login failed.

Me puedes ayudar con esto...

DiabloRojo
24-jul-2012, 16:07
Name (192.168.XXX.XXX:jcorredor): jorge
331 Please specify the password.
Password:
530 Login incorrect.
ftp: Login failed.El mensaje es bien claro: Has introducido mal la contraseña del usuario.

softodnamra
09-jun-2014, 22:47
Gracias hermano he rectificado algunas cosa con tu manual