Uwaga:
Oryginalna wersja tego artykułu została opublikowana w IBM developerWorks i
jest własnością Westtech Information Services. Poniższy dokument jest
poprawioną przez zespół GDP wersją oryginalnego tekstu i nie jest już
aktualizowany.
|
Wprowadzenie do Samby, Część trzecia
1.
Nauczmy się Samby: Etap konfiguracji
Krótkie przypomnienie
Oto zawartość pliku smb.conf, z którym do tej pory pracowaliśmy:
Listing 1.1: /etc/smb.conf |
[global]
workgroup = NASZAGRUPAROBOCZA
security = user
encrypt passwords = yes
guest account = guest
# wins server = adres IP serwera WINS
# wins support = yes
local master = yes
os level = 99
domain master = yes
preferred master = yes
# hosts allow = 192.168.1. 127.
# interfaces = eth1
[tmp]
path=/tmp
writeable=yes
|
Dodawanie kilku zasobów
Mimo iż powyższy plik smb.conf działa, to tak naprawdę jedynie
udostępnia systemowi Windows katalog /tmp, tworząc zasób dzielony o
nazwie "tmp". Nic ciekawego. Stwórzmy zatem bardziej użyteczny zasób. Dodajmy
następujące linijki do pliku smb.conf i zrestartujmy Sambę.
Listing 1.2: Dodawanie zasobu FTP |
[ftp]
path=/ścieżka/do/katalogu/głównego/ftp
writeable=no
|
Jeśli posiadamy na naszym serwerze usługę ftp lub jakieś inne archiwum plików,
możemy w ten oto sposób udostępnić te dane w sieci. Parametr writeable=no
informuje Sambę, że nikt nie powinien uzyskać uprawnień tworzenia i modyfikacji
plików w tym zasobie. Dostęp do niego uzyska każdy posiadający konto Samby.
Ciekawy zasób
Zgadzam się, to nie było jeszcze zbyt ciekawe. Może zatem spróbujmy udostępnić
katalog domowy? Oto jak tego dokonać:
Listing 1.3: Udostępnianie katalogu domowego |
[drobbins]
comment=Katalog domowy użytkownika drobbins
path = /home/drobbins
force user = drobbins
read only = no
valid users = drobbins administrator
|
To jest już bardziej interesujące. Dodanie powyższych linijek do naszego pliku
smb.conf umożliwi nam udostępnienie katalogu domowego. W tym
przypadku tworzony jest zasób "drobbins", który udostępnia w sieci zawartość
katalogu /home/drobbins. Na szczęście dzieki linijce valid
users nie każdy może uzyskać do niego dostęp. Polecenie to powoduje, że
Samba nie dopuszcza nikogo oprócz użytkowników "drobbins" i "administrator".
Używając systemu Windows NT często jestem zalogowany jako administrator. W
takich sytuacjach wygodnie jest wciąż mieć dostęp do zasobu "drobbins". Dzięki
linijce valid users powyżej jest to możliwe.
Zauważmy także parametr read only. Nietrudno zgadnąć, że jego działanie
jest przeciwne do działania parametru writeable. Równie dobrze moglibyśmy
napisać w tym miejscu writeable=yes. Spowoduje to, że Samba zezwoli na
zapis w tym konkretnym zasobie, oczywiście jeśli posiadamy odpowiednie
uprawnienia. Jednak ponieważ użytkownik Samby o nazwie "drobbins" odpowiada
uniksowemu użytkownikowi o nazwie "drobbins", który z kolei jest właścicielem
katalogu /home/drobbins, zapis i modyfikacja plików będzie możliwa.
Prawdopodobnie wielu z nas często zdarza się utworzyć plik w naszym katalogu
domowym z konta roota, później bezskutecznie próbując zmodyfikować go z naszego
konta użytkownika. Mi w każdym razie zdarza się to bardzo często. Aby sobie z
tym poradzić, muszę użyć polecenia su, następnie chown
drobbins.drobbins nazwapliku i jeszcze exit, aby opuścić konto
administratora. Dopiero wtedy mogę zmodyfikować plik.
Wspominam o tym, ponieważ możemy napotkać podobny problem podczas udostępniania
katalogów domowych i korzystaniu z nich za pomocą różnych kont użytkowników
Samby. Rozważmy następującą sytuację. Jako administrator tworzę plik w jednym z
zasobów. Zwykle właścicielem tego pliku byłby administrator i niemożliwa byłaby
jego modyfikacja przez użytkownika "drobbins". Każda próba modyfikacji
zaowocowałaby komunikatem o braku dostępu. Na szczęście Samba posiada opcję
force user, dzięki której możemy uniknąć tego problemu. Opcja ta
spowoduje, iż każda operacja wykonana na plikach (tego konkretnego zasobu
SMB/CIFS Samby) zostanie przeprowadzona z pojedynczego konta użytkownika Unix.
Na przykładzie zasobu "drobbins" oznacza to, że pliki utworzone przez
administratora będą w rzeczywistości należeć do użytkownika "drobbins",
zapobiegając konfliktom własności. Zasób "drobbins" udostępnia zawartość mojego
katalogu domowego, więc wolę gdy wszystko co się w nim znajduje jest
własnością użytkownika "drobbins".
Zanim przejdziemy do następnego zagadnienia, powinienem wspomnieć o parametrze
comment. Pozwala on na opatrzenie każdego zasobu widocznym w systemie
Windows komentarzem.
Udostępnianie wielu katalogów domowych.
Omówiliśmy zatem udostępnianie pojedynczego katalogu domowego. Może się jednak
zdarzyć, że będziemy musieli udostępnić setki katalogów domowych użytkowników
serwera, którym administrujemy. Na szczęście Samba posiada specjalny zasób
dzielony właśnie na taką okazję. Nazywa się "homes", a konfiguruje się go w
następujący sposób:
Listing 1.4: Udostępnianie wielu katalogów domowych |
[homes]
comment=Katalog domowy użytkownika %S
path=/home/%u
valid users = %u administrator
force user=%u
writeable = yes
browseable = no
|
Jak już wspomniałem, jest to "specjalny" zasób, nie działa tak jak pozostałe.
Samba rozpoznaje oznaczenie [homes] i na tej podstawie traktuje go
inaczej.
Jedną z ciekawszych cech tego zasobu jest użycie parametru browseable=no.
Powoduje on, że zasób ten jest niewidoczny w Otoczeniu Sieciowym, a zwykle używa
się go, aby zapobiec możliwości przejrzenia zasobów przez ciekawskich
użytkowników o niekoniecznie dobrych zamiarach. Jednak czemu użyliśmy go tutaj?
Odpowiedź wymaga dodatkowych wyjaśnień. Otóż zasób "homes" rzeczywiście tworzy
zasób o nazwie "homes", jednakże jest on dla nas bezużyteczny, dlatego zostanie
ukryty. W rzeczywistości pełni on dość niebanalną funkcję, mianowicie instruuje
Sambę aby utworzyła automatycznie katalogi domowe każdemu użytkownikowi. Na
przykład przyjmijmy, że nasz zasób o nazwie "drobbins" nie został zdefiniowany w
pliku smb.conf i przeglądamy Otoczenie Sieciowe jako użytkownik
systemu NT o nazwie "drobbins". Znaleźlibyśmy wówczas zasób o nazwie "drobbins",
który miałby identyczne właściwości jak nasz pierwotny zasób o tej nazwie. Jeśli
zaś bylibyśmy zalogowani jako użytkownik "jimmy", znaleźlibyśmy prawidłowo
skonfigurowany zasób o nazwie "jimmy". Właśnie tak działa zasób "homes". Dodanie
jednego specjalnego zasobu spowoduje prawidłowe utworzenie wszystkich zasobów z
katalogami domowymi użytkowników.
Jak to działa? Gdy zostanie utworzony zasób "homes", Samba wykryje jaki
użytkownik NT przegląda jej zasoby. Utworzy wówczas zasób domowy dostosowany do
tego konkretnego użytkownika. Pokaże się on w Otoczeniu Sieciowym jako zwykły,
statyczny zasób. Użytkownik NT nie będzie zdawał sobie sprawy, że zasób ten
został stworzony w locie. Przyjrzyjmy się co robią poszczególne parametry.
Parametr "comment" używa makra %S, które zamienia się we właściwą nazwę
zasobu. Dzięki temu zasób "drobbins" będzie opisany tekstem "Katalog domowy
użytkownika drobbins", a przy zasobie "jimmy" zobaczymy komentarz "Katalog
domowy użytkownika jimmy" i tak dalej. Parametr "path" zawiera makro %u,
które zamieni się w nazwę użytkownika osoby, która przegląda zasób. W tym
przypadku %u zamieni się w to samo co %S, więc równie dobrze moglibyśmy
napisać path=/home/%S. Dzięki użyciu tego parametru Samba dynamicznie
przypisze zasób do odpowiedniego położenia na dysku.
Po raz kolejny używamy makra w linijce valid users=, dzięki czemu jedynie
właściciel zasobu oraz administrator będą mieli do niego dostęp. Opcja force
user także używa makra, co spowoduje, iż wszystkie zapisy do plików będą
wykonywane z jednego konta. No i oczywiście umożliwiamy zapis do zasobu
wszystkim uprawnionym użytkownikom. Pomimo iż używamy parametru
browseable=no, zasoby utworzone dynamicznie będzie można przeglądać. Ta
opcja ukrywa jedynie zasób "homes".
2.
Parametry zasobów
Zapoznaliśmy się już z kilkoma przydatnymi przy tworzeniu zasobów sztuczkami. W
tym rozdziale omówię kilka popularnych opcji, dzięki którym będziemy mogli
dostosować funkcjonalność Samby do naszych potrzeb na poziomie każdego zasobu z
osobna. Jednakże wszystkie opcje, które dotyczą indywidualnego zasobu można
również umieścić w sekcji [globals], aby ustawić je jako domyślne dla
wszystkich zasobów.
comment=
Parametr comment= przydaje się, jeśli chcemy aby nasz system oparty o
Sambę oglądany od strony systemu Windows wyglądał bardziej profesjonalnie.
Dzięki tej opcji mamy możliwość zdefiniowania komentarza, który będzie pojawiał
się przy każdym zasobie, opisując jego zawartość. Używając tego parametru
(szczególnie gdy używam zasobu "homes") często stosuję makro %S, które
zostanie zamienione w nazwę zasobu.
path=
Jednym z najważniejszych parametrów Samby jest opcja path=. Dzięki niej
możemy podać ścieżkę do katalogu, który ma zostać udostępniony. Należy zauważyć,
że domyślnie każde dowiązanie symboliczne w udostępnionym katalogu będzie
działać zgodnie ze swoim przeznaczeniem, a więc możliwe będzie "wyskoczenie"
przez użytkownika z udostępnionego katalogu. Po stronie systemu Windows użycie
dowiązania będzie niezauważalne. Będzie ono wyglądało tak samo jak inny plik lub
katalog. Wkrótce przyjrzymy się kilku parametrom, które mogą zmienić to
zachowanie i uczynić Sambę bardziej bezpieczną.
force user=
Parametr force user= jest jednym z moich ulubionych. Wymusza on
wykonywanie wszelkich zmian w plikach z konta jednego użytkownika. Często
będziemy chcieli użyć razem z nim również opcji valid users=, dzięki
czemu ograniczymy dostępność zasobu jedynie do wybranych użytkowników. Ponieważ
wszystkie operacje plikowe wykonywane są z poziomu pojedynczego konta
użytkownika, jednym ze skutków ubocznych opcji force user= jest brak
możliwości sprawdzenia kto co zrobił, patrząc na uprawnienia pliku w systemie
Unix. Z tego względu jeśli mamy do czynienia z zasobem, do którego zapis jest
dozwolony, musimy poważnie potraktować kwestię bezpieczeństwa, używając opcji
force user=. Bez niej wszystkie operacje na plikach będą wykonywane przez
tego użytkownika Samby, który korzysta w danej chwili z zasobu.
Listing 2.1: Przykład użycia opcji force user |
force user=drobbins
|
browseable=
Jednym z prostszych sposobów na zwiększenie bezpieczeństwa jest ukrycie
niektórych zasobów. Domyślnie wszystkie zasoby można przeglądać z Otoczenia
Sieciowego. Jeśli będą niewidoczne, udaremnimy część złych zamiarów. Nie należy
jednak stosować tego parametru jako jedynego zabezpieczenia. To, że zasób jest
niewidoczny z poziomu Windows nie oznacza, że jest zabezpieczony przed dostępem.
Zmniejsza to jedynie ilość informacji, które przekazujemy potencjalnie
niebezpiecznemu użytkownikowi. Aby uzyskać dostęp do ukrytego zasobu wystarczy
podać jego nazwę UNC w oknie dialogowym Uruchom.... Na przykład do
ukrytego zasobu o nazwie 'test', który znajduje się na serwerze 'mojserwer'
dostaniemy się, wpisując \\mojserwer\test.
Listing 2.2: Przykład użycia opcji browseable |
browseable=no
|
available=
Opcja available=, której domyślną wartością jest 'yes', jest tylko
przydatnym sposobem na wyłączenie zasobu bez usuwania lub wykomentowania go z
pliku smb.conf. Podanie parametru available=no spowoduje, że
dany zasób stanie się nieaktywny gdy tylko ponownie uruchomimy Sambę.
Listing 2.3: Przykład użycia opcji available |
available=no
|
valid users=
W celu ograniczenia dostępu do niektórych zasobów należy użyć opcji valid
users=. Domyślnie każdy użytkownik, który zostanie uwierzytelniony będzie
mógł uzyskać dostęp do zasobu Samby. Aby odwołać się do grupy sieciowej NIS lub
grupy systemu Unix, należy dodać znak "@" przed nazwą grupy.
Listing 2.4: Przykład użycia opcji valid users |
valid users = drobbins @wheel
|
dont descend=
Parametr dont descend= określa katalogi, znajdujące się w udostępnionym
zasobie, do których Samba nie pozwoli wejść. Dzięki temu można łatwo
uniemożliwić dostęp do katalogu zawierającego dowiązania symboliczne lub
nieistotnych dla użytkownika katalogów takich jak /proc lub
/dev. Należy zawsze przetestować nasze ustawienia parametru dont
descend=, ponieważ przykładowo koniecznym może okazać się napisanie dont
descend= ./dev zamiast dont descend= /dev.
follow symlinks=
Opcja follow symlinks= zwykle ma wartość domyślną 'yes' i powoduje, że
Samba zezwala na podążanie za wszystkimi dowiązaniami symbolicznymi, nawet jeśli
prowadzą one poza udostępnioną strukturę katalogów. Ustawienie tej opcji na 'no'
wyłączy tę funkcjonalność i podążanie za dowiązaniami stanie się niemożliwe.
Wyłączenie tej opcji może potencjalnie znacznie poprawić bezpieczeństwo i należy
to zrobić zawsze, o ile nie mamy potrzeby korzystać z dowiązań symbolicznych.
Listing 2.5: Przykład użycia opcji follow symlinks |
follow symlinks=no
|
volume=
Ustawienie parametru volume= spowoduje, że Samba przypisze "nazwę
woluminu" danemu udostępnionemu zasobowi. Może się przydać szczególnie gdy
używamy zasobu Samby w celu udostępnienia zawartości CD-ROM-u. Wiele programów
instalacyjnych oczekuje określonej nazwy woluminu dla płyty CD, bez której nie
będą działać.
Listing 2.6: Przykład użycia opcji volume |
volume=Moja Ulubiona Płyta CD
|
create mask=
Samba wykorzystuje parametr create mask w celu ustawienia odpowiednich
uprawnień dla nowo utworzonych plików. Opcja create mask określa jakie
uprawnienia będą dozwolone przy tworzeniu nowych plików. Podany numer w systemie
ósemkowym zostanie połączony z pożądanymi uprawnieniami za pomocą logicznego
operatora i. Spowoduje to, że uprawnienia, których nie obejmuje maska
bitowa zostaną odrzucone i nie będą dodane do uprawnień nowego pliku.
Listing 2.7: Przykład użycia opcji create mask |
create mask= 0755
|
directory mask=
Parametr directory mask= działa analogicznie do parametru create
mask=, tylko dotyczy nowo tworzonych katalogów.
Mnogość opcji pliku smb.conf
W niniejszym rozdziale omówiliśmy tylko te spośród opcji pliku
smb.conf, które są najistotniejsze przy konfigurowaniu użytecznego
i bezpiecznego systemu opartego na Sambie. Jednakże Samba ma wiele innych
przydatnych opcji. Można się z nimi zapoznać, czytając stronę dokumentacji
systemowej man dla smb.conf, w której wszystkie opcje są wymienione i
szczegółowo opisane. (Więcej szczegółów w rozdziale Zasoby).
3.
Drukowanie za pomocą Samby
Możliwość drukowania za pośrednictwem Samby jest często bardzo przydatna. W
ramach przypomnienia: Samba pozwala na udostępnienie drukarek skonfigurowanych
uprzednio pod lpd, dzięki czemu mogą z nich korzystać komputery klienckie z
systemem Windows. Układ ten ma taką zaletę, że cały kod potrzebny drukarce jest
generowany po stronie systemu Windows. Oznacza to, że nasz system Unix nie musi
idealnie obsługiwać danego modelu drukarki. Dopóki system Unix potrafi przesłać
nieobrobione dane bezpośrednio do drukarki, możliwe będzie prawidłowe
drukowanie. Pozwala to nam nawet na udostępnianie i użytkowanie drukarek, które
nie są w pełni funkcjonalne w środowisku Uniksowym, tak jak moja oparta o
technologię Adobe Printgear drukarka NEC SuperScript 870.
Jak działa drukowanie w Sambie
Aby umożliwić drukowanie, najpierw musimy prawidłowo skonfigurować usługę
lpd. Wprawdzie opis lpd nie jest celem niniejszego przewodnika, to
jednak konfiguracja nie powinna przysporzyć wielu problemów, a opisana jest
dokładnie w artykule Printing FAQ, który można pobrać ze strony tldp.org.
(Więcej szczegółów w rozdziale Zasoby). Powinniśmy
skonfigurować drukarkę tak, aby domyślnie działała w trybie "surowym" (ang.
raw), dzięki czemu wszelkie dane wysłane do drukarki przez komendę lpr
zostaną jej podane bez jakiejkolwiek obróbki czy filtrowania. Łatwo jest
sprawdzić czy demon lpd jest skonfigurowany w trybie "surowym". Po
stronie systemu Windows należy zainstalować sterownik drukarki, który drukuje do
pliku. Wydrukujmy stronę z dowolnego edytora tekstu, zapisując wydruk do pliku.
Następnie skopiujmy plik do komputera z systemem Unix i wydrukujmy za pomocą
polecenia lpr. Jeśli wydruk będzie prawidłowy, możemy skonfigurować Sambę
w celu automatycznej obsługi drukarki.
Globalne ustawienia drukowania
Aby Samba mogła poprawnie drukować w systemie Linux, powinniśmy dodać
następujące parametry do sekcji [global]:
Listing 3.1: Edytujemy plik smb.conf, aby umożliwić drukowanie |
printcap name=/etc/printcap
printing=bsd
|
Jeśli nasz plik printcap znajduje się gdzie indziej, należy odpowiednio poprawić
powyższą linijkę, zawierającą parametr printcap name=. Jeśli używalibyśmy
innego systemu wydruku niż standardowy demon lpd z BSD, należałoby
zapoznać się opisem opcji printinf= w podręczniku systemowym man do
pliku smb.conf. Tam można przeczytać jak skonfigurować Sambę z
naszym systemem wydruku.
Nadszedł czas na skonfigurowanie zasobu drukarki. Oto fragment mojego pliku
smb.conf, który dotyczy drukarki. Użyjemy go jako przykładu:
Listing 3.2: Przykładowy zasób drukarki |
[nec]
path=/var/spool/smb
print command=/usr/bin/lpr %s
lprm command=/usr/bin/lprm -P%p %j
printer=lp
public=yes
printable=yes
|
Ważne jest, aby zrozumieć najpierw parametr "path". Gdy Samba przyjmuje zadanie
wydruku z systemu Windows, musi przechować je gdzieś na dysku, zanim wyśle je za
pomocą lpr. Katalog podany w parametrze path= powinien posiadać
uprawnienia 1777, dzięki czemu każdy będzie miał w nim prawo zapisu. Parametry
print command= i lprm= nie są zwykle wymagane. Należy je dołączyć,
jeśli chcemy podać dokładną ścieżkę dla poleceń wydruku lub jeśli musimy
przekazać parametry do polecenia lpr. Powyższe makra można potraktować
jako przykład. Makro %s zostanie zamienione w nazwę pliku tymczasowego,
%p w nazwę drukarki, a %j w numer zadania.
Jak nietrudno się domyślić, opcja printer= informuje Sambę jakiej
drukarki uniksowej należy użyć do wydruku. Powinniśmy upewnić się, że drukarka
ta jest skonfigurowana w trybie "surowym". Opcja public=yes umożliwia
dostęp do drukarki nawet użytkownikom bez hasła. Później być może będziemy
chcieli usunąć tę linię, aby poprawić bezpieczeństwo (poprawimy je jeszcze
bardziej, podając zamiast tej opcji odpowiedni parametr users=). Dzięki
opcji printable=yes informujemy Sambę, że niniejszy zasób powinien być
skonfigurowany jako drukarka oraz że może on przyjmować polecenia wydruku.
Nowa drukarka powinna być widoczna z systemu Windows po zrestartowaniu Samby. W
tym momencie powinno nam się udać zainstalować tę drukarkę po stronie Windowsa i
wydrukować za jej pomocą stronę testową. (Windows poinformuje nas, że
instalujemy sterownik dla drukarki NULL. Nie należy się tym przejmować i po
prostu wybrać odpowiedni sterownik z listy). Jeśli jednak drukowanie nie
powiedzie się, należy przejrzeć komunikaty błędu w pliku
/var/log/log.smb. Nie można przy okazji nie wspomnieć o istnieniu
bardzo wielu przydatnych opcji konfiguracyjnych dotyczących drukowania, które
można umieścić w pliku smb.conf. Tutaj omówiliśmy jedynie kilka
najczęściej używanych. Z wszystkimi można się zapoznać w dokumentacji man do
pliku smb.conf.
4.
Podsumowanie
W niniejszym artykule omówiliśmy kluczowe elementy funkcjonalności Samby, w tym
udostępnianie katalogów domowych i drukarek. Moim celem było także naświetlić
kilka zagadnień dotyczących bezpieczeństwa. Nie należy jednak sądzić, że to
wszystko, co Samba ma nam do zaoferowania. Jest to bowiem nie tylko potężna, ale
również wysoce konfigurowalna usługa. Pozwala nam -- administratorom --
zdecydować w jaki sposób i do jakiego stopnia zostanie wykorzystana w naszym
miejscu pracy. Pomimo iż wymagana jest ręczna konfiguracja poprzez edycją pliku
smb.conf, rezultaty są tego warte, ponieważ dzięki temu wszystko
działa dokładnie tak, jak sobie tego życzymy.
Samba posiada jeszcze funkcjonalność, o jakiej nawet tu nie wspomnieliśmy, w tym
możliwość stania się częścią (a nawet kontrolerem!) domeny Windows NT. Zachęcam
do samodzielnego odkrycia potencjału tego znakomitego narzędzia.
Zasoby
-
Strona główna Samby.
-
frgpasswrd to
narzędzie do synchronizowania uniksowych haseł shadow i haseł Samby.
-
SambaLink/Q to niezależny od
wersji Samby edytor pliku smb.conf.
-
Dokument "Printing FAQ" można znaleźć na stronie tldp.org.
-
Samba według Eda
Weinberga.
-
Książka Using Samba
(Wydawnictwo O'Reilly Publishing; 1999) to szczegółowy przewodnik,
wprowadzający nas w arkana administracji Sambą. Zawiera opis niedawno
dodanych funkcji, takich jak integracja z domenami Windows NT, oraz
przedstawia graficzne narzędzie konfiguracji SWAT.
-
Strona główna narzędzia SWAT.
-
Warto także polecić zestaw programów Samba/iX, dzięki którym
komputer HP e3000 z systemem operacyjnym MPE/iX może zostać wykorzystany
jako serwer usług Microsoft Message Block (SMB).
-
Książka Samba
Unleashed. Autor: Steve Litt, współautor: Daniel Robbins.
|