Servidor FTP (Vsftpd)
En un post anterior instalamos un servidor TFTP, en esta ocasión será FTP (File Transfer Protocol), el cual tiene prácticamente la misma funcionalidad, transferencia de archivos, aunque éste utiliza un conexión TCP por el puerto 20 o 21.
Aunque podemos encontrar más servidores de FTP para linux, desde hace un tiempo yo elegí Vsftpd, es sencillo de configurar y según dicen muy seguro, yo esto último no lo puedo confirmar ya que no he probado otro.
Servidor
En primer lugar instalaremos el servidor vsftpd; desde nuestra consola en Ubuntu, sistema GNU/Linux que yo utilizo, ejecutaremos el siguiente comando:
# aptitude install vsftpd
Una vez realizada la instalación configuraremos dicho servidor. El servidor vsftpd utiliza dos ficheros de configuración, al menos con la configuración que yo voy a realizar.
- /etc/vsftpd.conf –> fichero de configuración del servidor vsftpd
- /etc/vsftpd.chroot_list –> En este fichero se ubicarán los usuarios que se enjaulan en su directorio raíz.
1. El fichero /etc/vsftpd.conf
Cuando instalas el servidor vsftpd en Ubuntu, te genera este fichero de configuración con parámetros por defecto. Una posible configuración de este fichero sería la siguiente:
#Example config file /etc/vsftpd.conf
# Para que se ejecute vsftpd en modo independiente. No se puede utilizar en conjunto con listen_ipv6
listen=YES# No permitimos que se conecten usuarios anónimos.
anonymous_enable=NO
# Permitimos que los usuario locales se puedan conectar.
local_enable=YES
# Permitimos poder hacer modificaciones.
write_enable=YES
# Muestra un mensaje cada vez que un usuario entra en un directorio.
dirmessage_enable=YES# Vsftpd registra las conexiones y la información de transferencia, por defecto en /var/log/vsftpd.log
xferlog_enable=YES
# Se permite que el servidor vsftpd abra el puerto 20, para ponerse a la escucha de peticiones.
connect_from_port_20=YES
# Mensaje de bienvenida al conectarse mediante un cliente ftp
ftpd_banner=Bienvenidos al ftp de Redes de Area Local.
# Permitimos a los usuarios locales que puedan salir de su directorio.
chroot_local_user=NO
# Con esta opción los usuarios locales que se encuentren en el fichero indicado por chroot_list_file estarán enjaulados en su directorio.
chroot_list_enable=YES
# Especifica el fichero que contiene los usuarios a enjaular.
chroot_list_file=/etc/vsftpd.chroot_list
# Esta opcion especifica el nombre de un directorio vacio. También el directorio no tiene que tener privilegios para el usuario de ftp. Este es un directorio usado como una jaula segura chroot y aveces no requiere de aceso al sistema de ficheros.
secure_chroot_dir=/var/run/vsftpd
# Especifica el nombre de PAM (Pluggable Authentication Modules) para vsftpd
pam_service_name=vsftpd
# Esta opción especifica la localización del certificado RSA para usar conexiones SSL. Esta opción viene por defecto.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# Esta opción especifica la localización de la clave privada para las conexiones SSL.
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Una vez configurado nuestro fichero, ya tendriamos listo nuestro servidor vsftpd. Reiniciamos el servicio y listo, para ello:
# invoke-rc.d vsftpd restart
Ya podría conectarse cualquiera como los usuarios locales, pero vamos a hacer una restricción a uno que vamos a crear.
2. El fichero /etc/vsftpd.chroot_list
El fichero vsftpd.chroot_list va a contener el nombre del usuario que vamos a crear a continuación, para que cualquiera pueda conectarse a ese servidor, pero sólo teniendo acceso a el directorio de ftp.
Creamos el usuario mediante el siguiente comando:
# useradd amigo
Y ahora vamos a añadir este nombre al fichero; lo podemos hacer habriendo el fichero mediante cualquier editor o mediante el siguiente comando:
# echo amigo >> /etc/vsftpd.chroot_list
Y ahora ya podríamos decir que nuestro servidor ftp esta totalmente configurado. Para mas opciones se recomienda ver el man.
Cliente
Para conectarnos a nuestro ftp mediante una consola, únicamente devemos introducir el siguiente comando:
$ ftp <dir_ip_servidor_ftp>
Posteriormente te pedirá usuario y password; y ya tendrás acceso a el servidor que anteriormente hemos configurado.
Referencias:
http://www.esdebian.org/article.php/20060407102022453
http://www.linuxparatodos.net/portal/staticpages/index.php?page=09-como-vsftpd
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/es/ref-guide/s1-ftp-vsftpd-conf.html
http://www.esdebian.org/staticpages/index.php?page=20050424180613347

Tengo problemas con la autentifacion final en el cliente.
He realizado todos los pasos. Observar que por defecto no te crea la lista de users del servidor, por si acaso a alguien le surge la duda.
Aun así, cunado voy a autenticarme, sale que conecta con el servidor,
jose@eniac:~$ ftp 192.168.0.128
Connected to 192.168.0.128.
220 (vsFTPd 2.0.5)
Name (192.168.0.128:jose): jose
530 This FTP server is anonymous only.
Login failed.
ftp>
Puede ser porque sea dentro del mismo equipo. Sin embargo, y si lo intento con la localhost, me sale lo mismo. Además le tengo deshabilitado las entradas anónimas y mira el resultado anterior… ¿Alguna sugerencia?
Comprueba que en el /etc/vsftpd.conf donde pone anonymous_enable pones “NO” no vale “No” o “no”. Y ademas comprueba en el /etc/ftpusers que tu usuario “jose” no esté ahi y que estñe el nombre “anonymous”. Por lo menos a mi me funciona
Hola, tengo creado el servidor ftp, los usuarios son los del sistema, por ejemplo si entra usuario amigo, y paswd amigo , como podría enjaular a ese usuario, es que el que entra a mi ftp va a /home/amigo pero si retrocede directorio se encuentra en el home y desde ahí me puede ver todo el sistema, me gustaría que entrase solamente a la carpeta amigo y que ahi pueda escribir leer y borrar, pero que no pueda ir a ningún otro directorio.
salu2
hola, ¿cómo puedo enjaular el direcotorio prueba que se encuentra dentro de home/prueba para que los que se conecten al ftp solo puden leer, escribir y borrar en la carpeta prueba sin ver todo lo demás.
en el directorio /etc/vsftpd.chroot_list
puse esto pero no funciona; ya que se puede retroceder a la carpeta home y usmear todo el sistema.
gracias
salu2
# useradd amigo
# echo amigo
# useradd /home/prueba
# echo /home/prueba
# useradd prueba
# echo prueba
hola me llamo michael estudio gnu/linux y ya entre a la etapa de servicios es muy interesante y quiero que porfavor me manden a me corre (michael_6aventura@hotmail.com una guia en español completa de como hacer un servidor (dhcp,ftp,ssh) el que lo tenga favor de mandarmelo en español gracias
revard, gracias por tus artículos, a los novatos y no tan novatos nos vienen muy bien. Verás mi pregunta es la siguiente:
1. Me interesa, cómo configuro un linux server que actue como un router (tal como decías tú) pero que pueda manipular la velocidad de subida (muy importante en mi caso) por cada ip /host??
2. Me gustaría saber si cabría la posibilidad de conseguir una dirección de msn messenger tuya o de otro messenger que uses, porque me encantaría poder preguntarte cosas live de vez en cuadno si no es demasiado …
p.s. te dejé mi dirección de correo
Un saludo cordial
Andrei
Hola,
tengo un problema, me he instalado el vsftpd y desde otro ordenador de la misma LAN intento conectarme como anonymous. Dice que la conexion es OK. Pero cuando hago un dir me dice lo siguiente:
229 Entenring Extended Passive Mode (|||42223|)
150 Here comes the directory listing
226 Directory send OK
y no me dice nada mas ni me enseña los ficheros que hay en el directorio.
He creado un directorio en
/home/manel/temp/vsftpd
y he metido un par de ficheros.
ah y he puesto secure_chroot_dir=/home/manel/temp/vsftpd
alguna idea??
prueba con un “ls”….suerte!
- he realiazo un ftp normal no tengo problemas cuando el usuario se loguea por web lo tengo enjaulado
El problema existe si el usuario lo ingreso por mi consola de linux el problema puede navegar por todo mis carpeta de linux puede ver root el home
lo que yo quiero hacer dos cosas
consola de linux
usuario prueba
clave prueba
ls -l
visualizatodo por consolo el usuario prueba
ve todo mis directorios de linux
la primera es cuando el usuario lo ingreso por linux debe estar enjaulado como si estuviera ingresando por web,
en web no tengo problemas solo cuando lo ingreso por consola de linux alli esta el porblema
segundo caso
En mi consola de linux cuando ingreso el usuario prueba y haga un ssh prueba@192.168.1.22
que me salga un mensaje de error que no puede hacer ssh con el usuario prueba en mi consola de linux
ya que el usuario prueba es un usuario de linux creado para ingresar a ftp
ftp prueba@192.168.1.22
espero que me puedas ayudar doctor
tercer caso
sabes com puedo hacer una sycronizacion por linux de un servidor a otro servidor
espero tu pronta respuesta
aai_pechejo@yahoo.com.mx
Yo tengo configurado my Linux Centos con un server VSFTPD, el ftp funciona excelentemente. Mi pregunta es: Como cambio el directorio por default para subir los archivos.
Aqui teneis otra guía, que puede servir para complementar los detalles de configuración:
En HTML:
http://www.actiu.net/infordoc/servidors/vsftpd-pam-mysql_es.htm
En PDF:
http://www.actiu.net/infordoc/servidors/vsftpd-pam-mysql_es.pdf