Servidor de Transferencia Segura de Ficheros (SFTP)
1. Objetivo de la práctica #
- Activar/instalar SSH.
- Crear un usuario “solo SFTP” (sin terminal SSH).
- Encerrarlo en una carpeta (chroot) para que no vea el resto del sistema.
- Probar conexión desde Windows con FileZilla o WinSCP.
2. Instalar y habilitar SSH (que trae SFTP) #
En Linux Mint, abre terminal y ejecuta:
1sudo apt update 2sudo apt install -y openssh-server 3sudo systemctl enable --now ssh 4sudo systemctl status ssh --no-pager
Comprueba que escucha en el puerto 22:
1ss -tulpn | grep ssh
3. Crear un grupo y un usuario "solo SFTP" #
- Crea el grupo:
1sudo groupadd sftpusers
- Crea el usuario (ejemplo:
sftpuser) y asígnalo al grupo:
1sudo adduser sftpuser 2sudo usermod -aG sftpusers sftpuser
4. Crear la carpeta "encerrada" (chroot) #
La idea: el usuario entrará a /sftp/sftpuser pero no podrá salir.
- Crea estructura:
1sudo mkdir -p /sftp/sftpuser/upload
- Permisos correctos para chroot (muy importante):
- La carpeta raíz del chroot debe ser de root y no escribible por el usuario.
1sudo chown root:root /sftp 2sudo chmod 755 /sftp 3 4sudo chown root:root /sftp/sftpuser 5sudo chmod 755 /sftp/sftpuser
- La carpeta donde SÍ podrá escribir (upload):
1sudo chown sftpuser:sftpusers /sftp/sftpuser/upload 2sudo chmod 775 /sftp/sftpuser/upload
5. Configurar SSH para forzar SFTP y bloquear terminal #
Edita la config:
1sudo nano /etc/ssh/sshd_config
Asegúrate de que existe esta línea (suele venir ya):
1Subsystem sftp internal-sftp
Y al final del archivo, añade:
1Match Group sftpusers 2 ChrootDirectory /sftp/%u 3 ForceCommand internal-sftp 4 X11Forwarding no 5 AllowTcpForwarding no 6 PasswordAuthentication yes
Guarda (Ctrl+O) y sal (Ctrl+X).
Reinicia SSH:
1sudo systemctl restart ssh
6. Probar desde Linux (rápido) #
Desde la propia Mint:
1sftp sftpuser@localhost
Deberías entrar y ver algo como que estás en / y dentro estará upload.
7. Conectarte desde Windows (FileZilla o WinSCP) #
Opción A: FileZilla #
- Protocolo: SFTP
- Host:
127.0.0.1 - Puerto:
2222 - Usuario:
sftpuser - Contraseña: la que pusiste con
adduser - Carpeta remota: verás
uploady podrás subir ahí.
Opción B: WinSCP #
- File protocol: SFTP
- Host name:
127.0.0.1 - Port number:
2222 - User name:
sftpuser
8. Opcional: Configurar el firewall #
Ver si el firewall está activo #
Primero comprobamos el estado:
1sudo ufw status
Puede salir:
Status: inactive
Status: active
Abrir el puerto de SSH #
Si SSH está en el puerto 22:
1sudo ufw allow 22
o
1sudo ufw allow ssh
Ahora activamos: #
1sudo ufw enable
Resumen del tema
Conceptos clave #
- SFTP (SSH File Transfer Protocol): protocolo seguro de transferencia de archivos integrado en el subsistema de OpenSSH (puerto 22/TCP).
- Jaula Chroot (
ChrootDirectory /sftp/%u): aísla al usuario dentro de su propio directorio sin visibilidad ni acceso al resto del sistema de archivos de Linux. - Requisitos de Permisos para Chroot: el directorio raíz del chroot debe pertenecer estrictamente a
root:rootcon permisos755(no escribible por el usuario); los archivos se suben a un subdirectorio con permisos del usuario (ej./sftp/sftpuser/upload). - Restricción de Shell: directiva
ForceCommand internal-sftpcombinada conAllowTcpForwarding noyX11Forwarding nopara bloquear la terminal interactiva SSH. - Clientes Gráficos: soporte nativo con herramientas como FileZilla y WinSCP mediante protocolo SFTP.
Qué debes recordar #
Configurar SFTP seguro con Chroot y ForceCommand internal-sftp permite transferir archivos de forma cifrada restringiendo el acceso del usuario exclusivamente a su carpeta asignada.