La mayor comunidad de Debian en español

Un vistazo a Vsftpd


Imagen de vaughan

By vaughan- Publicado07 Abril 2006

Aqui posteare como configurar vsftpd montado sobre Debian Sarge 3.1 aunque la configuracion es portable a cualquier distro (a lo sumo cambiara el metodo de instalacion, ya sea mediante Yast con SUSE, RPM Red Hat y demas, o directamente desde los fuentes compilando... Tambien pueden cambiar de lugar los archivos de configuracion)... Comenzamos simplemente comprobando que nuestros repositorios esten bien (tener en cuenta que esta operacion la se llevara a cabo como root). Entonces:

usuario@debian:~$ su -
password:
root@debian:~#

En este caso usare aptitude en vez de apt-get aunque es lo mismo a nivel instalación. Si quieren saber diferencias "man apt-get" ; "man aptitude" .

root@debian:~# aptitude install vsftpd

Una vez instalado el demonio. Comenzaremos a configurarlo. en /etc nos encontraremos con el archivo de configuracion vsftpd.conf el cual editaremos... Luego de editarlo tambien sobre /etc crearemos dos ficheros mas.
Con su editor preferido (en mi caso nano) editaremos el fichero a nuestro gusto. Pasare a explicar muy simplificadamente algunas cuestiones como para tener en cuenta. Para temas un poco mas complejos consultar la documentacion correspondiente.

root@debian:~# nano /etc/vsftpd.conf

El fichero consta de muchos paramentros para tunear... Comentare algunos.

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES

Damos acceso anonimo a nuestro server ftp. Para no darlo. Comentamos la linea con un #.

# Uncomment this to allow local users to log in.
#local_enable=YES

Permite acceso al server a los usuario que tenemos configurados en el sistema. Ejemplo: root, o el usuario con el cual nos logueamos en el sistema.
Agrego como comentario que supongo (deberia buscar a ver como es la historia) pero se debe poder agregar usuarios al sistema y solo permitirles loguearse via ftp y no al sistema. La verdad no se si es posible pero supongo que alguna manera por ahi debe existir... Si les es necesario... http://www.google.com.ar/linux.

# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES

Si dejamos que los usuarios puedan conectarse a nuestro server anonimamente, esta opcion permite que siendo anonimo podamos subir cosas al server.

# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES

Nuevamente, si dejamos que los usuarios puedan conectarse a nuestro server anonimamente, esta opcion permite que siendo anonimo podamos crear directorios en el server.

# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.

Muy simple... Mensaje de presentacion del server cuando inicia. Descomentad y como mas os guste.

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list

Aqui viene lo lindo. Cuando permitimos acceso a un usuario del sistema, ejemplo, con el que nosotros nos logueamos, el server ftp automaticamente lo posiciona sobre /home/nombredeusuario. Si habilitamos la opcion de chroot, le estamos diciendo al servidor que cuando un usuario se loguee su carpeta personal (/home/nombredeusuario) se convierta automaticamente en "/". Por lo tanto ese usuario no podra subir de nivel. Tened en cuenta que tambien tienen que descomentar la ultima linea. Esa linea pueden modificarla a su gusto. Pero por una cuestion de no se que yo prefiero dejarlo asi. Ese archivo que se nombra en la ultima linea (#chroot_list_file=/etc/vsftpd.chroot_list) hay que crearlo. En ese archivo deberan poner los usuario que quieren que esten "enjaulados" en un entorno chroot.

Unas cuestiones mas. Leyendo un poco el manual que viene cuando instalamos el server se van a encontrar con dos cosas. Una que hay una manera, tambien creando un archivo parecido al de chroot, de decirle al demonio que solamente deje loguear a ciertos usuarios del sistema y a otros no. Ejemplo: Si compartimos la maquina con un hermano, el cual tiene un nombre de usuario podemos bannearlo para no permitirle conexiones via ftp.
La segunda es que se puede agregar un poquito de seguridad via tcp_wrappers o si mas le gusta mediante portmap usuando los archivos hosts.deny y hosts.allow. De esta manera, si usan el server para un red interna pueden restringir el acceso a alguna/s ip/s en particular. Si mal no recuerdo tienen que agregar una linea en el vsftpd.conf que diga tcp_wrappers=yes, pero por las dudas verifiquen.
Solo como comentario, recomiendo un man vsftpd.conf el cual se encontraran con una increible cantidad de opciones y muy bien explicadas. Tocando un poco el archivo de configuracion. Pueden lograr denegar que al server se suban ciertos tipos de archivos: como mp3, o cualquier otra cosa (esto trabaja mas que nada por extension). Si cuentan con mas de una placa de red en su pc, pueden bannear alguna en particular para no permitir el acceso por esa via.
Bajo mi punto de vista vsftpd es un servidor ftp muy completo, con gran cantidad de opciones que nos pueden ayudar a darle un nivel de seguridad considerable al server el cual podemos aumentar si usamos un hermoso tunel SSH.
Por ultimo, casi me olvido. Una vez modificado el script vsftpd.conf deben detener y volver a iniciar el servicio.

# /etc/init.d/vsftpd restart #### Restartea el servicio
# /etc/init.d/vsftpd stop #### Detiene el servicio
# /etc/init.d/vsftpd start #### Inicia el servicio
# /etc/init.d/vsftpd status #### Nos dice si esta corriendo o no.

Por defecto cuando se lo instala. aptitude o apt-get hace que este servicio se inicie automaticamente al arrancar el equipo... Comento que hay una manera "grafica" de dar de alto o de baja servicios cuando se inicia la PC.

root@debian:~# aptitude install rcconf

iniciando este programita, simplemente posicionandonos sobre el servicio y tocando la barra espaciadora podemos hacer que ese servicio en particular arranque o no siempre que iniciamos el sistema, a partir que lo iniciemos nuevamente una vez hecho el cambio.

Referencia al escribir: man vsftpd.conf.

Imagen de jasus

"Agrego como comentario que supongo (deberia buscar a ver como es la historia) pero se debe poder agregar usuarios al sistema y solo permitirles loguearse via ftp y no al sistema. La verdad no se si es posible pero supongo que alguna manera por ahi debe existir... "

Se puede modificar el registro en /etc/passwd del usuario que queremos enjaular, y modificamos la shell para que no pueda ejecutar comandos.

usuario1:FXWUuZ.vwXttg:500:501:usuario pepito:/home/usuario1:/bin/bash

Y una vez modificado quedaría como:

usuario1:FXWUuZ.vwXttg:500:501:usuario pepito:/home/usuario1/./:/bin/false

"/bin/false" para la shell, y "/home/ruta/./" para forzar un chroot.

Imagen de MiKrO

Hola a tod@s.

Ya que hablamos de vsftp os dejo este enlace [link:]http://www.lanzalinux.org/?q=node/3 donde comenté algunas cosillas sobre el montaje de vsftp con algunas medidas de seguridad.

Espero que os sea utilidad.

Un saludo.

Imagen de ZorroPlateado

Quiero añadir mi grano de arena al asunto. Estos dias he tenido que montar este servicio pero en Centos5, me he peleado mucho y conseguir dejarlo bien, cosa que no pude replicar en la Ubuntu 7.10 y me huelo que no esta bien la autentificacion via pam hacia una bd de berkley hasheada.

Para que nadie tropiece mas. Si configuras vsftpd con usuarios virtuales redireccionando todos estos hacia una cuenta local y la validacion de dichos usuarios virtuales se hace hacia pam como he dicho, necesitas en /etc/vsftpd.conf:

guest_enable=yes
anonymous_enable=NO
guest_username=usuariolocal
user_config_dir/etc/vsftpd/vsftpd_user_conf
pam_service_name=vsftpd

y entonces en /etc/pam.d/vsftpd

debeis de comentar todas las lineas y poner las dos lineas que indica en los ejemplos de vsftpd pero !!!importante!!! añadir crypt=hash y quedarian tal que asi:

auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login crypt=hash

y ese dato solo lo encontre en el wiki de gentoo.

El fichero vsftpd_login es el hash con los datos de cuenta de cada usuario, esto si viene bien documentado y al final se genera:

db_load -T -t hash -f mifichero.txt vsftpd_login.db

Y justo aqui creo que radica el problema para ubuntu en que el hash generado no es el correcto y esto puede deberse a que hay diferentes versiones del paquete db-utils y no se cual es el correcto, no se si esto ocurrira en una debian estable.

Recomendacion, activar chroot_local_user y secure_chroot_dir, y desahibilitar write y acceso anonimo especificando en el fichero bajo vsftpd_user_conf todo lo que querias. Es recomendable activar ftp pasivo si estas detras de un firewall.

Tambien recordar que para que no de error en acceso al directorio al acceder por ftp debes de dar permiso de lectura y ejecucion al directorio root para todos donde inicia el usuario ftp, para ello añadir local_root al vsftpd_user_conf correspondiente.

Relacionado con Un vistazo a Vsftpd