JustPaste.it

Samba

Co to jest Samba i do czego służy?

Samba to zbiór aplikacji, działających na systemach rodziny Unix / Linux, umożliwiających udostępnienie zasobów systemowych w sieci za pośrednictwem protokołu Server Message Block (SMB) znanego również jako Common Internet File System (CIFS). Obecnie protokół ten kojarzony jest przede wszystkim z systemami operacyjnymi MS Windows. Linux, z zainstalowaną i odpowiednio skonfigurowaną Sambą, może brać aktywny udział w sieciach MS Windows jako:

  • serwer plików,
  • serwer drukarek,
  • pomagać w przeglądaniu otoczenia sieciowego klientom MS Windows pełniąc rolę serwera WINS (Windows Internet Name Server).

Poza wyżej wymienionymi funkcjami Samba może pełnić wiele innych funkcji, których nie będę tutaj omawiał. W tym rozdziale zajmę się jedynie omówieniem podstawowej konfiguracji, pozwalającej na udostępnienie katalogów i drukarek dla systemów MS Windows XP.

Obecnie głównymi składnikami pakietu Samba są dwa demony:

smbd - demon umożliwiający współdzielenie plików i drukarek w sieci oraz uwierzytelnianie klientów,
nmbd - demon świadczący usługi WINS i wspomagający przeglądanie zasobów sieci.

Protokół SMB wprowadzenie

Jak już wspomniałem zadaniem Samby jest udostępniania zasobów systemowych w sieci. Stawia to niemałe problemy, ponieważ każdy system operacyjny podchodzi inaczej do zagadnień związanych z przechowywaniem i administracją plików. Problemem są nie tylko zagadnienia dotyczące plików. Różnice pomiędzy systemami operacyjnymi istnieją również w sposobie uwierzytelniania użytkowników korzystających z usług sieciowych oraz sposobu kodowania przesyłanych haseł.

Przyjrzyjmy się teraz pokrótce zasadzie działania protokołu SMB. Protokół ten opracowany został w latach 80 i 90 poprzedniego stulecia ponad protokołami NetBIOS oraz NetBEUI. NetBIOS zapewniał interfejs programowy aplikacji (API - Application Programming Interface) dla dostępu do plików przez sieć, natomiast NetBEUI (NetBIOS Extended User Interface) zapewniał stos protokołów podobnych do TCP/IP. Komputery w sieciach opartych o te protokoły rozpoznawane były przy pomocy nazw (do 15 znaków długości). Nazwy mogły składać się ze znaków alfanumerycznych oraz znaków: # $ % ^ & ( ) - ' { } . ~. Długość nazw komputerów nakładało jednak górną granice na wielkość sieci. Wyjściem z tej sytuacji okazało się oparcie tych protokołów o zdobywające coraz większe uznanie protokoły TCP/IP, używające zamiast nazw komputerów numeryczne adresy IP w postaci xxx.xxx.xxx.xxx, gdzie xxx może być liczbą z przedziału od 0 – 255 (uproszczając). W 1987 opracowano standard, w jaki sposób protokół NetBIOS powinien działać ponad protokołami TCP/IP. Standard ten znany jest obecnie jako NetBIOS over TCP/IP lub w skrócie NTB (RFC1001 i RFC1002) definiuje trzy usługi sieciowe:

  • usługę nazewniczą tłumaczącą nazwy komputerów na ich adresy IP,
  • dwie usługi komunikacyjne: datagramy i sesje pozwalające na przesyłanie danych miedzy komputerami wykorzystującymi protokół NetBIOS.
Tip:
Mimo że dozwolone jest używanie kropki w nazewnictwie komputerów to nie zalecam jej używać by nie wprowadzać nieporozumień z nazwami DNS.

Tyle, jeśli chodzi o wstęp. Zainteresowanych szczegółami odsyłam do bardziej szczegółowych opracowań dostępnych w księgarniach oraz Internecie.

Instalacja i konfiguracja

Pakiet instalacyjny Samby znajdziemy na CD-ROM z Slackware w katalogu slackware/n/. Instalujemy pakiet tak jak każdy inny przy pomocy komendy:

# installpkg samba-3.0.20b-i486-1.tgz

Po zainstalowaniu Samby w katalogu /etc znajdziemy nowy podkatalog samba z plikami konfiguracyjnymi. Do katalogu /etc/rc.d dodany zostanie plik rc.samba, który będzie uruchamiał Sambę przy każdym starcie systemu. By tak się jednak stało musimy ręcznie zmienić prawa dostępu do pliku na wykonywalny:

# cd /etc/rc.d
# chmod u+x rc.samba

Naszą konfigurację zaczniemy od najprostszego przykładu i z biegiem czasu będziemy go rozbudowywać. Pozwoli nam to na łatwiejsze przyswojenie zasad konfiguracji Samby. Zanim jednak do tego przejdziemy musimy sobie odpowiedzieć na kilka pytań:

  1. Jak nazwiemy grupę roboczą, w której będzie nasz serwer i klienci?
  2. Jakie katalogi będziemy udostępniać i komu?
  3. Czy i jakie porty będziemy musieli otworzyć w naszym firewallu?

Pierwszego pytania nie trzeba raczej wyjaśniać. Wybieramy nazwę grupy roboczej, do jakiej należą pozostałe komputery w sieci. Jeśli wybierzemy inną to będziemy musieli skonfigurować pozostałe komputery tak by należały do wybranej przez nas grupy. W naszych przykładach nazwą grupy roboczej będzie WORKGROUP.

Drugie pytanie jest trochę trudniejsze. Musimy się zastanowić, jacy użytkownicy będą mieli dostęp do udostępnianych przez nas plików. Wiąże się to ze stworzeniem nowych użytkowników oraz opcjonalnie nowych grup. Jeśli chodzi o katalogi to na obecną chwile przyjmijmy, że udostępniany katalog to /home/samba/test. Musimy go oczywiście stworzyć zanim uruchomimy Sambę.

# groupadd smbpwrusers
# mkdir -p /home/samba/test
# chmod 777 /home/samba/test
# chown root.smbpwrusers /home/samba/test

Dawanie pełnych praw dostępu nie jest zbyt bezpieczne, ale to tylko test :)

Prosty serwer plików

Mając wszystkie potrzebne informacje przechodzimy do edycji pliku konfiguracyjnego Samby. Tworzymy plik /etc/samba/smb.conf i wpisujemy do niego następujące polecenia konfiguracyjne:

[global]
workgroup = WORKGROUP
wins support = yes
encrypt passwords = yes

[test]
comment = Test Samby
path = /home/samba/test
read only = yes
Tip:
W katalogu /etc/samba istnieje plik samba.conf-sample warto go przeglądnąć ponieważ zawiera wiele dyrektyw konfiguracyjnych wraz z komentarzami, dzięki czemu można się czegoś nauczyć.

Nasz przykładowy plik składa się tylko z dwóch sekcji [global] i [test] zaczynających się od nazwy w nawiasie kwadratowym. Nazwa w nawiasie kwadratowym to nazwa udziału, czyli nazwa jaką będą widzieli użytkownicy jako katalog udostępniany na naszym serwerze. Istnieje jednak kilka zastrzeżonych nazw sekcji – w naszym przypadku mamy tylko jedna taką sekcje [global].

W sekcji [global], jak sama nazwa wskazuje, przechowywane będą ustawienia globalne naszego serwera. W naszym przypadku sekcja ta informuje serwer Samby że:

workgroup = WORKGROUP

Serwer należeć będzie do grupy roboczej WORKGROUP,

wins support = yes

Samba będzie serwerem WINS (Windows Internet Name Server). Przyspieszy to przeglądanie sieci oraz zmniejszy ilość komunikatów broadcast. Ogólnie rzecz biorąc warto ustawić tą opcje na yes.

encrupt passwords = yes

Będziemy wykorzystywać zaszyfrowane hasła. Jeśli klienci Samby to systemy Windows 98 lub Windows NT SP3 lub nowsze to ta opcja musi być ustawiona na yes.

Sekcja [test] opisuje konkretny udział. Składa się z czterech prostych poleceń konfiguracyjnych:

comment = Test Samby

komentarz do naszego testowego udziału,

path = /home/samba/test

to ścieżka do udostępnianego katalogu,

read only = no

czy udział jest tylko do odczytu.

Po zapisaniu pliku możemy sprawdzić czy nie popełniliśmy błędu. Służy do tego polecenie testparam będące analizatorem składni pliku smb.conf. Używamy go następująco:

#testparm smb.conf
Load smb config files from smb.conf
Processing section "[test]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

W naszym przypadku jest to raczej niekonieczne, ale gdy plik konfiguracyjny zawiera do kilkudziesięciu od kilkuset linii to bardzo łatwo o błąd. Dzięki temu narzędziu możemy zaoszczędzić wiele czasu.

Z punktu widzenia bezpieczeństwa systemu jest to jedna z najgorszych możliwych konfiguracji, ale my chcemy jedynie przetestować Sambę, więc pominiemy na razie kwestie bezpieczeństwa. W tym momencie jesteśmy gotowi do uruchomienia naszej testowej konfiguracji:

# . /etc/rc.d/rc.samba start

Jeśli zrobiłeś wszystko tak jak opisałem, to po wydaniu komendy ps -A powinieneś zobaczyć przynajmniej po jednym procesie smbd i nmbd. Jeśli je widzisz to znaczy, że Samba wystartowała. Skoro wiemy, że Samba wystartowała to sprawdźmy czy da się z nią połączyć.

# smbclient -U% -L localhost


Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.20b]

Sharename Type Comment
--------- ---- -------
test Disk Do testow
IPC$ IPC IPC Service (Samba 3.0.20b)
ADMIN$ IPC IPC Service (Samba 3.0.20b)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.20b]


Server Comment
--------- -------
DARKSTAR Samba 3.0.20b
THORLIN Asmo File Server

Workgroup Master
--------- -------
WORKGROUP THORLIN

Informacje dostarczone przez powyższą komendę potwierdzają, że nasz testowy serwer działa i udostępnia katalog test oraz dwa inne udziały administracyjne, do których znaczenia powrócimy później. Ponadto widzimy, że w sieci istnieje jeszcze jeden serwer o nazwie THORLIN będący master browser.

Master browser to komputer odpowiedzialny za utrzymywanie aktualnej listy komputerów w naszej grupie roboczej. W sieciach SMB/CIFS wybór komputera, który będzie pełnił rolę master browser następuje automatycznie na podstawie kilku czynników. Proces ten nazywany jest browser election. Jest możliwość zmuszenia Samby by wygrała takie wybory, ale omówimy to później.

Firewall

Komputer z uruchomioną Sambą nasłuchuje na porcie TCP 139 i odpowiada na zapytania klientów w sposób zgodny z jego konfiguracją. Porty UDP 138 oraz UDP 137 są również wykorzystywane. Pierwszy do zamiany nazw NetBIOS na adresy IP a drugi do przegląda otoczenia sieciowego. Jak łatwo się domyśleć przesyłanie plików oraz danych do drukarki odbywa się wyłącznie przez port TCP. Jeśli posiadasz firewall to upewnij się, że porty te nie są blokowane. Poniżej przykładowe komendy do odblokowania wspomnianych portów.

#Akceptowanie połączeń na port tcp 139 z sieci lokalnej
iptables -A INPUT -p TCP -s 192.168.11.0/24 --destination-port 139 -j ACCEPT

#Akceptowanie połączeń na port udp 137 z sieci lokalnej
iptables -A INPUT -p UDP -s 192.168.11.0/24 --destination-port 137 -j ACCEPT

#Akceptowanie połączeń na port udp 138 z sieci lokalnej
iptables -A INPUT -p UDP -s 192.168.11.0/24 --destination-port 138 -j ACCEPT

Jeśli używałeś generatora firewalla opisanego w jednym z poprzednich rozdziałów to będziesz musiał go zmodyfikować lub wygenerować ponownie z uwzględnieniem tych portów.

Uwierzytelnianie

Aby Samba pozwoliła Ci na dostęp do swoich zasobów, nazwa użytkownika i hasło, które podajesz podczas logowania się w Windows, muszą odpowiadać nazwie konta i hasłu na serwerze Samby. Jeśli login i hasło, jakiego używamy do logowania w Windows, zostaną odrzucone przez serwer Samby to zostaniemy spytani o login i hasło przy pomocy okna dialogowego.

Wynika z tego, że aby użytkownicy mieli dostęp do udziałów serwera Samby muszą posiadać na serwerze konta. Kolejny problem to taki, że hasła w Windows kodowane są innym algorytmem niż te używane w Linuksie. Wymusza to przechowywanie dwóch różnych zestawów haseł.

Tworzymy użytkowników

Użytkowników, którzy będą mieli dostęp do naszych udziałów dodajemy do grupy smbpwrusers w następujący sposób:

# useradd -d /bin/false -g smbpwrusers -s /dev/null thor

W tym przypadku dodaliśmy użytkownika thor, który należeć będzie do grupy smbpwrusers i ani nie będzie miał shell'a ani nie będzie miał przyporządkowanego katalogu domowego. Tworzenie użytkowników o takich parametrach jest bardzo dobrym pomysłem z punktu widzienia bezpieczeństwa systemu. Użytkownicy tacy nie będą mogli się zalogować na naszym serwerze. Jedynym ich przywilejem będzie dostęp do udziałów Samby oraz ich modyfikowanie (jeśli nie dodałeś do pliku /etc/shells linii /dev/null to teraz jest bardzo dobry moment).

Ostatnim krokiem będzie stworzenie pliku z hasłami dla użytkowników Samby przy pomocy polecenia smbpassword:

# smbpassword -a thor
New SMB password:

Przełącznika -a używamy tylko wtedy gdy tworzymy nowe konto użytkownika, jeśli chcemy jedynie zmienić hasło dla istniejącego użytkownika pomijamy go.

Zdaje sobie sprawę, że jest to dość uciążliwe dodawać każdego jednego użytkownika do systemu tylko po to by mógł przeglądać udziały i kopiować pliki. Jest oczywiście inne łatwiejsze wyjście z tej sytuacji, ale o tym napiszę w dalszej części rozdziału.

Konfiguracja Windows XP

Przechodzimy do konfiguracji klientów z systemem Windows XP. Na pewno ucieszy was to, że nie jest to zbyt trudne i wystarczą 2 minuty by zakończyć konfiguracje. Po pierwsze musimy nadać komputerowi nazwę i dołączyć do grupy roboczej WORKGROUP (Rys. 1).

Start -> Control Panel -> System -> Zakładka Computer Name -> Change...

c86a5e934a04077095297c61f66851b4.gif
Rysunek 1.
622411ce49f3df5746aebc508fb87bbc.gif
Rysunek 2.

W polu Computer name wpisujemy nazwę pod jaką chcemy żeby był widoczny nasz komputer w sieci, następnie zaznaczamy opcje Workgroup i wpisujemy WORKGROUP w przeznaczonym do tego celu polu. Naciskamy OK. Windows prawdopodobnie zapyta nas czy chcemy zrestartować by wprowadzić zmiany. Odpowiadamy nie i w Control Panel klikamy ikonę Network Connections a następnie wchodzimy we właściwości interfejsu sieciowego przez który mamy połączenie z naszym serwerem Samby (Rys. 2). I upewniamy się, że mamy File and Printer Sharing for Microsoft Windows, Client for Microsoft Networks oraz Internet Protocol (TCP/IP) (Rys. 3). Jeśli prócz wymienionych wyżej protokołów masz cos co zawiera w nazwie IPX/SPX lub NetBEUI to odinstaluj to zaznaczając i klikając przycisk Uninstall.

Ostatnim krokiem jest włączenie NetBIOS over TCP/IP oraz powiadomienie klientów o adresie serwera WINS. Aby to zrobić klikamy Internet Protocol (TCP/IP) a następnie przycisk Properties w tym samym oknie, w którym sprawdzaliśmy czy mamy zainstalowane odpowiednie protokoły (Rys. 3). Po kliknięciu Properties otworzy się następne okno, w którym klikniemy Advanced... a następnie przejdziemy do zakładki WINS i zaznaczymy Enable NetBIOS over TCP/IP oraz dodamy adres serwera WINS klikając na przycisk Add (Rys. 4) . Adres serwera WINS to adres IP naszego serwera Samby.

8ff46ae46c7dfbebba0240f8c653b363.gif
Rysunek 3.
0df59ffdfd0ed46febef82af4cfb7984.gif
Rysunek 4.
Tip:
Jeśli wyłączysz NetBIOS over TCP/IP to musisz być pewny, że twój serwer samby skonfigurowany jest do porozumiewania się "surowym” protokołem SMB/CIFS używając portu 445. Patrz polecenie konfiguracyjne smb ports które musi zawierać wartość 445 oraz 139. smb ports = 445 139.

W tym momencie możemy zrestartować Windows. Gdy się z powrotem załaduje powinniśmy widzieć nasz testowy serwer w sieci (Rys. 5).

a9bc513e446cdad27fcf53b61a0f5419.gif
Rysunek 5.

Konfiguracja adresu serwera WINS może zostać przeprowadzona również za pomocą DHCP. Wystarczy dodać w pliku /etc/dhcpcd.conf w cześci odpowiadającej za konfiguracje odpowiedniej sieci linijkę jak na przykłądzie poniżej:

subnet 192.168.11.0 netmask 255.255.255.0
{
range 192.168.11.200 192.168.11.249;
authoritative;
option routers 192.168.11.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.11.255;
option netbios-name-servers 192.168.11.1; #A# Dodana linijka
}

O konfiguracji DHCP pisałem w rozdziale 10. Instalacja serwera DHCP.

Dostęp do udziałów

Jak zapewne zauważyliście tworzenie użytkowników, tylko po to by mieli dostęp do udziałów, za każdym razem gdy przybywa nam nowy użytkownik w sieci jest dość uciążliwe. Wyjściem z tej sytuacji jest dodanie kilku linijek do naszego pliku konfiguracyjnego.

[global]
workgroup = WORKGROUP
wins support = yes
encrypt passwords = yes
guest account = nobody
map to guest = Bad User

[test]
comment = Test Samby
path = /home/samba/test
read only = yes
guest ok = yes

[test2]
comment = Test2 Samby
path = /home/samba/test2
read only = no
guest ok = no

Znaczenie dodanych dyrektyw:

guest account = nobody

nazwa użytkownika, którego prawa będą używane przy dostępie do udziałów zadeklarowanych jako guest ok = yes. Użytkownik podany jako parametr musi być obecny w pliku /etc/passwd ale nie musi posiadać zadeklarowanego shell'a ani katalogu roboczego.

map to guest = Bad User

powoduje, że użytkownicy z niepoprawnym hasłem oraz nie będący w pliku /etc/passwd są traktowani jako użytkownicy guest a konkretnie jako użytkownik podany jako parametr dyrektywy guest account. Zauważ, że użytkownik nie może być wymieniony w pliku /etc/passwod, jeśli jest i poda nieprawidłowe hasło to nie zostanie dopuszczony do udziału.

guest ok = yes

użytkownik guest będzie miał dostęp do udziału z tą opcją ustawioną na yes.

Jeśli udziały udostępniane przez Sambę są dostępne również przez ftp dla użytkowników anonimowych to wygodnym rozwiązaniem jest ustawienie guest account = ftp. Dzięki temu będziemy mięli mniej do konfiguracji jeśli chodzi o prawa dostępu.

Jeśli z jakiegoś powodu nie mamy użytkownika ftp lub nobady w pliku /etc/passwd to dodajemy go za pomocą następujących komend:

# groupadd nobody
# useradd -d /bin/false -g nobody -s /dev/null nobody

lub

# groupadd ftp
# useradd -d /bin/false -g ftp -s /dev/null ftp

OK. Mamy już zmieniony plik konfiguracyjny Samby teraz ustawmy poprawne prawa dostępu do katalogów udostępnianych w sieci (pamiętasz że dla testu ustawiliśmy prawa do katalogu test jako 777).

# chmod 775 /home/samba/test
# chown root.smbpowerusers /home/samba/test

By nasze zmiany zostały wprowadzone musimy zrestartować Sambę poleceniem:

# . /etc/rc.d/rc.samba restart

Teraz użytkownicy, których dodaliśmy do grupy smbpwrusers będą mieli dostęp do wszystkich udziałów do których ma dostęp ta grupa. Ponadto będą mieli prawo do ich modyfikowania (kasowania, zmiany i tworzenia nowych plików) jeśli dyrektywa read only = no. Znaczy to, że w naszym przykładzie wcześniej dodany użytkownik thor będzie mógł modyfikować pliki w katalogu test2 ale nie będzie w stanie modyfikować katalogów z test mimo że prawa dostępu dla grupy smbpwrusers pozwalają na to.

Użytkownicy którzy nie występują w pliku /etc/passwd zostaną dopuszczeni tylko do udziału test oraz do udziałów, w których ustawiliśmy guest ok = yes oraz nie będą mieć prawa do ich modyfikowania.

Przyspieszenie przeglądania sieci

Na komputerach pod kontrolą systemu Windows XP powinniśmy przede wszystkim wyłączyć lub odinstalować protokoły, które nie są nam potrzebne. W większości przypadków wystarczą nam protokoły (jak je włączać i wyłączać opisałęm w podrozdziale Konfiguracja Windows XP):

  1. TCP/IP,
  2. FIle and Frinter Sharing For Microsoft Networks,
  3. Client for Microsoft Networks.

 

Źródło: http://slackware.asmonet.net