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:
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:
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
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:
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:
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.
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:
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.
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.
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.
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
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.
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:
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
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'
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:
Przykładowe użycie:
# mount -t smbfs -o username=pawel,password=123456 \\\\192.168.0.7\\pawel /mnt/win
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.
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:
Oczywiście wygenerowana konfiguracja zostanie zapisana do pliku /etc/samba/smb.conf.
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