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):
-
Què és FTP i quina és la seva utilitat? Expliqueu almenys 3 casos d'ús empresarials.
-
Modes de connexió FTP:
- Descriviu el mode actiu: quin client inicia la connexió de dades? Quins ports s'utilitzen?
-
Descriviu el mode passiu: per què es va crear? Quin problema resol?
-
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:
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
RUN apt-get update && \
apt-get install -y vsftpd ftp db-util && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 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:
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:
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:
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
statusabans 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:
Proves a realitzar:
- Obriu FileZilla i creeu una connexió amb:
- Host: 127.0.0.1 (o la vostra IP)
- Usuari: empleat1
- Contrasenya: Emp2024!
-
Port: 21
-
Proveu les següents operacions:
- Navegar per directoris
- Pujar múltiples fitxers
- Descarregar fitxers
- Crear carpetes
- Renombrar fitxers
-
Esborrar fitxers
-
Configureu el mode de transferència:
- Aneu a Edita > Configuració > Connexió > FTP
- 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:
-
Accés anònim:
Hauríeu de veure el contingut de/var/ftp/public -
Accés autenticat:
O bé: (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
- Carpeta del projecte comprimida (
ftp-project.zip) amb: - Dockerfile
- docker-compose.yml
- Fitxers de configuració
-
Scripts utilitzats
-
Documentació tècnica (PDF) segons l'estructura de la Tasca 19
-
Captures de pantalla de totes les proves realitzades
-
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-ncognomquan hi hagi errors - Utilitzeu
docker exec -it techfilesftp-ngcognom bashper 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!