Samba to popularny program pozwalający zintegorwać dwa światy: Windowsa i Linuksa
Instalacja
W przypadku dystrybucji Mandrake najpierw musimy zainstalować odpowiedni pakiet:
urpmi samba
Dalej należałoby wygenerować plik haseł dla Samby. Możemy wykorzystać do tego skryp dostarczony razem z pakietem o nazwie mksmbpasswd.sh:
cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
Plik ten niestety nie ma zapisanych haseł, tworzy jedynie plik z odpowiednimi wpisami dla użytkowników. Należy więc wykorzystać polecenie smbpasswd dla dodania ich do pliku (istnieje jeszcze inna możliwość ale jest ona mało bezpieczna).
[root@duzy admin_disk]# smbpasswd ziutus New SMB password: Retype new SMB password: Password changed for user ziutus.
Autoryzacja przez pliki haseł Samby prowadzi do powstania dwóch baz danych haseł, jednej systemowej Linuksa (pliki /etc/passwd i /etc/shadow) co może rodzić problemy np. gdy użytkownik będzie chciał zmienić swoje hasło. Rozwiązań tego problemu jest kilka, można na przykład skorzystać z modulów autoryzacji mod_ldap (autoryzujemy wtedy użytkowników korzystając z bazy ldap) albo mod_smb ( autoryzujemy na podstawie domeny Windows użytkowników Linuksa).
Samba – Budowa pliku konfiguracyjnego
Plik konfiguracyjny Samby (standardowo /etc/samba/smb.conf) składa się z dwóch funkcyjnych części: konfiguracji globalnej, w której definiujemy ustawienia dla całego programu oraz dla poszczególnych udziałów. Linie rozpoczynające się od znaku hash (czyli '#’) albo średnika (czyli ’;’) są komentarzami.
Przykład:
# komentarz przed sekcją ustawień globalnych #======================= Global Settings ===================================== # sekcja ustawień globalnych ;... ;... # koniec sekcji ustawień globalnych #============================ Share Definitions ============================== ; komentarz do sekcji udziałów ; i dalszy komentarz do sekcji udziałów... # definicje poszczególnych udziałów #... # koniec pliku...
Jednak zasadniczą częścią podziału pliku jest tzw. blok czyli część rozpoczynająca się od nawiasów kwadratowych, w której umieszczona jest nazwa, do wystąpienia następnego nawiasu kwadratowego oznaczającej rozpoczęcie kolejnego bloku.
Przykład:
[tmp] comment = Temporary file space path = /tmp read only = no public = yes
Testowanie poprawności plików konfiguracyjnych
Programem przydatnym do testowania konfiguracji Samby jest testparm, którego znajdziemy w pakietach razem z Sambą. Sprawdza on poprawność składni a następnie pozwala zobaczyć jak skonfigurowane ustawienia widzi Samba.
debian:~# testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[printers]" Loaded services file OK. Press enter to see a dump of your service definitions
Polskie znaki w nazwach plików
Opcje akutalne dla samby 2.x, samba 3.x nie wspiera już tych opcji.
W przypadku stosowania polskich znaków w nazwach plików należy dodać dwie dyrektywy do pliku konfiguracyjnego Samby. Jeżeli tego nie uczynimy Samba może się wieszać albo dostaniemy na kliencie komunikat typu "Błąd systemu plików nr. 1026". Dyrektywy te to (umieszczamy je w bloku [globals]):
charset set = ISO8859-2 client code page = 852
Samba – Logowanie zdarzeń i pliki dzienników
Podczas pracy z Sambą bardzo przydatne mogą okazać się informację o pracy serwera. Szczególnie przydają się one przy diagnozowaniu problemów z Sambą. Przykładowy wpis tworzący dla każdego komputera osobny plik logów wygląda następująco:
log file = /var/log/samba/samba.%m log level = 1 max log size = 40
Znaczenie użytych parametrów:
log file | Parametr określa nazwę pliku, w którym zapisane zostaną informację. Zmienna %m oznacza nazwę komputera, który się łączy z serwer, czyli dla każdego komputera zostanie utworzony osobny wpis. |
log level | Określa poziom logowanych zdarzeń. Wartość jest z przedziału 1 – 10, przy czym poziom 1 daje najmniej komunikatów a 10 najwięcej. Jeżeli wszystko działa poprawnie, wystarczający poziom to 1. |
max log size | Określenie maksymalnej wielkości pliku w kilobajtach. Jeżeli rozmiar ten zostanie przekroczony, Samba zmieni jego nazwę dodając rozszerzenie .old i zacznie logować do pustego pliku od nowa. |
Logowanie zdarzeń do syslog-a
Jeżeli chcemy, aby logowanie zdarzeń odbywało się tylko do sysloga, musimy się upewnić, iż Samba była skompilowana z opcją " –with-syslog". Następnie ustawiamy w sekcji [global] zmienną "syslog only" na "yes". Natomiast dyrektywa syslog pozwala okreslić jak ważne komunikaty zostaną wysłane do syslog-a a jakie .
syslog = 10 syslog only = yes
Wiecej informacji: http://oreilly.com/openbook/samba/book/ch04_08.html
Zobaczmy się w otoczeniu sieciowym
Zacznijmy od najprostszej sprawy czyli sprawmy aby komputer pojawił się w otoczeniu sieciowym. Nic w ten sposób nie udostępnimy ale uzyskamy podstawową rzecz: sprawdzimy czy faktycznie ta Samba działa.
Musimy więc zdefiniować nazwę grupy roboczej do której należy komputer, jego nazwę NetBIOS oraz ustawić poziom zabezpieczeń. Możemy również zdefiniować napis, który pojawi się przy naszym serwerze jako komentarz. Uzyskamy to przez ten minimalistyczny plik konfiguracyjny:
[global] workgroup = MDKGROUP netbios name = Pingwin server string = Serwer linuksowy security = share
Znaczenie opcji użytych to:
[global] | nazwa udziału (tutaj sekcja ustawień globalnych) |
workgroup | Nazwa grupy roboczej, do której komputer ma dołączyć. |
netbios name | – Nazwa, pod którą serwer pojawi się w otoczeniu sieciowym. |
server string | Tekst wyświetlany wraz z nazwą komputera w "otoczeniu sieciowym". |
security | Poziom bezpieczeństwa dostępu do plików. Opisany później. |
Sprawdzenie, czy to się udało możemy dokonać w obu systemach. W przypadku Windowsa należy wykorzystać "Otoczenie sieciowe". W Linuksie natomiast można wykorzystać Konquerora z KDE i jego zakładkę boczną usługi. |
Pierwszy udostępniony katalog
Przejdzmy do kolejnej rzeczy czyli udostępnijmy katalog dostępny na prawach zapisu i odczytu dla wszystkich. Nie jest to zbyt bezpieczne rozwiązanie, gdyż taki katalog kusi, ale przecież musimy się od czegoś zacząć uczyć.
Katalogiem udostępnionym będzie /home/samba/public. Utworzy go więc i nadajmy odpowiednie prawa dostępu:
mkdir /home/public/samba chmod 0777 /home/public/samba
A następnie skonfigurujmy Sambe aby go udostępniała:
[public] comment = Public Stuff path = /home/samba/public public = yes writable = yes create mask = 0777 directory mask = 0777 guest ok = yes
Znaczenie poszczególnych opcji to:
[Public] | Nazwa zasobu udostępnianego przez serwer a jednocześnie rozpoczęcie nowego bloku konfiguracyjnego w pliku definiującego właśnie ten zasób. |
comment | Komentarz pojawiający się przy nazwie zasobu. Najlepiej wstawiać tutaj informacje, które wyjaśnią zawartość katalogu |
path | ścieżka dostępu w systemie do udostępnianego zasobu (tutaj katalogu) |
public | – określa czy dany zasób ma być widoczny dla klientów, gdy przeglądają udostępnione zasoby na komputerze. Jego domyślna wartość to "yes". Synonimem jest browseable |
directory mask | – określa prawa dostępu dla nowo tworzonych katalogów. Synonimem jest directory mode |
writable | określa, czy użytkownicy mogą modyfikować zawartość zasobu, czyli istniejące pliki i katalogi. Synonimem jest writeable. Przeciwne znaczenie ma read only |
create mask | – określenie z jakimi prawami dostępu pojawią się nowo tworzone pliki na dysku. Synonimem jest parametr create mode |
guest ok | gdy ustawiony jest na "yes" nie wymagana jest autoryzacja przy dostępne do tego zasobu. Synonimem jest public |
Uszczelniamy dostęp do katalogu
Wrócmy do udostępniania katalogu. Dawanie dostępu dla wszystkich na prawach zapisu nie jest dobrym pomysłem. Spróbujmy zobaczyć jak można ograniczyć dostęp do niego. Przeważnie jest tak iż pewni ludzie mają dostęp do zasobu tylko na prawach odczytu a uprzywilejowana grupa do zapisu.
Stwórzmy katalog /home/samba/programy i udostępnijmy go wszystkim na prawach odczytu a użytkownik admin (musi on być w systemie) na prawach zapisu. Tworzenie katalogu:
mkdir /home/samba/programy
A teraz udostępnianie innym przez Sambę:
[programy] comment = Programy path = /home/samba/programy public = yes read only = yes guest ok = yes write list = admin create mask = 0755 directory mask = 0755
Znaczenie przełączników:
read only | Określa czy katalog ma być do tylko do odczytu (przeciwieństwo writable) |
write list = loginy | lista osób, którzy mają prawo zapisu w katalogu |
Samba – Udostępnienie katalogu domowego użytkownika
Samba posiada specjalny zasób o nazwie [homes], który pozwala na udostępnianie użytkownikom ich katalogów domowych. Jest on bardzo wygodny, gdyż zamiast wpisywać dla każdego użytkownika osobny wpis robimy to za jednym zamachem. Samba sama podczas połączenia zmieni go na nazwę odpowiadającą nazwie użytkownika w systemie.
[homes] commnet = Katalog domowy użytkownika writable = yes
Od tej chwili (a dokładnie od przerestartowania Samby) użytkownicy posiadający wpis w pliku haseł (albo w inny sposób autoryzowani) mogą się łączyć z serwerem.
Klient komunikatów PopUp
Użytkownicy sieci windowsowych przesyłają sobie czasem wiadomości przy pomocy PopUp. Aby serwer Samby mógł także je odbierać i wysyłać potrzeba zdefiniować zmienną message command oraz zainstalować jakiegoś jej linuksowego klienta. Najpopularniejszy to LinPopUp.
message command = /usr/bin/linpopup "%f" "%m" %s; rm %s
Program znajduje się w postaci pakietów w większości dystrybucji, jeżeli chciałbyś go jednak samodzielnie skompilować możesz go ściągnąć z strony domowej projektu http://linpopup2.sourceforge.net/
Wspomaganie przeglądania sieci lokalnej
Jeżeli użytkownicy Windows chcą zobaczyć co jest dostępne w sieci lokalnej, korzystają z "Otoczenia sieciowego". W praktyce istnieje w sieci lokalnej komputer przechowujący informację o udostępnionych zasobach. Jest jeden taki w każdej podsieci lokalnej (nazywany przeglądarką lokalną) oraz jeden zbierający informację z nich i przekazujący je innym przeglądarką (główna przeglądarka domeny).
Ważnym pojęciem jest tutaj elekcja. W momencie, gdy przeglądarka zasobów zniknie z sieci, pozostałe komputery dokonują wyboru następnej. Właśnie to nazywa się elekcją. Ma tutaj znaczenie Wersja systemu operacyjnego użytego do tego procesu. Każda wersja systemu ma przyporządkowany tzw. OS Level i ten komputer, który zgłosi większą wartość tego parametru staje się nową przeglądarką.
Aby Samba zaczęła pełnić rolę należy dodać do pliku konfiguracyjnego następujące parametry:
local master = yes preferred master = yes os level = 65 domain master = no
Znaczenie użytych parametrów:
local master | parametr ten ustala, czy Samba powinna próbować zostać główną przeglądarką w sieci lokalnej (czyli brać udział w elekcji) |
preferred master | określa, czy serwer powinien rozpocząć proces elekcji w momencie swojego pojawienia się w sieci oraz w sytuacji, gdy nie jest on główną przeglądarką. |
os level | Parametr ten określa wartość OS Level serwera. Wartość jest z zakresu 0 – 255. Dla porównania Windows 95 ma wartość 1 a Windows NT 32. Wartość domyślna (i wystarczająca) to 65. |
domain master | Czy Samba ma stać się przeglądarką domeny |
Programem przydatnym przy konfiguracji lokalnej przeglądarki może być nmblookup (służy do przeglądania informacji dotyczących NetBIOS-u poprzez TCP/IP). Uruchomiony z opcją -M i nazwą domeny lub grupy jako jej parametrem pozwala zobaczyć jaki komputer w chwili obecnej jest główną przeglądarką domeny.
debian:~# nmblookup -M LASER querying LASER on 10.0.0.255 10.0.0.2 LASER<1d>
Gdy nie podamy żadnej nazwy domeny program wyszuka __MSBROWSE__<01>
Hasła w osobnym pliku
Użytkownikami w Sambie można zarządzać na kilka sposobów. Najprostszy to utworzenie osobnej bazy użytkowników i ich haseł a następnie na jej podstawie autoryzować ich.
Hasła dostępu do zasobów mogą być przesyłane w postaci otwartej (Windows 95 ale i jego przy pomocy Service Pack-ów można do tego zmusić) albo zaszyfrowanej (pozostałe wersje). Oczywiście wybierzemy tę drugą opcję. Włączmy więc obsługę szyfrowania (dyrektywy te powinny być w sekcji [global]):
encrypted passwords = yes
Użytkowników autoryzować będziemy na podstawie pliku haseł należy więc poinformować program gdzie on jest:
smb password file = /etc/samba/smbpasswd
W chwili obecnej pliku tego nawet nie ma utwórzmy go wiec.
touch /etc/samba/smbpasswd
OK. Plik mamy ale jest pusty. Dodajmy więc nowego użytkownika. Uczynimy to komendą smbpasswd (odpowiednik systemowego polecenia passwd) z przełącznikiem -a i nazwą użytkownika jako parametrem. Niech ten użytkownik nazywa się ziutus:
smbpasswd -a ziutus
Procedura będzie podobna do tej poniżej:
[root@localhost ziutus2]# smbpasswd -a ziutus New SMB password: Retype new SMB password: Added user ziutus.
Utworzy to następujący wpis do pliku konfigurującego:
ziutus:501:3F46AC9297A329EA1D71060D896B7A46:4708D681532686A52758ED5B82494DE6:[UX ]:LCT-3F1377B9:
Pierwsze pole to oczywiście nazwa użytkownika, drugie jego ID w systemie (czyli również jego prawa w dostępie do plików w systemie), dalej jego hasło.
Dopisać znaczenie dalszych pól
Konto użytkownika możemy zablokować tymczasowo używając przełącznika -d a odblokować przełącznikiem -e. Usuwamy go przy pomocy "-x".
Uwaga: konto użytkownika musi istnieć w systemie, inaczej Samba nie wpuści go do systemu.
Uwaga2: Samba nie działa ponad systemowymi (linuksowymi) prawami dostępu.
Przełączniki polecenia smbpasswd
-a login | dodanie nowego użytkownika do pliku haseł |
-d login | tymczasowe zablokowanie użytkownikowi dostępu do Samby |
-e login | przywrócenie użytkownikowi dostępu do Samby |
-x login | Usunięcie użytkownika z pliku haseł Samby. |
ćwiczenie 1
Należy utworzyć użytkownika tester, zablokować mu dostęp a następnie odblokować. Po wszystkim usunąć. Przy każdym działaniu należy sprawdzić poprawność wykonania próbując zalogować się na serwer samby.
Samba jako serwer WINS
W sieciach lokalnych, w których pracuje Windows, istnieje potrzeba przekładania nazwy komputera na jego adres sieciowy. W sieciach TCP/IP robi to serwer DNS, w sieciach Windows albo serwer WINS albo same komputery rozsyłając zapytania broadcast. W małych sieciach może nie być sensu stawiania serwera ale w większych z podsieciami już tak. Ograniczy to ilość ruchu w podsieciach albo problemy z występowaniem przełączników i innych urządzeń sieciowych.
Włączenie obsługi serwera WINS jest bardzo proste, wystarczy dołączyć do pliku konfiguracyjnego poniższą dyrektywę.
wins support = yes
Dodatkowo można zażądać aby serwer Samby próbował przeszukać DNS w poszukiwaniu szukanego komputera. Opcja ta nie jest domyślnie włączona ale może zostać włączona:
dns proxy = yes
Synchronizacja czasu między serwerem Samby a klientem
Możemy to wykonać przy pomocy polecenia:
net time \\NASZ_SERWER /set /yes
Najlepiej dodać to do skryptu logowania.
Synchronizacja haseł między Linuksem a Sambą
Jednym z rozwiązań problemu synchronizacji haseł linuksowych i windowsowych jest umożliwienie Sambie uaktualnianie haseł systemowych (jednak działa to w jedną stronę, z Samby do Linuksa). Możemy wykonać to na dwa sposoby: korzystając z modułu pam albo z programu chat.
W obu przypadkach należy (ze względów bezpieczeństwa) użyć encrypt passwords = yes (czyli stacje przesyłają hasła w sposób zaszyfrowany) oraz oczywiście korzystać z pliku haseł Samby. Następnie ustawiamy parametr unix password sync na Yes
unix password sync = Yes
Wykorzystanie modułu pam
W tej metodzie wystarczy ustawić wartość parametru pam password change na yes
pam password change = yes
Wykorzystanie programu chat
W tym sposobie wywołujemy bezpośrednio program passwd i nieinteraktywnie (z poziomu uprawnien roota) zmieniamy użytkownikowi hasło.
passwd program = /usr/bin/passwd %u passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
Samba: mountowanie zasobu z Windows na Linuksie
Ubuntu:
Potrzebne pakiety: smbfs
Mountowanie:
mount -t smbfs //SERWER/zasob /KATALOG_LOKALNY -o username=UZYTKOWNIK,password=HASLO
Samba: smbclient – tryb ftp – praca na zdalnym serwerze z cd,ls itp…
Od dawna wiedziałem, że przy pomocy „smbclient” można sprawdzać z linii komend zdalne zasoby Samby, natomiast wogóle nie wiedziałem, że jeżeli podamy adres zasobu w postaci //serwer/zasob to będziemy mogli podróżować po drzewie katalogów przy pomocy komendy cd! Jest to szczególnie przydatne, gdy chcemy sprawdzić czy dobrze ustawiliśmy naszą Sambę…
ktos@gdzies:/net2/fun$ smbclient //192.168.10.52/fun -N Anonymous login successful Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.33-3.29.el5_5.1] smb: \> ls . D 0 Sat Dec 4 20:18:00 2010 .. D 0 Sat Dec 4 12:38:03 2010 Gry_linux D 0 Sun Nov 28 13:20:46 2010 unrar-4.0.1-1.el5.rf.i386.rpm 119771 Thu Nov 18 09:46:05 2010 lost+found D 0 Thu Jul 15 10:37:25 2010 download D 0 Sat Dec 4 20:15:42 2010 42837 blocks of size 16777216. 40174 blocks available smb: \>
Samba – pobieranie danych o konfiguracji lub użytkownikach z innego serwera (tbd)
winbind – service to resolve user and group information from Windows NT servers
Wyłączenie drukowania w Sambie
Standardowo obecnie Samba korzysta z systemu wydruku CUPS. Samba próbuje się z nim połączyć by włączyć obsługę wydruku przez sambę, jednak gdy on nie działa zgłaszany jest w logach błąd. Aby się go pozbyć (tak, jest to obejście problemu) można ustawić następujące parametry:
printcap name = /dev/null printing = bsd
Jak widać włączamy system wydruku bsd oraz ustawiamy drukarkę na /dev/null. Od tej chwili nie będziemy mieli komunikatów o błędach w łącząniu z systemem CUPS w logach Samby.
Inne rozwiązanie to:
printcap name = /etc/printcap load printers = no printing =
Samba – zabezpieczenie serwera
Przypisanie działania Samby do określonego interfejsu sieciowego
# interfaces = eth0 # bind interfaces only = yes
Monitorowanie stanu serwera Samby
Polecenie smbstatus pozwala przejrzeć obecny stan pracy serwera Samba
debian:/etc/samba# smbstatus Samba version 3.0.24 PID Username Group Machine ------------------------------------------------------------------- Service pid machine Connected at ------------------------------------------------------- No locked files
Natomiast korzystając z polecenia net status session możemy zobaczyć sesje:
debian:/etc/samba# net status sessions PID Username Group Machine -------------------------------------------------------------------
A net status shares pozwala zobaczyć zasoby:
debian:/etc/samba# net status shares Service pid machine Connected at ------------------------------------------------------- debian:/etc/samba#
Narzędzia wspomagające konfigurację Samby
SWAT
SWAT umożliwia konfigurowanie Samby przez interfejs przeglądarki internetowej. Należy połączyć się z portem 901 komputera, którego Sambę będziemy modyfikować. Ukaże się nam, po zalogowaniu, panel widoczny na obrazku obok. Program nie nasłuchuje samodzielnie na porcie ale korzysta z pośrednictwa wrapera: albo inted albo xinted. W przypadku problemów z połączeniem należy sprawdzić czy wraper działa i jest poprawnie skonfigurowany. |
Programy pomocnicze
LinPopUp – klient PopUp
LinPopUp to chyba najpopularniejszy klient PopUP. |
Komba2
Komba2 to wygodny klient SMB. Pozwala zwykłym użytkownikom mountować zdalne zasoby w ich katalogach domowych. |
Samba – Przydatne tabele
Typy niepowtarzalnych zasobów NetBIOS-u
Nazwany zasób | Szesnastkowa wartość bajtu |
---|---|
Standardowa usługa stacji roboczej | 00 |
Usługa posłańca (WinPopup) | 03 |
Usługa serwera zdalnego dostępu | 06 |
Usługa głównej przeglądarki domeny (związana z podstawowym kontrolerem domeny) | 1B |
Nazwa głównej przeglądarki | 1D |
Usługa NetDDE | 1F |
Serwer plików (i drukarek) | 20 |
Usługa klienta zdalnego dostępu | 21 |
Agent monitorowania sieci | BE |
Narzędzie monitorowania sieci | BF |
Wpis __MSBROWSE__ służy do ogłaszania grupy innym głównym przeglądarkom.