Foi lançada a versão 2.2 do servidor SFTPGo, que permite organizá-lo como um acesso remoto a arquivos usando os protocolos SFTP, SCP/SSH, Rsync, HTTP e WebDav. O SFTPGo também pode ser usado para fornecer acesso a repositórios Git usando o protocolo SSH. Os dados podem ser fornecidos a partir do sistema de arquivos local ou de armazéns externos compatíveis com Amazon S3, Google Cloud Storage e Azure Blob Storage. O armazenamento de dados pode ser criptografado. Para armazenar a base de usuários e metadados, são utilizadas bases de dados que suportam SQL ou o formato chave/valor, como PostgreSQL, MySQL, SQLite, CockroachDB ou bbolt, mas também existe a possibilidade de armazenar metadados na memória, que não requer conexão com uma base de dados externa. O código do projeto é escrito em Go e distribuído sob a licença GPLv3.
Na nova versão:
- Adicionada a suporte a autenticação de dois fatores utilizando senhas únicas com tempo de vida limitado (TOTP, RFC 6238). Aplicativos como Authy e Google Authenticator podem ser usados como autenticadores.
- Implementada a possibilidade de estender a funcionalidade através de plugins. Entre os plugins já disponíveis estão: suporte a serviços adicionais de troca de chaves, integração do esquema Publish/Subscribe, armazenamento e pesquisa de informações de eventos em bancos de dados.
- A API REST agora suporta autenticação por chaves, além de tokens JWT, e oferece a possibilidade de definir políticas de armazenamento de dados (limitação do tempo de vida dos dados) vinculadas a diretórios e usuários específicos. Por padrão, a interface Swagger UI é ativada para navegação pelos recursos da API sem o uso de utilitários externos.
- O interface web agora suporta operações de gravação (upload de arquivos, criação de diretórios, renomeação e exclusão), implementada a possibilidade de redefinição de senha com confirmação por email, integrados um editor de arquivos de texto e um visualizador de documentos PDF. Adicionada a possibilidade de criar links HTTP para fornecer acesso a arquivos e diretórios específicos a usuários externos, com a possibilidade de definir uma senha de acesso separada, restrições por endereços IP, definição do tempo de vida do link e limitação do número de downloads.
Principais recursos do SFTPGo:
- Para cada conta, é aplicada a isolação chroot, que limita o acesso ao diretório pessoal do usuário. É possível criar diretórios virtuais que referenciam dados fora do diretório pessoal do usuário.
- As contas são armazenadas em um banco de dados virtual de usuários, que não se sobrepõe ao banco de dados do sistema. Para o armazenamento do banco de dados de usuários, podem ser utilizados SQLite, MySQL, PostgreSQL, bbolt e armazenamento em memória. Ferramentas são fornecidas para mapear contas virtuais e sistemáticas — é possível um mapeamento direto ou arbitrário (um usuário do sistema pode ser mapeado a outro usuário virtual).
- A autenticação por chaves públicas, chaves SSH e senhas é suportada (incluindo autenticação interativa com a inserção de senha pelo teclado). É possível vincular várias chaves a cada usuário, assim como configurar autenticação multifatorial e de múltiplas etapas (por exemplo, após uma autenticação bem-sucedida com chave, uma senha adicional poderá ser solicitada).
- Para cada usuário, é possível configurar diferentes métodos de autenticação, bem como definir seus próprios métodos que são implementados através da chamada de programas externos de autenticação (por exemplo, para autenticação via LDAP) ou envio de solicitações via HTTP API.
- É possível conectar manipuladores externos ou chamadas de HTTP API para alterar dinamicamente os parâmetros do usuário, chamados antes do login do usuário. A criação dinâmica de usuários durante a conexão é suportada.
- Suporte para cotas individuais em tamanho de dados e número de arquivos.
- Suporte para limitação de largura de banda com configuração separada das restrições para tráfego de entrada e saída, bem como restrições no número de conexões simultâneas.
- Ferramentas de controle de acesso que atuam vinculadas ao usuário ou diretório (é possível restringir a visualização da lista de arquivos, proibir upload, download, sobrescrita, exclusão, renomeação ou alteração de permissões, proibir a criação de diretórios ou links simbólicos, etc.).
- Para cada usuário, é possível definir restrições de rede individuais, por exemplo, permitindo o acesso apenas de determinados IPs ou sub-redes.
- Suporte à conexão de filtros de conteúdo carregado vinculados a usuários e diretórios específicos (por exemplo, é possível bloquear o upload de arquivos com determinadas extensões).
- É possível vincular manipuladores que são acionados durante várias operações com arquivos (upload, exclusão, renomeação etc.). Além da chamada de manipuladores, também é suportado o envio de notificações na forma de solicitações HTTP.
- Encerramento automático de conexões inativas.
- Atualização atômica da configuração sem interrupção de conexões.
- Fornecimento de métricas para monitoramento no Prometheus.
- Suporte ao protocolo HAProxy PROXY para balanceamento de carga ou proxy de conexões para serviços SFTP/SCP sem perda de informações sobre o endereço IP de origem do usuário.
- REST API para gerenciamento de usuários e diretórios, criação de backups e geração de relatórios sobre conexões ativas.
- Interface web (http://127.0.0.1:8080/web) para configuração e monitoramento (também é possível configurar por meio de arquivos de configuração comuns).
- Possibilidade de definir configurações nos formatos JSON, TOML, YAML, HCL e envfile.
- Suporte a conexões SSH com acesso restrito a comandos do sistema. Por exemplo, é permitido executar comandos necessários para o funcionamento do Git (git-receive-pack, git-upload-pack, git-upload-archive) e rsync, além de alguns comandos integrados (scp, md5sum, sha*sum, cd, pwd, sftpgo-copy e sftpgo-remove).
- Modo portável para compartilhamento de um diretório comum com geração automática de credenciais de conexão, anunciadas por meio de multicast DNS.
- Sistema de profiling incorporado para análise de desempenho.
- Processo simplificado de migração de contas de sistema Linux.
- Armazenamento de logs em formato JSON.
- Suporte a diretórios virtuais (por exemplo, o conteúdo de um determinado diretório pode ser entregue não do sistema de arquivos local, mas de um armazenamento em nuvem externo).
- Suporte ao cryptfs para criptografia transparente de dados em tempo real ao serem armazenados no sistema de arquivos e decriptação ao serem entregues.
- Suporte ao encaminhamento de conexões para outros servidores SFTP.
- Possibilidade de usar o SFTPGo como subsistema SFTP para o OpenSSH.
- Possibilidade de armazenar dados de conta e confidenciais em formato criptografado usando servidores KMS (Key Management Services), como Vault, GCP KMS, AWS KMS.
Fonte: opennet.ru
