Configuración de vsftpd con usuarios fantasma.
Introducción
y Objetivos
Vamos a instalar y configurar un servidor de ftp, en este caso lo vamos
a hacer con vsftpd.
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 archivo de
configuración 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.
Instalación
Como tenemos un sistema con debian :P la instalación es
extremadamente simple, con hacer
-
# apt-get install vsftpd
ya tenemos instalado el servidor.
Configurando
Una vez instalado, nuestro debian lo inicia por nosotros con la
configuración que viene por defecto. Así que
podemos probar a conectarnos a nosotros mismos para ver que realmente
funciona.
Para ver todas las opcines de forma detallada hacemos
-
# man vsftpd.conf
Aqui nos aparecerán muchísimas opciones,
así como el estado por defecto en el que se encuentran (Las
opciones más relevantes para el caso que nos ocupan, vienen
detalladas en el Apéndice). Es decir si nuestro archivo de
configuración [1] se encontrase en blanco, el estado de las
opciones se encontrarán tal y como aparecen aquí.
En el Apéndice, están comentadas muchas de las
opciones.
Para indicarle los usuarios que queremos, hacemos uso de db3
(Berkereley db), sino lo tenemos instalado, hacemos:
-
# apt-get install libdb3
Lo que hacemos ahora es crear un archivo con los login / passwords que
queramos en formato db, para ello creamos un archivo de texto, y
metemos logins y passwords en lineas altenas, 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 users).
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)
-
# db3_load -T -t hash -f users /etc/vsftpd_login.db
Con esto hemos creado /etc/vsftpd_login.db, ahora nos aseguramos que
los permisos son lo más resctrictivo 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:
-
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
que básicamente lo que hacen es direccionar a nuestra base
de datos. Una vez lo tengamos, lo copiamos a /etc/pam.d/vsftpd
**OJO aqui, en otras distribuciones que no son debian, hay que copiarlo
a /etc/pam.d/ftp no a /etc/pam.d/vsftpd.
Si miramos en [1] (en debian) vemos que aparece esto:
-
pam_service_name
This string is the name of the PAM service vsftpd will use.
Default: vsftpd
Por lo tanto, o lo copiamos a vsftpd o indicamos pam_service_name=ftp,
o lo que queramos.
Ahora vamos a crear a nuestro usuario \'fantasma\', para esto hacemos:
-
# useradd -d /srv/ftp fantasma
He creado el usuario \'fantasma\' dentro de /srv/ftp.
Ya tenemos casi todo, nos falta crear una buena
configuración. Para esto vamos a por el archivo vsftpd.conf
que se en cuentra en /etc
Como ya comentamos antes, vamos a configurarlo de tal manera que no
permitamos usuarios anónimos,
-
anonymous_enable=NO
local_enable=YES
Si queremos que nuestros usuarios no tengas 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\'
-
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.
El resto de opciones, como ya comentamos antes vienen correctamente
explicadas en [1].
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
Como no queremos que los usuarios del sistema se logueen, lo que
hacemos es ponerlo explicitamente como indicamos ahora
Creamos los directorios /etc/vsftpd y /etc/vsftpd/users, para luego
meter las características de nuestros usuarios.
Cremos una lista de usuarios a los que se deniega el acceso, y la
guardamos en /etc/vsftpd/denied_users
Para crear la lista, podemos hacerlo por ejemplo así
-
# cat /etc/passwd | cut -d \":\" -f 1 | sort >
/etc/vsftpd/denied_users
Si te estás preguntando porqué no queremos que
los usuarios del sistema se logueen, la respuesta es: por seguridad,
puesto que los usuarios suelen tener más persmisos 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.
Ahora solo nos queda definir usuario a usuario los permisos de cada
uno. Para ello ló unico 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 /srv/ftp, para lo cual
creamos otro archivo pero esta vez se llama paco, que contenga
-
dirlist_enable=YES
download_enable=YES
local_root=/srv/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.
Finalmente
Con todo esto, hemos conseguido conseguido configurar el que para
mí es el mejor servidor de ftp, con usuarios fantasma, y
estableciendo una configuración personalida por cada
usuario. De esta manera se consigue una mayor versatilidad a la hora de
configurar el servidor, y una mayor seguridad.
Apéndice
Entre las opciones destacables para nuestro propósito caben
destacar estas:
-
Este parámetro se utiliza para definir si se
permitirán los accesos anónimos al servidor de
archivos. En nuestro caso seleccionamos NO queremos accesos
anónimos, por lo tanto seleccionamos NO.
-
Si este parámetro es YES, el usuario local estará
enjaulado en lo que hayamos definido como su home
-
Si está habilitado, todos los logins no anónimos
(en nuestro caso todos), serán lo que hemos llamado usuarios
\'fantasma\'. Es decir cualquier login será mapeado como
\'fantasma\'. Nota: nosotros hemos creado un usuario en el sistema
llamado \'fantasma\', puedes ponerle el nombre que quieras, muchos lo
llaman \'virtual\'. Este parámetro va asociado a
guest_username, que es donde definimos el nombre de usuario \'fantasma\',
en nuestro caso también es fantasma.
-
Ver guest_enable.
-
Si está habilitado, vsftpd iniciará en modo
\'standalone\'. Esto quiere decir que no debe ser iniciado por
algún inetd, y en su lugar se ejecutará
directamente.
-
Si vsftpd se encuentra en modo standalone, inidicamos la
dirección en la que estará escuchando.
-
Este parámetro permite que los usuarios locales pueden
acceder al ftp. En nuestro caso vamos a seleccionar que YES, puesto que
vamos a crear un solo usuario \'fantasma\' que acceda al servidor.
-
Indica el servicio PAM que usará vsftpd, en nuestro caso
como habíamos copiado la base de datos a /etc/pam.d/vsftpd,
lo llamamos vsftpd.
-
Con esta opción como hemos explicado antes, podemos
\'añadir\' permisos usuario por usuario, creando archivos
simples de texto con los permisos por usuario que queramos. En esta
opción se define el directorio en el que vamos a guardar
esos archivos.
-
Si está habilitado, los nombres de usuario que haya en el
archivo indicado por userlist_file, no podrán acceder,
siendo rechazados ANTES de que introduzcan el password, de esta manera
evitamos que el password en claro de usuarios privilegiados, vaya en
claro por la red.
-
Ver userlist_enable.
El resto de opciones las podemos ver detalladas en [1]
--
Copyright chacal 2005 - versión 1.0
La última versión de este documento la puedes
encontrar aquí
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, and with no Front-Cover Texts, and with no
Back-Cover Texts. Full text of the license is at file
/usr/share/doc/gnome-core/html/fdl/C/index.html on your Debian system.
- Inicie sesión o regístrese para enviar comentarios
- 22882 lecturas
