Cómo instalar SFTPGo en Ubuntu 22.04

SFTPGo es un servidor SFTP gratuito, de código abierto, con todas las funciones y altamente configurable, con soporte opcional para HTTP/S, FTP/S y WebDAV.
Es compatible con varios backends de almacenamiento: sistema de archivos local, sistema de archivos local encriptado, almacenamiento de objetos S3 (compatible), Google Cloud Storage, Azure Blob Storage, otros servidores SFTP.

Todas las funciones compatibles se describen en detalle en la página del proyecto en GitHub.

SFTPGo está disponible para muchos sistemas operativos, como Linux, Windows, macOS y FreeBSD.
En este tutorial, aprenderás a instalar SFTPGo en un sistema Ubuntu 22.04 y exploraremos las principales novedades introducidas en la v2.3.0.

Requisitos previos

  • Un servidor Ubuntu 22.04.
  • Un usuario no root con privilegios sudo.

Configurar el cortafuegos UFW

Por razones de seguridad, se recomienda instalar y configurar el cortafuegos UFW en tu sistema. Primero, instala el cortafuegos UFW con el siguiente comando:

sudo apt install ufw -y

SFTPGo utiliza los siguientes puertos TCP con la configuración por defecto:

  • 2022 para el servicio SFTP.
  • 8080 para las interfaces de usuario del administrador web.

También tenemos que permitir el puerto OpenSSH para la administración del servidor.

Permite todos los puertos necesarios utilizando los siguientes comandos:

sudo ufw allow OpenSSH
sudo ufw allow 2022/tcp
sudo ufw allow 8080/tcp

A continuación, habilita el cortafuegos UFW para que se inicie tras el reinicio del sistema:

sudo ufw enable

Comprueba el estado:

sudo ufw status

Obtendrás la siguiente salida:

Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2022/tcp ALLOW Anywhere
8080/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
2022/tcp (v6) ALLOW Anywhere (v6)
8080/tcp (v6) ALLOW Anywhere (v6)

Instalación de SFTPGo en Ubuntu 22.04

Puedes instalar SFTPGo desde su PPA.

Empieza por añadir el PPA:

sudo add-apt-repository ppa:sftpgo/sftpgo
sudo apt update

A continuación, instala SFTPGo:

sudo apt install sftpgo

Tras la instalación, SFTPGo debería estar ya funcionando con la configuración por defecto y configurado para iniciarse automáticamente al arrancar, comprueba su estado con el siguiente comando:

systemctl status sftpgo

Completa la instalación de SFTPGo

Ahora, abre tu navegador web y accede al asistente de instalación de SFTPGo utilizando la URL«http://<su ip/nombre de host del servidor:8080>/».
Serás redirigido a la siguiente página:

Configurar

Proporciona tu nombre de usuario y contraseña de administrador y haz clic en el botón«Crear administrador«.
El admin recién creado se conectará automáticamente, para que puedas crear tus usuarios de SFTPGo.

Para más detalles sobre la creación de usuarios, puedes echar un vistazo a la Guía de inicio.

Nuevas funciones en la v2.3.0

Vamos a explorar las principales novedades introducidas en la v2.3.0 en las siguientes secciones.

Grupos

El uso de grupos simplifica la administración de múltiples usuarios de SFTPGo: puedes asignar la configuración una vez a un grupo, en lugar de hacerlo varias veces a cada usuario individual.

SFTPGo admite dos tipos de grupos

  • grupos primarios
  • grupos secundarios

Un usuario puede ser miembro de un grupo primario y de muchos grupos secundarios. Dependiendo del tipo de grupo, los ajustes se heredan de forma diferente.
Puedes encontrar más detalles consultando la documentación oficial.

Veamos un ejemplo de uso.

Supongamos que tienes los siguientes requisitos

  • cada usuario debe estar restringido a un directorio local que contenga el nombre de usuario como último elemento de la ruta, por ejemplo /srv/sftpgo/data/<nombredeusuario>
  • para cada usuario, el tamaño máximo de subida de un solo archivo debe estar limitado a 1GB
  • cada usuario debe tener una carpeta virtual S3 disponible en la ruta /s3<nombredeusuario> y cada usuario sólo puede acceder a un «prefijo» especificado del cubo S3. No debe poder acceder a los archivos de otros usuarios
  • cada usuario debe tener una carpeta virtual S3 disponible en la ruta /compartida. Esta es una carpeta compartida con otros usuarios
  • un grupo de usuarios sólo puede descargar y listar contenidos en la ruta /compartida, mientras que otro grupo de usuarios tiene acceso completo

Podemos cumplir fácilmente estos requisitos definiendo dos grupos.

Desde la interfaz de SFTPGo WebAdmin, haz clic en «Carpetas» y luego en el icono «+».

Crea una carpeta llamada «S3private».
Establece el almacenamiento como «AWS S3 (Compatible)» y rellena los parámetros necesarios:

  • nombre del cubo
  • región
  • credenciales: clave y secreto de acceso

Añadir carpeta S3

La parte importante es el «Prefijo de la Clave», establécelo como users/%username%/.

Prefijo S3

El «Prefijo de la Clave» restringe el acceso a la subcarpeta del cubo especificada.
El marcador de posición «%username%» será sustituido por el nombre de usuario asociado.

Crea otra carpeta llamada «S3compartido» con la misma configuración que «S3privado», pero esta vez establece el «Prefijo de la clave» como compartido/.
El «Prefijo de la clave» no tiene marcador de posición, por lo que la carpeta funcionará con una ruta estática que no cambiará en función del usuario asociado.

Ahora haz clic en «Grupos» y luego en el icono «+» y añade un grupo llamado «Primario».

Establece el «Home Dir» a /srv/sftpgo/data/%username%.

Añadir grupo

Al igual que antes, el marcador de posición «%nombredeusuario%» se sustituirá por el nombre de usuario asociado.

Añade las dos carpetas virtuales a este grupo y establece el «Tamaño máximo de subida de archivos» en 1073741824 bytes (1GB).

Añadir carpetas virtuales al grupo

Añade un nuevo grupo y nómbralo «SharedReadOnly», en la sección ACL establece el permiso en la ruta /shared para que se conceda acceso de sólo lectura.

Permisos por directorio

La configuración del grupo ya está completa.

Ahora podemos crear nuestros usuarios y establecer el grupo primario como «Primario».
Para los usuarios que necesiten acceso de sólo lectura a la ruta /compartida también tenemos que establecer «SharedReadOnly» como grupo secundario.

Haz clic en «Usuarios» y luego en el icono «+» y añade un usuario llamado «usuario1».

Añadir usuario

Este usuario cumple con las restricciones anteriores y tiene acceso total a la ruta /compartida.

Ahora crea el «usuario2» que cumple con las restricciones anteriores y tiene acceso de sólo lectura a la ruta /compartida.

Añadir usuario

También puedes crear varios usuarios al mismo tiempo utilizando la función de plantilla.

Plantillas

Sólo tienes que establecer los nombres de usuario, las credenciales y la pertenencia al grupo.

Añadir usuarios desde las plantillas

Ahora puedes iniciar sesión con cualquier cliente SFTP como FileZilla, WinSCP, etc. y comprobar que se cumplen los requisitos.

Recursos compartidos externos

Compartir archivos con usuarios externos, sin una cuenta SFTPGo, es un requisito habitual. En la v2.3.0 se ha mejorado esta función.
Se admiten los siguientes modos de compartición

  • sólo lectura
  • sólo escritura
  • lectura y escritura

Veamos cómo funcionan.
Accede a la interfaz del cliente web y crea un nuevo directorio llamado «external_share».

Crear directorio

Añade algunos archivos al directorio recién creado.

A continuación, selecciona la carpeta «external_share» y haz clic en el icono «Compartir».

compartir

Aparecerá la pantalla «Añadir un nuevo recurso compartido», selecciona el ámbito de «Lectura».
Opcionalmente, puedes limitar el número de veces que se puede utilizar el recurso compartido, proteger el recurso compartido con una contraseña, limitar el acceso por dirección IP de origen, establecer una fecha de caducidad automática.

Añadir acción

A continuación, en la lista de recursos compartidos, selecciona el recurso compartido que acabas de crear y haz clic en el icono «Vincular». Aparecerá una ventana emergente con instrucciones sobre cómo utilizar el recurso compartido.

Comparte el enlace

Puedes descargar los contenidos compartidos como un único archivo zip o puedes examinarlos y descargar archivo por archivo.
Puedes copiar estos enlaces y enviarlos a tus clientes externos.

El enlace al recurso compartido navegable aparecerá como puedes ver en la siguiente pantalla.

Acción de búsqueda

Ahora, edita el recurso compartido y cambia el ámbito a «Escribir».
El enlace a la acción mostrará la siguiente pantalla.

Escribe sólo compartir

Así, tus usuarios externos pueden subir archivos, pero no pueden navegar o descargar los contenidos compartidos.
Si quieres evitar que se sobrescriban los archivos existentes, puedes utilizar los permisos estándar de SFTPGo por directorio.

Edita de nuevo el recurso compartido y cambia el alcance a «Lectura/Escritura».
El enlace al recurso compartido mostrará la siguiente pantalla.

Acción de lectura/escritura

Ahora los usuarios externos pueden navegar, descargar y añadir nuevos archivos al directorio compartido.

Marca

La interfaz web de SFTPGo puede personalizarse para que coincida con tu marca. Aquí está la sección de configuración pertinente en /etc/sftpgo/sftogo.json:

"branding": {
"web_admin": {
"name": "",
"short_name": "",
"favicon_path": "",
"logo_path": "",
"login_image_path": "",
"disclaimer_name": "",
"disclaimer_path": "",
"default_css": "",
"extra_css": []
},
"web_client": {
"name": "",
"short_name": "",
"favicon_path": "",
"logo_path": "",
"login_image_path": "",
"disclaimer_name": "",
"disclaimer_path": "",
"default_css": "",
"extra_css": []
}
}

Echa un vistazo a la pantalla de inicio de sesión de WebAdmin.

Inicio de sesión de WebAdmin

El «nombre» por defecto es «SFTPGo WebAdmin» y por tanto el título de la página es «SFTPGo WebAdmin – Login».
El «nombre corto» por defecto es «WebAdmin» y así la página de inicio de sesión muestra «WebAdmin – <versión de SFTPGo>».
Puedes personalizar el favicon estableciendo una «favicon_path» y la imagen de la izquierda estableciendo una «login_image_path».
Si estableces «disclaimer_name» y «disclaimer_path», aparecerá un nuevo enlace en la parte inferior de la página de inicio de sesión. Puedes utilizarlo para un aviso legal o cualquier otra cosa.

Puedes personalizar el logotipo y la etiqueta que aparece en la parte superior izquierda de las páginas para los usuarios que han iniciado sesión estableciendo «ruta_del_logo» y «nombre_corto».

Logotipo

SFTPGo utiliza el excelente tema SB Admin2. Si quieres hacer algunos cambios menores en el tema, puedes establecer «extra_css» para que apunte a las rutas de tus archivos CSS personalizados.
Si, por el contrario, reconstruyes el CSS de SB Admin 2, puedes establecer «default_css» a la ruta de tu CSS personalizado. De esta forma evitaremos cargar el tema por defecto y luego anularlo con tus cambios.

Todas las rutas configuradas (favicon_path, logo_path, etc.), deben ser relativas a «static_files_path».
En Linux la «static_files_path» por defecto es /usr/share/sftpgo/static, puedes crear, por ejemplo, un directorio «branding» y colocar allí tus recursos personalizados.
Por ejemplo, puedes copiar tu favicon en /usr/share/sftpgo/static/branding/favicon. ico y establecer la «favicon_path» en /branding/favicon.ico.

Puedes anular cualquier opción de configuración utilizando variables de entorno, por ejemplo, la ruta del favicon del administrador web puede establecerse utilizando la variable de entorno SFTPGO_HTTPD__BINDINGS__0__BRANDING__WEB_ADMIN__FAVICON_PATH.
Puedes encontrar más detalles sobre la configuración de SFTPGo mediante variables de entorno aquí.

Después de cambiar el archivo de configuración, tienes que reiniciar el servicio SFTPGo para aplicar los cambios.

sudo systemctl restart sftpgo.service

Conectar con OpenID

Si tienes un proveedor de identidad existente, probablemente sea compatible con el estándar OpenID Connect.

Ahora puedes asignar los usuarios de tu proveedor de identidad a los administradores/usuarios de SFTPGo y así podrás iniciar sesión en las interfaces de usuario de SFTPGo WebClient y WebAdmin utilizando tu proveedor de identidad.

Los usuarios de SFTPGo también pueden crearse automáticamente tras un inicio de sesión exitoso de OpenID connect definiendo un gancho de preinicio de sesión. Puedes configurar los campos de reclamación de tokens para que estén disponibles en el gancho de preinicio de sesión y luego implementar tu propia lógica personalizada al crear/actualizar usuarios de SFTPGo dentro del gancho.

La documentación oficial de SFTPGo explica los pasos para integrar SFTPGo con Keycloak. Otros proveedores de identidad como Google Identity, Azure Active Directory, Auth0, OneLogin fueron probados por la comunidad de SFTPGo y se ha confirmado que funcionan.

En general, cualquier proveedor de identidad de OpenID Connect que implemente las especificaciones de OpenID Connect Discovery debería funcionar.

ACME

SFTPGo tiene incorporado el ACME (Entorno de Gestión Automática de Certificados), por lo que puedes obtener y renovar fácilmente un certificado Let’s encrypt TLS gratuito para la interfaz web y la API REST de SFTPGo, el servicio WebDAV y el servicio FTP.

La obtención de un certificado Let’s Encrypt implica la resolución de un desafío de validación de dominio emitido por un servidor ACME (Automatic Certificate Management Environment). Este desafío verifica tu propiedad del dominio o dominios para los que intentas obtener un certificado. Existen diferentes tipos de desafío, SFTPGo admite los tipos de desafío «HTTP-01» y «TLS-ALPN-01».

Para poder utilizar el protocolo ACME necesitas un nombre de dominio válido apuntado con la IP de tu servidor.

Veamos un ejemplo de configuración, hacemos las siguientes suposiciones

  • necesitamos un certificado TLS para el dominio «sftpgo.com
  • tenemos un servidor web existente que ya funciona en el puerto «80» para el dominio «sftpgo.com» y la ruta raíz de la web es /var/www/sftpgo.com

Abre el archivo de configuración de SFTPGo /etc/sftpgo/sftpgo.json, busca la sección «acme» y cámbiala como sigue:

"acme": {
"domains": ["sftpgo.com"],
"email": "<you email address here>",
"key_type": "4096",
"certs_path": "/var/lib/sftpgo/certs",
"ca_endpoint": "https://acme-v02.api.letsencrypt.org/directory",
"renew_days": 30,
"http01_challenge": {
"port": 80,
"proxy_header": "",
"webroot": "/var/www/sftpgo.com"
},
"tls_alpn01_challenge": {
"port": 0
}
}

Asegúrate de que el usuario «sftpgo» puede escribir en el directorio /var/www/sftpgo.com o crea previamente el directorio /var/www/sftpgo.com/.well-known/acme-challenge con los permisos adecuados.

Registra tu cuenta y obtén los certificados ejecutando el siguiente comando:

sudo -E su - sftpgo -m -s /bin/bash -c 'sftpgo acme run -c /etc/sftpgo'

¡Hecho! A partir de ahora, el servicio SFTPGo se encargará de la renovación automática de los certificados para los dominios configurados.
Los certificados se almacenan por defecto en el directorio /var/lib/sftpgo/certs. Ahora puedes configurar los servicios de SFTPGo para que utilicen estos certificados.
Por ejemplo, para la interfaz web, cambia el archivo de configuración de SFTPGo /etc/sftpgo/sftpgo.json como sigue:

"httpd": {
"bindings": [
{
"port": 9443,
"address": "",
"enable_web_admin": true,
"enable_web_client": true,
"enable_https": true,
"certificate_file": "/var/lib/sftpgo/certs/sftpgo.com.crt",
"certificate_key_file": "/var/lib/sftpgo/certs/sftpgo.com.key",
.....

Reinicia el servicio SFTPGo para aplicar los cambios:

sudo systemctl restart sftpgo.service

Puedes habilitar TLS para otros servicios de forma similar.

Filtrado Geo-IP

El plugin de filtrado Geo-IP de SFTPGO permite aceptar/denegar conexiones en función de la ubicación geográfica de las direcciones IP de los clientes.

El plugin puede leer las bases de datos MaxMind GeoLite2 y GeoIP2. Necesitas descargar una base de datos de países en formato MMDB.

Veamos un ejemplo de configuración.
Hacemos las siguientes suposiciones

  • el plugin de filtrado Geo-IP se encuentra en la ruta /usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64
  • la base de datos de países se encuentra en la ruta /var/lib/sftpgo/GeoLite2-Country.mmdb
  • sólo queremos permitir conexiones desde Italia

Abre el archivo de configuración de SFTPGo/etc/sftpgo/sftpgo.jsonbusca la sección «plugins» y cámbiala como sigue:

"plugins": [
{
"type": "ipfilter",
"cmd": "/usr/local/bin/sftpgo-plugin-geoipfilter-linux-amd64",
"args": ["serve", "--db-file", "/var/lib/sftpgo/GeoLite2-Country.mmdb", "--allowed-countries", "IT"],
"sha256sum": "",
"auto_mtls": true
}
]

Reinicia el servicio SFTPGo para aplicar los cambios:

sudo systemctl restart sftpgo.service

¡Listo!

En los registros de SFTPGo verás algo así cuando se rechace una conexión de un país denegado:

{"level":"debug","time":"2022-06-02T14:05:48.616","sender":"plugins.ipfilter.sftpgo-plugin-geoipfilter-linux-amd64","message":"[DEBUG] country not allowed: ip=XXX.XX.XXX.XXX country=NL"}

Hay otros plugins de SFTPGo disponibles aquí.

Restringir archivos y directorios en función de patrones de shell

SFTPGo admite filtros de patrones de shell por usuario y por directorio: los archivos se pueden permitir, denegar y, opcionalmente, ocultar en función de patrones de shell.

Veamos algunos ejemplos.
Supongamos que quieres denegar todos los archivos con extensiones jpg y png en un directorio concreto.
Selecciona el usuario a modificar, expande la sección «ACLs» y añade una restricción de patrón tipo shell.

Restricciones de patrones por directorio

De este modo, los archivos con extensiones png y jpg no podrán descargarse ni cargarse, pero seguirán siendo visibles en el listado de directorios si ya están presentes.
Puedes ocultarlos estableciendo la política como «Oculta».

Política oculta de restricciones de patrones

La política «Oculta» se introdujo en la v2.3.0.

También te podría gustar...