# vsftpd [TOC] ## Esquema general ftp - decidir si volem permetre l'accés als comptes: - anònim - del sistema - virtuals - decidir si poden desplaçar-se fóra del seu directori privat - decidir si volem accés segur (xifrat) o no (sense certificat) ## Generació de certificat - autosignat (per defecte: cert-ssl) - autosignat (openssl) - mkcert - certbot ## comptes virtuals L'ús de comptes virtuals se pot realitzar en base a: - fitxers (en local o remot) - base de dades relacional (local o remota) - servei d'autenticació (local o remot) ## eines per gestionar les bases de dades locals en fitxers - **db-util** (debian) - Eines de Base de Dades de Berkeley - **htpasswd** - utilitat del paquet **apache2-utils** - **ftpasswd** - Utilitat del paquet **proftpd** ## autenticació i autorització A linux, la manera elegant de tractar l'autenticació per part de les aplicacions és fer servir el sistema PAM: l'aplicació incorpora la bibliteca PAM i després configura com gestiona l'accés amb un fitxer de configuració a /etc/pam.d ## cas pràctic Configuració del servidor vsftp per: - no permetre l'accéss al compte anònim - accés amb comptes virtuals - limitació de moviment al home dir (chroot) - accés amb certificat (autosignat per defecte: snakeoil) ### creació de la base de dades ``` ## creació bbdd (base de dades) # el fitxer se genera a /tmp i s'elimina després de generar la base de dades tee /tmp/virtuals.txt << EOF demo01 passdemo01 demo02 passdemo02 EOF sudo apt install -y db-util sudo db_load -T -t hash -f /tmp/virtuals.txt /etc/vsftpd-virtual-user.db sudo chmod 600 /etc/vsftpd-virtual-user.db rm /tmp/virtuals.txt ``` ### creació del fitxer d'autenticació PAM ``` ## ## generació de fitxers pam ## sudo tee /etc/pam.d/vsftpd.virtual << EOF #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd-virtual-user account required pam_userdb.so db=/etc/vsftpd-virtual-user session required pam_loginuid.so EOF ``` ### creació dels directoris ``` ## ## Creació dels directoris ## #> anònim sudo mkdir -p /srv/ftp/pub sudo tee /srv/ftp/pub/demo-anon.txt << EOF hola k ase EOF sudo mkdir -p /etc/vsftp/virtual-users #> comptes virtuals for i in demo01 demo02; do sudo mkdir -p /srv/ftp/virtuals/$i/data sudo chown -R ftp:ftp /srv/ftp/virtuals/$i sudo tee /etc/vsftp/virtual-users/$i << EOF local_chroot=/srv/ftp/virtuals/$i/data EOF done ``` ### fitxer de configuració /etc/vsftpd.conf ``` ### heredoc document sense substitució de variables: EOF entre cometes simples. sudo tee /etc/vsftpd.conf << 'EOF' ## https://access.redhat.com/documentation/es-es/red_hat_enterprise_linux/4/html-single/reference_guide/index#ch-ftp ## https://manpages.debian.org/bookworm/vsftpd/vsftpd.conf.5.en.html ## http://slacksite.com/other/ftp.html ## https://www.zeppelinux.es/instalacion-y-configuracion-del-servidor-ftp-vsftpd-en-linux-debian/#an_n24 ## https://tbellembois.github.io/VSFTPD.html ## https://puerto53.com/linux/configuracion-de-ftp-con-vsftp/ #### certificat: sí #### accés: sols homedir (a.k.a. chroot) #### comptes: anònim no + virtual users si + comptes sistema no #### localitzacions: #### - /srv/ftp/pub > anonim #### - /srv/ftp/virtuals/comptexx > virtuals #### # funcionament: com engega el servei (obligatoris aquests dos i no se permet qualsevol combinació!!) listen=NO listen_ipv6=YES # debug # -- debian #debug_ssl=YES # anònim # -- debian anonymous_enable=NO # -- rh anon_mkdir_write_enable=NO anon_root=/srv/ftp/pub anon_upload_enable=NO anon_world_readable_only=YES ftp_username=ftp no_anon_password=NO # -- debian allow_anon_ssl=NO anon_other_write_enable=NO no_anon_password=NO # local_user # -- rh local_enable=YES guest_enable=YES guest_username=ftp local_root=/srv/ftp/virtuals/$VIRTUALUSER/data #local_umask chmod_enable=NO chroot_list_enable=NO #chroot_list_file= chroot_local_user=YES user_config_dir=/etc/vsftpd/virtual-users user_sub_token=$VIRTUALUSER # Set the name of the PAM service vsftpd will use pam_service_name=vsftpd.virtual #pam_service_name=vsftpd.virtual-and-system virtual_use_local_privs=YES allow_writeable_chroot=YES # cert - local force_anon_data_ssl=NO force_anon_logins_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_enable=YES ssl_request_cert=NO ssl_tlsv1=YES rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key # -- ftps # require_cert # -- # # transferències download_enable=YES chown_uploads=NO chown_username=NO write_enable=YES # -- debian delete_failed_uploads=YES # log dual_log_enable=YES log_ftp_protocol=YES syslog_enable=NO #vsftpd_log_file xferlog_enable=YES xferlog_file=/var/log/xferlog #xferlog_std_format EOF ```