Se realizó el primer lanzamiento significativo del servidor , que permite organizar el acceso remoto a archivos mediante los protocolos SFTP, SCP/SSH y Rsync. SFTPGo también puede utilizarse para proporcionar acceso a repositorios de Git utilizando el protocolo SSH. Los datos pueden ser entregados tanto desde el sistema de archivos local como de almacenes externos compatibles con Amazon S3 y Google Cloud Storage. Se utilizan bases de datos con soporte para SQL o formato clave/valor, como PostgreSQL 9.4+, MySQL 5.6+, SQLite 3.x o . También hay un modo de almacenamiento de metadatos en memoria, que no requiere conexión a una base de datos externa. El código del proyecto está escrito en el lenguaje Go y bajo la licencia GPLv3.
Características principales:
- Se aplica aislamiento chroot a cada cuenta, limitando el acceso al directorio principal del usuario. Es posible crear directorios virtuales que hagan referencia a datos fuera del directorio principal del usuario.
- Las cuentas se almacenan en una base de datos virtual de usuarios, que no se cruza con la base de datos de usuarios del sistema. Para el almacenamiento de la base de datos de usuarios se pueden utilizar SQLite, MySQL, PostgreSQL, bbolt y almacenamiento en memoria. Se proporcionan herramientas para asociar cuentas virtuales y del sistema, permitiendo la asociación directa o arbitraria (un usuario del sistema puede estar asociado a otro usuario virtual).
- Se admite la autenticación mediante claves públicas, claves SSH y contraseñas (incluida la autenticación interactiva con entrada de contraseña desde el teclado). Es posible vincular múltiples claves para cada usuario, así como configurar autenticación multifactor y escalonada (por ejemplo, en caso de autenticación exitosa con clave, se puede solicitar adicionalmente una contraseña).
- Para cada usuario, es posible configurar diferentes métodos de autenticación, así como definir métodos propios implementados a través de la llamada a programas externos de autenticación (por ejemplo, para autenticación mediante LDAP) o mediante solicitudes a través de la API HTTP.
- es posible conectar manejadores externos o llamadas a la API HTTP para modificar dinámicamente los parámetros del usuario, que se invocan antes del inicio de sesión del usuario. Se soporta usuarios de manera dinámica al conectarse.
- Soporte para cuotas individuales en tamaño de datos y número de archivos.
- Soporte para limitación de ancho de banda con configuración separada de restricciones para tráfico entrante y saliente, así como restricciones en el número de conexiones simultáneas.
- Herramientas de control de acceso, vinculadas al usuario o al directorio (se puede restringir la visualización de la lista de archivos, prohibir cargas, descargas, sobrescrituras, eliminaciones, renombramientos o cambios en los permisos, así como prohibir la creación de directorios o enlaces simbólicos, etc.).
- Se pueden definir restricciones de red individuales para cada usuario, por ejemplo, se puede permitir el acceso solo desde ciertas IP o subredes.
- Se admite la conexión de filtros de contenido cargado vinculados a usuarios y directorios específicos (por ejemplo, se pueden bloquear las cargas de archivos con ciertas extensiones).
- Es posible vincular controladores que se ejecuten durante varias operaciones con archivos (carga, eliminación, renombrado, etc.). Además de llamar a los controladores, se admite el envío de notificaciones en forma de solicitudes HTTP.
- Cierre automático de conexiones inactivas.
- Actualización atómica de la configuración sin romper conexiones.
- métricas para la monitorización en Prometheus.
- Se admite el protocolo HAProxy PROXY para organizar el balanceo de carga o el proxy de conexiones a servicios SFTP/SCP sin perder la información sobre la IP de origen del usuario.
- para la gestión de usuarios y directorios, creación de copias de seguridad y generación de informes sobre conexiones activas.
- (http://127.0.0.1:8080/web) para la configuración y monitorización (también se admite la configuración a través de archivos de configuración comunes).
- Posibilidad de definir configuraciones en formatos JSON, TOML, YAML, HCL y envfile.
- conexiones por SSH con acceso restringido a comandos del sistema. Por ejemplo, se permite ejecutar comandos necesarios para la operación de Git (git-receive-pack, git-upload-pack, git-upload-archive) y rsync, así como varios comandos integrados (scp, md5sum, sha*sum, cd, pwd, sftpgo-copy y sftpgo-remove).
- Modo para compartir un directorio común con generación automática de credenciales de conexión, anunciadas a través de multicast DNS.
- Sistema integrado de para análisis de rendimiento.
- Simplificación de migraciones de cuentas de usuario de Linux.
- de logs en formato JSON.
Fuente: opennet.ru
