Konfiguracja Samby

Wprowadzenie

We współczesnych rozwiązaniach bardzo często system Linux musi współpracować z systemami Windows. Do integracji obu systemów możemy wykorzystać pakiet aplikacji znany pod nazwą Samba, która oferuje następujące funkcjonalności:

  1. Udostępnianie plików i drukarek dla systemu Windows oraz dostęp do nich spod systemu Linux,
  2. Podpięcie systemu do kontrolera Windows,
  3. Pełnienie roli kontrolera domeny Windows.

Dalej omówimy tylko pierwszy punkt. Punkt drugi jest krótko opisany, bo w teorii jego wykonanie na SLES jest trywialne, chociaż sam tego nie przetestowałem, więc nie daje gwarancji, że opisana procedura zadziała. Natomiast mimo kilku prób (racja, niedługich) nie udało mi się uruchomić kontrolera domeny, do którego podpiąłby się Windows XP (na takim testowałem). Dodatkowo trzeba pamiętać, że kontroler domeny oparty na sambie działa w oparciu o przestarzałe mechanizmy i nie korzysta z protokołu Kerberos.

Samba działa w modelu klient-serwer i w jej skład wchodzą dwa demony:

  • smbd (port 139), obsługuje udostępnianie plików i drukarek (po uwierzytelnieniu użytkownika uruchamiany jest osobny proces działający na tożsamości tego użytkownika)
  • nmbd (port 137), obsługuje część związaną z protokołem NetBIOS

Do zainstalowania natomiast potrzebne są pakiety: samba (serwer), samba-client (narzędzia klienckie), samba-doc (opcjonalnie, dokumentacja). Uruchomienie serwera wymaga włączenia dwóch demonów – nmb i smb:

# rcnmb start
# rcsmb start

Podstawy konfiguracji

Główna konfiguracja znajduje się w pliku /etc/samba/smb.conf. W katalogu /etc/samba znajdują się też pozostałe pliki związane z tą usługą (np. plik z danymi użytkowników). Plik konfiguracyjny jest podzielony na sekcje, gdzie każda z nich ma tytuł umieszczony w nawiasach kwadratowych. Po instalacji w pliku tym jest kilka sekcji predefiniowanych:

  • global – definiuje domyślne ustawienia dla pozostałych sekcji,
  • homes, profiles, users, groups – odpowiadają za udostępnienie katalogów domowych użytkowników,
  • printers, print$ - odpowiadają z udostępnienie drukarek.

Zanim przejdziemy do tworzenia udziałów, zatrzymajmy się krótko, co można wpisać w sekcji global. Oczywiście sporo opcji, jednak warte szczególnej uwagi to:

  • workgroup – określa grupę roboczą, zwykle domyślnie TUX-NET
  • security – określa sposób uwierzytelnienia łączącego się użytkownika, dostępne wartości:
    • share – nie podaje hasła przy połączeniu z serwerem, jednak hasło może być wymagane przy próbie dostępu do udziału
    • user – hasło wymagane przy połączeniu do serwera
    • server – hasło wymagane przy połączeniu do serwera, jednak w celu jego weryfikacji Samba łączy się z innym serwer SMB
    • domain – hasło wymagane przy połączeniu do serwer, jednak hasło sprawdzane jest w kontrolerze domeny Windows (ma znaczenie tylko przy podpięciu SLES do AD)

Pierwsza sekcja do udostępniania plików

W tym miejscu najlepiej jest zacząć do przykładu:

[dane]
comment = Jakies dane
path = /srv/data
read only = yes
guest ok = yes

Powyższy przykład nie wymaga szczególnego komentarza – warto zwrócić tylko uwagę, że dane z katalogu /srv/data będą dostępne w sieci pod adresem \\serwer\dane

Do sprawdzenia poprawności pliku smb.conf służy polecenie testparm. Składnia

# testparm [--section-name sekcja]

W przypadku dłuższego pliku można poprzez opcję --section-name zażadać wyświetlenia tylko wybranej sekcji zamiast całego pliku.

Sterowanie dostępem

Dostęp do większość zasobów, które zwykle chcemy udostępniać w sieci, musi być odpowiednio chroniony. W sambie mamy sporo mechanizmów, dzięki którym możemy sterować dostępem na wielu poziomach, np. na poziomie adresów IP czy uwierzytelnienia użytkowników. O ile w przypadku sterowania dostępem na poziomie warstwy IP służy do tego kilka opcji, o tyle w przypadku uwierzytelnienia użytkowników jest jedna istotna kwestia, o której trzeba pamiętać. Otóż Samba posiada własny system kont, zgodny z Windows, na podstawie którego przydzielany jest dostęp. Trzeba również pamiętać, żeby utworzyć konto w Sambie, najpierw musi ono istnieć w systemie Linux. Zanim przejdziemy do sterowania dostępem, zapoznamy się z zarządzaniem użytkownikami.

Konta wraz z hasłami są przechowywane w pliku /etc/samba/smbpasswd, a do zarządzania nimi służy polecenie smbpasswd. Składnia dla zwykłego użytkownika

# smbpasswd

Składnia dla root-a:

# smbpasswd [opcje] [uzytkownik] [nowe_hasło]

Opcje:

  • -h — wyświetla pomoc
  • -a — dodaje użytkownika do bazy,
  • -x — usuwa użytkownika z bazy,
  • -d — wyłącza konto,
  • -e — włącza konto,
  • -n — usuwa hasło.

Przykładowy scenariusz użycia. Najpierw jako root wykonujemy kolejno:

Tworzymy użytkowników pawel, bea i tux

# smbpasswd -a pawel
# smbpasswd -a bea
# smbpasswd -a tux

(oczywiście za każdym razem podajemy hasło dla nowotworzonego użytkownika)

Blokujemy użytkownika bea

# smbpasswd -d bea

Odblokowujemy użytkownika bea

# smbpasswd -e bea

Usuwamy użytkownika tux

# smbpasswd -x tux

Jako użytkownika pawel zmieniamy sobie hasło:

# smbpasswd

Mając utworzone konta wracamy do sterowania dostępem.

Dostęp na podstawie adresów hostów

Mamy dwie główne opcje: hosts allow i hosts deny.

hosts allow

Określa listę (z przecinkami lub tabami) hostów, które mają dostęp do udziału. Przykładowe użycia:

hosts allow = 150.203. EXCEPT 150.203.6.66
hosts allow = 150.203.15.0/255.255.255.0
hosts allow = pik,trefl
hosts allow = @nisgroup

hosts deny

Dualne do hosts allow określa hosty, które nie maja dostępu do udziału. W przypadku konfliktu, wyższy priorytet ma lista hosts allow.

Dostęp na podstawie kont użytkowników

Po założeniu kont możemy przydzielać uprawnienia dla udziałów. Zanim jednak przejdziemy do przedstawienia kilku wybranych opcji, zwróćmy uwagę, że wszystkie operacje na zasobie są wykonywane na tożsamości podłączonego użytkownika. Trzeba pamiętać, aby uprawnienia do katalogów i plików udostępnionego zasobu umożliwiały podłączonemu użytkownikowi dawały zakładane możliwości.

Do dyspozycji mamy szereg różnych opcji, niektóre z nich są następujące.

admin users

Lista użytkowników, którzy będą mieli do udziału pełny dostęp (taki jak użytkownik root). Domyślnie brak takiej listy.

force user

Ta opcja powoduje, że zamiast wykonywać operacje na tożsamości podłączonego użytkownika, będą one wykonywane na tożsamości wskazanego użytkownika (trochę podobne do mechanizmu suidowania).

force group

Analogiczne do force user dla grupy.

guest ok

Ustawione na yes pozwala na dostęp do zasobu bez hasła uprawnienia będą wtedy takie jak dla gościa). Domyślnie guest ok = no.

guest only

Pozwala na dostęp tylko dla gościa i ma sens wtedy, gdy guest ok jest ustawione na yes. Domyślnie guest only = no.

invalid users

Lista użytkowników, dla których dostęp do udziału powinien być zablokowany. Domyślnie nie ma takich użytkowników.

min password length

Co prawda opcja nie decyduje bezpośrednio na sterowanie dostęp, ale jest istotna w konteście zarządzania użytkownikami. Określa minimalną długość hasła, jaka zostanie zaakceptowana przy próbie jego zmiany.

null passwords

Pozwala na dostęp do zasobów użytkownikom, którzy maja hasło puste. Domyślnie null password = no.

valid users

Lista użytkowników, dla których usługa powinna być udostępniona. Warto tutaj odnotować, że oprócz nazw użytkowników można podawać również nazwy grup, np. @testerzy, przy czym wystarczy, aby grupa była utworzona w systemie linux (plik /etc/group) – nie trzeba jej w żaden sposób mapować na konta samby (tak jak miało to miejsce w przypadku użytkowników). Co więcej, nie muszą być tworzone w sambie konta dla wszystkich członków tej grupy – wystarczy dla tych, którzy będą chcieli uzyskać dostęp.

write list

Lista użytkowników, dla których zasoby będą dostępne w trybie odczyt/zapis. Domyślnie nie ustawione.

Przy określaniu opcji możemy skorzystać z wartości specjalnych. Niektóre z nich są następujące.

  • %S — nazwa bieżącego udziału,
  • %u — nazwa użytkownika, który się podłącza,
  • %H — katalog domowy dla %u,
  • %m — nazwa typu NetBIOS hosta klienta,
  • %M — pełna nazwa DNS hosta klienta,
  • %I — adres IP hosta klienta,
  • %T — bieżąca data i czas.

Przykładowe wykorzystanie jest np. w domyślnej definicji udziału [profiles], gdzie udostępniany jest katalog domowy użytkownika (%H). Więcej opcji:
http://www.samba.org/samba/docs/using_samba/ch06.html

Narzędzia klienckie

Rozwiązywanie nazw

Do tego mamy narzędzie nmblookup, którego użycie jest bardzo proste, przykładowo

# nmblookup Serwer

spowoduje wyszukanie adresu IP dla nazwy NetBIOS Serwer. Trzeba pamiętać, że wyszukiwanie jest tylko w bieżącej podsieci, do wyszukiwania w innych podsieciach musimy skorzystać z możliwości serwera WINS.

Klient samby

Za pomocą narzędzia smbclient mamy możliwość operowania na zdalnym serwerze podobnie do tego co oferuje natywny klient ftp. Ogólna składnia tego polecenia jest następująca:

# smbclient udział [hasło] [opcje]

a niektóre z opcji to:

  • -p port — połącz na podanym porcie,
  • -N — nie pytaj o hasło,
  • -U uzytkownik — określa nazwę użytkownika,
  • -L host — pobiera listę udziałów z podanego hosta,
  • -D katalog — startuje z podanego katalogu.

Po nawiązaniu połączenia pojawia się znak zachęty i możemy rozpocząć wydawanie poleceń. Warto pamiętać, że w każdym momencie możemy wpisać polecenie

Smb: /> help

które wypisze nam listę wszystkich dostępnych poleceń, a następnie możemy wpisać polecenie

Smb: /> help polecenie

które opisze nam dane polecenie.

Z najbardziej podstawowych poleceń to

    • ls – pokazuje zawartość bieżącego katalogu, • cd – zmienia bieżący katalog, • get – pobiera wskazany plik z serwera, • put – kopiuje wskazany lokalnie plik na serwer.

Kilka przykładów użycia:

# smbclient \\\\oskarek\\pawel -U Pawel -D pawel
# smbclient -L \\\\192.168.0.7 -N
# smbclient //192.168.0.10/pawel -U pawel
# smbclient -L //192.168.0.10 -N

Za pomocą smbclient możemy także wydrukować coś na drukarce udostępnionej przez SMB:

# smbclient //printserver/hplj1022 -c 'print plik.ps'

Podłączanie zasobów

Do podłączania (montowania) zasobów wykorzystujemy polecenie mount wskazując jako typu plików cifs (zalecany) lub smbfs (starszy). Podstawowa składnia:

mount -t smbfs [-o opcje] udział sciezka

gdzie najczęściej używane opcje to:

  • username=uzytkownik — określamy nazwę użytkownika,
  • password=haslo — przekazujemy hasło; jeśli go nie podamy, zostaniemy o nie zapytani,
  • ro, rw — określa tryb: odpowiednio tylko do odczytu lub do odczytu i zapisu.

Przykładowe użycie:

# mount -t smbfs -o username=pawel,password=123456 \\\\192.168.0.7\\pawel /mnt/win

Samba jako serwer wydruku

Zanim samba będzie mogła pełnić rolę serwera wydruku, w systemie musi być zainstalowany system drukowania CUPS. Kolejna kwestią jest fakt, że na linuksie podstawowym formatem drukowania jest Postscript, a na Windows jest WMF, co oznacza, że trzeba dokonywać translacji. Translacja może się odbywać na serwerze Samby lub na kliencie Windows. Dodatkowo można udostępniać na serwerze Samba jedną lub wiele drukarek. Nie będziemy się tutaj zagłębiać w rozważania i przedstawimy tylko krótko najprostsze rozwiązanie, czyli udostępnienie jednej drukarki z translacją na serwerze Samba, które to rozwiązanie sprowadza się do utworzenia udziału:

[laserjet]
printable = yes
printer = lp_raw
path = /var/tmp

gdzie printable oznacza, że udział udostępnia drukarkę, printer określa kolejkę, której należy użyć do wydruku (w przypadku, gdybyśmy chcieli zastosować przetwarzanie po stronie klienta, w tym miejscu podajemy kolejkę raw), no i path określa folder tymczasowy, do którego wszyscy muszą mieć prawo do zapisu.

Podpięcie SLES do domeny Windows

Aby podpiąć SLES do domeny, można ręcznie utworzyć odpowiednią konfigurację w pliku smb.conf, ale można też z korzystać z dedykowanego do tego zadania modułu YaST: Yast -> Usługi sieciowe -> Przynależność do domeny Windows. Konfiguracja jest bardzo prosta – wystarczy wpisać (bądź wyszukać) nazwę domeny, wprowadzić ją, potem podać dane uwierzytelniające konta podłączającego do domeny i gotowe. Dodatkowo możemy skorzystać jeszcze z opcji:

  • Utwórz katalog domowy przy logowaniu – katalog domowy zostanie utworzony przy pierwszym logowaniu
  • Uwierzytelnianie offline – możliwe jest uwierzytelnienie przy braku połączenia z kontrolerem domeny (ważne w przypadku np. laptopów).

Oczywiście wygenerowana konfiguracja zostanie zapisana do pliku /etc/samba/smb.conf.

Uruchomienie Samby jako kontrolera domeny

Jak pisałem wyżej, nie udało mi się tego przeprowadzić, a że proces ten nie jest trywialny, nie zamieszczam go tutaj. Dla dociekliwych odsyłam tylko do ciekawego na początek artykułu:
http://pl.docs.pld-linux.org/uslugi_samba.html