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ć.
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
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ć.
Jeśli ktoś ma jeszcze wątpliwości w jaki sposób zainstalować nasz serwer SAMBA, to podaję polecenie:
$ sudo apt install samba -y
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ść.
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.
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.
Poprawnie wypełniony plik /etc/samba/smb.conf jeżeli chodzi o nasze udziały wygląda tak jak powyżej.
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
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.
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.
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.
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.
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ć.
Wchodzimy do folderu public i tworzymy jakiś katalog. Wszystko działa.
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.
Ponawiamy próbę, ale już właściwym użytkownikiem wozny001, podajemy hasło i naciskamy OK.
Jak widać otrzymujemy dostęp do naszego udziału i możemy spokojnie utworzyć tutaj sobie folder o nazwie Katalog_wozny_z_Windows
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.
Jak widać otrzymujemy dostęp do naszego udziału i możemy spokojnie utworzyć tutaj sobie kolejny folder o nazwie Katalog_wozny_z_Ubuntu
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ść.
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.
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.