Opublikowano wersję serwera SFTPGo 2.2, który umożliwia organizację zdalnego dostępu do plików przy użyciu protokołów SFTP, SCP/SSH, Rsync, HTTP i WebDav. SFTPGo może służyć między innymi do zapewnienia dostępu do repozytoriów Git za pomocą protokołu SSH. Dane można przesyłać zarówno z lokalnego systemu plików, jak i z zewnętrznych magazynów kompatybilnych z Amazon S3, Google Cloud Storage i Azure Blob Storage. Możliwe jest przechowywanie danych w postaci zaszyfrowanej. Do przechowywania bazy danych i metadanych użytkowników wykorzystywane są systemy DBMS obsługujące język SQL lub format klucz/wartość, takie jak PostgreSQL, MySQL, SQLite, CockroachDB czy bbolt, ale istnieje również możliwość przechowywania metadanych w pamięci RAM, co nie wymaga podłączania zewnętrzna baza danych. Kod projektu napisany jest w Go i rozpowszechniany na licencji GPLv3.
W nowej wersji:
- Dodano obsługę uwierzytelniania dwuskładnikowego przy użyciu haseł jednorazowych ograniczonych czasowo (TOTP, RFC 6238). Jako uwierzytelniaczy można używać aplikacji takich jak Authy i Google Authenticator.
- Zaimplementowano możliwość rozbudowy funkcjonalności poprzez wtyczki. Wśród już dostępnych wtyczek: obsługa dodatkowych usług wymiany kluczy, integracja schematu Publish/Subscription, przechowywanie i wyszukiwanie informacji o zdarzeniach w systemie DBMS.
- W interfejsie REST API oprócz tokenów JWT dodano obsługę uwierzytelniania za pomocą kluczy, a także zapewnia możliwość ustawienia polityki przechowywania danych (ograniczającej czas życia danych) w odniesieniu do poszczególnych katalogów i użytkowników. Domyślnie interfejs użytkownika Swagger umożliwia nawigację po zasobach API bez korzystania z zewnętrznych narzędzi.
- Do interfejsu WWW dodano obsługę operacji zapisu (przesyłanie plików, tworzenie katalogów, zmiana nazwy i usuwanie), zaimplementowano możliwość resetowania hasła z potwierdzeniem e-mailem, zintegrowano edytor plików tekstowych i przeglądarkę dokumentów PDF. Dodano możliwość tworzenia linków HTTP zapewniających użytkownikom zewnętrznym dostęp do poszczególnych plików i katalogów, z możliwością ustawienia osobnego hasła dostępu, ograniczenia adresów IP, ustawienia czasu życia łącza oraz ograniczenia liczby pobrań.
Główne cechy SFTPGo:
- Każde konto jest chrootowane, co ogranicza dostęp do katalogu domowego użytkownika. Możliwe jest tworzenie katalogów wirtualnych, które odwołują się do danych poza katalogiem domowym użytkownika.
- Konta przechowywane są w wirtualnej bazie danych użytkowników, która nie krzyżuje się z systemową bazą danych użytkowników. SQLite, MySQL, PostgreSQL, bbolt i pamięć w pamięci mogą być używane do przechowywania baz danych użytkowników. Zapewnione są środki do mapowania kont wirtualnych i systemowych - możliwe jest mapowanie bezpośrednie lub dowolne (jeden użytkownik systemu może być mapowany na innego użytkownika wirtualnego).
- Obsługiwane jest uwierzytelnianie kluczem publicznym, kluczem SSH i hasłem (w tym uwierzytelnianie interaktywne z wprowadzaniem hasła z klawiatury). Możliwe jest przypisanie kilku kluczy dla każdego użytkownika, a także skonfigurowanie uwierzytelniania wieloskładnikowego i wieloetapowego (np. w przypadku udanej autoryzacji kluczem może być dodatkowo wymagane hasło).
- Istnieje możliwość skonfigurowania różnych metod uwierzytelniania dla każdego użytkownika, a także zdefiniowania własnych metod realizowanych poprzez wywoływanie zewnętrznych programów uwierzytelniających (np. do uwierzytelniania przez LDAP) lub wysyłanie żądań poprzez HTTP API.
- Możliwe jest podłączenie zewnętrznych handlerów lub wywołań API HTTP w celu dynamicznej zmiany ustawień użytkownika, które są wywoływane przed zalogowaniem użytkownika. Obsługiwane jest dynamiczne tworzenie użytkowników podczas połączenia.
- Obsługa indywidualnych limitów rozmiaru danych i liczby plików.
- Obsługa ograniczania przepustowości z osobnymi ustawieniami limitów ruchu przychodzącego i wychodzącego, a także limitów liczby jednoczesnych połączeń.
- Narzędzia kontroli dostępu, które działają w odniesieniu do użytkownika lub katalogu (możesz ograniczyć przeglądanie listy plików, zabronić przesyłania, pobierania, nadpisywania, usuwania, zmiany nazwy lub praw dostępu, zabronić tworzenia katalogów lub dowiązań symbolicznych itp.).
- Dla każdego użytkownika możesz zdefiniować indywidualne ograniczenia sieciowe, na przykład możesz zezwolić na dostęp tylko z określonych adresów IP lub podsieci.
- Obsługuje łączenie filtrów treści do pobrania w odniesieniu do poszczególnych użytkowników i katalogów (np. można zablokować pobieranie plików z określonym rozszerzeniem).
- Możesz powiązać programy obsługi, które są uruchamiane podczas różnych operacji z plikiem (ładowanie, usuwanie, zmiana nazwy itp.). Oprócz obsługi wywoływania obsługiwane jest wysyłanie powiadomień w postaci żądań HTTP.
- Automatyczne zakończenie nieaktywnych połączeń.
- Atomowa aktualizacja konfiguracji bez zrywania połączeń.
- Dostarczanie metryk do monitorowania w Prometheus.
- Protokół HAProxy PROXY jest obsługiwany w celu organizowania równoważenia obciążenia lub połączeń proxy z usługami SFTP/SCP bez utraty wiedzy o źródłowym adresie IP użytkownika.
- REST API do zarządzania użytkownikami i katalogami, tworzenia kopii zapasowych i raportowania aktywnych połączeń.
- Interfejs sieciowy (http://127.0.0.1:8080/web) do konfiguracji i monitorowania (obsługiwana jest również konfiguracja za pomocą zwykłych plików konfiguracyjnych).
- Możliwość definiowania ustawień w formatach JSON, TOML, YAML, HCL i envfile.
- Obsługa połączeń przez SSH z ograniczonym dostępem do poleceń systemowych. Na przykład polecenia wymagane dla Git (git-receive-pack, git-upload-pack, git-upload-archive) i rsync mogą działać, a także kilka wbudowanych poleceń (scp, md5sum, sha*sum, cd, pwd, sftpgo-copy i sftpgo-remove).
- Tryb przenośny do udostępniania jednego udostępnionego katalogu z automatycznym generowaniem poświadczeń połączenia ogłaszanych za pośrednictwem multiemisji DNS.
- Wbudowany system profilowania do analizy wydajności.
- Uproszczony proces migracji konta systemu Linux.
- Przechowywanie logów w formacie JSON.
- Obsługa katalogów wirtualnych (na przykład zawartość określonego katalogu może pochodzić nie z lokalnego systemu plików, ale z zewnętrznego magazynu w chmurze).
- Obsługa cryptfs w celu przejrzystego szyfrowania danych w locie podczas zapisywania w systemie plików i odszyfrowywania podczas przesyłania.
- Obsługa przekazywania połączeń do innych serwerów SFTP.
- Możliwość używania SFTPGo jako podsystemu SFTP dla OpenSSH.
- Możliwość przechowywania danych uwierzytelniających i poufnych danych w postaci zaszyfrowanej z wykorzystaniem serwerów KMS (Key Management Services), takich jak Vault, GCP KMS, AWS KMS.
Źródło: opennet.ru