15/6/2009

Montar un servidor de archivos en 10 minutos: vsftpd

Un servidor de ficheros (servidor FTP) puede ser muy útil a la hora de centralizar datos en nuestra red, compartir con otros e incluso recibir datos de cualquier usuario autorizado para hacerlo. Montar un servidor ftp es muy sencillo gracias a VSFTPD, un servidor rápido, ligero, seguro y de fácil configuración.

Entre sus características más interesantes encontramos:
  1. Servidor rápido, estable y seguro
  2. Configuración sencilla
  3. Soporte de usuarios anónimos, registrados y virtuales
  4. Soporte para virtual hosts
  5. Ejecución independiente o mediante (x)inetd
  6. Soporte IPv6 y SSL
  7. Límites por usuario, conexión y ancho de banda


  • Instalación
Gracias a que VSFTPD está presente en los repositorios oficiales de Ubuntu su instalación será tan sencilla como ejecutar la orden:
$ sudo apt-get install vsftpd

El propio proceso de instalación se encarga de crear el usuario no privilegiado ftp, crear el directorio /home/ftp (donde colocaremos los archivos disponibles para el acceso anónimo) y arrancar el servicio.

Nota: En caso de tener un firewall instalado no olvides que deberás abrir el puerto 21 (si no sabes como hacerlo consulta el artículo Administración del firewall con firestarter), además si conectas a internet a través de un router y pretendes dar acceso al servidor de ficheros desde el exterior deberás redireccionar el puerto 21 en la configuración del router (revisa la documentación de tu modelo de router si no sabes como hacerlo).

Podemos comprobar que el proceso ha funcionado apuntando nuestro navegador o cliente de ftp favorito a la dirección ftp://localhost o ftp://127.0.0.1, en caso de acceder desde un ordenador remoto deberemos usar nuestra IP privada (si conectamos desde dentro de una red local) o nuestra IP pública (si conectamos desde Internet):

Firefox conectado a nuestro servidor de ftp

Nota: no muestra ningún archivo porque aun no he colocado nada en el directorio /home/ftp


  • Configuración
La configuración, muy sencilla, se realiza a través de un único archivo de texto plano: /etc/vsftpd.conf. Para realizar cualquier cambio en la configuración editaremos este archivo con la orden:
$ sudo nano /etc/vsftpd.conf

Y una vez hechos los cambios reiniciaremos el servicio con la orden:
$ sudo /etc/init.d/vsftpd restart

Veamos ahora como cambiar la configuración por defecto para dejar el servicio a nuestro gusto con algunos ejemplos.


  • Acceso anónimo
El acceso anónimo permitirá a cualquier persona que conozca nuestra dirección IP conectarse al servicio y navegar por el directorio /home/ftp. Este modo es idoneo para compartir archivos que no necesitan una especial protección.

Para permitir el acceso anónimo editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
anonymous_enable=YES

Para denegar el acceso anónimo editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
anonymous_enable=NO


  • Acceso privado
El acceso privado permite establer nombres de usuario y contraseña para acceder al servicio, cada usuarió podrá acceder tan solo a sus propios archivos. Este es un sistema idóneo para organizar la información por usuarios y otorgar un cierto grado de seguridad a los archivos.

Para permitir el acceso privado editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
local_enable=YES

Para denegar el acceso privado editaremos el archivo de configuración y nos aseguraremos de que contiene la linea:
local_enable=NO

Una vez activado el acceso privado apuntaremos nuestro navegador o cliente de ftp a la dirección ftp://usuario:clave@localhost o ftp://usuario:clave@127.0.0.1, en caso de acceder desde un ordenador remoto deberemos usar nuestra IP privada (si conectamos desde dentro de una red local) o nuestra IP pública (si conectamos desde Internet):

Firefox mostrando el contenido privado de un usuario local


  • Seguridad
Aunque la configuración por defecto es bastante segura podemos afinar un poco más este aspecto si nuestros datos lo requieren.

Para evitar que los usuarios registrados puedan salir de su directorio $HOME y navegar así por todo el sistema de ficheros editaremos el archivo de configuración y nos aseguramos de que contiene la linea:
chroot_local_user=YES

Limitar el numero máximo de conexiones simultaneas (para evitar ataques DoS) editaremos el archivo de configuración y nos aseguramos de que contiene las lineas:
listen=YES
max_clients=10


Impedir que los usuarios puedan enviar archivos a nuestro servidor (opcion activada por defecto), editaremos el archivo de configuración y nos aseguramos de que contiene la linea:
write_enable=NO

Cambiar el puerto por el que escucha el servicio puede ayudar a evitar ataques automatizados e intrusos poco experimentados, para cambiarlo y usar por ejemplo el puerto 50 editamos el archivo de configuración y añadimos:
listen_port=50


  • Modo de ejecución
Podemos elegir ejecutar el servidor de ficheros como un servicio del sistema controlado desde el arranque (modo Standalone, responde más rápido a las peticiones) o que se inicie automáticamente en el momento en que se recibe una petición (modo inetd, libera más recursos en caso de no usarse el servicio)

Para establecer el servicio en modo Standalone (recomendado) editaremos el archivo de configuración y nos aseguramos de que contiene la linea:
listen=YES

Para establecer el servicio en modo xinetd comentaremos la linea anterior de manera que quede así:
#listen=YES

Y crearemos el archivo de configuración de xinetd para el servicio de ftp /etc/vsftpd.xinetd con este contenido:
# Configuración para el servicio FTP
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
per_source = 5
instances = 200
no_access = 192.168.1.3
banner_fail = /etc/vsftpd.busy_banner
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
# Fin del servicio FTP


  • Más información
Sitio web oficial de VSFTPD
http://www.guia-ubuntu.org/index.php?title=Servidor_de_FTP

  • Artículos relacionados
Administración del firewall con firestarter

37 comentarios :

Cartas a Ubuntu dijo...

no comentas nada sobre cambiar el puerto, creo que se puede configurar otro puerto que no sea el 21.Más que nada por seguridad.

Gracias

fosco_ dijo...

@Cartas a Ubuntu gracias por el aporte, ahora mismo lo añado en el apartado de seguridad.

Kpru dijo...

para variar, otro post muy útil! gracias!

Anónimo dijo...

Muy bueno y clarificador.
Gracias y un saludo

dinpel dijo...

Muchas gracia muy util pero si quiero añadir un usuario y adrle su carpeta con su s archvios como lo debo hacer por que de la manera que explicas es para usuarios anonimos no ? yo quisiera tener un par de usuarios privados y darles permisos en sus propias carpetas, pero no se como debo hacerlo.

Un saludo.

fosco_ dijo...

@dinpel en el momento en que creas los usuarios (de manera normal) en el servidor ya tienen acceso a su home, al que pueden entrar con su nombre de usuario y contraseña.

dinpel dijo...

Gracias fosco. Soy un poco novato en el tema y no sabia como tenia que crear los usuarios para el server. Y que permisos aplicarles. Un saludo, Y gran Blog te sigo cada lunes.

P.D. A parte de todo esto. Te quería hacer una petición, si pudedes claro esta, seria publicar las funciones de poder descargar una web con el comando wget y maneras de poder descargar webs, que se actualizan y solo poder descargar lo que actualiza la web, cosa que no e conseguido hacer funcionar y me descarga toda la web de nuevo. Ya que últimamente me estoy descargando algunas para leerlas offline.Pienso que seria una entrada interesante. Un saludo y gran blog.

fosco_ dijo...

@dinpel: apunto el tema wget para un futuro artículo. Gracias por el aporte.

FabricalDreams dijo...

Sería bueno recordar también que con la IP pública no se puede acceder desde las máquinas de la red privada...te redirecciona al router (tengo que investigar más :P)

Genial tuto! Mil gracias por el aporte.

Anónimo dijo...

la ultima parte de xinetd esta todo mal

fosco_ dijo...

La parte del xinetd está bien, lo acabo de revisar, si algo no te funciona pon los errores exactos que ves o los síntomas e intentaremos arreglarlo

Pious dijo...

Lo instalé y no me creó el usuario ftp ni su directorio en el home.
¿y ahora?

fosco_ dijo...

Seguramente si no lo hizo es porque no se instaló bien, revisa bien que el paquete está instalado y configurado completamente (te recomiendo sudo aptitude reinstall vsftpd)

Si sigue sin hacerlo puedes crear el usuario manualmente desde Sistema - Administración - Usuarios y grupos

Ya me dirás si te sirvió

AL-X-OR dijo...

@fosco_ Hola de nuevo, sabes, repentinamente mi servidor empezó a funcionar... sin embargo, me pregunto si no es una cuestión de límite de usuarios.

Si mi número de usuarios que edité en /etc/vsftpd.conf es 'max_clients=7' ¿cómo sabe el servidor que uno de ellos se desconectó y puede accesar otro en su lugar? en concreto: ¿cómo finalizo correctamente mi sesión en el servidor?

fosco_ dijo...

@AL-X-OR: hay dos formas de finalizar una conexion ftp:

1) si usas un cliente específico de ftp puedes enviar la orden de desconexión con lo que se cierra la sesión y se da de "baja" al usuario

2) si usas un navegador esta opción no es posible y entra en juego el timeout: pasado un tiempo estipulado en el servidor sin actividad por parte del cliente automaticamente se corta la conexion.

AL-X-OR dijo...

@fosco_ Muchas gracias, revisaré el archivo de configuración, mi idea es que todos mis usuarios puedan conectarse directamente desde una carpeta tecleando la ip en la barra de direcciones para evitar que instalen un cliente FTP; que todo sea 'Drag and Drop' ;)

de La Pampa a Jerusalem dijo...

1) Muy bueno y claro. Gracias por el tiempo que te tomás
2) Preguntas:
2.1) Yo quiero acceder yo (sólo) a la máq que está en la oficina, por lo que hice los sigtes cambios en el /etc/vsftpd.conf
- saqué el acceso anónimo
anonymous_enable=NO
- puse acceso privado
local_enable=YES
- chroot_local_user lo dejé comentado, como esaba
- para que no arranque solo siempre (por cuanto que es muy esporádico cuando vaya a sacar archivos)
#listen=YES
- para mayor seguridad
listen_port=51
- para que no haya nadie más que yo
max_clients=1

Resultado:
Al principio me andaba (lo probé localmente con el firefox, apuntando a ftp://localhost)
Luego hice el restart
Siguió andando como antes (yo esperaba que empiece a contestar en ftp://localhost:15)
Reinicié la PC y ahora no anda, ni en ftp://localhost, ni en ftp://localhost:51

2.2) No entiendo el archivo /etc/vsftpd.xinetd
qué es no_access = 192.168.1.3?

Muchas gracias

Sergio

fosco_ dijo...

@de La Pampa a Jerusalem: a ver si puedo responder a tus 2 preguntas.

1. asegurate de que el demonio xinetd está funcionando, tiene pinta de que no lo tienes.

2. no_access = 192.168.1.3
Esta linea significa que xinetd negará el acceso a la IP 192.168.1.3

AL-X-OR dijo...

@fosco_ Hola, tengo una duda, mis usuarios tienen acceso al servicio mediante la barra de direcciones de windows, pero he notado una falla de seguridad.
Hay usuarios que se loguean y se mantienen logueados por tiempo indefinido, hay otros que a los 5 minutos son expulsados, ya modifiqué los valores de 'idle_session_timeout=900' (supongo que son segundos) y 'data_connection_timeout=900' después apliqué 'service vsftpd restart' y 'sudo /etc/init.d/vsftpd restart' Sin embargo el problema persiste... hay algúna manera de que el usuario haga logout??.
De antemano gracias

BRuiXo dijo...

Muy bueno y bien explicado, el instalar y configurar un server FTP. Este Blog habrá que añadirlo a favoritos, excelente. Quizás haber profundizado un poco mas en mas detalles de la configuración y creación de usuarios.

fosco_ dijo...

@BRuiXo gracias, de haber profundizado más en la creación de usuarios ya no habría podido llamarse "Montar un servidor de archivos en 10 minutos: vsftpd", se llamaría "Montar un servidor de archivos en 5 o 6 días" :-)

Radiorock dijo...

muy buen post viejo me sirvio mucho y en menos de 5 minutos para montarme uno de emergencia... ahora solo le me falta montarle el ssl

Pedro M Ramírez S dijo...

Hola amigo, solicito su ayuda por lo siguiente, ya hice la instalación en canaima3 que es una metadistribucion basada en debian, me creó el usuario ftp pero no el directorio, ejecute el comando ftp://127.0.0.1/ en el navegador y si me aparece el ïndice vacío, mi pregunta es si no tengo el directorio /home/ftp creado en que directorio debo colocar los archivos para compartirlos, o que debo hacer? gracias de antemano!

Dani Molina dijo...

@Pedro M Ramírez S el directorio donde van los archivos debe estar indicado en el archivo de configuración /etc/vsftpd.conf

Si debian no usa /home/ftp quizá use /var/ftp o algo parecido.

Anónimo dijo...

esto es una mierda que te cagas!

Dani Molina dijo...

@Anónimo, vaya, me ha sorprendido la rotundidad de tu comentario. Ya que eres tan sincero podrías aclarar a qué te refieres exactamente? Te refieres al vsftpd? al artículo? al blog en si mismo? a la realidad socioeconómica del pais?

Una crítica de ese calibre merece al menos una explicación, un saludo.

beans dijo...

Excelente, gracias por el aporte, tendre que probarlo.

Nuevamente se Agradece el esfuerzo por compartir conocimientos

Anónimo dijo...

Una buena forma de hacerlo es con esta aplicación en PHP:

http://www.segelsoft.com/2012/07/09/crear-un-sistema-de-alojamiento-de-archivos-tipo-megaupload/

Es muy configurable, lo que desconozco es si tienes algún fallo de seguridad en el logueo y demás. Yo he probado a inyecctar SQL y no cuela. Si alguien sabe alguna similar que lo ponga porfa.

nahual greenthumb dijo...

Hola. soy nuevo en esto de los servidores FTP, mi pregunta es: como agrego usuarios y sus paswords al servidor, que archivo hay que modificar para eso???

Dani Molina dijo...

@nahual hay varias formas de tener usuarios en el servicio FTP.

Una manera es dar de alta los usuarios en el servidor de manera normal, como cualquier otro usuario. Si no se quiere que ese usuario pueda hacer login en el sistema basta con cambiar su shell por /bin/false en el archivo /etc/passwd

La otra manera es crear usuarios virtuales en el servicio FTP, esto ya depende de cada servidor de FTP, te recomiendo que leas detalladamente la documentación del servidor FTP que uses y si es posible usa mejor el otro método.

Un saludo y espero haberte ayudado.

Admin Gerardo dijo...

Hola amigos les dejo el comentario porque se que siempre hay alguien que quiere saber de el tema de server ftp en ubuntu yo lo tengo me funciona perfecto y supere muchas fallas espero serles útil estoy on-line por skype agreguen:

gerardohpindigo

Email: gerardonicolato@gmail.com

http://2012-server.blogspot.com/

Admin Gerardo dijo...

Hola Dani Molina
como bien decías es muy fácil se crea usuarios de manera normal en ubuntu y luego si no quieres que se vean los archivos entre ellos la manera gráfica fácil es Terminal sudo nautilus se abre la ventana de root entras en la carpeta etc home allí estarán todos los user que has creado solo le das click derecho sobre el que quieras y propiedades de ese user le pones la de grupo solo al nombre de user de tu pc en mi caso server-2012 y al publico le pones nadie en mirar archivos nadie en escribir y modificarlos aplicar cambios y ya nadie vera los que tiene ese user dentro solo el si lo quieres dar de baja momentáneo solo entras a las cuentas donde las creaste de manera gráfica normal y le cambias la contraseña y ya el no se podrá logear mas por el momento ok así de fácil

Admin Gerardo dijo...

AL-X-OR a tu pregunta del porque algunos user se loguean y no se desconectan y otros si es porque le dan en guardar contraseña al explorador que usan no es un problema de seguridad tuyo también si el programa de FTP que usan guarda user pasaría lo mismo aunque el server a determinado tiempo los desconecta si le das refrescar a el explorador automático te re-conecta sin pedir nada ok

Anónimo dijo...

Tengo una inquietud porque debo ubicar un servidor de ficheros en una LAN privada de una empresa y no en una publica?

Dani Molina dijo...

@Anónimo: el servidor de archivos no es necesario que esté en la red interna, pero tiene ventajas como son mayor velocidad, mayor seguridad y mayor control que si lo alojas en un servidor externo.

Ana - Astoria Bar dijo...

Buenas tardes! antes que nada quería agradecerte por la excelente información.

Tengo una consulta, cómo creo usuario para que tengan acceso al FTP?

Saludos!

Dani Molina dijo...

@Ana pues tienes varias maneras, la más sencilla es crear ese usuario en el sistema desde el gestor de usuarios de tu distribucion.