Salta el contingut

Pràctica :Desplegament d'un Servei FTP Corporatiu amb Docker i vsftpd

Escenari Professional

L'empresa TechFiles SL necessita implementar un servei de transferència de fitxers per gestionar l'intercanvi de documents amb clients i proveïdors. Com a administrador de sistemes, heu de desplegar una solució FTP containeritzada que compleixi amb els requisits de seguretat i accessibilitat de l'empresa.

Durada estimada: 4-5 hores

Important: Aquesta pràctica és una guia i pot tenir alguns errors que haureu de detectar i solucionar


Objectius de l'escenari final

Al final de la pràctica tindreu un servidor FTP completament funcional amb:

  • Accés per usuaris autenticats amb directoris personalitzats
  • Accés anònim restringit per descàrregues públiques
  • Límits de connexions i ample de banda
  • Suport per modes actiu i passiu
  • Documentació completa del servei

CA4a: Utilitat i mode d'operació del servei FTP

Tasca 1: Anàlisi teòrica del servei

Responeu les següents qüestions (a entregar amb la documentació final):

  1. Què és FTP i quina és la seva utilitat? Expliqueu almenys 3 casos d'ús empresarials.

  2. Modes de connexió FTP:

  3. Descriviu el mode actiu: quin client inicia la connexió de dades? Quins ports s'utilitzen?
  4. Descriviu el mode passiu: per què es va crear? Quin problema resol?

  5. Diferència entre FTP i FTPS: Expliqueu les diferències de seguretat.

Referències:


CA4b: Instal·lació i configuració del servidor

Tasca 2: Preparació de l'entorn Docker

Creeu l'estructura de directoris del projecte:

mkdir -p ~/ftp-project/{config,data/{public,users},logs}
cd ~/ftp-project

Estructura esperada:

ftp-project/
├── config/
│   └── vsftpd.conf
├── data/
│   ├── public/
│   └── users/
├── logs/
├── Dockerfile
└── docker-compose.yml

Tasca 3: Creació del Dockerfile

Creeu el fitxer Dockerfile:

FROM ubuntu:24.04

# Informació del mantenidor
LABEL maintainer="nom.cognom@techfiles.sl"
LABEL description="Servidor FTP corporatiu amb vsftpd"

# Instal·lació de vsftpd i utilitats
<TO_BE_DONE>

# Creació de directoris necessaris
RUN mkdir -p /var/run/vsftpd/empty && \
    mkdir -p /home/ftpusers && \
    mkdir -p /var/ftp/public

# Configuració de permisos per l'accés anònim
RUN mkdir -p /var/ftp/public && \
    chown -R ftp:ftp /var/ftp && \
    chmod 755 /var/ftp/public

# Exposar ports FTP
# Port 21: control
# Ports 21100-21110: mode passiu
EXPOSE 21 21100-21110

# Comando d'inici
CMD ["/usr/sbin/vsftpd", "/etc/vsftpd.conf"]

Documenteu:

  • Quines avantatges/inconvenients té utilitzar vsftpd vs altres solucions de FTP?
  • Què fa la comanda mkdir -p /var/run/vsftpd/empty?

Tasca 4: Configuració inicial de vsftpd

Creeu el fitxer config/vsftpd.conf amb la configuració base:

# Configuració general
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

# Seguretat
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

# Mode passiu
pasv_enable=YES
pasv_min_port=21100
pasv_max_port=21110
pasv_address=127.0.0.1

# Missatges
ftpd_banner=Benvingut al servidor FTP de TechFiles SL

Nota: Modificareu aquesta configuració en tasques posteriors.

Tasca 5: Creació del docker-compose.yml

services:
  ftp-server:
    build: .
    container_name: techfilesftp-ncognom
    ports:
      - "21:21"
      - "21100-21110:21100-21110"
    volumes:
      - ./config/vsftpd.conf:/etc/vsftpd.conf
      - ./data/public:/var/ftp/public
      - ./data/users:/home/ftpusers
      - ./logs:/var/log
    environment:
      - TZ=Europe/Madrid
    restart: unless-stopped
    networks:
      - ftp-network

networks:
  ftp-network:
    driver: bridge

Tasca 6: Construir i iniciar el contenidor

# Construir la imatge
docker-compose build

# Iniciar el servei
docker-compose up -d

# Verificar que està funcionant
docker ps
docker logs techfilesftp-ncognom

Documenteu: Captura de pantalla de docker ps mostrant el contenidor en execució.


CA4c: Creació d'usuaris i grups

Tasca 7: Crear usuaris locals al contenidor

Necessiteu crear els següents usuaris corporatius:

  • client1: client extern amb accés limitat
  • proveidor1: proveïdor amb accés de càrrega
  • empleat1: empleat intern amb tots els permisos
# Accedir al contenidor
docker exec -it techfilesftp-ncognom bash

# Crear usuaris
useradd -m -d /home/ftpusers/client1 -s /usr/sbin/nologin client1
useradd -m -d /home/ftpusers/proveidor1 -s /usr/sbin/nologin proveidor1
useradd -m -d /home/ftpusers/empleat1 -s /usr/sbin/nologin empleat1

# Establir contrasenyes
echo "client1:Client2024!" | chpasswd
echo "proveidor1:Prov2024!" | chpasswd
echo "empleat1:Emp2024!" | chpasswd

# Crear estructura de directoris per cada usuari
mkdir -p /home/ftpusers/client1/{descarregues,pujar}
mkdir -p /home/ftpusers/proveidor1/factures
mkdir -p /home/ftpusers/empleat1/{projectes,documents}

# Assignar propietari
chown -R client1:client1 /home/ftpusers/client1
chown -R proveidor1:proveidor1 /home/ftpusers/proveidor1
chown -R empleat1:empleat1 /home/ftpusers/empleat1

# Sortir del contenidor
exit

Pregunta: Per què utilitzem /usr/sbin/nologin com a shell? Què implica per la seguretat?


CA4d: Configuració de l'accés anònim

Tasca 8: Habilitar i configurar l'accés anònim

Modifiqueu config/vsftpd.conf per afegir:

# Accés anònim
anonymous_enable=YES
no_anon_password=YES
anon_root=/var/ftp/public
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=YES
# Crear fitxers de prova a l'àrea pública
docker exec -it techfilesftp-ncognom bash
echo "Manual d'usuari FTP v1.0" > /var/ftp/public/manual.txt
echo "Política de seguretat" > /var/ftp/public/politica.txt
mkdir /var/ftp/public/drivers
echo "Driver v2.1" > /var/ftp/public/drivers/driver.txt
chown -R ftp:ftp /var/ftp/public
chmod -R 755 /var/ftp/public
exit

# Reiniciar el servei
docker-compose restart

Documenteu: Quines restriccions té un usuari anònim segons aquesta configuració?


CA4e: Establir límits en els modes d'accés

Tasca 9: Configurar límits de connexions i velocitat

Afegiu al fitxer config/vsftpd.conf:

# Límits de connexions
max_clients=50
max_per_ip=3

# Límits d'ample de banda (bytes per segon)
# Usuaris locals: 1 MB/s = 1048576 bytes/s
local_max_rate=1048576

# Usuaris anònims: 512 KB/s = 524288 bytes/s
anon_max_rate=524288

# Timeout de sessions
idle_session_timeout=300
data_connection_timeout=120

# Límits per usuaris anònims
anon_max_rate=524288
max_clients=50

Tasca 10: Crear límits per usuari específic

Creeu el fitxer config/user_limits.conf:

docker exec -it techfilesftp-ncognom bash
mkdir -p /etc/vsftpd
cat > /etc/vsftpd/user_config_dir << EOF
# Aquest directori contindrà configuracions per usuari
EOF
exit

Afegiu a config/vsftpd.conf:

# Configuració per usuari
user_config_dir=/etc/vsftpd/user_config

Creeu configuracions específiques:

docker exec -it techfilesftp-ncognom bash

# Configuració per client1 (més restringit)
cat > /etc/vsftpd/user_config/client1 << EOF
local_max_rate=524288
max_per_ip=2
EOF

# Configuració per empleat1 (menys restringit)
cat > /etc/vsftpd/user_config/empleat1 << EOF
local_max_rate=2097152
EOF

exit
docker-compose restart

Documenteu: Quins límits té cada tipus d'usuari? Creeu una taula comparativa.


CA4f i CA4g: Comprovar modes actiu i passiu

Tasca 11: Configurar el mode actiu

El mode actiu ja està configurat per defecte. Assegureu-vos que teniu a config/vsftpd.conf:

# Mode actiu
connect_from_port_20=YES
port_enable=YES

Tasca 12: Configurar el mode passiu

Actualitzeu la configuració de mode passiu a config/vsftpd.conf:

# Mode passiu
pasv_enable=YES
pasv_min_port=21100
pasv_max_port=21110
pasv_address=127.0.0.1
# Nota: Si accediu des de fora de localhost, utilitzeu la IP pública

Important: Si proveu des d'una altra màquina, canvieu pasv_address per la vostra IP.

Reinicieu el servei:

docker-compose restart

Tasca 13: Proves de mode actiu

# Instal·lar client FTP si no el teniu
sudo apt install ftp -y

# Connexió en mode actiu (per defecte)
ftp 127.0.0.1
# Usuari: empleat1
# Password: Emp2024!

# Dins de la sessió FTP:
ftp> status
ftp> ls
ftp> passive
ftp> status
ftp> ls
ftp> quit

Documenteu:

  • Captura de la sortida de status abans i després d'activar passive
  • Expliqueu les diferències que observeu

Tasca 14: Proves de mode passiu amb lftp

# Instal·lar lftp
sudo apt install lftp -y

# Connexió forçant mode passiu
lftp -u empleat1,Emp2024! -e "set ftp:passive-mode true; ls; quit" 127.0.0.1

# Connexió forçant mode actiu
lftp -u empleat1,Emp2024! -e "set ftp:passive-mode false; ls; quit" 127.0.0.1

Documenteu: Quin mode funciona millor? Per què?


CA4h: Proves amb clients en línia d'ordres i gràfics

Tasca 15: Client en línia d'ordres (ftp)

# Provar amb usuari autenticat
ftp 127.0.0.1
# Login: empleat1 / Emp2024!

# Comandos a provar:
ftp> pwd
ftp> ls
ftp> cd projectes
ftp> mkdir prova_ftp
ftp> lcd ~/Downloads
ftp> put algun_fitxer.txt
ftp> get manual.txt
ftp> delete prova_ftp/algun_fitxer.txt
ftp> rmdir prova_ftp
ftp> quit

Tasca 16: Client en línia d'ordres (lftp) - Més avançat

# Connexió i navegació
lftp -u empleat1,Emp2024! 127.0.0.1

# Comandos avançats:
lftp empleat1@127.0.0.1:~> mirror -R ~/local_folder remote_folder
lftp empleat1@127.0.0.1:~> mirror remote_folder ~/local_folder
lftp empleat1@127.0.0.1:~> du -h
lftp empleat1@127.0.0.1:~> quit

Tasca 17: Client gràfic (FileZilla)

Instal·lació de FileZilla:

sudo apt install filezilla -y

Proves a realitzar:

  1. Obriu FileZilla i creeu una connexió amb:
  2. Host: 127.0.0.1 (o la vostra IP)
  3. Usuari: empleat1
  4. Contrasenya: Emp2024!
  5. Port: 21

  6. Proveu les següents operacions:

  7. Navegar per directoris
  8. Pujar múltiples fitxers
  9. Descarregar fitxers
  10. Crear carpetes
  11. Renombrar fitxers
  12. Esborrar fitxers

  13. Configureu el mode de transferència:

  14. Aneu a Edita > Configuració > Connexió > FTP
  15. Proveu "Mode actiu" i "Mode passiu"

Documenteu:

  • Captures de pantalla de FileZilla connectat
  • Comparació de rendiment entre mode actiu i passiu
  • Quin mode recomaneu i per què?

CA4i: Utilitzar el navegador com a client FTP

Tasca 18: Accés des del navegador web

Proves amb diferents navegadors:

  1. Accés anònim:

    ftp://127.0.0.1/
    
    Hauríeu de veure el contingut de /var/ftp/public

  2. Accés autenticat:

    ftp://empleat1:Emp2024!@127.0.0.1/
    
    O bé:
    ftp://127.0.0.1/
    
    (El navegador us demanarà credencials)

Limitacions del navegador: - Només lectura (no podeu pujar fitxers) - Mode passiu per defecte - Interfície bàsica

Documenteu:

  • Captures de pantalla de l'accés des de Firefox i Chrome
  • Quines diferències trobeu entre navegadors?
  • És pràctic usar el navegador com a client FTP? Per què?

CA4j: Elaboració de documentació

Tasca 19: Documentació tècnica completa

Creeu un document (format PDF o Markdown) que inclogui:

1. Portada

  • Títol del projecte
  • Nom de l'alumne
  • Data
  • Cicle formatiu

2. Índex

3. Introducció

  • Descripció de l'escenari empresarial
  • Objectius del projecte
  • Tecnologies utilitzades (versions específiques)

4. Instal·lació

  • Requisits previs
  • Passos d'instal·lació detallats
  • Comandes executades amb explicació
  • Verificació de la instal·lació

5. Configuració

  • Explicació de cada paràmetre del vsftpd.conf
  • Justificació de les opcions triades
  • Configuració de Docker i docker-compose

6. Gestió d'usuaris

  • Taula amb tots els usuaris creats
  • Permisos de cada usuari
  • Estructura de directoris

7. Proves realitzades

  • Proves de mode actiu i passiu
  • Proves amb diferents clients
  • Captures de pantalla de cada prova
  • Resultats obtinguts

8. Anàlisi de modes de connexió

  • Comparativa mode actiu vs passiu
  • Recomanacions d'ús

9. Límits i seguretat

  • Límits configurats i justificació
  • Mesures de seguretat implementades
  • Recomanacions addicionals

10. Recomanacions d'ús

  • Bones pràctiques per administradors
  • Guia ràpida per usuaris finals
  • Manteniment del servei

11. Resolució de problemes

  • Problemes trobats durant la pràctica
  • Solucions aplicades
  • Consells de troubleshooting

12. Conclusions

  • Aprenentatges obtinguts
  • Dificultats trobades
  • Millores futures

13. Referències

  • Referències bibliogràfiques i web utilitzades
  • RFCs consultades
  • Documentació oficial

Criteris d'avaluació i rúbrica

Criteri Excel·lent (9-10) Notable (7-8) Aprovat (5-6) Suspès (0-4)
CA4a Explicació completa i precisa dels modes FTP amb diagrames detallats Explicació correcta amb diagrames bàsics Explicació bàsica sense diagrames Explicació incorrecta o incompleta
CA4b Instal·lació i configuració completa amb Docker funcionant perfectament Instal·lació correcta amb configuració bàsica Instal·lació funcional amb errors menors No funciona o errors greus
CA4c Tots els usuaris creats amb permisos ben definits i documentats Usuaris creats amb permisos correctes Usuaris creats amb permisos bàsics Usuaris mal configurats
CA4d Accés anònim configurat amb restriccions adequades i ben documentat Accés anònim funcional amb restriccions bàsiques Accés anònim funcional sense restriccions Accés anònim no funciona
CA4e Límits ben configurats i justificats per tipus d'usuari Límits configurats correctament Límits bàsics configurats Sense límits o mal configurats
CA4f-g Proves exhaustives de tots dos modes amb anàlisi comparativa Proves correctes de tots dos modes Proves bàsiques d'un mode No funcionen els modes
CA4h Proves amb múltiples clients documentades amb captures i anàlisi Proves amb diversos clients documentades Proves amb un client No hi ha proves documentades
CA4i Accés per navegador provat i comparat amb altres clients Accés per navegador funcional Accés bàsic per navegador No funciona el navegador
CA4j Documentació professional completa amb tots els apartats Documentació correcta amb apartats principals Documentació bàsica Documentació incompleta o absent

Entregables

  1. Carpeta del projecte comprimida (ftp-project.zip) amb:
  2. Dockerfile
  3. docker-compose.yml
  4. Fitxers de configuració
  5. Scripts utilitzats

  6. Documentació tècnica (PDF) segons l'estructura de la Tasca 19

  7. Captures de pantalla de totes les proves realitzades

  8. Fitxer README.md amb instruccions ràpides de desplegament


Referències

  • vsftpd Official Site: https://security.appspot.com/vsftpd.html
  • vsftpd Configuration Manual: man vsftpd.conf
  • RFC 959 - File Transfer Protocol (FTP): https://www.rfc-editor.org/rfc/rfc959
  • Docker Documentation: https://docs.docker.com/
  • Ubuntu Server Documentation: https://ubuntu.com/server/docs
  • FileZilla Documentation: https://filezilla-project.org/

Consells finals

  • Feu proves incrementals després de cada canvi de configuració
  • Consulteu els logs amb docker logs techfilesftp-ncognom quan hi hagi errors
  • Utilitzeu docker exec -it techfilesftp-ngcognom bash per depurar dins del contenidor
  • Documenteu cada pas que feu, us serà útil per la memòria final
  • No espereu a l'últim moment per començar la documentació

Èxit amb la pràctica!