Opublikowano wydanie serwera SFTPGo 2.2, umożliwiającego zdalny dostęp do plików za pomocą protokołów SFTP, SCP/SSH, Rsync, HTTP i WebDav. SFTPGo może być także wykorzystywany do udostępniania dostępu do repozytoriów Git przy użyciu protokołu SSH. Dane mogą być udostępniane zarówno z lokalnego systemu plików, jak i z zewnętrznych pamięci kompatybilnych z Amazon S3, Google Cloud Storage oraz Azure Blob Storage. Możliwe jest również przechowywanie danych w zaszyfrowanej formie. Do przechowywania bazy użytkowników i metadanych wykorzystywane są bazy danych z obsługą SQL lub formatu klucz/wartość, takie jak PostgreSQL, MySQL, SQLite, CockroachDB lub bbolt, ale istnieje także możliwość przechowywania metadanych w pamięci operacyjnej, bez konieczności podłączania zewnętrznej bazy danych. Kod projektu został napisany w języku Go i jest udostępniany na licencji GPLv3.
W nowej wersji:
- Dodano wsparcie dla dwuskładnikowej autoryzacji z wykorzystaniem jednorazowych haseł z ograniczonym czasem ważności (TOTP, RFC 6238). Jako autoryzatory mogą być stosowane aplikacje takie jak Authy i Google Authenticator.
- Zrealizowano możliwość rozszerzenia funkcjonalności poprzez wtyczki. Wśród już dostępnych wtyczek znajduje się wsparcie dla dodatkowych serwisów wymiany kluczy, integracja schematu publikacji/subskrypcji oraz przechowywanie i wyszukiwanie informacji o zdarzeniach w bazie danych.
- W REST API dodano wsparcie dla autoryzacji przy użyciu kluczy, obok tokenów JWT, a także zapewniono możliwość definiowania polityk przechowywania danych (ograniczenie czasu życia danych) związanych z poszczególnymi katalogami i użytkownikami. Domyślnie aktywowany jest interfejs Swagger UI do nawigacji po zasobach API bez użycia zewnętrznych narzędzi.
- W interfejsie webowym dodano wsparcie dla operacji zapisu (przesyłanie plików, tworzenie katalogów, zmiana nazw i usuwanie), zrealizowano możliwość resetowania hasła z potwierdzeniem przez email, zintegrowane edytor plików tekstowych i przeglądarka dokumentów PDF. Dodano możliwość tworzenia linków HTTP do udostępniania zewnętrznym użytkownikom dostępu do poszczególnych plików i katalogów, z możliwością ustawienia osobnego hasła dostępu, ograniczenia czasowego adresów IP, ustalenia czasu życia linku oraz limitowania liczby pobrań.
Główne możliwości SFTPGo:
- Dla każdego konta stosowana jest izolacja chroot, ograniczająca dostęp do katalogu domowego użytkownika. Możliwe jest tworzenie wirtualnych katalogów, które odwołują się do danych spoza domowego katalogu użytkownika.
- Konta są przechowywane w wirtualnej bazie użytkowników, która nie krzyżuje się z systemową bazą użytkowników. Do przechowywania bazy danych użytkowników można używać SQLite, MySQL, PostgreSQL, bbolt oraz przechowywania w pamięci. Dostarczane są narzędzia do mapowania wirtualnych i systemowych kont użytkowników — możliwe jest bezpośrednie lub dowolne mapowanie (jedno konto systemowe może być mapowane na inne wirtualne konto użytkownika).
- Obsługiwana jest autoryzacja za pomocą kluczy publicznych, kluczy SSH oraz haseł (w tym interaktywna autoryzacja z wprowadzaniem hasła z klawiatury). Możliwe jest przypisanie wielu kluczy do każdego użytkownika, a także konfiguracja autoryzacji wielofaktorowej i wieloetapowej (na przykład, w przypadku pomyślnej autoryzacji za pomocą klucza może zostać dodatkowo poproszone o hasło).
- Dla każdego użytkownika możliwe jest skonfigurowanie różnych metod autoryzacji, a także określenie własnych metod, realizowanych przez wywołanie zewnętrznych programów autoryzacyjnych (na przykład, dla autoryzacji przez LDAP) lub wysyłanie zapytań przez HTTP API.
- Możliwe jest podłączenie zewnętrznych procesorów lub wywołań HTTP API do dynamicznej zmiany parametrów użytkownika, wywoływanych przed zalogowaniem. Wsparcie dla dynamicznego tworzenia użytkowników przy połączeniu.
- Wsparcie dla indywidualnych limitów rozmiaru danych i liczby plików.
- Wsparcie dla limitów przepustowości z oddzielnymi ustawieniami dla ruchu przychodzącego i wychodzącego, a także limitów liczby jednoczesnych połączeń.
- Środki kontroli dostępu powiązane z użytkownikiem lub katalogiem (można ograniczyć przeglądanie listy plików, zabronić przesyłania, pobierania, nadpisywania, usuwania, zmiany nazw lub praw dostępu, zabronić tworzenia katalogów lub dowiązań symbolicznych itp.).
- Dla każdego użytkownika można określić indywidualne ograniczenia sieciowe, na przykład można zezwolić na dostęp tylko z określonych adresów IP lub podsieci.
- Wsparcie dla przyłączania filtrów ładowanego contentu powiązanych z poszczególnymi użytkownikami i katalogami (na przykład można blokować ładowanie plików o określonej wielkości).
- Możliwość powiązania wywoływaczy uruchamianych podczas różnych operacji na plikach (ładowanie, usuwanie, zmiana nazwy itp.). Oprócz wywoływania wywoływaczy wspierane są powiadomienia w formie zapytań HTTP.
- Automatyczne kończenie nieaktywnych połączeń.
- Atomowe aktualizacje konfiguracji bez zerwania połączeń.
- Dostarczanie metryk do monitorowania w Prometheus.
- Wsparcie dla protokołu HAProxy PROXY do organizacji równoważenia obciążenia lub proxy połączeń do usług SFTP/SCP bez utraty informacji o pierwotnym adresie IP użytkownika.
- REST API do zarządzania użytkownikami i katalogami, tworzenia kopii zapasowych oraz generowania raportów o aktywnych połączeniach.
- Interfejs webowy (http://127.0.0.1:8080/web) do konfiguracji i monitorowania (wsparcie dla konfiguracji poprzez standardowe pliki konfiguracyjne).
- Możliwość definiowania ustawień w formatach JSON, TOML, YAML, HCL i envfile.
- Wsparcie dla połączeń SSH z ograniczonym dostępem do poleceń systemowych. Na przykład, dozwolone jest uruchamianie poleceń niezbędnych do działania Git (git-receive-pack, git-upload-pack, git-upload-archive) i rsync, a także kilku wbudowanych poleceń (scp, md5sum, sha*sum, cd, pwd, sftpgo-copy i sftpgo-remove).
- Tryb portable do wspólnego korzystania z jednego katalogu z automatycznym generowaniem danych logowania do połączenia, ogłaszanych za pomocą multicast DNS.
- Wbudowany system profilowania do analizy wydajności.
- Uproszczony proces migracji systemowych kont użytkowników Linux.
- Przechowywanie logów w formacie JSON.
- Wsparcie dla wirtualnych katalogów (na przykład zawartość określonego katalogu można dostarczać nie z lokalnego systemu plików, ale z zewnętrznej chmury).
- Wsparcie dla cryptfs do przezroczystego szyfrowania danych w locie podczas zapisu do systemu plików i deszyfrowania przy wydawaniu.
- Wsparcie dla tunelowania połączeń do innych serwerów SFTP.
- Możliwość użycia SFTPGo jako podsystemu SFTP dla OpenSSH.
- Możliwość przechowywania danych uwierzytelniających i poufnych w zaszyfrowanej formie przy użyciu serwerów KMS (Key Management Services), takich jak Vault, GCP KMS, AWS KMS.
Źródło: opennet.ru
