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.
- Obrir la connexió de control.
- Obrir la connexió de dades. Informa que escoltarà pel port M.
- Callback mode actiu.
- Transferència de dades.
- 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.
- Obrir la connexió de control.
- Obrir la connexió de dades. Pregunta pel port de dades del servidor.
- Escoltaré pel port J.
- Transferència de dades.
- 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
- Cal escriure: `ftp://[usuari:contrasenya@]ip-o-nom-servidor`.
- Exemple: ftp://joan:[email protected].
- Exemple (sense usuari): ftp://ftp.microsoft.com (apareixerà una finestra de validació).
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