Samba
Czym jest Samba?
W niniejszym artykule starałem się przedstawić pokrótce serwer plików i drukarek w sieciach TCP/IP zgodny usługami udostępniania w sieciach Windows®. Zamiast ponosić wysokie koszty zakupu Windows NT® lub Windows 2000® możemy zainstalować na serwerze uniksowym darmową Sambę, która dla pecetów w sieci działa i zachowuje się dokładnie jak powyższe oprogramowanie firmy Microsoft. Uzyskujemy jednocześnie środowisko o nieporównanie większych możliwościach rozwoju i skalowalności.
Opracowanie ma charakter uniwersalny, w miarę możliwości niezależny od systemu operacyjnego na którym instalujemy i konfigurujemy Sambę w wersji 2.0.9.
Instalacja
Każdy system posiada wsparcie dla instalowania dodatkowych pakietów oprogramowania (np. ports, packages we FreeBSD lub RPM w Linux), tak więc najprościej skorzystać z tego udogodnienia aby zainstalować najnowszą wersję Samby. Jednak chcąc zachować uniwersalność tego artykułu wykonamy to "na piechotkę". Obecnie zalecana wersja Samby to 2.0.9 w której wyeliminowano bug w zapisie tymczasowych plików kolejki wydruku w sposób niekontrolujący istnienia linków do innych plików, co mogło prowadzić do naruszenia bezpieczeństwa. Najnowsza wersja Samby z nowej gałęzi rozwojowej to 2.2.0 i wspiera ona system autoryzacji w domenie NT/Windows 2000.
Całość procesu opisanego w artykule wykonujemy jako superużytkownik root. Z polskiego mirrora ściągamy, rozpakowujemy, konfigurujemy i kompilujemy dystrybucję Samby
$>cd /usr/install $>wget -c -o log.txt ftp://giswitch.sggw.waw.pl/pub/unix/samba/samba-2.0.9.tar.gz $>tar -zxvf samba-2.0.9.tar.gz $>cd samba-2.0.9/source $>./configure --localstatedir=/var/log/samba --sysconfdir=/etc $>make && make install && make clean |
Są dwa sposoby uruchamiania usług Samby, standardowo poprzez inetd lub jako daemony (np. z /usr/local/etc/rc.d/samba.sh). Prostszym i łatwiejszym, a zarazem efektywniejszym dla małych instalacji (rzędu <30 pecetów) jest start usług z /etc/inetd.conf. Po dopisaniu obu linijek musimy powiadomić inetd o zmienionej konfiguracji i sprawdzamy czy usługi zostały uruchomione. Formalnie należy także sprawdzić czy w pliku /etc/services są odpowiednie wpisy (sieć Windows® "okupuje" porty 137, 138, 139). Jest jeszcze trzeci wpis dotyczący usługi konfiguracji Samby poprzez przeglądarkę (Swat) o czym można przeczytać w dokumentacji. Ze względów bezpieczeństwa nie polecam tej usługi, dlatego tutaj nie będziemy jej uruchamiać. Przed startem usług należy jednak stworzyć poprawny plik konfiguracji zasobów Samby, o czym później.
$>cd /etc |
Konfiguracja
Przystępujemy do stworzenia poprawnej konfiguracji udostępnianych zasobów. Przed tym jednak zmodyfikujemy usługi drukowania serwera pod kątem udostępnienia drukarki sieciowej dla naszych pecetów. W systemach *BSD odpowiednie wpisy muszą się znaleźć w pliku /etc/printcap.
$>grep -v ^\# printcap |
Warto tutaj wspomnieć, że pozycja mx#0 jest wymagana do poprawnej pracy drukarki i wyłącza limit wielkości pliku wysyłanego do drukarki (domyślnie 1MB). Większość problemów wynikająca z dziwnego zachowania drukarki przy wydrukach z Windows® wynika z braku tegoż wpisu. Zakładamy, że uniksowy daemon drukowania został zrestartowany i działa poprawnie po dokonaniu zmian w /etc/printcap.
Przejdźmy zatem do konfiguracji zasobów udostępnianych przez Sambę. Tworzymy i edytujemy plik /etc/smb.conf dokonując wpisów wymaganych dla poprawnego działania naszej sieci. Po modyfikacjach warto przetestować poprawność składniową pod kątem wystąpienia m.in. literówek itp. (polecenie testparm).
Najprościej będzie dostosować do własnych potrzeb poniższy plik konfiguracji. Bogato opatrzonego komentarzami cytuję go tutaj w całości. W dalszej części artykułu omówię wybrane, ważne aspekty tej konfiguracji. Pomoc na temat poszczególnych parametrów jest dostępna w dokumentacji Samby. Obejrzymy ją wydając polecenie "man smb.conf". Podczas instalacji Samby, oprócz dokumentacji i manuala, otrzymujemy doskonałą książkę w postaci stron html. W systemie FreeBSD domyślnie jest ona instalowana w katalogu "/usr/local/samba/swat/using_samba". Nosi ona tytuł "Using Samba" autorami są R.Eckstein, D.Collier-Brown, P.Kelley.
Listing pliku konfiguracji Samby (smb.conf) nie zmieścił się w wydaniu Software nr. 11 z powodu jego wielkości, został jednak umieszczony na płycie CD sprzedawanej wraz z numerem. Jest umieszczony wraz z innymi listingami na CD w pliku \Opis\listingi.html a jego najnowsza wersja jest poniżej.
$>cat /etc/smb.conf |
Konfiguracja Sieci
Chcąc wykorzystać zdolność Samby do przechowywania zindywidualizowanych ustawień użytkowników Windows® należy w odpowiedni sposób skonfigurować sieć oraz włączyć profile (Rysunek 1).
Konfiguracja sieci w Windows® wymaga zainstalowania protokołu TCP/IP, przyznaniu adresu IP oraz kilku opcji. Adres IP musi być umieszczony, wraz z nazwą peceta bądź w /etc/hosts na uniksie bądź w naszym DNS. Niezbędne jest ustawienie nazwy "Netbios" peceta na zakładce "Identyfikacja" we "Właściwościach Sieci", podanie tej samej grupy roboczej co w pliku /etc/smb.conf, opisu komputera (Rysunek 2),
a także logowania do domeny NT. Nazwa domeny jest identyczna jak nazwa grupy roboczej (Rysunek 3). W celu zapewnienia poprawnego wyświetlania zasobów naszych podsieci musimy utrzymywać serwer WINS, którego rolę może pełnić Samba (o ile parametry pliku sbm.conf na to zezwalają). Należy poinformować Windows® o adresie serwera WINS, co musi być wykonane bezwzględnie na wszystkich pecetach we wszystkich podsieciach pod rygorem niepoprawnej obsługi tzw. "cross subnet browsing", czyli prezentacji udostępnianych zasobów przez wszystkie komputery we wszystkich podsieciach (patrz dokumentacja Samby). Bardzo ważne jest poprawne ustawienie maski podsieci w konfiguracji TCP/IP na pecetach. Błędna maska spowoduje błędne rozgłaszanie się Windows gdyż użyją niepoprawnego adresu broadcast. Jest to źródłem problemów powstających w relacji Samba - Windows, nieraz bardzo trudnych do zidentyfikowania. Najprościej rzecz ujmując, maska musi być identyczna jak na interfejsie serwera do którego dana podsieć jest przyłączona (Rysunek 4).
Powyższe zasady zagwarantują późniejsze bezproblemowe działanie naszej sieci wraz ze wszystkimi podsieciami. Przy większych instalacjach oraz przy podziale na podsieci względem grup roboczych (np. różne oddziały firmy w różnych miastach), warto zainstalować po jednym z serwerów Samby w każdej jednostce, co zaoszczędzi nam i tak małej przepustowości łącz międzyoddziałowych oraz zwiększy szybkość działania lokalnych grup roboczych. W takiej sytuacji niezbędnym staje się właśnie serwer WINS, z którego lokalne serwery oddziałowe będą pobierać informacje o udostępnianych zasobach. W całej naszej rozległej sieci powinien być wyłącznie jeden taki serwer i nie koniecznie musi być nim Samba, jednak tutaj skupimy się na konfiguracji Samby przystosowanej do tego celu.
Pewnym skutkiem ubocznym jest długotrwałe utrzymywanie w otoczeniu sieciowym komputerów udostępniających zasoby, nawet po ich fizycznym wyłączeniu z prądu. Jedyną metodą skracającą ten czas jest ustawienie poniższych parametrów w pliku /etc/smb.conf na serwerach Samby (mogą wystąpić inne uboczne skutki przy zbyt małych czasach tak więc zależne jest to od konkretnej instalacji, poniższe parametry wydają się być optymalne dla kilku serwerów):
# skrócenie domyślnych czasów utrzymywania list zasobów w sieci |
Konfiguracja "domain master browser", na którym równocześnie będzie działać serwer WINS, powinna wyglądać jak w poniższym przykładzie:
# domain master browser + WINS serwer |
Konfiguracja "local master browser", powinna wskazywać (jeżeli chodzi o WINS), na nasz główny serwer i wyglądać tak:
# lokalny serwer oddziału firmy |
Takie ustawienia wymuszają synchronizację pomiędzy serwerami lokalnymi, a głównym serwerem, na którym jest WINS.
Profile
Włączenie profili użytkowników wymusza na Windows® utrzymywanie osobnych ustawień dla każdego użytkownika. Są one przechowywane w podkatalogu "C:\WINDOWS\PROFILES\", gdzie tworzone są katalogi o nazwach użytkowników. Każdy zawiera kompletne "MENU START" z zawartością, osobny plik rejestru USER.DAT i inne. Przy pierwszym wylogowaniu się z serwera, zawartość kopiowana jest do katalogu domowego użytkownika (co zresztą określone jest w /etc/smb.conf). Zalogowanie się do sieci powoduje zsynchronizowanie lokalnej i zdalnej zawartości profilu i ewentualne jego skopiowanie z serwera na dysk lokalny.
Pozwala to na przesiadkę na innego peceta gdzie po zalogowaniu do sieci (przy włączonych profilach) Windows® udostępni nam nasze menu, ustawienia itd. Ubocznym skutkiem jest kopiowanie tej struktury na lokalne dyski (coś za coś) oraz tworzenie pliku z hasłami (*.pwl, można to wyłączyć odpowiednim wpisem do rejestru, patrz dokumentacja Samby).
Logowanie do sieci wymusza na Windows® wykonanie skryptu startowego (co określa odpowiedni wpis w /etc/smb.conf). Jest to zwyczajny plik wsadowy (batch np. startup.bat) koniecznie edytowany w trybie MS-DOS tzn. z CR+LF na końcach linii (np. $>joe -crlf startup.bat). Można także skorzystać z konwersji pliku narzedziami unix2dos oraz dos2unix. Ostatnia linia nie może powodować wywołania programu, z którego nie ma powrotu np. wywołanie Norton Commander® itp. gdyż Windows® po prostu się nam zawiesi. Poniższy przykład demonstruje główny plik startup.bat z którego wywoływany jest plik zindywidualizowany startup.bat z katalogu domowego użytkownika:
@echo off |
Po wykonaniu tego skryptu, zostanie również wykonany skrypt użytkownika "startup.bat" o ile istnieje w jego katalogu domowym na dysku U:. Pozwala to na indywidualne traktowanie użytkowników, na dostosowywanie środowiska pracy użytkowników oraz pozwala im na edycję tych ustawień:
@echo off |
Domeny PDC
Samba w wersji 2.0.9 potrafi współpracować z domenami Windows NT® jednak z Windows 2000® występują pewne problemy, które mają zostać usunięte w kolejnej wersji Samby. Zakładamy że kontrolerem domeny jest Windows® (NT lub 2000), on też obsługuje serwer WINS, i "domain master browser". Wymagane parametry w pliku konfiguracyjnym /etc/smb.conf wyglądają wtedy następująco:
# konfig dla pracy z kontrolerem domeny NT |
Niezbędne jest także dokładne przestudiowanie dokumentacji Samby, opisującej w jaki sposób należy skonfigurować Windows® i Sambę w celu przystosowania ich do takiego trybu pracy. Ten artykułu ma jedynie zasygnalizować taką możliwość, dlatego nie będziemy się zagłębiać w tym kierunku wyręczając autorów Samby w przekazywaniu nam swojej wiedzy. :-) <ALIGN="CENTER"Użytkownicy Zakładając, że wykonaliśmy instalację i konfigurację Samby, dodajmy teraz użytkowników do naszego serwera. Powinniśmy tutaj posłużyć się standardowym dla naszego uniksa narzędziem, przy czym dla użytkowników wyłącznie sieci Windows, nie przydzielamy shella (bo i po co?). Wyjątkowo dla użytkowników posiadających konto pocztowe na tym samym serwerze, możemy przydzielić zamiast shell'a program "passwd" do zmiany hasła uniksowego. Przydzielanie programu "smbpasswd" jest niecelowe, bowiem użytkownik ma możliwość zmiany hasła sieciowego Windows® z "Panelu Sterowania" (ikona "Hasła"). Jest to także naruszeniem bezpieczeństwa. Podawanie jawnym tekstem nowego hasła sieciowego (jak to jest w przypadku passwd i smbpasswd) może być podsłuchane i wykorzystane do nieuprawnionego dostępu do zasobów serwera. Najlepszym rozwiązaniem jest całkowite wyłączenie shell'a lub udostępnienie bardziej zaawansowanym użytkownikom konta uniksowego, z wyłączną możliwością zalogowania się przy użyciu szyfrowanych protokołów (np. ssh). Polecam tu szczególnie darmowy program terminala dla Windows® - PuTTY SSH.
$>smbpasswd -a adam |
Jak widać Samba wyraźnie zmusza nas do wcześniejszego założenia użytkownika w uniksie. Kiedy Konto uniksowe jest już założone, katalog domowy utworzony a prawa poprawnie ustawione możemy przejść do dodania użytkownika do Samby.
$>smbpasswd -a pit |
Skutkuje to dopisaniem do pliku użytkowników. Zwykle jest on w katalogu "/usr/local/samba/private/" jednak to może zostać zmienione, na etapie konfiguracji i kompilacji Samby.
$>cd /usr/local/samba |
Narzędzie smbpasswd ma wiele dodatkowych opcji, pozwalających na blokowanie dostępu, zmianę lub usunięcie hasła, usunięcie użytkownika, dodanie do domeny NT itp. Szczególnym trybem działania jest przejście Samby z haseł nieszyfrowanych na szyfrowane, co także opisuje dokumentacja. Samba działając na nieszyfrowanych hasłach posługuje się standardowymi plikami haseł uniksa i nie wymaga dodawania użytkowników do Samby.
Pamiętajmy jednak że wtedy z poziomu panelu sterowania Windows® nie można zmienić hasła i trzeba to robić tradycyjnym uniksowym passwd. Pamiętajmy że smbpasswd działa w trybie klient-serwer dlatego wymagane jest aby uniks jako "localhost" miał zezwolenie na dostęp do Samby (polecam zapoznanie się z plikami *.TXT z dokumentacji Samby).
Bardzo pomocnym narzędziem w codziennym działaniu Samby jest "smbstatus", pokazujący stan wszystkich połączeń z Sambą, otwarte pliki, blokady itp.:
$>smbstatus |
Na powyższym zestawieniu widać, że w przypadku plików bazy danych Samba nie stosuje oplock'a (zezwolenia na agresywne cache'owanie pliku przez windows) natomiast plik S.TXT ma właśnie taki tryb dostępu. Zamknięcie pliku nadal nie jest widoczne bowiem jest on w dyspozycji peceta aż do momentu, gdy jakiś inny komputer poprosi Sambę o otwarcie tego samego pliku. Następuje wtedy negocjacja Samby z obydwoma komputerami, która objawia się dla użytkowników chwilowym zablokowaniem Windows®.
W tym czasie, Samba kontaktuje się z klientem który jako pierwszy otrzymał oplock do pliku. Windows po otrzymaniu rozkazu przerwania oplock'a wie, że nie może już korzystać z buforowania pliku i musi czytać go ponownie z serwera. Drugi klient po całej tej "rozmowie" otrzymuje dostęp do pliku. Może to trwać kilka do kilkunastu sekund. W tym czasie obydwa komputery są zablokowane, co czasem ma wpływ na ich właścicieli i kończy się przedwczesnym zresetowaniem komputera, przez zniecierpliwionego użytkownika. Można ten czas regulować jednak domyślne wartości wydają się być optymalne. Najlepiej uprzedzić użytkowników a takich skutkach ubocznych, informując że niestety jest to niezbędne, jeżeli chcemy mieć bardzo wydajny serwer plików.
Explorator Windows® ma tendencję do zczytywania początków plików przy przeglądaniu zawartości dysków (np. w celu rozpoznania typu pliku, odczytaniu ikony itp.). Ta cecha powoduje że pliki "hurtowo" zostają otwierane w trybie oplock. Kiedy z takiego katalogu korzysta wielu użytkowników najlepiej jednak będzie zrezygnować z oplock'ów. Częściowo zostało to poprawione w Sambie, poprzez wprowadzenie parametru:
"level2 oplocks = True"
Z moich doświadczeń wynika, że ten tryb blokowania plików najlepiej sprawdza się w katalogach domowych użytkowników, zapewniając maksymalną wydajność Samby a także w niewielkich grupach roboczych. Tam gdzie z zasobu korzysta duża liczba użytkowników, najlepiej od razu wymusić na Sambie pracę bez oplock'ów.
Szybkość
Samba w przypadku sieci, gdzie ilość stacji roboczych jest niewielka, wykazuje się transferami podobnymi jak Windows® NT czy 2000. Gdy liczba klientów wzrasta, zaczynamy dostrzegać przewagę Samby jako serwera plików i drukarek. Samba doskonale radzi sobie z obciążeniami rzędu kilkudziesięciu pecetów. Wąskim gardłem jest sieć oraz szybkość dysków i tak:
Serwerek AMD-K6 233MHz 32MB RAM 20GB HDD IBM 5400rpm FreeBSD 3.5 Samba 2.0.9 |
Samba zużywa około 2-3 MB RAM na każdego klienta. Z tym że przy bezczynności klienta, pamięć jest zwalniana -poprzez zrzut do swap'u- o ile jest to konieczne i wymagane przez serwer uniksowy. Nie wszytkie uniksy tak się zachowują. W przypadku braku pamięci robi tak np. FreeBSD, natomiast nie robi tego Linux. Stąd zwyczajny komputer działający jako niewielki serwerek z 32MB RAM oraz z systemem FreeBSD, doskonale obsługuje sieć złożoną z 25 komputerów.
Zakończenie
Niniejszy artykuł został napisany dla miesięcznika "SOFTWARE", do numeru specjalnego poświęconego systemom FreeBSD, NetBSD, OpenBSD.
Nie omawiam w nim wielu specyficznych parametrów dla każdego z nich, np. parametrów kernela FreeBSD pozwalających na trzymanie blokad plików przez Sambę w pamięci współdzielonej zamiast w pliku dyskowym, zwiększenia ilości możliwych do otwarcia plików itp. (można o tym przeczytać w dokumentacji twojego systemu uniks - konfiguracja kernela, opcje dotyczące SYSV). Być może wersja online będzie bardziej rozbudowana i poruszy jeszcze wiele innych aspektów działania sieci Windows® z serwerem Samba na pokładzie systemów BSD. Ilość specyficznych parametrów dla każdego z nich jest bardzo duża. Przedstawianie ich tutaj daleko wykracza poza ramy artykułu i mieści się raczej w kategorii "zaawansowana administracja i konfiguracja w systemach uniksowych BSD". Początkujący administrator powinien zaufać programom konfigurującym ("configure" w dystrybucji) i przygotowującym pakiet Samby do kompilacji.
Najnowsza wersja tego opracowania jest dostępna pod adresem: http://bofh.vt.pl
Dodatkowe informacje można uzyskać kontaktując się z autorem: Bartek Siębab
Grupa dyskusyjna USENET: news://comp.protocols.smb
Oficjalne strony projektu Samba: http://www.samba.org