Protokoły SMB i CIFS
SMB to protokół udostępniania zasobów jednego komputera innemu. Został opracowany w latach 80. przez IBM, lecz w późniejszych latach jego dalszym rozwojem zajął się Microsoft, który uczynił go podstawą udostępniania plików i drukarek w swoich systemach Windows. Począwszy od wersji 3.11 każda wersja systemu zawiera jego implementację. CIFS to nowa wersja SMB stworzona przez Microsoft oraz kilka innych firm - jej implementacja znajduje się w najnowszych wersjach Windowsa.
SMB jest protokołem typu klient-serwer. Komputer kliencki generuje zapytania do serwera i otrzymuje od niego odpowiedzi. Jednak praktycznie wszystkie implementacje dysponują oboma zestawami funkcji, przez co maszyna może korzystać z zasobów udostępnionych przez innych, jak i sama coś udostępniać. Jest to przydatne szczególnie w małych sieciach domowych, gdzie nie ma możliwości/potrzeby uruchomienia centralnego serwera. Z drugiej strony, jego zbudowanie nie jest takie trudne; korzystamy tam z tych samych narzędzi, co w przypadku zwykłych komputerów.
Jak to wszystko działa?
Pierwsza rzecz, którą muszą zrobić komputery, to odnaleźć się w sieci. Używany jest do tego protokół NetBIOS pracujący na portach 137, 138 i 139. Może być to wykonane albo poprzez emisję (mówiąc obrazowo, komputer wysyła w sieć głośno informację "ej, tu jestem i nazywam się XXX!!!" :)) lub poprzez serwer centralny WINS (Windows Internet Name Service). Metoda 1 jest dobra dla sieci bez serwera centralnego, lecz na dłuższą metę trochę niewydajna. Druga wymaga obecności dodatkowej maszyny. Microsoft wprowadził ostatecznie cztery metody rozpoznawania nazw:
- Węzeł-B - emisja (wersja zmodyfikowana wcześniej sprawdza lokalny bufor tymczasowy LMHOSTS).
- Węzeł-P - korzystanie z serwera WINS. Jeśli go nie ma, rozpoznawanie nie działa.
- Węzeł-M - najpierw emisja, a później WINS
- Węzeł-H - najpierw WINS, później emisja.
Komputery w sieci mogą być zorganizowane w grupy robocze, które są niczym innym, jak takim folderem ułatwiającym organizację i odnajdywanie konkretnych zasobów. Znacznie bardziej zaawansowanym rozwiązaniem są domeny, udostępniające możliwość zdalnego logowania się oraz centralne mechanizmy zabezpieczeń. Są one jednak trudniejsze do skonfigurowania oraz wymagają obecności centralnego serwera. Tym się nie będziemy tutaj zajmować.
Windows
W Windowsie sprawa jest prosta, ponieważ protokół SMB, jak prawie wszystko w tym systemie, jest wbudowany w jądro :). Wchodzimy w Panel sterowania -> System, wpisujemy nazwę komputera i grupy roboczej, po czym wszystko restartujemy. Jeśli nie widzimy innych komputerów w sieci, a one nie widzą nas, winę za to ponosi zainstalowany na maszynie firewall. Musisz odblokować w nim porty 137, 138, 139 oraz być może 445 dla transmisji w sieci lokalnej (z/do adresów IP 192.168.1.x czy co tam masz). Upewnij się, że odpowiednia reguła znajduje się PRZED regułą blokującą nieznane pakiety - inaczej i tak zostaną one odrzucone :).
Linux
Instalujemy pakiet Samba będący uniksową implementacją protokołu SMB, co ciekawe - działającą dwukrotnie wydajniej, niż kod Microsoftu :). W Arch Linuksie to kwestia ściągnięcia jednego pakietu:
# pacman -S samba
W katalogu /etc/samba/ odnajdujemy plik smb.conf.default i zmieniamy go na smb.conf. Otwieramy go do edycji, kasujemy wszystko i wklejamy rzecz następującą:
# tutaj nazwa grupy roboczej workgroup = GRUPA_ROBOCZA # nazwa naszej maszyny (max. 16 znaków) netbios name = NAZWA_KOMPA # tutaj strzelamy opis server string = Opis # poziom bezpieczeństwa - zgodnie z dokumentacją # na jego podstawie Samba decyduje, czym będzie. # My nie mamy ani domen, ani serwera domen, więc # jedynym sensownym wyborem jest "share". security = share # yes, jeśli chcemy udostępniać drukarki load printers = no # włącz szyfrowanie haseł encrypt passwords = yes
Kasujemy wszystko, co jest po wielkim nagłówku Share definitions - tutaj określimy, co chcemy udostępniać, więc domyślne propozycje nam nie są potrzebne. Pokażę teraz, jak udostępnić dwa katalogi tylko do odczytu - jeden dostępny dla wszystkich, drugi jedynie po wpisaniu hasła:
[bazar] path = /sciezka/bazar browseable = yes read only = yes guest ok = yes [twierdza] path = /sciezka/twierdza browseable = yes read only = yes guest ok = no valid users = zyx
Oto omówienie poszczególnych opcji:
- path - ścieżka do zasobu
- browseable - czy katalog jest widoczny dla innych komputerów (opcja "no" daje podobny efekt, jak "Moje dokumenty" w Windowsie).
- read only - czy dajemy dostęp tylko do odczytu (Samba ustawia takowy domyślnie, ale dla potwierdzenia i pokazania, że taka dyrektywa istnieje, dodałem ją i tu).
- guest ok - zezwól na dostęp jako gość
- valid users - tylko ci użytkownicy będą mieć dostęp do zasobów. Uwaga: choć wybraliśmy autoryzację na poziomie zasobu (pojedyncze hasło), w Sambie odbywa się to poprzez jakiegoś użytkownika.
# /etc/rc.d/samba start # smbpasswd -a zyx
Zostaniemy poproszeni o hasło dla niego (może być inne, niż systemowe) i na tym nasza robota się kończy. Tak samo, jak w Windowsie, musimy upewnić się, że iptables ma odblokowane odpowiednie porty. Całą czynność powtarzamy na drugim komputerze, jeżeli tam też rezyduje (Arch) Linux :).
Gdybyś chciał zwiększyć nieco wydajność Samby, dodaj do sekcji global następujący wpis:
socket options = TCP_NODELAY
Graficzne nakładki
Środowisko KDE już od jakiegoś czasu wyposażone jest w KSambaPlugin umożliwiający konfigurowanie Samby za pomocą prostego, graficznego interfejsu użytkownika oraz udostępnianie plików paroma kliknięciami, podobnie jak w Windowsie. Jednak nie wiem, czy w standardowych paczkach KDE się takie coś znajduje, ponieważ korzystam z KDEmoda, a tam nic z "samba" w nazwie nie występuje. Zresztą, i tak taki plugin jest średnio zgodny z filozofią Arch Linuksa (co najwyżej to udostępnianie katalogów by się przydało), lecz nie jest to aż tak duży problem. Samba skanuje plik konfiguracyjny co 60 sekund, tak więc restart możemy robić tylko wtedy, gdy nie chce nam się tyle czekać. W przeciwieństwie do Windowsa, nie musimy resetować całego systemu, żeby np. zmienić nazwę domeny :). Co więcej, o ile inni użytkownicy aktualnie nie ściągają jakiegoś pliku, taki restart będzie dla nich niezauważalny.
Zakończenie
Trochę może dziwić, że udostępnianie plików między systemami linuksowymi robione jest przy użyciu technologii windowsowych. Ma to jednak swoje niezaprzeczalne zalety. Rzadko się zdarza, aby Linuksy były jedynymi systemami w całej sieci, a dzięki temu możemy współdzielić pliki niezależnie od systemu. Linux zresztą nie ma jakichś ciekawych mechanizmów do takich operacji. Owszem, powstawały tam różne projekciki, lecz opierały się one przeważnie na protokołach pokroju FTP oraz nie miały zbyt dużego wsparcia. Chociaż SMB rozwijany jest głównie przez Microsoft, sprawdza się równie dobrze w świecie Uniksów dzięki świetnej ekipie projektu Samba. Projekt ten ostatnio otrzymał zastrzyk energii dzięki udostępnieniu głównym projektantom przez Microsoft pełnej dokumentacji protokołu SMB bez żadnych roszczeń w stosunku do napisanego na jej podstawie kodu. Wprawdzie wymusiła to Komisja Europejska, a nie zarząd firmy, jednak liczy się efekt :). Osobom bardziej zainteresowanym Sambą polecam szereg materiałów opracowanych przez administratorów sieci komputerowej "Zatorze" z Olsztyna (banita.pl) - adres do nich umieściłem w przypisach.















Napisał GiM w środę, 28 maja 2008 o 11:55
Buu, skoro już o udostepnianiu plików, to myślałem, że znajdzie się coś o NFSie i innych protokołach sieciowych, a nie o sambie, która jest marną imitacją i ma koszmarne narzuty ;/