Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

martes, 25 de febrero de 2014

Instalar vsftpd y usuarios virtuales (Berkeley) y enjaulado en Ubuntu 12.04.04 (chroot virtual user in vsftpd)


vsftpd, son las siglas de  "Very Secure FTP Daemon".Es un servidor FTP para sistemas GNU/Linux o Unix. Esta licenciado bajo GNU General Public License. soporta IPv6 y SSL.
vsftpd soporta de manera explícita (desde la 2.0.0) y implícita (desde 2.1.0) FTPS.
vsftpd es el servidor FTP por defecto de las distribuciones Ubuntu, CentOS, Fedora, NimbleX, Slackware y RHEL Linux.

Instalación

apt-get install vsftpd libdb4.7 libdb4.7-dev db4.7-util

Configuración

Para editar la configuración del vsftpd es tan facil como editar las preferencias que queremos en el archivo /etc/vsftpd.conf . Habitualmente nos fijaremos en estas opciones:

cat vsftpd.conf
listen=YES
anonymous_enable=NO
guest_enable=YES
guest_username=ftp

local_enable=YES
write_enable=YES
user_config_dir=/etc/vsftpd/users
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
local_umask=022
ftpd_banner=Welcome to a very very secret service.

chroot_list_enable=YES

chown_uploads=YES
chown_username=ftp
virtual_use_local_privs=YES
secure_chroot_dir=/var/run/vsftpd/empty
user_sub_token=$USER
local_root=/vsftpd/$USER
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem



Lo que hace cada opción se ve muy bien explicado en los comentarios del propio archivo.Os aconsejo hacer un 'man vsftpd.conf'

Como lo que queremos son usuarios virtuales, y no usuarios del sistema, lo que haremos es crear una base de datos con usuarios-contraseñas y le diremos al vsftpd que use dicha base de datos. Podemos usar MySQL o Berkeley.db. En muchos casos Berkeley nos será suficiente aunque usar MySQL és más versátil a la hora de añadir y borrar usuarios facilmente. Para este tutorial usaremos Berkeley. Primero creamos un txt con el formato siguiente:

cat usuarios-ftp.txt
eddy
momami
paco
potroski

En donde los usuarios son eddy (con contraseña momami) y paco  (con contraseña potroski).

Ahora creamos la base de datos Berkeley:

db4.7_load -T -t hash -f usuarios-ftp.txt /etc/vsftpd_login.db

luego le damos los permisos adecuados a /etc/vsftpd_login.db:

chmod 600 /etc/vsftpd_login.db

El archivo de usuarios-ftp.txt lo podemos borrar o hacer una copia de seguridad por si tuviéramos que añadir nuevos usuarios. También circula por internet un script que automatiza el gestionar usuarios de una base de datos Berkeley.
Ahora tendremos que hacer que el sistema de autenticación PAM lea para vsftpd de nuestra base de datos:

cat /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash


Con esto ya tendremos a nuestros usuarios virtuales creados y validados. Como hemos puesto la directiva local_root=/vsftpd/$USER del /etc/vsftpd.conf, una vez validado el usuario irá a mirar ese directorio (en donde $USER es una variable que contiene el nombre de usuario). Así pues, debe existir y con privilegios para el usuario ftp, tal como hemos indicado en la directiva guest_username=ftp :

mkdir -p /vsftpd/{eddy,paco}
chown -R ftp:ftp /vsftpd

Ahora ya tenemos usuarios validados y con carpeta personal. Lo que nos interesa ahora es enjaularlos en dicha carpeta para que no puedan salir. Esto lo hacemos con la directiva del /etc/vsftpd.conf siguiente:

chroot_list_enable=YES

Con esta directiva lo que hacemos es enjaular a todos los usuarios que esten en la lista /etc/vsftpd.chroot_list . Así pues en nuestra intencion de que los usuarios virtuales eddy y paco entren en nuestro ftp, demanera enjaulada pondremos lo siguiente en ese archivo:
 
cat /etc/vsftpd.chroot_list
eddy
paco



Y con esto daríamos por finalizada la configuración de nuestro vsftpd con usuarios virtuales y enjaulados.








That u don't know what you've got 'til it's gone