Esta pagina se ve mejor con JavaScript habilitado

Vsftpd bajo Gentoo

 ·  🎃 kr0m

Vsftpd tiene fama de ser uno de los servidores ftp mas seguros que existen en la actualidad, en este artĂ­culo conseguiremos tener nuestro servidor Vsftpd funcionando bajo SSL ya que ftp no ofrece ningĂșn tipo de cifrado de forma nativa.

Como de costumbre empezamos instalando el software necesario:

emerge -av vsftpd

Configuramos vsftpd del siguiente modo:

vi /etc/vsftpd/vsftpd.conf

vsftpd_log_file=/var/log/vsftpd.log
local_enable=YES
use_localtime=YES
anonymous_enable=NO
async_abor_enable=YES
chmod_enable=NO
ftpd_banner=Alfaexploit File Transfer Protocol
connect_from_port_20=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/users
download_enable=NO
dirlist_enable=NO
write_enable=NO
listen_port=21
max_clients=25
max_login_fails=2
chroot_local_user=YES
guest_enable=YES
pam_service_name=vsftpd
guest_username=nobody
hide_ids=YES
listen=YES
pasv_enable=YES
#userlist_enable=NO
#userlist_deny=NO
dirmessage_enable=YES
xferlog_enable=YES

# ssl

require_ssl_reuse=NO
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
#force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem

# passive port range
pasv_min_port=60000
pasv_max_port=60500

A pesar de utilizar un fichero externo como base de datos para los usuarios es necesario tener un home dir:

useradd user001
mkdir /home/user001
chown -R user001:user001 /home/user001

Configuramos los parĂĄmetros del usuario en cuestiĂłn:

vi /etc/vsftpd/users/user001

dirlist_enable=YES
download_enable=YES
local_root=/home/user001
write_enable=YES
anon_world_readable_only=NO
local_umask=027 # 640 for files , 750 for dirs
#file_open_mode=0640
guest_username=user001
allow_writeable_chroot=YES

Le indicamos a vsftp como debe autenticar los usuarios:

vi /etc/pam.d/vsftpd

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_users
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_users

Añadimos el usuario y el pass del usuario:

vi /etc/vsftpd/vsftpd_users.txt

user001
PASS

Generamos el fichero en formato BerkleyDB:

db4.8_load -T -t hash -f /etc/vsftpd/vsftpd_users.txt /etc/vsftpd/vsftpd_users.db

Generamos el certificado:

cd /etc/vsftpd/
openssl genrsa -out ftpserver.key 2048
openssl req -new -key ftpserver.key -out ftpserver.csr
openssl x509 -req -days 3650 -in ftpserver.csr -signkey ftpserver.key -out ftpserver.crt
cat ftpserver.key » ftpserver.pem
cat ftpserver.crt » ftpserver.pem
chmod 400 ftpserver.*
mv ftpserver.pem vsftpd.pem

Reiniciamos el servicio:

/etc/init.d/vsftpd restart

El siguiente error es causado debido a un bug en vsftp, este se manifiesta cuando el directorio remoto tiene mas de 32 ficheros y vsftpd estĂĄ corriendo con un kernel 3.5.0 bajo 64bits:

500 OOPS: priv_sock_get_cmd

Tendremos que deshabilitar el sandbox():

seccomp_sandbox=NO

Si queremos comprobar el SSL podemos instalar lftp:

vi /etc/portage/package.use/lftp

net-ftp/lftp -gnutls ssl openssl
emerge -av lftp
vi ~/.lftprc
set ftp:ssl-force true; --> Forzamos que el login sea cifrado
set ssl:verify-certificate false; --> No hace falta que el certificado sea de confianza

debug 9
user USER PASS
Si te ha gustado el artĂ­culo puedes invitarme a un RedBull aquĂ­