Udostępnianie plików w Plasma KDE komputerom z Windowsem – Samba

W tym artykule dowiecie się jak udostępniać systemom Windows pliki z systemu Linux z zainstalowanym środowiskiem Plasma. Używać do tego będziemy serwera Samba.

Jest to treść przeznaczona dla średnio-zaawansowanych użytkowników Linuksa i polecamy przeczytanie pierwsze ze zrozumieniem poszczególnych etapów i dopiero później zabranie za wykonywanie instrukcji, bo może się okazać, że w waszym wypadku będzie się dało niektóre kroki pominąć. Niemniej jednak trzeba sprawdzić czy wszystkie elementy są na miejscu, bo bez nich serwer Samby nie będzie działać.

Po pierwsze parę wyjaśnień. Jest tutaj omawiana konfiguracja w której system Linux z Plazmą służy jako serwer (posiada pliki i katalogi i je udostępnia innym komputerom) a Windows jest klientem (widzi zasoby Linuksa i ma do nich dostęp). Konfiguracja odwrotna czyli Windows jako serwer a Linuks jako klient to inne zagadnienie i nie będzie tu poruszane. Są przyjęte tutaj pewne odgórne parametry: udostępniane są katalogi w tej samej sieci lokalnej (np. przez wifi) i dostęp do nich ma każdy oraz każdy może je w pełni edytować. Tutaj po prostu przedstawimy proste i jak najmniej problematyczne współdzielenie plików w domowej/firmowej sieci bez dodatkowych zabezpieczeń czyli BEZ HASŁA. Nie będą omawiane drukarki. Jeśli potrzebujecie innej, bardziej bezpiecznej konfiguracji, musicie zapoznać się z dokumentacją Samby. W tym artykule także skupimy się na konkretnie na środowisku Plasma (stworzonym przez KDE). Inne środowiska (np. Gnome, Unity, XFCE) lub dystrybucje z nimi mogą mieć trochę inne rozwiązania i nie wszystkie informacje podane tutaj będą się zgadzały.

Samba to darmowy serwer open source udostępniania plików oraz drukarek z systemów unixopodobnych dla innych systemów w tym również dla Windows. Krótko mówiąc, jest to najczęściej używany serwer w sieciach mieszanych, w których różne komputery pracują na różnych systemach. Jest dużo artykułów na temat Samby, jednak skonfigurowanie jej nastręcza sporo kłopotów, gdyż możliwości konfiguracji takiej sieci komputerowej jest bardzo dużo i ustawienie jednej rzeczy źle zwykle kończy się brakiem dostępu do plików lub drukarek. Niestety Samba nie posiada dobrych programów graficznych, więc większość ustawień będzie się odbywało w terminalu.

PO STRONIE SERWERA (LINUX)

1. Instalacja samby.

W zależności od wybranej dystrybucji, instalujecie (jeśli nie ma) pakiety: samba (potrzebny do serwera samby) i smbclient (potrzebny do klienta samby, jest to pakiet opcjonalny, ale przydatnym, bo dzięki niemu będzie można sprawdzać dostępność udziałów samby z Dolphina czyli jako klient, nie musząc sprawdzać co chwila widoczności po stronie faktycznych klientów czyli komputerów z systemem Windows).

2. Stworzenie działającego pliku konfiguracyjnego z przykładowego pliku:
sudo cp /etc/samba/smb.conf.default /etc/samba/smb.conf
3. Dodanie użytkownika Linuxa do grupy Samby oraz hasło Samby:
Musicie sprawdzić czy istnieje grupa samby, domyślnie nazwana jest sambashare (można inaczej ją nazwać, ale potem konsekwentnie stosować w następnych przykładach). Wpisujemy w terminalu:
groups <username>
Gdzie <username> to nazwa naszego użytkownika w systemie. Jeśli grupa nie istenieje to ją dodajecie komendą:
sudo groupadd sambashare
Samba wymaga dodania istniejącego użytkownika systemu Linux do grupy sambashare za pomocą:
sudo usermod -a -G sambashare <username>

Potem musimy dodać hasło do Samby dla tego użytkownika, które jest NIEZALEŻNE od hasła użytkownika w systemie Linux, więc może być inne, takie samo lub może go w ogóle nie być. Hasło to będzie wymagane jeśli ktoś będzie chciał mieć dostęp do udostępnianych zasobów. W naszym przykładzie hasło będzie puste. Można użyć podanej poniżej komendy, ale przy pytaniu o hasło nie trzeba nic wpisywać i tylko potwierdzić enterem. Jeśli nie wiecie jakie jest obecne hasło, chcecie je zmienić lub zlikwidować to też używacie tej komendy i  podajecie nowe hasło lub zostawiacie puste.
sudo smbpasswd -a <username>
Jeśli chcemy dodać do samby innego, nowego użytkownika bez folderu home:
sudo useradd -M -N -g sambashare <username>
Parametr -M powoduje, że nie będzie dodany katalog home dla tego użytkownika, a parametr -N spowoduje, że nie będzie stworzona grupa o tej samej nazwie. Parametr -g przypisuje od razu nowo tworzonego użytkownika do grupy sambashare.
4. Konfiguracja Samby
UWAGA! W tym punkcie zajmiemy się wyłącznie samą konfiguracją, ale Samba może ciągle nie być uruchomiona, więc udziały nie będą jeszcze widoczne. Jeśli chcecie testować na bieżąco, proszę sprawdzić następny punkt, który omawia uruchamianie i sprawdzanie Samby!Konfiguracja Samby w terminalu:sudo nano /etc/samba/smb.conf

Lub za pomocą domyślnych edytorów tekstowych w systemie, np. Kate lub Kwrite. Przy zapisie system zapyta o hasło sudo.

W internecie można znaleźć wiele różnych przykładowych ustawień pliku smb.conf. Tutaj przedstawiam konfigurację sprawdzoną dla wstępnych założeń (każdy widzi zasoby Samby i każdy ma do nich pełen dostęp bez hasła). Po otwarciu plik smb.conf może mieć też sporo opisów co do tego, która sekcja za co jest odpowiedzialna. Zaciera i komplikuje to strukturę konfiguracji, więc sugeruję po prostu skasować wszystko i wkleić parametry podane poniżej (instrukcje jak i domyślne parametry będą i tak dostępne w smb.conf.default jeśli będzie potrzebowali do nich wrócić lub sprawdzić opis):

[global]
workgroup = WORKGROUP
dns proxy = no
log file = /var/log/samba/%m.log
max log size = 1000
client max protocol = NT1
server role = standalone server
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
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*
pam password change = yes
map to guest = Bad Password
usershare allow guests = yes
name resolve order = lmhosts bcast host wins
security = user
guest account = nobody
usershare path = /var/lib/samba/usershare
usershare max shares = 100
usershare owner only = yes
force create mode = 0070
force directory mode = 0070

[homes]
comment = Home Directories
browseable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %S

[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700

[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no

Niestety nie możemy gwarantować, że podana konfiguracja zawsze będzie dla wszystkich działała, bo jeśli macie ustawione proxy lub inną infrastrukturę sieci niż założona na początku, pewne parametry będą musiały być zmienione. Do tego trzeba sprawdzić dokumentację Samby lub inne artykuły omawiające plik smb.conf przy waszej konkretnej sytuacji.

Dodatkowo trzeba pamiętać, że samba posiada dziesiątki, jeśli nie setki różnych możliwych ustawień i jeśli jakaś wartość jest domyślna, to nawet jak jej nie ma pliku konfiguracyjnym to działa jakby tam istniała. Np. domyślną wartością jest:

unix extensions = yes

Oznacza to, że nawet jeśli takiej linijki nie będzie w pliku smb.conf, to samba będzie traktowała jakby ona się tam znajdowała. To ma konsekwencje, ponieważ jeśli chcemy np. dać możliwość podążania za symlinkami i zastosować opcję:

wide links = yes

to tak się nie stanie, bo opcja wide links = yes jest przeciwną do unix extensions = yes, a te jako domyślne biorą górę, więc żeby móc zastosować wide links = yes to musimy też dodać przeciwną opcję do unix extensions, czyli:

unix extensions = no
wide links = yes

Dopiero taka konfiguracja będzie poprawna i nie będzie zwracała błędów po sprawdzeniu stanu procesu.

Proszę zwrócić też szczególną uwagę, na linijkę:

usershare path = /var/lib/samba/usershare

W innych artykułach może być podana liczba mnoga czyli usershares lub inna nazwa, więc trzeba tutaj pilnować dokładnej nazwy i ścieżki. Sama nazwa i ścieżka mogą być różne jeśli tylko są odpowiednio zaznaczone w pliku smb.conf.

Parametr usershare path określa gdzie będą umieszczone pliki opisujące dokładnie udostępniane katalogi. Na tym etapie jeszcze one nie istnieją i to jest powód, dlaczego dostępne ustawienia Samby w menadżerze plików Dolphin (na katalogu prawo klik->właściwości->udostępnij) nie działają jeszcze w tej chwili! Możecie też zmienić tą ścieżką na inną, bardziej dla was wygodną, jednak trzeba będzie pamiętać o niej. Wymagane są też ustawić odpowiednie prawa dostępu (pełne prawa dla właściciela i grupy).

UWAGA! Może się też zdarzyć, że twoja dystrybucja już posiada skonfigurowaną wstępnie Sambę, posiada zdefiniowany katalog usershare (lub inny mu odpowiadający), wtedy będzie się dało ustawić udziały Samby z interfejsu graficznego z pominięciem dotychczasowych etapów.
Jeśli /var/lib/samba/usershare jeszcze nie istnieje to tworzymy go komendą:
sudo mkdir -p /var/lib/samba/usershare
Ustawienie odpowiednich praw dostępu do katalogu usershare:
sudo chmod 1770 /var/lib/samba/usershare
Jeśli wszystko zostało wykonane prawidłowo (zainstalowana Samba, jest poprawny plik /etc/samba/smb.conf, jest katalog /var/lib/samba/usershare i posiada odpowiednie prawa dostępu oraz użytkownik systemu, którym jesteś zalogowany jest dodany do grupy sambashare) od tego momentu Dolphin powinien prawidłowo ustawiać zasoby Samby przez prawo klik na wybranym katalogu i przejściu do właściwości->udostępnij.
Dolphin, Samba
Jeśli dodacie w ten sposób jakiś katalog, zobaczycie w /var/lib/samba/usershare nowy plik o nazwie tego katalogu.
Czyli np. jeśli stworzono katalog o nazwie Share i udostępniono go w Dolphinie przyznając pełne prawa dostępu to w /var/lib/samba/usershare pojawi się plik share z takim wpisem:
#VERSION 2
path=/home/username/Share
comment=
usershare_acl=S-1-1-0:f
guest_ok=y
sharename=Share
Jak widać po wpisie, jest określona ścieżka, nazwa, dozwolony jest gość oraz prawa dostępu w linijce:
usershare_acl=S-1-1-0:f
gdzie S-1-1-0:f oznacza KAŻDY
Dla wyjaśnienia:
r – tylko odczyt
f – pełny dostęp
d – brak dostępu
Nie trzeba się tym jednak specjalnie przejmować, bo odpowiedni wpis pojawi się dzięki Dolphin’owi i zaznaczeniu wybranych opcji współdzielenia danego katalogu jak i praw dostępu jakie chcecie przyznać do niego.
UWAGA! WAŻNE!
Pliki w /var/lib/samba/usershare należą do użytkownika, który jest w danym momencie zalogowany, i który użył Dolphin’a do ustawienia współdzielenia plików. Wszystko działa poprawnie jeśli katalog, który udostępniamy też należy do tego samego użytkownika.
Czyli np. jeśli jesteśmy zalogowani jako user1 i udostępniamy katalog należący do user1, wtedy poprawnie pojawi się plik w /var/lib/samba/usershare należący też do user1. Jednak jeśli katalog będzie np. należał do innego użytkownika, np. root to proces ten nie zadziała. Wystarczy jednak stworzyć manualnie nowy plik w /var/lib/samba/usershare ze ścieżką do katalogu innego użytkownika (zakładając, że należy też do grupy sambashare, jeśli nie to trzeba go dodać, nie jest to jednak potrzebne dla root) i zmienić jego własność na tego użytkownika czyli w tym wypadku na root.
Zakładamy tutaj, że użytkownik potrafi w wygodny dla siebie sposób zmieniać właściciela lub prawa dostępu. Jeśli nie to polecamy artykuł
UWAGA! Przy każdej zmianie konfiguracji samba musi być zrestartowana (zakładając, że w ogóle jest uruchomiona), inaczej zmiany nie będą zastosowane.  Tym zajmie się następny punkt.
5. Podstawowe komendy uruchamiania i sprawdzania procesów samby.
Sprawdzenie czy plik smb.conf jest poprawny:
Jeśli wszystko jest ok powinno w terminalu pojawić się coś takiego:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Po naciśnięciu enter jest pokazana zawartość smb.conf.

W przypadku problemów musicie wkleić zawartość błędu do wyszukiwarki i sprawdzić co jest nie tak i jak to naprawić.

Np. jeśli Samba poskarży się, że Netbios name jest za długie to możemy skrócić nazwę komputera do 15 znaków w pliku /etc/hostname i zrestartować komputer.

Jeśli wyskakuje rlimit_max (1024) below minimum Windows limit (16384) to dodajemy w /etc/security/limits.conf linijkę:
* – nofile 16384
i restartujemy komputer i tak dalej.
Sprawdzamy czy Samba działa (jeśli dopiero co zainstalowaliśmy i nigdy nie uruchamialiśmy to usługa Samby jeszcze nie będzie działać):
sudo systemctl status smbd
sudo systemctl status smbd
UWAGA! Polecenia usługi Samby mogą się różnić w zależności od dystrybucji i wersji Samby.  W starej wersji powinny najczęściej działać nazwy smbd i nmbd, ale czasem trzeba dodać smbd.service i nmbd.service. Od wersji Samby 4.8.1 nazwy zmieniają sie na smb i nmb (tracą d na końcu), więc możliwe będą wersje albo same nazwy smb i nmb lub smb.service i nmb.service
Jak już polecenie testparm nie zwraca problemów i Samba jeszcze nie działa trzeba uruchomić serwis (demon) Samby w tej sesji poleceniami:
sudo systemctl start smbd
sudo systemctl start nmbd
Zatrzymanie serwisu w obecnej sesji:
sudo systemctl stop smbd
sudo systemctl stop nmbd
Uruchomienie procesu, żeby zawsze startował wraz z systemem:
sudo systemctl enable smbd
sudo systemctl enable nmbd
Żeby proces nie startował razem systemem:
sudo systemctl disable smbd
sudo systemctl disable nmbd
Restart procesów:
sudo systemctl restart smbd
sudo systemctl restart smbd
Jak wszystko jest w porządku (testparm zwraca, że jest OK, polecenie status pokazuje, że działa), w Dolphin zasoby Samby powinny być widoczne (jeśli zainstalowano pakiet smbclient) po kliknięciu w lewym panelu na Sieć->Zasoby Samby->Workgroup->nazwa-komputera (serwera udostępniającego zasoby).
Jeśli nie widać udziałów Samby, najprawdopodobniej Firewall blokuje je:
6.  Konfiguracja Firewall, żeby nie blokował Samby:
Zwykle Samba używa portów 137-139 + 445.
Trzeba sprawdzić czy firwall iptables jest aktymy i blokuje coś:
sudo iptables -L
Jeśli wyskakuje coś takiego:

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

widać, że iptables przepuszcza wszystko. Zwrócone informacje mogą różnie wyglądać, ale nas interesuje tutaj Chain OUTPUT (policy ACCEPT) i OUTPUT(policy ACCEPT). Jeśli są tutaj jakieś dodatkowe reguły, musicie otworzyć porty 137-139 + 445. Jeśli jest ACCEPT to przechodzimy do kolejnego punktu i sprawdzamy czy macie zainstalowany uncomplicated fierwall (ufw). Status uwf sprawdzamy:

sudo ufw status
Jeśli jest zainstalowany ufw to zwróci inactive albo active ze zdefiniowanymi regułami. Jeśli brak ufw to wyskoczy błąd o braku komendy.
Jeśli działa i są widoczne aktywne reguły to można dodać albo dodać predefiniowaną regułę:
sudo ufw allow Samba
albo otworzyć manualnie porty (jeśli macie inny IP to trzeba zmienić poniższą wartość):
sudo ufw allow proto udp from 192.168.1.0/24 to any port 137
sudo ufw allow proto udp from 192.168.1.0/24 to any port 138
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 139
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 445
Sprawdzamy jeszcze raz status ufw:
sudo ufw status
Jeśli dalej jest problem, wyłączamy ufw i sprawdzamy czy pomogło:
sudo ufw disable
7. Sprawdzenie IP komputera-serwera Samby:
ifconfig | grep inet
Wyskoczy coś w tym stylu:
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
inet 192.168.1.17  netmask 255.255.255.0  broadcast 192.168.1.255
inet6 fe80::2c00:3a1f:d810:709a  prefixlen 64  scopeid 0x20<link>
Linijka zaczynająca się od inet 192 to IP waszego komputera

PO STRONIE KLIENTA WINDOWS

W systemie Windows uruchamiacie menadżer plików i klikacie w lewym panelu na sieć i powinna być widoczna nazwa komputera-serwera. Po kliknięciu na niego powinny być widoczne udostępniane katalogi.
Niestety nie zawsze tak to działa (szczególnie w Windows 10) i czasem trzeba znać IP komputera-serwera. Można to sprawdzić wieloma metodami. Jedną z nich podaliśmy powyżej w punkcie 7 po stronie serwera.
Znając IP wpisujemy w polu adresu \\IP (w naszym przykładzie \\192.168.1.17) i klikamy enter. Jeśli serwer Samby na Linuksie jest skonfigurowany poprawnie i firewalle nie blokują nic (firewall na serwerze, firewall na routerze, firewall na kliencie) to powinna się wyświetlić lista udostępnionych katalogów. Taki folder sieciowy (IP) można dodać do szybkiego dostępu w lewym Panelu lub podłączyć jako dysk sieciowy. Tutaj musicie poszukać jak się to robi. Przykładowo:
Podane powyżej instrukcje nie zawierają wszystkich możliwych problemów i układów w waszym przypadku, więc jest możliwość, że coś nie będzie działać. Samba jest problematycznym pakietem i wiele osób jej nie cierpi i są ku temu powody. Jednak mamy nadzieję, że przedstawione tutaj instrukcje pomogą zrozumieć podstawowe kroki, zagadnienia i pewne pułapki, które czyhają na użytkownika i dzięki temu będzie on mógł wyszukać optymalne rozwiązanie dla siebie.

Dodaj komentarz