Z pewnością wszyscy znamy usługi takie jak Dropbox czy Google Dysk. Publicznie dostępne, darmowe miejsce, w którym możemy przechowywać pliki graficzne, muzyczne, dokumenty i inne. Usługi tego typu są niezwykle popularne i elastyczne. To co jednak jest tak dostępne i proste w obsłudze zawsze niesie ze sobą pewne ryzyko. Ryzyko udostępniania swoich plików i dzielenie się nimi z firmą trzecią.

W przeszłości mogliśmy już czytać wypowiedzi np. Edwarda Snowdena, który otwarcie mówił o tym, że NSA ma dostęp do wszystkich plików w Dropboxie i przegląda je regularnie. Pojawiały się także artykuły na temat skanowania plików umieszczonych na tego typu usługach przez dostawców. To naturalne, że powierzając swoje pliki na jakiejkolwiek platformie zgadzamy się na ich przetwarzanie w ten czy w inny sposób choćby poprzez sam fakt przetwarzania w celu zabezpieczenia danych.

Na szczęście istnieje wiele rozwiązań tak zwanych “Self Hosted”, dzięki którym możemy przechowywać swoje pliki, synchronizować je z serwerem i udostępniać innym całkowicie bezpiecznie i w pełni kontrolując to, co się z nimi dzieje. Wbrew pozorom istnieje wiele tego typu rozwiązań całkowicie darmowych. Jedynym kosztem dla nas jest koszt serwera, na którym aplikacja jest uruchomiona.

Jednym z bardziej popularnych tego typu narzędzi jest Seafile.

Seafile oferuje dwie wersje: Całkowicie darmową Community oraz wersję Premium, przy czym wersja Premium dla 3 użytkowników jest również bezpłatna i oferuje pełną funkcjonalność. To unikalne na rynku tego typu rozwiązanie. Raczej nie zdarza się, aby firma udostępniała wersję Premium swojej aplikacji zupełnie bezpłatnie dla ograniczonej liczby osób.

Różnice między wersją Community, a Premium możesz porównać w poniższej tabeli:

Najważniejsze dla nas funkcje wersji Community, czyli dzielenie się plikami, agent na Windowsa i Androida, możliwość współpracy na plikach czy integracja z LDAPem i Active Directory są dostępne. Przypominam, że jeśli chcecie mieć to rozwiązanie wyłącznie dla siebie, to wersja Premium oferuje bezpłatne korzystanie aż do 3 użytkowników!

W dzisiejszym artykule pokażę jak zainstalować i uruchomić Seafile, własny system plików online w wersji Community, gdyż ona nie ma ograniczenia co do ilości osób, a jednocześnie zapewnia większość przydatnych nam funkcji.

Na początek musimy mieć serwer z systemem operacyjnym. Najlepiej, żeby był to czysty serwer, z czystym systemem jak to zwykle w wymaganiach tego typu systemów jest.

Obsługiwane systemy operacyjne:

  1. Ubuntu 16.04/18.04
  2. Centos 7/8

Przy odrobinie sprytu i odpowiednim przygotowaniu pakietów można spokojnie zainstalować Seafile na innych systemach, w tym oczywiście na Debianie.

Na początek aktualizujemy system:

apt-get update

apt-get upgrade

Następnie instalujemy niezbędne pakiety:

apt-get -y install python3 python3-setuptools python3-pip

Instalacja niezbędnych pakietów poprzez pip:

pip3 install –timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy django-pylibmc django-simple-captcha python3-ldap

Instalacja bazy danych, w której będziemy trzymać informacje o plikach, o użytkownikach i rolach:

apt-get -y install mariadb-server

Instalacja Seafile:

cd /opt

wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_7.1.4_x86-64.tar.gz

tar -zxvf seafile-server_7.1.4_x86-64.tar.gz

cd seafile-server-7.1.4/

./setup-seafile-mysql.sh

Odpowiadamy na wszystkie pytania, w tym o nazwę, hostname serwera, na którym będzie pracował nasz demon, porty itd.

Po instalacji aplikacji:

./seafile.sh start

./seahub.sh start

Możemy podejrzeć jakie procesy i na jakich portach nasłuchują:

netstat -tulpn

W tej chwili mamy już aktywny endpoint, możemy już ładować pliki, ale nie mamy jeszcze wystawionego interfejsu na świat. Tego typu narzędzia dla prawdziwych geeków wymagają ładnego panelu do zarządzania. Seafile też taki ma, w dokumentacji jednak sugeruje się, aby wystawiać go poprzez proxy Apache/Nginx, a nie bezpośrednio. Tak też zrobimy. Wykorzystamy proxy Nginx’a.

Instalujemy Nginxa:                               

apt-get install nginx

nano /etc/nginx/sites-available/seafile.conf

Wklejamy poniższą zawartość podmieniając nazwę domeny:

log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] „$request” $status $body_bytes_sent „$http_referer” „$http_user_agent” $upstream_response_time’;

server {

            listen 80;

            server_name seafile.hosterion.pl;

            proxy_set_header X-Forwarded-For $remote_addr;

            location / {

                        proxy_pass                 http://127.0.0.1:8000;

            proxy_set_header   Host $host;

            proxy_set_header   X-Real-IP $remote_addr;

            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header   X-Forwarded-Host $server_name;

            proxy_read_timeout  1200s;

            client_max_body_size 0;

            access_log      /var/log/nginx/seahub.access.log seafileformat;

            error_log         /var/log/nginx/seahub.error.log;

            }

            location /seafhttp {

                        rewrite ^/seafhttp(.*)$ $1 break;

            proxy_pass http://127.0.0.1:8082;

            client_max_body_size 0;

            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_connect_timeout  36000s;

            proxy_read_timeout  36000s;

            proxy_send_timeout  36000s;

            send_timeout  36000s;

            access_log      /var/log/nginx/seafhttp.access.log seafileformat;

            error_log         /var/log/nginx/seafhttp.error.log;

            }

            location /media {

                        root /home/user/haiwen/seafile-server-latest/seahub;

            }

}

Możemy oczywiście uruchomić szyfrowany protokół HTTPS. Nawet powinniśmy to zrobić, aby nasze pliki były bezpieczne, a komunikacja szyfrowana.

Usuwamy domyślnego hosta:

rm /etc/nginx/sites-enabled/default

Linkujemy nasz vhost:

ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf

Restartujemy Nginxa:

systemctl restart nginx

Jeśli wszystko wykonaliśmy poprawnie, naszym oczom powinna ukazać się strona logowania. Podajemy tu dane dostępowe, które ustaliliśmy podczas instalacji.

Interfejs po zalogowaniu może wydawać się ubogi, ale w rzeczywistości ma sporo możliwości i nie warto się zrażać.

Podczas tworzenia nowej biblioteki możemy od razu oznaczyć opcję szyfrowania plików, dzięki czemu nawet administrator serwera nie będzie w stanie podejrzeć zawartości naszych pofragmentowanych plików.

Aby nie być gołosłownym, sprawdźmy jak wygląda to w praktyce.

Po wejściu do biblioteki, którą zaszyfrowaliśmy pojawi się komunikat jak na poniższym obrazku. To nie tylko feature aplikacji. Te pliki faktycznie są zaszyfrowane, co pokażę zaraz na przykładzie.

Ładujemy plik do zbioru:

Jak widać na powyższym przykładzie nie da się odczytać tych plików, nie da się ich podejrzeć, więc nasze dane są w pełni bezpieczne. Możemy je współdzielić z innymi, możemy korzystać z tego systemu jako kopii dla telefonu. Na przykład kiedy zrobimy zdjęcie, może być ono automatycznie transferowane do naszej instancji Seafile. Są do tego oficjalne aplikacje Seafile, nie trzeba posiłkować się rozwiązaniami uniwersalnymi.

Podsumowując, na pewno warto zainteresować się rozwiązaniem Seafile. Jest szybkie, stabilne, bezpieczne i oferuje wbudowany mechanizm szyfrowania i rozrzucania plików na bloki, dzięki czemu nie ma możliwości podejrzenia ich nawet przez administratora serwera.