
VsftpdA continuación, pongo un pequeño tuto sobre este fabuloso servidor de ftp: Servidor ftp en linux con vsftpd. Introducción Vsftpd es una implementación de servidor FTP basada en la seguridad. El demonio vsFTPd permite además gestionar el ancho de banda entregado para evitar saturaciones del enlace FTP, y es utilizado por algunos proveedores y servidores con hasta 15.000 conexiones simultáneas, como ftp.redhat.com. Se distingue principalmente porque sus valores por defecto son muy seguros y por su sencillez en la configuración, comparado con otras alternativas como Wu-ftpd. Actualmente se presume que VSFTPD es quizá el servidor FTP más seguro del mundo.
Puede funcionar como demonio solitario (standalone) y no solitario dependiendo del superdemonio xinetd. Se aconseja en modo standalone.
Vsftpd puede descargarse de la siguiente dirección: ftp://ferret.lmh.ox.ac.uk/pub/linux/vsftpd o bien mediante yum yum -y install vsftpd
Ficheros de configuración.
/etc/vsftpd/vsftpd.conf Fichero de configuración principal del demonio. /etc/vsftpd.ftpusers Usuarios no permitidos para hacer ftp /etc/vsftpd.user_list Usuarios permitidos o no hacer ftp depende de la directiva userList_deny esté a NO o YES respectivamente. /etc/vsftpd.chroot_list Lista de usuarios que al conectar estarán excluidor de tomar como raíz el directorio home. Debemos crearlo /var/ftp Directorio para el usuario anónimo /etc/pam.d/vsftpd Fichero PAM que indica dónde se encuentran los usuarios del servidor ftp. Por defecto los usuarios son los usuarios del sistema linux. Permite configurarse para tener usuarios ftp diferentes a los usuarios del sistema. /etc/vsftpd_login.db Fichero que contiene una BD de usuarios distintos del sistema
Arranque y parada del servicio
En modo standalone, para arrancar, parar, reiniciar, o ver su estado se utiliza el comando service seguido del script del servidor. service vsftpd {start | stop | restart | status} o bien /etc/rc.d/init.d/vsftpd {start | stop | restart | status}
Para configurar el arranque del servicio en los runlevels 3,4,5 se utiliza el comando chkconfig, con la opción on se activa y con la opción off se desactiva. chkconfig vsftpd {on | off}
Procedimientos. Tome el editor de texto de su preferencia y edite /etc/vsftpd/vsftpd.conf. A continuación analizaremos los parámetros a modificar o añadir según sea necesario.
Parámetro anonymous_enable.
Este parámetro se utiliza para definir si se permitirán los accesos anónimos al servidor. Establezca el valor como valores YES o NO de acuerdo a lo que se requiera.
anonymous_enable=YES
El directorio para usuarios anónimos es /var/ftp. Recuerda que el acceso anónimo se realiza como usuario ‘anonymous’ con contraseña su email por cortesía.
Parámetro local_enable.
Este parámetro es particularmente atractivo si se combina con la función de jaula. Establece si se van a permitir los accesos autenticados de los usuarios locales del sistema. Establezca el valor YES o NO de acuerdo a lo que se requiera.
local_enable=YES
Si la directiva chroot_local_user no está puesta a YES hace que el usuario pueda navegar por el árbol completo de directorios del sistema, esto lógicamente es muy peligroso por lo tanto sería conveniente colocar la siguiente directiva para enjaular al usuario autenticado en su directorio $HOME.
chroot_local_user=YES
Cambio del puerto del servidor. La directiva listen_port permite cambiar el puerto por el que escucha el servidor. Por defecto es el puerto 21. La directiva listen=YES permite configurar el servidor en modo standalone (solitario). Se puede configurar adicionalmente para que escuche por el puerto 20 que es el original del servidor ftp utilizando la directiva connect_from_port_20=YES.
listen_port=2121 listen=YES connect_from_port_20=YES
Control de usuarios.
El fichero /etc/vsftpd.ftpusers contiene una lista de usuarios que no pueden realizar un ftp autentificado. Por ejemplo podría contener lo siguiente: # Users that are not allowed to login via ftp root bin daemon adm lp sync shutdown halt news uucp operator games nobody
El fichero vsftpd.user_list contiene una lista de usuarios. Si la directiva userlist_deny=NO contiene la lista de usuarios que únicamente se le permite el acceso. Si la directiva userlist_deny=YES contiene la lista de usuarios que no se le permiten hacer ftp además de los listados en /etc/vsftpd.ftpusers
Estableciendo jaulas para los usuarios: parámetros chroot_local_user y chroot_list_file.
De modo predefinido los usuarios del sistema que se autentiquen tendrán acceso a otros directorios del sistema fuera de su directorio personal. Si se desea recluir a los usuarios a solo poder utilizar su propio directorio personal, puede hacerse fácilmente con el parámetro chroot_local_user que habilitará la función de chroot() y los parámetros chroot_list_enable y chroot_list_file para establecer el fichero con la lista de usuarios que quedarán excluidos de la función chroot().
chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
Con lo anterior, cada vez que un usuario local se autentique en el servidor FTP, solo tendrá acceso a su propio directorio personal y lo que este contenga. No olvide crear /etc/vsftpd/vsftpd.chroot_list, ya que de otro modo no arrancará vsftpd.
Parámetro write_enable.
Este parámetro establece si se permite el mandato "write" (escritura) en el servidor. Establezca el valor YES o NO de acuerdo a lo que se requiera. write_enable=YES
Parámetro ftpd_banner.
Este parámetro sirve para establecer el banderín de bienvenida que será mostrado cada vez que un usuario acceda al servidor. Puede establecerse cualquier frase breve que considere conveniente. ftpd_banner=Bienvenido al servidor FTP del IES Inca Garcilaso.
Control del ancho de banda. Parámetro anon_max_rate.
Este parámetro es utilizado para limitar la tasa de transferencia en bytes por segundo para los usuarios anónimos, algo sumamente útil en servidores FTP de acceso público. En el siguiente ejemplo se limita la tasa de transferencia a 5 Kb por segundo para los usuarios anónimos: anon_max_rate=5120
Parámetro local_max_rate.
Este parámetro hace lo mismo que anon_max_rate, pero aplica para usuarios locales del servidor. En el siguiente ejemplo se limita la tasa de transferencia a 5 Kb por segundo para los usuarios locales: local_max_rate=5120
Parámetro max_clients.
Este parámetro establece el número máximo de clientes que podrán acceder simultáneamente hacia el servidor FTP. En el siguiente ejemplo se limitará el acceso a 5 clientes simultáneos. max_clients=5
Parámetro max_per_ip.
Este parámetro establece el número máximo de conexiones que se pueden realizar desde una misma dirección IP. Tome en cuenta que algunas redes acceden a través de un servidor proxy o puerta de enlace haciendo NAT y debido a esto podrían quedar bloqueados innecesariamente algunos accesos. En el siguiente ejemplo se limita el número de conexiones por IP simultáneas a 5. max_per_ip=5
Configuración personalizada para usuarios autentificados
Es muy útil realizar una configuración de acceso diferente para cada usuario. Por ejemplo puede interesar que un usuario pueda subir archivos y otros no, o bien direccionar algún usuario hacia un directorio diferente de su directorio $HOME, como por ejemplo un directorio donde subir el sitio web de un usuario, que posteriormente pueda ser consultado a través de apache.
En el fichero vsftpd.conf agregar la directiva: user_config_dir=/etc/vsftpd/users donde /etc/vsftpd/users es un directorio que contiene ficheros con el mismo nombre de los usuarios.
Crear tantos ficheros como usuarios autentificados, Ejemplo /etc/vsftpd/users/angel
dirlist_enable=YES download_enable=YES local_root=/usuarios write_enable=NO
Configuración del servidor con usuarios fantasma
Introducción y Objetivos
En la configuración vamos a ver paso por paso las múltiples opciones que tenemos, aunque muchas de ellas vienen explicadas (en inglés) en el man de vsftpd.conf [1]
Vamos a crear usuario "fantasma", es decir, solo serán usuarios del ftp, no existirán como usuario del sistema, de esta manera en caso de que exista algún tipo de fallo en el servidor, sólo se quedaría comprometido el ftp. Además vamos a enjaular a los usuarios, para que solo puedan acceder al directorio que nosotros queramos, y así evitar que "naveguen" por nuestro disco duro.
Para indicarle los usuarios que queremos, hacemos uso de db (Berkereley db).Lo que hacemos ahora es crear un archivo con los login / passwords que queramos en formato db, para ello creamos un archivo de texto en el directorio de trabajo, y metemos logins y passwords en lineas alternas, de esta manera: pepe pass1 paco pass2
Por lo tanto tenemos dos usuarios, pepe y paco, con contraseñas pass1 y pass2 respectivamente, (y al archivo lo hemos llamado usuarios).
Ahora creamos la base de datos en formato db ayudándonos de 'Berkereley db' (tenemos que ser root, puesto que necesitamos permisos de escritura en /etc) # db_load -T -t hash -f usuarios /etc/vsftpd_login.db
Con esto hemos creado /etc/vsftpd_login.db, ahora nos aseguramos que los permisos son lo más restrictivo posible: # chmod 600 /etc/vsftpd_login.db
Una vez creada nuestra base de datos, necesitamos crear un archivo PAM para indicar que use nuestra base de datos. Para ello incluimos estas líneas en el fichero /etc/pam.d/vsftpd (se recomienda realizar una copia de seguridad de este fichero antes de modificarlo): auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
En el fichero vsftpd.conf debemos tener la siguiente directiva:
pam_service_name=vsftpd
Ahora vamos a crear a nuestro usuario 'fantasma', para esto hacemos: # useradd -d /home/ftp fantasma He creado el usuario 'fantasma' dentro de /home/ftp o cualquier otro directorio.
Ya tenemos casi todo, nos falta crear una buena configuración. Para esto vamos a por el archivo vsftpd.conf que se encuentra en /etc/vsftpd
Como ya comentamos antes, vamos a configurarlo de tal manera que no permitamos usuarios anónimos, y sí autenticados
anonymous_enable=NO local_enable=YES
Si queremos que nuestros usuarios no tengan posibilidad de escribir, hacemos:
write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO
Y con esto enjaulamos al 'fantasma', de forma que tome como raíz su directorio $HOME chroot_local_user=YES
Y ahora el puntito final en lo que a la configuración de usuarios se refiere. guest_enable=YES guest_username=fantasma
Con esto estamos diciendo que todos los usuarios sean 'fantasma' a nivel de usuario en nuestro servidor.
Si ahora entramos en nuestro servidor, nos va a decir que 150 Here comes the directory listing. 226 Transfer done (but failed to open directory).
Puesto que no tenemos permisos suficientes ... Una vez aqui, alguno se preguntará y ¿como hacemos ahora para bajar/subir los archivos, si le servidor no nos deja ni movernos?
La explicación es sencilla, lo que hemos hecho es crear un entorno lo más seguro posible, que se adapte a nuestras exigencias. Pero, ahora lo que vamos a hacer es definir permisos usuario por usuario. Y eso lo vamos a conseguir con la opción 'user_config_dir', que nosotros vamos especificarla en '/etc/vsftpd/users', de la siguiente manera user_config_dir=/etc/vsftpd/users
Creamos los directorios /etc/vsftpd/users, para luego meter las características de nuestros usuarios.
Ahora sólo nos queda definir usuario a usuario los permisos de cada uno. Para ello lo único que tenemos que hacer es crear un archivo por usuario, con el nombre del mismo dentro de /etc/vsftpd/users, especificando las opciones 'extras' que queremos que tenga cada uno de ellos. Por ejemplo a pepe, le vamos a permitir 'ver' y descargar lo que hay en /data, para ello como indicamos antes, creamos el archivo /etc/vsftpd/users/pepe
dirlist_enable=YES download_enable=YES local_root=/data write_enable=NO anon_world_readable_only=NO
Y a paco, le vamos a permitir escribir en /home/ftp, para lo cual creamos otro archivo pero esta vez se llama paco, que contenga
dirlist_enable=YES download_enable=YES local_root=/home/ftp anon_upload_enable=YES anon_world_readable_only=NO write_enable=YES
Y así usuario a usuario podemos determinar los privilegios de cada uno, y dejarles enjaulados donde nosotros queramos, sin que puedan fisgar por el resto de nuestro sistema. Como no queremos que los usuarios del sistema puedan acceder, lo que hacemos es ponerlo explícitamente como indicamos ahora
Crearemos una lista de usuarios a los que se deniega el acceso, y la guardamos en /etc/vsftpd.ftpusers o /etc/vsftpd/denied_users si es debian. (hacer primero una copia de seguridaddel fichero)
Para ello se puede agregar la salida del siguiente comando que nos da la lista de usuarios del stma al fichero /etc/vsftpd.ftpusers, donde se encuentran la lista de usuarios a los que se deniega el acceso vía ftp:
#cat /etc/passwd | cut -d ":" -f 1 | sort o bien podemos eliminar el fichero original: #cat /etc/passwd | cut -d ":" -f 1 | sort > /etc/vsftpd.ftpusers
Si te estás preguntando porqué no queremos que los usuarios del sistema puedan iniciar sesión en el servidor ftp, la respuesta es por seguridad, puesto que los usuarios suelen tener más permisos de los necesarios en el ftp, además, los login/passwd en ftp van en texto claro, siendo muy propensas a ser esnifadas, y pueden comprometer la seguridad del servidor.
Finalmente
Con todo esto, hemos conseguido configurar el servidor de vsftpd, con usuarios fantasma, y estableciendo una configuración personalizada por cada usuario. De esta manera se consigue una mayor versatilidad a la hora de configurar el servidor, y una mayor seguridad.
Si quieres el fichero en formato pdf, puedes descargarlo pulsando aquí.
|