TEMA 3 FTP (SRC)
Qué es (idea general)
- Servicio que permite mover o copiar ficheros entre equipos en red.
- Incluye protocolos (formas de comunicación), servidores (software que atiende peticiones) y clientes (programas que solicitan transferencias).
Protocolos y servicios más habituales (qué son y cuándo usarlos)
- FTP (File Transfer Protocol)
- Tradicional, usa puerto 21 (control) y 20/puertos dinámicos para datos.
- Modo activo vs pasivo: importante para firewalls/NAT.
- Inseguro por defecto (envía credenciales en claro).
- FTPS (FTP over TLS/SSL)
- FTP + cifrado TLS. Mantiene control/flujo de FTP pero con TLS.
- Recomendado si necesitas compatibilidad con clientes FTP pero quieres cifrado.
- SFTP (SSH File Transfer Protocol)
- Va sobre SSH (puerto 22). No es FTP, es parte de OpenSSH.
- Seguro por defecto y más fácil de usar tras firewalls (un único puerto).
- SCP
- Copia simple sobre SSH. Útil para transferencias puntuales.
- rsync
- Sincronización eficiente (solo copia diferencias). Puede usar SSH como transporte. Ideal para backups.
- TFTP (Trivial FTP)
- Muy simple, sin autenticación, usado en arranque de dispositivos (PXE). No es seguro.
- WebDAV
- Extiende HTTP(S) para editar/gestionar ficheros remotos; útil cuando se integra con servidores web.
- SMB/CIFS (Samba) y NFS
- Sistemas de archivos en red: montan carpetas remotas como si fueran locales. Más apropiados para compartición en LAN.
Componentes principales
- Servidor: software que ofrece el servicio (ej.: vsftpd, proftpd, Pure-FTPd para FTP; OpenSSH para SFTP; vs. Samba para SMB).
- Cliente: programas para transferir (FileZilla, lftp, ftp, sftp, scp, rsync, navegador web, montajes CIFS/NFS).
- Autenticación: usuarios locales, bases de datos propias, certificados/TLS, llaves SSH.
- Permisos y chroot: limitar qué directorios puede ver/usar cada usuario (importante por seguridad).
Puertos y NAT / firewalls (point-form)
- FTP: control 21, datos en 20 o puertos dinámicos → problemas con NAT (por eso existe modo pasivo).
- FTPS: 21 + TLS; sigue necesitando control de puertos para datos.
- SFTP/SCP/SSH: puerto 22 (más sencillo a través de NAT).
- TFTP: puerto 69 UDP.
- Ajustar reglas de firewall y abrir puertos o usar pasv para FTP.
Comandos y ejemplos prácticos (rápidos)
- FTP (cliente clásico):
ftp servidor - SFTP:
sftp usuario@servidor - SCP:
scp fichero usuario@servidor:/ruta/destino - Rsync (con SSH):
rsync -avz fichero usuario@servidor:/ruta/ - Comprobación de puerto:
ss -ltnp | grep :21oss -ltnp | grep :22
Buenas prácticas de seguridad
- Evitar FTP sin cifrado en redes inseguras.
- Preferir SFTP o FTPS (si necesidad de compatibilidad).
- Usar llaves SSH en vez de contraseñas para SFTP/SSH.
- Chroot para usuarios FTP/SFTP (encerrar al usuario en su directorio).
- Limitar permisos (principio de mínimo privilegio).
- Registrar auditoría y activar logs.
- Para servicios públicos: aplicar límites de velocidad, bloquear IPs sospechosas y hacer copias de seguridad.
Casos de uso típicos
- Administración/backup: rsync sobre SSH.
- Intercambio de ficheros con clientes: FTPS o SFTP (seguro y compatible).
- Arranque de dispositivos: TFTP/PXE.
- Compartición en LAN (oficina): Samba (SMB) o NFS.
Qué comprobar cuando algo falla
- ¿Puerto correcto abierto en servidor y firewall?
- ¿Protocolo usado (FTP vs SFTP) coincide en cliente y servidor?
- ¿Modo FTP activo/pasivo correcto para la red?
- Revisar logs del servidor (vsftpd/proftpd/sshd/samba).
- Comprobar permisos y propietarias del fichero/destino.
EJERCICIO PRACTICO
Resumen rápido de lo que haremos
- Instalar IIS + servicio FTP (y Telnet).
- Crear grupo
usuariosftpy 3 usuarios (javier,apellido1,apellido2). - Crear carpetas:
C:\ftp\LocalUser\<usuario>\privadoyC:\ftp\publico. - Poner permisos NTFS correctos (cada usuario solo puede su privado).
- Crear sitio FTP en IIS con aislamiento de usuario.
- Probar con cliente línea de comandos y con FileZilla desde Linux.
- Ver sesiones activas, reiniciar servicio, mostrar espacio en disco, logs y restricciones IP.
Paso 1 — Instalar IIS + FTP y Telnet (PowerShell)
Abre PowerShell como administrador y ejecuta (copiar/pegar):
Install-WindowsFeature Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Ftp-Server,Web-Ftp-Service,Web-Ftp-Ext
Install-WindowsFeature Telnet-Client
- Sobre TFTP: Windows no trae cliente TFTP en todas las ediciones; si tu ejercicio lo pide y no aparece, instala una utilidad TFTP (por ejemplo Tftpd64) desde su web o pide permiso al profe.
- Después de esto, abre IIS Manager (inetmgr).
Paso 2 — Crear grupo y usuarios (CMD/PowerShell)
En PowerShell (Admin) o CMD:
# Crear grupo local
net localgroup usuariosftp /add
# Crear usuarios (elige contraseñas seguras)
net user javier P@ssw0rd! /add
net user apellido1 P@ssw0rd! /add
net user apellido2 P@ssw0rd! /add
# Añadir usuarios al grupo
net localgroup usuariosftp javier /add
net localgroup usuariosftp apellido1 /add
net localgroup usuariosftp apellido2 /add
- IMPORTANTE: cambia
P@ssw0rd!por una contraseña que elijas (mín. 8 caracteres con mayúsculas, minúsculas y números).
Paso 3 — Crear la estructura de carpetas
En PowerShell o CMD:
mkdir C:\ftp
mkdir C:\ftp\LocalUser
mkdir C:\ftp\LocalUser\javier\privado
mkdir C:\ftp\LocalUser\apellido1\privado
mkdir C:\ftp\LocalUser\apellido2\privado
mkdir C:\ftp\publico
# Crear ficheros de ejemplo
echo "archivo de javier" > C:\ftp\LocalUser\javier\privado\leerme.txt
echo "archivo de apellido1" > C:\ftp\LocalUser\apellido1\privado\leerme.txt
echo "archivo de apellido2" > C:\ftp\LocalUser\apellido2\privado\leerme.txt
echo "ayuda publica" > C:\ftp\publico\leerme.txt
Paso 4 — Establecer permisos NTFS (cada usuario solo su carpeta)
La idea: cada usuario tendrá control total sobre su carpeta privado, y no podrá entrar en la de los demás. Ejecuta como admin:
# Asegurar permisos básicos (Administrators y SYSTEM tienen control)
icacls "C:\ftp" /grant Administrators:F /grant "NT AUTHORITY\SYSTEM":F
# Quitar herencia y dar permisos exclusivos a cada usuario en su carpeta
icacls "C:\ftp\LocalUser\javier\privado" /inheritance:r
icacls "C:\ftp\LocalUser\javier\privado" /grant javier:(OI)(CI)F
icacls "C:\ftp\LocalUser\apellido1\privado" /inheritance:r
icacls "C:\ftp\LocalUser\apellido1\privado" /grant apellido1:(OI)(CI)F
icacls "C:\ftp\LocalUser\apellido2\privado" /inheritance:r
icacls "C:\ftp\LocalUser\apellido2\privado" /grant apellido2:(OI)(CI)F
# Carpeta publica: lectura para anónimo/IUSR e IIS_IUSRS
icacls "C:\ftp\publico" /grant "IUSR":R /grant "IIS_IUSRS":R /grant Administrators:F
(OI)(CI)F= aplicar a objetos y subcarpetas, Full control.- Si
IUSRno existe, usaAUTHENTICATED USERSo crea regla paraIIS_IUSRS. Para acceso anónimo IIS usará la cuentaIUSR.
Paso 5 — Crear el sitio FTP en IIS (GUI paso a paso)
Abre IIS Manager → en el panel de la izquierda clic derecho en Sites → Add FTP Site…
- FTP site name: FTP_Javier
- Physical path:
C:\ftp(oC:\ftp\LocalUsersi prefieres) - Click Next.
Binding and SSL:
- IP address: elige la IP de la máquina (o All Unassigned).
- Port: 21
- SSL: para prácticas puedes seleccionar No SSL (inseguro, pero simple). Idealmente usar FTPS en producción.
Authentication / Authorization:
- En Authentication: activa Basic (y Anonymous si quieres carpeta pública).
- En Authorization rules:
- Añade regla: Allow → Specified roles or user: escribe
usuariosftp(permite a ese grupo) → Check Read y Write. - Si activas acceso anónimo para la carpeta pública, añade regla que permita Anonymous users con Read.
- Añade regla: Allow → Specified roles or user: escribe
Haz Finish.
Paso 6 — Configurar Aislamiento de Usuarios (User Isolation)
En IIS Manager, selecciona el sitio FTP creado → en la vista central busca FTP User Isolation → doble click → selecciona «User name directory (disable global virtual directories)».
Esto hará que, cuando un usuario javier se conecte, el servidor intente ubicar su carpeta en C:\ftp\LocalUser\javier\... (por eso la estructura). Ahora cada usuario quedará «encerrado» en su carpeta por el modelo de aislamiento.
Paso 7 — Probar acceso por línea de comandos (en Windows)
Desde otra máquina cliente (o la misma, con localhost), abre CMD y prueba:
ftp <IP_DEL_SERVIDOR>
# ejemplo: ftp 192.168.1.100
# Cuando pida usuario: javier
# cuando pida pass: (la contraseña que pusiste)
# Comandos dentro del cliente ftp:
ls
cd privado
put archivo_local.txt
get leerme.txt
bye
- Repite con
apellido1yapellido2. Debes poder subir/descargar en su propioprivado, pero no ver el contenido de otras carpetas.
Paso 8 — Ver sesiones actuales y desconectar usuarios
En IIS Manager:
- Selecciona el sitio FTP → en la vista central abre FTP Current Sessions.
- Verás las conexiones activas; selecciona una y clic en Disconnect para desconectarla.
Paso 9 — Reiniciar / detener el servicio FTP
Opciones:
- Reiniciar sólo IIS/FTP:
- En PowerShell (Admin):
iisreset /restart - O detener/reiniciar el servicio FTP:
net stop ftpsvc net start ftpsvc
- En PowerShell (Admin):
- Para detener/arrancar solo el sitio FTP: en IIS Manager -> Sites -> selecciona tu sitio -> Stop / Start.
Paso 10 — Mostrar espacio disponible en disco (en IIS)
IIS FTP tiene una opción de Directory Browsing que permite mostrar información, incluyendo espacio libre. Para activarla:
- En IIS Manager selecciona el sitio FTP → abre FTP Directory Browsing.
- Marca Enable Directory Browsing.
- Busca (si aparece) la opción Show available disk space y márcala.
- Si tu versión no muestra exactamente ese texto, activa Directory Browsing; al listar carpetas vía FTP el cliente puede solicitar espacio y el servidor lo devolverá si la función está activa.
- Aplica cambios y prueba conectándote y listando (
ls) — algunos clientes muestran la línea de espacio libre devuelta por el servidor.
(Alternativa manual: desde PowerShell en el servidor, usar Get-PSDrive -PSProvider FileSystem para ver espacio y capturarla para la práctica.)
Paso 11 — Restringir acceso por IP (para bloquear a un compañero)
En IIS Manager → selecciona el sitio FTP → abre IP Address and Domain Restrictions → Add Deny Entry… → introduce la IP del compañero para denegar acceso.
Puedes añadir reglas inversas para permitir sólo tu red.
Paso 12 — Probar con FileZilla desde Ubuntu
En tu máquina Ubuntu (cliente):
- Abre FileZilla → Site Manager → New Site.
- Host: IP_DEL_SERVIDOR
- Protocol: FTP – File Transfer Protocol (o SFTP si usaste SSH)
- Encryption: Only use plain FTP (o Require explicit FTP over TLS si usaste FTPS)
- Logon Type: Normal
- User: javier
- Password: (la contraseña)
Conecta y prueba Upload / Download. Guarda la entrada en el gestor de sitios.
Paso 13 — Consultar logs del servicio FTP
Los logs de IIS FTP por defecto están en:
%SystemDrive%\inetpub\logs\LogFiles\FTPSVCx
- Abre el Explorador y ve a
C:\inetpub\logs\LogFiles\y localiza la carpetaFTPSVC#. - Abre el fichero de log con el Bloc de notas para ver las acciones (conexiones, transferencias, errores).
También puedes ver eventos en el Visor de Eventos → Windows Logs → Application o los logs del servicio en IIS.
Consejos, notas y comprobaciones finales
- Usa contraseñas seguras y cámbialas tras la práctica.
- Para producción, usa FTPS (requiere certificado SSL) o mejor SFTP (SSH).
- Si los usuarios no pueden entrar, comprueba: credenciales, reglas de autorización en IIS, permisos NTFS y que el aislamiento de usuario coincide con la estructura de carpetas.
- Si
put/getfallan con errores de data connection: comprobar firewall (puerto 21 y rango de puertos pasivos si configuraste pasv). - Para la práctica, guarda pantallazos de:
- creación de usuarios y grupo,
- árbol
C:\ftp\...con ficheros, - el sitio FTP en IIS (pantalla de binding y opciones),
- prueba FTP por línea de comandos (comandos
put/get), - FTP Current Sessions,
- logs (archivo del log mostrando actividad),
- regla IP denial aplicada.







