Guia Completa de FTP: Protocol, Configuració i Seguretat amb VsFTPd

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en catalán con un tamaño de 13,42 KB

FTP: Protocol de Transferència de Fitxers

Objectiu

  • Transmissió i compartició de fitxers a través de la xarxa.

Característiques

  • Transmissió de fitxers a través de la xarxa (1971).
  • També permet l'administració d'aquests (esborrar, moure, etc.).
  • Arquitectura client-servidor.
  • Autenticació mitjançant usuari i contrasenya. No hi ha garanties de seguretat.
  • Usuari i contrasenya enviats en text pla.
  • Full duplex.

El Protocol FTP

Detalls del Protocol

  • Protocol: File Transfer Protocol.
  • Xarxes TCP/IP: Independent del sistema operatiu.
  • Ports:
    • Port 21: Port de control. Connexió sempre establerta pel client.
    • Port 20: Port de dades per defecte.

FTP Passiu vs. Actiu

Mode Actiu

  • Els passos 2 a X es duen a terme cada vegada que es transmet un fitxer.
  1. Obrir la connexió de control.
  2. Obrir la connexió de dades. Informa que escoltarà pel port M.
  3. Callback mode actiu.
  4. Transferència de dades.
  5. X) Tancar connexió al finalitzar transferència de dades.
  • Amb el mode actiu podem tenir problemes amb *firewalls* perquè el servidor intenta comunicar-se des del seu port 20 a un port del client > 1024.

Mode Passiu

  • Els passos 2 a X es duen a terme cada vegada que es transmet un fitxer.
  1. Obrir la connexió de control.
  2. Obrir la connexió de dades. Pregunta pel port de dades del servidor.
  3. Escoltaré pel port J.
  4. Transferència de dades.
  5. X) Tancar connexió al finalitzar transferència de dades.

Tipus de Transferència

  • Binari: Transmissió bit a bit.
  • ASCII: Transmissió byte a byte. Pot causar problemes de corrupció amb canvis de sistema de fitxers.

Usuaris, Permisos i Quotes

Usuaris i Grups

Usuari Anònim

  • També pot ser *guest* o *ftp*.
  • Directori *home*: `/srv/ftp`.
  • Contrasenya: sense | qualsevol compte de correu.
  • Necessari: `anonymous_enable`.

Usuaris Locals

  • Necessari: `local_enable`.

Engabiar Usuaris (Chroot)

  • Un usuari engabiat no pot escalar en la jerarquia de directoris.

Permisos

Es poden predefinir els permisos amb què es pujaran els fitxers amb els paràmetres:

  • `local_umask`
  • `anon_umask`
  • S'ha de posar una màscara de permisos inversa. Per calcular-la, restem dels permisos màxims (777) els que volem posar. Per exemple, per a 555, calcularíem 777-555; per tant, la màscara seria 222.

Quotes de Disc

  • Les quotes seran les del propi sistema.
  • Per configurar quotes, utilitzeu les ordres:
dmesg | grep quotas
sudo apt-get install quota quotatool
sudo nano /etc/fstab

En el nostre cas, assignarem quotes al directori `/home` del sistema, per la qual cosa buscarem la línia que fa referència al mateix:

UUID=24e18f86-beac-4f34-96a2-b6de5d33da71 /home           ext4    defaults          0       2

Una vegada localitzada, inclourem els arguments que informen el sistema que el volum indicat podrà tenir quotes per als usuaris i per als grups (`usrquota` i `grpquota`).

UUID=24e18f86-beac-4f34-96a2-b6de5d33da71 /home           ext4    defaults,usrquota,grpquota          0       2

Després, premeu Ctrl+O, després Ctrl+X.

sudo mount -o remount,rw /home

En el nostre cas, com és la primera vegada que usem les quotes, els arxius de quota no existeixen en el sistema de fitxers. Per aquest motiu, usarem l'argument `-c`, que permet crear-los de forma automàtica.

sudo quotacheck -cgu /home

Els arguments `-g` i `-u` fan que es comprovin tant els grups com els usuaris.

Configurar Quotes per a Usuaris i Grups

sudo edquota -u usuari
sudo edquota -g grup

Límits d'Ample de Banda

  • Per defecte, no té límit d'ample de banda, però els podem afegir.

Comandes de Client FTP

  • Breu descripció de comandes d'FTP. Per veure-les totes, amb l'ordre `help` del client FTP podem obtenir més informació.

Connexió

`ftp`: Ordre que obre connexió i permet la transferència de fitxers (File Transfer Protocol).

`ftp nom_màquina/IP`: S'estableix una connexió FTP amb la màquina remota.

Gestió de la Connexió

  • `open host`: Connexió amb el servidor.
  • `user nom-usuari`: Per fer *login*.
  • `close` o `disconnect`: Tancar sessió.
  • `quit` o `bye`: Ordre de sortida de l'FTP.

Control de Transferència

  • `set {bin/binary/ascii}`: Estableix el tipus de transferència (ASCII / binari).
  • `glob`: Commuta a actiu (`on`) o no actiu (`off`) els metacaràcters com "*".
  • `pasv`: Activa el mode passiu.
  • `bin`: Força la transferència en binari.
  • `umask`: Configura el sistema de permisos remot.

Navegació de Directoris

  • `cd`: Permet canviar de directori a la màquina remota.
  • `lcd`: Ens diu el directori actual en la nostra màquina local, o permet canviar de directori a la màquina local.
  • `pwd`: Mostra el nom del directori remot.
  • `lpwd`: Mostra el nom del directori local.
  • `ls` o `nlist`: Admet l'ordre per llistar fitxers (també és vàlida l'ordre `dir`).
  • `mdir` o `mls`: Comportament idèntic a `ls` excepte que podem especificar múltiples fitxers remots.

Transmissió de Fitxers

  • `get fitxer-remot fitxer-local`: Baixa el fitxer a la teva màquina al directori actual de treball.
  • `mget fitxers-remots`: *Massive get*. Permet utilitzar caràcters especials com "*".
  • `newer fitxer-remot`: Fa un *get* només si la data del remot és més nova que la del local.
  • `put fitxer-local`: Transfereix `fitxer-local` a la màquina remota.
  • `mput fitxers-locals`: *Massive put*. Permet utilitzar caràcters especials com "*".
  • `hash`: Marca amb `#` l'estat de la transferència (el `#` pot ser 1Kb., 2Kb., ...).

Gestió de Fitxers Remots

  • `rename`: Reanomena fitxers.
  • `rm` o `del arxiu`: Esborra arxiu.
  • `mkdi directori-remot`: Crea el directori en el servidor.
  • `lmkdi directori-local`: Crea el directori en el client.

Ajuda

  • `?`: Mostra l'ajuda.

Altres Clients FTP

  • Mentre configurem FTP, cal provar-ho tot amb el client en entorn de comandes.
  • Clients FTP gràfics: Utilitats com *gFTP* (Gnome Linux) i *Filezilla* (Windows, Linux).
  • Explorador d'arxius: Obrir una finestra de *Nautilus*, menú > Vés > Ubicació > Escriure: `ftp://[usuari:contrasenya@]ip-o-nom-servidor`.

Navegador Web

Hem de comprovar que el servidor funciona i fa el que es demana:

  • Des d'un client de consola (proves amb diferents usuaris, pujar i baixar fitxers, provar restriccions, etc.).
  • Des d'un navegador web i explorador d'arxius tipus *Nautilus* (proves amb diferents usuaris, pujar i baixar fitxers, provar restriccions, etc.).
  • Des dels clients gràfics *Filezilla* i *gFTP* des de Windows i Linux (proves amb diferents usuaris, pujar i baixar fitxers, provar restriccions, etc.).

Configuració de VsFTPd

Instal·lació del Servei

sudo apt-get install vsftpd

Fitxer de Configuració

/etc/vsftpd.conf

Logs

/var/log/vsftpd.log

Gestió del Servei

/etc/init.d/vsftpd {start|stop|restart|status}
service vsftpd {start|stop|restart|status}
{start|stop|restart|status} vsftpd

Configuració d'Usuari Anònim

  • Usuari per defecte: `FTP` (usuari anònim).
  • No té contrasenya.
  • Directori per defecte: `/srv/ftp`.
cat /etc/passwd | grep ftp

Per modificar-lo assignant un nou directori *home* a l'usuari:

sudo usermod -d NOVA_HOME ftp

Directives Bàsiques de VsFTPd

  • `anonymous_enable = YES/NO`: Permetre l'usuari anònim.
  • `local_enable = YES/NO`: Permetre usuaris autenticats.
  • `anon_upload_enable = YES/NO`: Permetre pujar fitxers als usuaris anònims (requereix que `write_enable` estigui activat).
  • `write_enable = YES/NO`: Permetre pujar fitxers als usuaris.
  • `anon_mkdir_write_enable = YES/NO`: Permetre a l'usuari anònim crear directoris.
  • `ftpd_banner = Benvingut al meu servidor`: Mostrar un missatge de benvinguda en connectar-se al servidor.

Directives de Límits

  • `anon_max_rate = 10240`: Limitar l'ample de banda de l'usuari anònim a 10 KB/s.
  • `local_max_rate = 10240`: Limitar l'ample de banda dels usuaris a 10 KB/s.
  • `max_clients = 3`: Limitar a 3 el nombre total de clients (des de qualsevol IP) que es poden connectar.
  • `max_per_ip = 3`: Limitar a 3 el nombre de sessions obertes des d'una adreça IP concreta.

Gàbies (Chroot)

  • `chroot_local_user = YES/NO`: Fer que tots els usuaris autenticats estiguin engabiats.
  • `chroot_list_enable = YES/NO`: Indicar si hi ha una llista d'usuaris que són excepcions a `chroot_local_user`.
  • `chroot_list_file = /etc/vsftpd.chroot_list`: Indicar on es troba el fitxer de la llista de control d'usuaris d'excepció.

Altres Directives

  • `local_umask`: Màscara de permisos inversa amb què es pujaran els fitxers els usuaris locals.
  • `anon_umask`: Màscara de permisos inversa amb què es pujaran els fitxers de l'usuari anònim.

Directives de Mode Passiu

Configurar el mode passiu (recordeu que al *firewall* del servidor s'hauria d'obrir el rang de ports que determinem amb `pasv_min_port` i `pasv_max_port`). Poseu un rang curt per assegurar-vos quins ports s'obren, per exemple de 1025 fins a 1027. Proveu a descarregar sense mode passiu (el servidor obre el port 20 per connectar-se al client) i amb mode passiu (el servidor obre un port en mode *LISTEN* del rang definit):

  • `pasv_enable = YES/NO`: Permetre el mode passiu quan el client el demani. Per defecte és `YES`.
  • `pasv_min_port = num`: Número de port mínim a utilitzar.
  • `pasv_max_port = num`: Número de port màxim a utilitzar.

Per comprovar en temps real els ports que s'obren quan es fan connexions des dels clients, obrim una consola al servidor i escrivim:

sudo watch "netstat -atunp | grep vsftpd"

Si no fem servir `watch`, haurem de tornar a escriure `netstat` cada vegada que vulguem veure els ports oberts.

Des del client, forcem el mode passiu amb l'ordre `passive` del client FTP.

Si us fixeu en el client gràfic *Filezilla*, entre les ordres que apareixen a la finestra superior, veurem que força el mode passiu d'entrada. Això es pot canviar en la configuració de preferències del client.

Configuració SSL amb VsFTPd

Actualització de la Configuració

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

Creació del Certificat SSL

Crear el certificat (en una sola línia):

sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/vsftpdserverkey.pem -out /etc/ssl/certs/vsftpdcertificate.pem -days 365

Ubicació del Certificat i la Clau

rsa_cert_file=/etc/ssl/certs/vsftpdcertificate.pem
rsa_private_key_file=/etc/ssl/private/vsftpdserverkey.pem

Prova de SSL per Línia de Comandes

lftp -u USUARI IP
set ssl:verify-certificate no

Configuració Automàtica d'lftp

A `/home/usuari/.lftprc` configurar paràmetres automàtics:

set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-certificate no

Ús d'lftp amb Configuració Automàtica

Després ja es pot cridar així:

lftp -u USUARI IP

Entradas relacionadas: