Parę dni temu ktoś na forum zapytał: „Jak udostępnić pliki w sieci spod OS X tak aby widział je Windows”. Odpowiedź jest prosta – odpowiedż to „SAMBA”! W tym momencie masz prawo powiedzieć: “Stop! jakie OS X!? Mam Linuxa i chce udostępniać z Linuxa a nie z jakiegoś tam OS X!”. Jako ciekawostkę dodam, że OS X (system, z którego kożystają komputery Apple) wywodzi się, tak jak Linux, z Unixa. Tak więc Samba chula na jednym i na drugim bez skrupułów. Na wstępie zaznaczę, że nie napisze o szczegółowej konfiguracji Samby. Opcji jest bez liku i naprawdę można z nimi czarować bez końca. Tak więc jeśli ktoś szuka bardziej szczegółowych informacji, może je znaleźć na dwa, a właściwie na 3 sposoby:
- skorzystać z polecenia “man samba”, bądź “man smb.conf”;
- zapoznać się z dokumentacją online samba.org/samba/docs/
- skorzystać z tajemniczej i moło komu znanej strony google.com
Wracając do tematu. Jak już pewnie sie domyślasz za pomocą Samby można udostępniać pliki w sieci, tak aby były one widzoczne spod różnych systemów. Na dobrą sprawę rozchodzi się tu o Windowsa i udostępnianie plików w sieci z pomocą NetBIOS. Zanim powstała Samba było to dość uciążliwe. Windowsy miały swoje NetBIOS i tzw. WindowsNetworking, Mac OS’y kożystały z AppleTalk’a, do tego dochodziły jeszcze Linuxy, i kiedy spinano kilka takich maszynek w sieć, rozwiązaniem mogło być FTP, które jest wspólne dla każdego OS’a, niezbyt dobre do takiego zastosowania. I wtedy nadeszła Samba, która ten problem rozwiązała na tyle skutecznie, że na dzień dzisiejszy jest ona domyślnie instalowana wraz z wieloma dystrybucjami Linuxowymi czy Apple’owskim OS X.
Przejdźmy do rzeczy i udostępnijmy jakieś pliczki w LAN’ie. Aby tego dokonać poprostu wklep:
# nano /etc/samba/smb.conf
W różnych dystrybucja lokalizacja konfiga Samby może się zmieniać, sprawdzisz ją w manualu - man samba. Również nano nie jest jedynym edytorem, jednakże jeśli czytasz ten post wysoce prwdopodobnym jest, że jesteś świeżym linux userem i nie masz jeszcze na tyle wyrobionych preferencji, więc szczerze polecam nano, ze względu na prostote obsługi.
Twoim oczom właśnie powinna ukazać się pełna konfiguracja Samby, odnośnie której napisze tylko tyle, że:
| workgroup nazwa | definiuje nazwe grupy roboczej, do której chcemy przyłączyć nasz komputer |
| netbios name = nazwa | określa nazwę komputera widoczną w sieci (tak, to jest nazwa widoczna w “Otoczneiu sieciowym”) |
| security = share | definiuje poziom zabezpieczeń dla dostępu do plików, w tym wypadku ma do nich dostęp każdy, bez logowania |
Wartości pozostałych parametrów możesz pozostawić domyślne. Z czasem będziesz mógł dostosować je do własnych potrzeb. Zatem zakładam, że Samba na Twoim serwerze nasłuchuje połączeń przychodzących i przechodze do opisu deklaracji udziałów sieciowych.
1. Udostępnianie pliów bez dodatkowych zabezpieczeń.
Przykład.
| [MySambaShare] | nazwa katalogu pod jaką ma być widoczny w sieci |
| browseable = yes | określa, czy udostępniony folder ma być widoczny podczas przeglądania zawartości komputera przez sieć |
| path = /data/other | ścieżka do katalogu na dysku |
| writeable = yes | określa czy użytkownicy przeglądający zasób mają prawo do zapisu |
| read only = no | czy zasób ma być tylko do odczytu |
| guest ok = yes | zezwala użytkownikowi “guest” na dostęp do zasobu |
| guest only = no | określa czy dostęp ma mieć tylko użytkownik “guest” |
| directory mask = 777 | definiuje domyślne uprawnienia do katalogu po utworzeniu, w tym przypadku wszystcu mają pełne prawa do katalogu |
| create mask = 777 | ustawia domyślne uprawnienia dla utworzonego pliku, uprawnienia j.w. |
Po dodaniu takiego wpisu do pliku konfiguracyjnego samby nasz zasób jest gotowy do udostępnienia w sieci. Zapisz konfigurację [Ctrl]+[X] i przeładuj Sambę:
# /etc/init.d/samba reload
Teraz możesz sprawdzić czy Twój zasób jest widoczny w sieci. Uruchom Konquerora i w pole adresu wpisz:
smb://127.0.0.1/
2. Udostępnianie pliów z autoryzacją (logowanie)
Może zdażyć się tak, że będziesz chciał udostępnić swoje pliki w sieci ograniczając do nich dostęp poprzez logowanie. Aby tego dokonać musisz wprowadzić kilka zmian w konfiguracji globalnej Samby:
| passdb backend = smbpasswd:/etc/samba/smbpasswd | mówi sambie gdzie przechowywane są hasła, przy czym smbpasswd oznacza mechanizm składowania |
| encrypt passwords = yes | ustawia szyfrowanie haseł |
| security = user | wymaga zalogowania, przed uzyskaniem dostępu do zasobu. |
Teraz należy dodać użytkownika i ustawić dla niego hasło:
# useradd wrzuta
Kiedy dodamy do systemu użytkownika, warto zadbać, aby nie miał dostępu do innych usług uruchomionych na Twoim komputerze jak np. ssh, ftp czy poczta. Edytuj plik /etc/passwd:
# nano /etc/passwd
Znajdź wiersz, który zaczyna się od nazwy świerzo dodanego użytkownika. Powinien wyglądać mniej więcej tak:
wrzuta:x:521:521::/home/wrzuta:/bin/bash
Powinieneś zmienić “/bin/bash” na “/bin/false” co przyniesie porządane skutki.
Teraz ustaw hasło:
# smbpasswd -a wrzuta
Ostatnią czynnością jest dodanie odpowiedniej regółki do deklaracji zasobu w konfiguracji samby, edytuj ją ponowanie, usuń wpisy:
guest ok = yes; guest only = no;
i zastąp je wpisem:
valid users = wrzuta
Przeładuj konfigurację Samby i gotowe!
Może to wyglądać na skomplikowane i zagmatwane, jednak z czasem będziesz to robić odruchowo i intuicyjnie - uwierz mi!
3. Możliwe komplikacje.
Może się zdażyć, że pomimo wykonanych powyżej czynności, wystąpią problemy podczas dostępu do zasobów. Oto najczęstrze z nich:
a) Nie można nawiązać połączenia z hostem udostępniającym pliki.
- sprawdź czy Samba jest uruchomiona
# ps -A | grep smb - sprawdź czy nie masz zbyt szczelnego firewall’a
# nmap -sS 127.0.0.1
jeśli na liście otwartych portów nie ma 139 - netbios-ssn, znaczy to tyle, że musisz go otworzyć bo inaczej za Chiny ludzie się do Ciebie nie dobiją; zrób tak:# iptables -A INPUT -p icmp -s 192.168.0.0/24 -j ACCEPT # iptables -A INPUT -p udp -s 192.168.0.0/24 –dport 137:138 -j ACCEPT # iptables -A INPUT -p tcp -s 192.168.0.0/24 -m multiport –dports 139,445 -j ACCEPT Ponad to możesz dodać te trzy polecenia do /etc/rc.local (lub do odpowiedniego pliku w okolicach /etc/rc.d - w zarzeżności od dystrybucji), abyś nie musiał ich wykonywać po każdym uruchomieniu komputera.
- sprawdź czy samba akceptuje połączenia; w konfigu samby powinien znajdować się taki wpis:
hosts allow = 192.168.1. 127.0.0.
b) Wyświetla się komunikat o niepoprawnej nazwie użytkownika lub haśle.
- użytkownik prubuje uzyskać dostęp do zasubu za pomocą Windows 98; problem polega na tym, że 98 nie potrafi wysłać do serwera samby odpowiednio zaszyfrowanego hasła; występuje on tylko dla security=user, i pomimo prób i starań nie udało mi się go rozwiązać; czytałem kiedyś na jakimś formum że odpowiednia modyfikacja rejestru załatwi sprawe, co jak się później okazało jest nieprawdą, można sprubować ustawić “encrypt passwords = no” i zmienić mechanizm składowania haseł na “plain text”; jednak 98 jest na tyle archaiczne, że mam nadzieje, iż ten problem już niewielu dotyczy;
- sprawdź czy na pewno wpisałeś poprawne dane dostępu; jeśli to nie pomoże prawdopodobnie zawaliłeś sprawe podczas tworzenia konta, bądź przy ustawianiu hasła - powtórz te czynności aby mieć pewność; sprawdź sekcję “valid users”
c) Pomimo ustawienia parametrów “writeable = yes” i “read only = no” użytkownik nie może zmodyfikować zawartości zasobu sieciowego do którego sie zalogował. Problem może wystąpić także przy “security = share”.
- pamiętaj, że Linux przydziela własne prawa do plików; mają one wyższy priorytet niż atrybuty udziału sieciowego zdefiniowane przez Sambe; jeśli udostępniasz pliki, należące do innego użytkownika niż ten który się loguje, będziesz musiał zmienić ich właściciela, bądź uprawnienia; można tego dokonać za pomocą dwuch poleceń:
| # chown -R wrzuta.wrzuta /data/other |
| # chmod -R 777 /data/other |
W tym przypadku parameter -R oznacza rekurencyjne wywołanie polecenia dla plików i podkatalogów znajdujących sie w /data/other.