Samba: łączenie świata Linuksa i Windows-a

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.

Dodaj komentarz