Serwer SAMBA

Wprowadzenie teoretyczne do lekcji nr 8

Postawiliśmy na naszym serwerze już trzy najważniejsze usługi – DHCP, Routing i DNS. Pora więc uruchomić coś bardziej użytkowego z czym "użytkownicy" naszej sieci będą mieć bliższą styczność. Zdarza się tak, że potrzebujemy udostępniać jakieś zasoby innym użytkownikom przez sieć. Użyć do tego możemy tzw. "serwer plików". Takich serwerów plików na rynku mamy mnóstwo, jednakże wśród nich wszystkich wyłania się jeden najpopularniejszy serwer – Samba, która korzysta z protokołu SMB. Jednak od początku. SMB to skrót od Server Message Block i określa się nim protokół komunikacyjny, który pozwala na udostępnianie plików, drukarek czy portów com w sieci. Został opracowany przez IBM, a następnie pieczę nad nim przejął Microsoft. Obecnie najnowszą wersją tego protokołu jest SMB 3.1.1, która zaimplementowana jest w systemie Windows 10 i jego serwerowym odpowiedniku. Samba jest jedną z otwarto źródłowych implementacji protokołu SMB (wszystkich wersji). Prócz podstawowych funkcji, czyli udostępniania plików oraz drukarek, pozwala ona również na uruchomienie usług katalogowych, więc może działać jako kontroler domeny. Samba składa się z trzech demonów (czyli usług):
smbd jest demonem odpowiedzialnym za najważniejsze usługi czyli obsługa protokołu SMB, udostępnianie zasobów oraz kontrola domeny;
nmbd jest demonem usługi nazw NetBIOS;
winbind pobiera dane na temat użytkowników i grup z Windowsa oraz odwzorowuje je na lokalne numery ID, dzięki czemu samba jest kompatybilna z systemami Windows.
Warto również wiedzieć, że w terminologii Samby, konkretny folder jaki udostępniamy nazywa się udziałem lub po angielsku share. Przed przystąpieniem instalacji należy zaktualizować repozytoria oraz pakiety, mam nadzieję, że każdy pamięta jak to zrobić.

I. Przygotowanie struktury plików oraz kont.

1. Krótkie wprowadzenie.
Zanim rozpoczniemy właściwą instalację przygotujemy sobie strukturę plików oraz kont na naszym serwerze. Otóż Samba, jak nie trudno się domyśleć, pozwala zabezpieczać nasze udziały. Używa ona do tego kont utworzonych w samym systemie. System ten pozwala przede wszystkim używać jednego konta do wielu usług. Krótko mówiąc, każde połączenie z udziałem, wywołuje (jako ten konkretny użytkownik) demona smb (nie mylić z smbd). Również w dostępie anonimowym wykorzystuje się konto wbudowane w Sambę.
2. Założenia teoretyczne.
Docelowo chciałbym pokazać cztery rodzaje udziałów jakie mogą się przydać. Będą to:
- udział publiczny do którego dostęp mają wszyscy, nawet bez konta
- udział prywatny do którego dostęp mają wszyscy użytkownicy dodani do bazy danych Samby,
- udział autoryzowany grupowy do którego dostęp ma konkretna grupa w systemie Linux,
- udział autoryzowany indywidualny do którego dostęp ma tylko jeden użytkownik.
Aby zrealizować taki cel w katalogu /srv, który zgodnie z Linux Filesystem Hierarchy powinien zawierać pliki z których korzystają usługi, utworzymy sobie katalog samba, a w nim katalogi public, private, studenci oraz wozny. Stworzymy sobie też trzech użytkowników student001, student002 oraz wozny001. Dwa pierwsze konta będą należeć do grupy studenci, którą również sobie utworzymy.

Zacznijmy więc od struktury kont i grup. Konta już tworzyliśmy wcześniej jednak dla przypomnienia polecenie tworzące konta z przyjemnym kreatorem: sudo adduser nazwa_konta. Dla naszych kont będzie to wyglądało następująco:
$ sudo adduser student001
$ sudo adduser student002
$ sudo adduser wozny001
Podajemy hasło wymyślone przez nas i możemy też opisać te konta.

Utworzymy sobie również grupę studenci poleceniem:
$ sudo addgroup studenci
A następnie dodamy do niej obu studentów poleceniem:
$ sudo usermod -G studenci -a student001
$ sudo usermod -G studenci -a student002
Parametr G mówi, że chcemy dodać użytkownika do grupy, zaś parametr a mówi, aby tę grupę dołączyć do istniejących grup użytkownika, a nie nadpisywać już istniejące.

Teraz kiedy już mamy użytkowników oraz grupy, możemy przejść do tworzenia struktury folderów. Już powiedzieliśmy sobie, że tworzyć będziemy nasze foldery w katalogu /srv, który zgodnie z zaleceniami powinien przechowywać dane wykorzystywane przez nasze usługi. Możemy przejść do tego katalogu, aby ułatwić sobie pisanie komend. Wpierw utworzymy sobie pewną strukturę katalogów, która wyglądać będzie tak jak powyżej.

Taką strukturę folderów można zrobić za pomocą jednej komendy. Przechodzimy więc do katalogu /srv i wpisujemy:
$ sudo mkdir -p samba/public samba/studenci samba/wozny samba/private
Parametr p oznacza parent i pozwala utworzyć folder nadrzędny (gdy zaistnieje taka potrzeba) – w tym przypadku samba. Oczywiście potrzeba istnieje, gdyż taki folder nie istnieje obecnie. Poleceniem:
$ tree
możemy sprawdzić, czy nasza struktura została utworzona. Jeśli nie ma apliakcji tree, to można ją zainstalować poleceniem:
$ sudo apt install tree

3. Uprawnienia do naszych katalogów.
Kiedy już utworzyliśmy katalogi, to możemy je odpowiednio dostosować do naszych potrzeb. Otóż zmienimy sobie prawa dostępu do nich oraz właścicieli. Zapewni to większe bezpieczeństwo naszym zasobom. Folderowi public, nadamy następujące prawa:
- użytkownik – pełne prawa
- grupa – pełne prawa
- inni – prawo do odczytu i wykonania
Następnie zmienimy jego właściciela na nobody (user) i nogroup (grupa). Są to obiekty wbudowane w system Linux, które służą tam gdzie nie potrzeba używać konkretnego użytkownika czy grupy. Dla pozostałych folderów sprawa wygląda następująco:
Folder studenci - właściciel nobody, grupa studenci:
- użytkownik – pełne prawa
- grupa – pełne prawa
- inni – żadne
Folder wozny - właściciel wozny001, grupa wozny001 (wykorzystamy grupę powstałą przy tworzeniu konta):
- użytkownik – pełne prawa
- grupa – pełne prawa
- inni – żadne
Folder private:
- użytkownik – pełne prawa
- grupa – pełne prawa
- inni – prawo do odczytu i wykonania

Mając już zaplanowane uprawnienia do naszych folderów oraz ich właścicieli możemy przystąpić do działania. Na początek zmieniamy uprawnienia, a potem właścicieli:
$ sudo chmod -R 775 samba/public
$ sudo chown -R nobody:nogroup samba/public
Parametr R w obu przypadkach oznacza, że zmiany będą dotyczyły również katalogów wewnątrz (od Recursive). Ostateczny zestaw komend dla pozostałych folderów można zobaczyć na screenie powyżej. Na koniec sprawdzamy czy zmiany zostały wprowadzone poleceniem:
$ ls -l samba

II. Instalacja, konfiguracja i aktywacja serwera SAMBY.

1. Instalacja serwera SAMBY i dodawanie kont do bazy.
Strukturę katalogów oraz kont mamy już przygotowaną. Teraz możemy przejść do instalacji serwera Samby. To naprawdę nie jest nic trudnego ani szczególnego, więc po tylu lekcjach i instalacji programów każdy powinien sobie z tym poradzić. Pakiet nazywa się samba, więc warto wykombinować samemu jak to zrobić.

Instalacja serwera SAMBA

Jeśli ktoś ma jeszcze wątpliwości w jaki sposób zainstalować nasz serwer SAMBA, to podaję polecenie:
$ sudo apt install samba -y

Status serwera SAMBA

Po instalacji sprawdzimy sobie czy usługa nam poprawnie wstała. Jak pamiętacie wymieniałem demony Samby. Nas interesuje konkretnie demon smbd i to jego stan należy sprawdzić. Służy do tego polecenie:
$ sudo systemctl status smbd
U nas jest OK. Jeżeli usługa by nie działała to należy ją samodzielnie podnieść.

Dodawanie kont do bazy SAMBY

Teraz dodamy sobie naszych wcześniej utworzonych użytkowników do bazy danych Samby, tak aby można było z nich korzystać podczas poruszania się po zasobach. Wykonać to można poleceniem:
$ sudo smbpasswd -a nazwa_konta
Dla każdego konta musimy wywołać to polecenie. W naszym przypadku będzie to łącznie trzy wywołania. Za każdym razem Samba spyta się o hasło. UWAGA! Jest to hasło użytkownika, którym będziemy logować się do udziałów. Może być takie samo jak hasło usera, może być inne. Wpisujemy więc:
$ sudo smbpasswd -a student001
$ sudo smbpasswd -a student002
$ sudo smbpasswd -a wozny001

2. Konfiguracja serwera SAMBA.
Po wykonaniu tych wszystkich kroków, możemy przejść do części właściwej, w której skonfigurujemy sobie sam serwer Samby. Cała konfiguracja mieści się w jednym pliku - /etc/samba/smb.conf. Zanim go edytujemy, chciałem tylko dodać, że cała jego konfiguracja sprowadza się modyfikacji sekcji [global] oznaczonej jako Browsing/Identification oraz wpisu właściwych zasobów na końcu pliku.

Konfiguracja pliku /etc/samba/smb.conf

Edytujemy zatem plik /etc/samba/smb.conf poleceniem:
$ sudo nano /etc/samba/smb.conf
Skupimy się zatem na wspomnianej już sekcji Browsing/Identification, a dokładniej na ustawieniach workgroup oraz server string. Workgroup określa w jakiej grupie roboczej znajduje się nasz serwer Samby. Ma to ścisły związek z systemami Windows, które wykorzystują system grup roboczych do komunikacji ze sobą w sieci i łatwej wymianie danych. Domyślnie w nowszych Windowsach grupa robocza nazywa się WORKGROUP, więc domyślne ustawienie jest dobre, o ile w naszej sieci nie ma innej grupy roboczej. Server string to po prostu nazwa serwera Samby pod jakim jest widoczny dla klientów. Czysto kosmetyczna zmiana. Przy większej ilości serwerów, warto je jakoś oznaczać.

Cała magia zaczyna się na samym końcu tego pliku, gdzie określać będziemy nasze udziały. Aby określić udział musimy zapisać jego nazwę pod jaką będzie widoczny u klientów za pomocą nawiasów kwadratowych. Dla przykładu [public]. Następnie od małych odstępów zapisujemy cechy i parametry naszego udziału. Istotne dla nas będą następujące parametry (oznaczone * są konieczne):
- *path = ścieżka_do_katalogu - określa katalog do jakiego ma się odwoływać dany udział (pełna ścieżka)
- comment = dowolny_tekst - pozwala ustawić nam komentarze dla naszych udziałów
- *browseable = yes:no - określa czy dany udział można przeglądać
- writable = yes:no - pozwala określić czy dany udział można zapisywać i modyfikować. Domyślnie można ale warto dodać tę opcję
- guest ok = yes:no - określa czy dany udział ma być dostępny anonimowo dla wszystkich czy nie. Użyjemy go tylko w przypadku katalogu public. Tak to domyślnie jest ustawiony na no
- *read only = yes:no - określa czy dany udział jest tylko do odczytu. My oczywiście chcemy też zapisywać, więc w każdym przypadku ustawimy go na no
- valid users = obiekty_użytkowników_i_grup - tutaj określamy użytkowników jacy mają mieć dostęp do udziału. Rozdzielamy ich przecinkiem. Możemy również wpisać tutaj grupy – te należy pisać poprzedzając je małpką np. @studenci. Oczywiście parametr ten pisać będziemy wtedy i tylko wtedy gdy chcemy dostęp do udziału ograniczyć do konkretnych użytkowników czy grup. Teraz już wiemy jak zapisać poprawnie nasz plik. Polecam każdemu, aby spróbować samodzielnie go wypełnić – należy odgadnąć ile udziałów ma być, jakie parametry mają mieć itd. Jeżeli jednak jeszcze nie czujemy się na siłach, to na kolejnym screenie znajduje się poprawnie wypełniony plik.

Konfiguracja pliku /etc/samba/smb.conf

Poprawnie wypełniony plik /etc/samba/smb.conf jeżeli chodzi o nasze udziały wygląda tak jak powyżej.

Restart serwera SAMBA

Ostatnią rzeczą jaka nam pozostała jest zrestartowanie serwera Samby i przetestowania poprawności jego działania. Wpisujemy więc:
$ sudo systemctl restart smbd
I jeszcze poprawność uruchomienia usługi:
$ sudo systemctl status smbd

III. Używanie serwera Samby z poziomu klienta.

Wyszukiwanie serwera SAMBY na kliencie

Aby w systemie Ubuntu 20.04 w wersji desktopowej skorzystać z naszych udziałów, należy najpierw wejść do menadżera plików, a następnie z lewego menu wybrać Inne położenia, serwer może od razu się pojawić, jednakże czasem się tak nie dzieje. I u nas to się właśnie wydarzyło, więc należy go ręcznie wybrać w polu adresowym zaznaczonym na żółto.

Łączenie z serwerem SAMBA

Aby uzyskać połączenie należy wpisać następującą rzecz: smb://adres_serwera (u nas 192.168.10.10), a następnie wybrać przycisk Połącz.

Sprawdzanie udziałów

Wyświetlą nam się dzięki temu wszystkie udziały zdefiniowane w pliku konfiguracyjnym (na print$ proszę nie zwracać uwagi). Jeżeli tutaj nic nie ma to oznacza, że coś zostało źle wykonane i należy sprawdzić plik konfiguracyjny serwera Samby.

Sprawdzanie dostepu anonimowego

Teraz klikamy w folder public, wybieramy dostęp Anonimowy, klikamy Połącz i mamy dostęp do zasobu sieciowego. Nawet utworzymy sobie folder o nazwie Katalog_w_public.

Sprawdzanie dostepu anonimowego

Możemy też sprawdzić nasz serwer z poziomu klienta Windows. Nasz serwer może się pojawić, ale gdyby go nie było, to w pasku eksploratora wpisujemy \\192.168.10.10 i dostęp do naszych udziałów powinien się pojawić.

Sprawdzanie dostepu anonimowego

Wchodzimy do folderu public i tworzymy jakiś katalog. Wszystko działa.

Sprawdzanie dostepu autoryzowanego

Teraz sprawdzimy dostęp autoryzowany do folderu wozny. Jesteśmy w systemie Windows, więc klikamy w ten folder i spróbujemy zalogować się użytkownikiem student001. Oczywiście nie może nam się to udać (widać odmowę dostępu), ponieważ dostep do tego folderu ma tylko użytkownik wozny001.

Sprawdzanie dostepu autoryzowanego

Ponawiamy próbę, ale już właściwym użytkownikiem wozny001, podajemy hasło i naciskamy OK.

Sprawdzanie dostepu autoryzowanego

Jak widać otrzymujemy dostęp do naszego udziału i możemy spokojnie utworzyć tutaj sobie folder o nazwie Katalog_wozny_z_Windows

Sprawdzanie dostepu autoryzowanego

Na koniec z poziomu klienta wyposażonego w Ubuntu, użytkownikiem wozny001 także spróbujemy się zalogować do udziału wozny. Zaznaczamy opcję Zarejestrowany i naciskamy Połącz.

Sprawdzanie dostepu autoryzowanego

Jak widać otrzymujemy dostęp do naszego udziału i możemy spokojnie utworzyć tutaj sobie kolejny folder o nazwie Katalog_wozny_z_Ubuntu

Sprawdzanie dostepu autoryzowanego

Oczywiście z poziomu serwera też możemy sprawdzić zawartość tych folderów. Przechodzimy do katalogu /srv i używając polecenia ls -l nazwa_folderu wyświetlamy ich zawartość.

Sprawdzanie opcji invalid users

Dostęp do pozostałych zasobów dla odpowiednich użytkowników proszę sprawdzić sobie samodzielnie. U mnie wszystko działa. Na koniec pokażę jeszcze działanie opcji invalid users. Oznacza ona zablokowanie dostępu dla konkretnego użytkownika, nawet w sytuacji, kiedy należy on do grupy, która taki dostęp posiada. W naszym przykładzie użytkownik student002 należy do grupy studenci, która ma dostęp do zasobu studenci. Edytujemy plik /etc/samba/smb.conf i dodajemy do udziału studenci wpis z brakiem dostępu dla użytkownika student002.

Sprawdzanie opcji invalid users

I teraz możemy spóbować zalogować się do zasobu studenci użytkownikiem student002. Jak widać mamy odmowę dostępu, czyli nasza opcja zadziałała.