Udostępnianie zasobów dyskowych w sieci lokalnej
Ostatnia zmiana: 2024-02-18 15:13
Samba jest programem umożliwiającym dzielenie się zasobami dyskowymi w sieci lokalnej - czyli popularne "Otoczenie sieciowe" w systemach Windows. Współdzielić można dowolny katalog widoczny w systemie, nie tylko te z nośnika USB.
Założenie - w systemie jest katalog który chcemy udostępnić. Samba udostępnia katalog, nie interesuje jej czy w nim jest zamontowany jakiś nośnik czy jest to po prostu katalog w routerze.
Jeżeli chcemy udostępniać nośnik, należy go najpierw
zamontować, ręcznie lub automatycznie. System plików na nośniku (ext2/ext3/vfat/ntfs) nie ma znaczenia, ponieważ komputery korzystające z samby nie widzą systemu plików dysku tylko sieciowy system plików, choć należy pamiętać o ew. problemach z uprawnieniami plików. W tym przykładzie udostępniamy katalog /mnt/sda1.
W OpenWrt występuje samba w wersji 3.6; od wydania OpenWrt 19.07 dostępna jest także pełna wersja samby w wersji 4.9 oraz "zamiennik" samby - program
ksmbd. Obie wersje samby są znacząco duże, więc do instalacji niezbędny jest
extroot lub dużo wolnej ilości pamięci flash.
Samba 3.6
Samba 3.6 na potrzeby OpenWrt została ona pozbawiona niektórych elementów (np. kerberos, Active Directory, printserwer) i została ograniczona tylko do mechanizmów udostępniania plików.
Instalacja
# opkg update
# opkg install samba36-server
Jeżeli używamy LuCI to można zainstalować także odpowiednią aplikację:
# opkg install luci-app-samba
Konfiguracja
Odbywa się poprzez edycję pliku
/etc/config/samba. Poniżej zaprezentowano konfigurację udostępniającą dwa katalogi: jeden ogólnodostępny o nazwie
publiczny udostępniający dane z katalogu
/mnt/sda1/publiczny, drugi wymagający podania loginu i hasła (użytkownik
malgosia w tym przykładzie) udostępniający katalog
/mnt/sda1/prywatny pod nazwą
prywatny.
config samba
option name openwrt
option workgroup WORKGROUP
option description 'OpenWrt serwer'
option charset 'UTF-8'
option 'homes' '0'
config sambashare
option name publiczny
option path /mnt/sda1/publiczny
option read_only no
option create_mask 0700
option dir_mask 0700
option guest_ok yes
config sambashare
option name prywatny
option path /mnt/sda1/prywatny
option read_only no
option create_mask 0700
option dir_mask 0700
option guest_ok no
option users malgosia
Opcje create_mask/dir_mask nie są uprawnieniami udostępnionych plików! Dotyczą one nowo tworzonych plików i katalogów.
Katalogi
/mnt/sda1/publiczny i
/mnt/sda1/prywatny muszą istnieć w systemie. Użytkownik (w tym przypadku
malgosia) musi mieć prawa zapisu/odczytu do danego katalogu, więc należy je ustawić np. przez:
# chmod 777 /mnt/sda1
# chmod 777 /mnt/sda1/publiczny
# chmod 777 /mnt/sda1/prywatny
Nowy użytkownik
Proces zakładania nowego użytkownika opisane jest w
osobnym dokumencie. Dodatkowo należy utworzyć hasło tego użytkownika dla zasobów samby korzystając z innego programu:
smbpasswd. Podsumowując: aby utworzyć użytkownika o nazwie
malgosia należy wykonać to następującym poleceniami:
# echo "malgosia:*:1000:65534:malgosia:/tmp:/bin/false" >> /etc/passwd
# echo "malgosia:*:0:0:99999:7:::" >> /etc/shadow
# touch /etc/samba/smbpasswd
# smbpasswd -a malgosia
Domyślna konfiguracja samby uniemożliwia zalogowanie się jako użytkownik root więc nie będzie działać udostępnianie zasobów logując się jako ten użytkownik. Trzeba zrobić nowego.
Nazwę użytkownika (
malgosia) i hasło należy oczywiście zmienić stosownie do wymagań; jeżeli mamy kilku użytkowników należy liczbę 1000 zwiększać kolejno tak, aby przy każdym była unikalna wartość. Jeżeli podajemy inny numer grupy, należy także pamiętać o jej utworzeniu.
Zakładany użytkownik (w przykładzie: malgosia) musi mieć prawo odczytu (i ew. zapisu) do zasobu na dysku (/mnt/sda1/prywatny w tym przypadku).
Należy się więc posłużyć poleceniem wspomnianym już poleceniem
chmod
# chmod 777 /mnt/sda1/prywatny
Nie wszystkie systemy plików umożliwiają przydzielanie uprawnień pod OpenWrt (fat/ntfs) więc trzeba je odpowiednio wcześniej zamontować, aby ten użytkownik miał odpowiednie prawa (patrz dokument
o nośnikach).
Polskie znaki
Wspomniana konfiguracja obsługuje już polskie znaki. Jeżeli udostępniamy dysk to może być koniecznie odpowiednie zamontowanie nośnika, np. w przypadku stosowania nośnika z fat musi on być zamontowany z opcją utf8, czyli np.:
# mount -t vfat -o utf8 /dev/sda1 /mnt/sda1
(patrz dokument
o nośnikach).
Uruchomienie
Zostaje tylko włączenie samby
# /etc/init.d/samba enable
# /etc/init.d/samba start
Odpowiednie montowanie zasobów można też
wyklikać korzystając z gui LuCI (po instalacji pakietu luci-app-samba).
Wolne miejsce na dysku (opcjonalnie)
W przypadku systemów Windows samba może niewłaściwie podawać ilość wolnego miejsca (podaje ilość wolnego flash a nie extroota). Rozwiązanie problemu:
http://eko.one.pl/forum/viewtopic.php?pid=19831 .
Jeżeli samba podaje jako wolne miejsce np. 14MB lub 61MB to przyczyną może też być po prostu brak zamontowanego nośnika w katalogu który udostępnia samba - zwłaszcza występuje to w gargoyle, jeżeli dysk uległ odmontowaniu.
Automatyczne udostępnianie podłączonych dysków
W ostatnich wydaniach OpenWrt pojawił się pakiet automatyzujący tą czynność:
# opkg install samba36-hotplug
Jeżeli z jakiegoś powodu nie interesuje nas sposób lub opcje jakie robi automat, można posłużyć się własnym skryptem.
Jeżeli podłączony dysk automatycznie jest montowany (patrz poradnik o
montowaniu zasobów) można pokusić się o automatycznie udostępnianie takiego dysku. W tym celu należy normalnie skonfigurować sambę, a później utworzyć plik
/etc/hotplug.d/block/99-samba o zawartości:
#!/bin/sh
case $DEVICENAME in
mtdblock*);;
sd[a-z][0-9]*)
case $ACTION in
add)
grep -q /dev/$DEVICENAME /proc/mounts || exit 0
DIR=$(awk '/^\/dev\/'$DEVICENAME'/ {print $2}' /proc/mounts)
i=$(uci show samba|awk 'NF{p=$0}END{print p}'|sed -e "s/^.*\[\\(.*\)\].*$/\1/")
while [ "$i" -ge 0 ]; do
sharepath=$(uci get samba.@sambashare[$i].path)
[ "$sharepath" = "$DIR" ] && {
uci delete samba.@sambashare[$i]
}
i=$(( i-1 ))
done
uci add samba sambashare
uci set samba.@sambashare[-1].name="$DEVICENAME"
uci set samba.@sambashare[-1].path="$DIR"
uci set samba.@sambashare[-1].read_only=no
uci set samba.@sambashare[-1].guest_ok=yes
/etc/init.d/samba restart
uci revert samba
;;
remove)
i=$(uci show samba|awk 'NF{p=$0}END{print p}'|sed -e "s/^.*\[\\(.*\)\].*$/\1/")
while [ "$i" -ge 0 ]; do
sharepath=$(uci get samba.@sambashare[$i].path)
d=$(uci get samba.@sambashare[$i].name)
if [ ! -e "$sharepath" -o "$d" = "$DEVICENAME" ]; then
uci delete samba.@sambashare[$i]
fi
i=$((i-1))
done
/etc/init.d/samba restart
uci revert samba
;;
esac
;;
esac
Podłączony nośnik jest automatycznie dodawany do konfigu samby i jest ona restartowana. Wszystko odbywa się dynamicznie, nie jest konfig zapisywany do pliku, więc nie ma problemu po restarcie routera.
Uwagi dla użytkowników Windows Vista i 7 (opcjonalnie)
W starszych wersjach samby, Windows Vista może mieć problem z dostaniem się do tak przygotowanych zasobów. Wynikało to ze starej wersji samby która nie obsługuje uwierzytelniania NTLMv2, które z kolei jest domyślnym i jednym w Vista. Nowsza nie powinna mieć tego problemu. Jeżeli jednak coś takiego wystąpi, należy to zmienić:
Windows Vista Business, Ultimate- uruchom secpol.msc
- wybierz "Local Policies > Security Options"
- otwórz "Network security: LAN Manager authentication level"
- zaznacz "Send LM & NTLM - use NTLMv2 security if negotiated" zamiast "Send NTLMv2 response only"
Windows Vista Home, Premium- uruchom regedit
- znajdź klucz "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\"
- ustaw "LMCompatibilityLevel" na "1" co oznacza "używaj NTLMv2 jeżeli jest dostępne lub starszej wersji jeżeli nie"
Patrz także:
forum eko.one.plJeżeli nastąpi zmiana w loginie/haśle na sambie, trzeba zresetować pamięć haseł w Windows (XP, Vista) - w przeciwnym wypadku można otrzymać komunikat "Nie dostępny" lub podobne. Aby zresetować pamięć haseł należy wykonać polecenie "net use * /del /yes"
Samba jest wygodnym (w przypadku Windowsa) sposobem wymiany plików pomiędzy urządzeniami. Jednakże jest bardzo mało wydajna (dla przypomnienia - procesory stosowane w tanich ruterach mają częstotliwość procesora ok 400MHz!) i może to być wąskim gardłem. Szybszym rozwiązaniem jest użycie
ftp.
Samba 4.9
Instalacja
# opkg update
# opkg install samba4-server
Jeżeli używamy LuCI to można zainstalować także odpowiednią aplikację:
# opkg install luci-app-samba4
Konfiguracja
Plik konfiguracyjny znajduje się w
/etc/config/samba4 i ma podobną składnię jak dla samby w wersji 3.6. Posiada inny (pełny) plik z szablonem konfiguracji umieszczonym w
/etc/samba/smb.conf.template.
ksmbd
Program ksmbd (dawniej: smbd/cifsd) zależy od specjalnego modułu kernela. Przeznaczony jest tylko do udostępniania plików, ale jego zaletą jest minimalna wielkość i kompatybilność ze współczesnymi systemami Windows. Dodatkowo można zainstalować program
wsdd2 który służy do "rozgłaszania" usługi w sieci:
Instalacja
# opkg update
# opkg install ksmbd-server wsdd2
Jeżeli używamy LuCI to można zainstalować także odpowiednią aplikację:
# opkg install luci-app-ksmbd
Konfiguracja
Plik konfiguracyjny znajduje się w
/etc/config/ksmbd i składniowo jest "prawie" zgodny z plikami od samby 3.6 oraz 4.9, choć ma inne nazwy sekcji. Szablon konfiguracji można znaleźć w pliku
/etc/ksmbd/smb.conf.template. Poniżej zaprezentowano konfigurację udostępniającą dwa katalogi: jeden ogólnodostępny o nazwie
publiczny udostępniający dane z katalogu
/mnt/sda1/publiczny, drugi wymagający podania loginu i hasła (użytkownik
malgosia w tym przykładzie) udostępniający katalog
/mnt/sda1/prywatny pod nazwą
prywatny.
config globals
option workgroup 'WORKGROUP'
option description 'Ksmbd on OpenWrt'
config share
option name publiczny
option path /mnt/sda1/publiczny
option read_only no
option create_mask 0700
option dir_mask 0700
option guest_ok yes
config share
option name prywatny
option path /mnt/sda1/prywatny
option read_only no
option create_mask 0700
option dir_mask 0700
option guest_ok no
option users malgosia
Aby móc dodawać nowych użytkowników należy posłużyć się programem
smbuseradd który jest zawarty w pakiecie
ksmbd-utils
# opkg install ksmbd-utils
Dodawanie nowego użytkownika:
# ksmbd.adduser -a malgosia
New password:
Retype new password:
[smbuseradd/6608]: INFO: User 'malgosia' added
Ksmbd domyślnie nasłuchuje tylko na interfejsie LAN. Jeżeli chcemy żeby nasłuchiwała też na innych sieciach należy jawnie podać wszystkie sieci, np:
# uci set ksmbd.@globals[0].interface="lan wg0"
# uci commit
Uruchomienie
# /etc/init.d/ksmbd enable
# /etc/init.d/ksmbd start
Montowanie udostępnionych zasobów
Zakładamy że jakiś komputer o adresie IP 192.168.1.100 udostępnia zasoby samby pod nazwami
publiczny - dostępny bez logowania oraz
prywatny - wymagający podania użytkownika i hasła. Aby zamontować takie zasoby na routerze z OpenWrt nie trzeba konfigurować serwera samby, wystarczy tylko klient:
# opkg update
# opkg install kmod-fs-cifs cifsmount
# mkdir -p /mnt/publiczny
# mkdir -p /mnt/prywatny
A następnie ręcznie lub przez wpisanie do pliku /etc/rc.local montujemy zasoby:
# mount -t cifs //192.168.1.100/prywatny /mnt/prywatny -o username=login,password=hasło,vers=3.11
# mount -t cifs //192.168.1.100/publiczny /mnt/publiczny -o guest,vers=3.11