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:
Configuramos vsftpd del siguiente modo:
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:
mkdir /home/user001
chown -R user001:user001 /home/user001
Configuramos los parĂĄmetros del usuario en cuestiĂłn:
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:
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:
user001
PASS
Generamos el fichero en formato BerkleyDB:
Generamos el certificado:
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:
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:
net-ftp/lftp -gnutls ssl openssl
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