Tartalomjegyzék
Samba fájlmegosztás
- Szerző: Sallai András
- Copyright © Sallai András, 2011, 2016, 2017, 2018, 2019
- Licenc: GNU Free Documentation License 1.3
- Web: https://szit.hu
Bevezetés
A Samba egy programgyűjtemény, amely Unix, Linux rendszereken megvalósítja az SMB protokollt. Az SMB a Server Message Block szavakból alkotott betűszó. Szokás még CIFS néven is említeni, amely a Common Internet File System szavakból alkotott betűszó.
Az SMB a Windowsos világ terméke, segítségével fájlokat, nyomtatókat tudunk megosztani Windowsok között. A unixos, linuxos rendszerek részt vehetnek a fájl és nyomtatómegosztásban a Samba segítségével.
Telepítés
A samba csomagban három démon található, amelyből telepítés után kettő indul el. A telepítendő csomag neve a samba, ezek utána telepítés:
apt install samba
2017-ben a Debian 9.2.1-es rendszerben a Samba 4 verziója telepszik.
A samba vezérlélse
A samba telepítésével két démon kerül telepítésével, amelyek azonnal el is indulnak:
- smbd
- nmbd
A samba a systemd vezérlő parancsaival kezelhető. Nézzük meg a milyen állapotban van az smbd démon:
systemctl status smbd
# systemctl status smbd ● smbd.service - Samba SMB Daemon Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2017-10-27 19:23:49 CEST; 6min ago Docs: man:smbd(8) man:samba(7) man:smb.conf(5) Main PID: 373 (smbd) Status: "smbd: ready to serve connections..." Tasks: 4 (limit: 4915) CGroup: /system.slice/smbd.service ├─373 /usr/sbin/smbd ├─376 /usr/sbin/smbd ├─377 /usr/sbin/smbd └─387 /usr/sbin/smbd okt 27 19:23:47 iskolazo systemd[1]: Starting Samba SMB Daemon... okt 27 19:23:49 iskolazo systemd[1]: smbd.service: Supervising process 373 which is no okt 27 19:23:49 iskolazo systemd[1]: Started Samba SMB Daemon.
Újraindítás:
systemctl restart smbd nmbd
Leállítás:
systemctl stop smbd nmbd
Indítás:
systemctl start smbd nmbd
Megosztás beállítása
A példa kedvéért legyen egy szerver, ami a 192.168.10.2 IP címen érhető el.
Hozzunk létre egy könyvtárat a következő helyen: /home/samba/info
mkdir -p /home/samba/info
Ez lesz a hálózaton megosztott könyvtár.
Nevezzük át az eredeti konfigurációs állományt:
# cd /etc/samba # mv smb.conf smb.conf.backup
Megjegyzések nélkül szeretnénk egy konfigurációs állományt, a mentésből állítsunk össze egy alapot:
# cat smb.conf.backup | egrep -v "(#|;)" | grep . > smb.conf
Vegyük fel a saját megosztásunkat, ehhez írjuk a /etc/samba/smb.conf állomány végére:
[info] path = /home/samba/info comment = Teszt Info csoport megosztas guest ok = yes
Ellenőrzéshez telepítsük az smbclient programot:
# apt install smbclient
Ellenőrzés:
$ smbclient -L localhost
$ smbclient -N //192.168.10.2/info
A -N opció hatására a program nem kér jelszót. Nincs is rá szükség, mivel a megosztásunknak guest ok = yes beállítás van megadva. A -N helyett használható a --no-pass is.
A testparm paranccsal lekérdezhetők a beállított kapcsolók.
testparm
Vagy:
testparm -v
Felhasználó kezelése
Felhasználó felvétele
Felvesszük Linuxon a felhasználót:
adduser mari
Felvesszük a Samba számára is:
smbpasswd -a mari
A jelszavak a következő helyen tárolódnak:
/var/lib/samba/private/passdb.tdb
Régebben: /var/lib/samba/private/sam.ldb
A fenti info megosztással teszt:
smbclient -U mari //192.168.10.2/info
A samba-tool user add joska
parancs itt nem alkalmazható. Ezt csak AD tartományvezérlő esetén használjuk.
Törlés, engedés
Törlés:
# smbpasswd -x joska
Letiltás:
# smbpasswd -d joska
Engedélyezés:
# smbpasswd -e joska
Felhasználó jelszavának cseréje
A létező linuxos felhasználónak külön Samba jelszót kell beállítani:
# smbpasswd joska
vagy:
# smbpasswd -U joska
Felhasználók és adatainak megtekintése
Felhasználók listázása (rendszergazdaként):
pdbedit -L
Több info:
pdbedit -L -w
Felhasználók több információval:
pdbedit -L -v
Jogosult felhasználók
A megosztásokat az /etc/samba/smbd.conf fájlban állítjuk be. Egy megosztáshoz érvényes felhasználók megadása a valid users kulcsszavakkal történik. A felhasználók helyett megadható csoport neve is, de a csoportok neve elé tegyünk egy @ karaktert.
Felhasználó és csoport példa:
valid users = joska mari @info
Szeretnék egy olyan megosztást, amelyet csak felhasználóval és jelszóval lehet elérni.
[iroda] path = /home/samba/iroda comment = Irodai dolgozok guest ok = no read only = no valid users = mari kati @iroda
Módok beállítása
Milyen joggal jöjjön létre egy könyvtár:
force directory mode = 770
force create mode = 770
Milyen csoporttal jöjjön létre fájl vagy könyvtár:
force group = bureau
Milyen felhasználóval és csoporttal jöjjön létre fájl vagy könyvtár:
force user = joska
Szimbolikus linkek követése
- /etc/samba/smb.conf
[global] ... allow insecure wide links = yes [megosztas] ... follow symlinks = yes wide links = yes
Fájlok szemetesbe helyezése törlés helyett
vfs objects = recycle
A törölt fájlok egy .recycle nevű könyvtárba kerülnek a megosztás gyökerében. Ha töröltünk egy akarmi.txt nevű fájlt, és újra töröljük azt, akkor a .recycle nevű könyvtárban felülírja az előzőt. Ha minden verziót szeretnénk megőrizni, akkor a következő beállítás szükséges:
vfs objects = recycle recycle:versions = Yes
Ha más nevet szeretnénk adni a szemetesnek, akkor a „repository” tulajdonsággal tudjuk megtenni:
vfs objects = recycle recycle:repository = kuka
Megadhatunk abszolút útvonalat is:
vfs objects = recycle recycle:repository = /home/kuka
Ekkor a /home/kuka nevű könyvtárnak megfelelő jogok szükségesek:
chmod 777 /home/kuka
Ha néhány kiterjesztés esetén nem szeretnénk a szemetesbe helyezést hanem törlést, akkor azt az „exclude” tulajdonsággal tudjuk megtenni.
recycle:exclude = *.tmp *.temp *.swp
Könyvtárstruktúra megtartása
recycle: keeptree = yes
Verziók megtartása ne legyen néhány kiterjesztésnél:
recycle: noversions = *.doc|*.ppt|*.xls
Fájlok törlésének, változtatásának naplózása
Az extd_audit modul lehetővé teszi a felhasználók nyomonkövetését.
vfs objects = extd_audit
Létezik még az audit és a full_audit modul.
Ha extd_audit és a recycle modult is szeretnénk használni, akkor tegyük így:
vfs objects extd_audit recycle
Az extd_audit használata esetén állítsuk be a global részben a naplózást:
syslog = 0 log file = /var/log/samba/%U.%m.log log level = 0 vfs:2
A %U hatására a fájnévben a felhasználónév szerepel, a %m hatására pedig a kliens gép neve. A műveletek a /var/log/syslog fájlban is megjelennek, a fájl vagy könyvtár törlése azonban a felhasználó naplóállományában külön kiírásra kerül. A fájl törlése „unlink” kulcsszóval jelenik meg.
VFS trükk
A recycle modul segítségével egy adott állományról, könyvtárról kideríthető ki törölte azt. A beállítás a következő:
- /etc/samba/smb.conf
[global] ... vfs objects = recycle recycle:repository = /home/kuka/%U ..
A %U megadásával a kuka könyvtárban létrejön egy könyvtár, annak felhasználónak a nevével, aki a törlést végezte. A törölt fájl ebbe a könyvtárba kerül.
Minta
Minta 1
vfs objects = recycle recycle:repository = .Lomtar recycle:keeptree = 1 recycle:touch_mtime =true recycle:versions = 1 recycle:maxsize = 20000000 recycle:exclude = *.tmp *.temp *.o *.obj ~$* *.dat *.zip *.mp3 *.wav recycle:exclude_dir=*.Lomtar* *xx *ab
Minta 2
vfs objects = recycle recycle:repository = .deleted/%U recycle:keeptree = Yes recycle:touch = Yes recycle:versions = Yes recycle:maxsixe = 0 recycle:exclude = *.tmp recycle:exclude_dir = /tmp recycle:noversions = *.doc
Minta 3
vfs object = recycle recycle:repository = .recycle/%u recycle:maxsize = 50000000 recycle:exclude = *.tmp *.temp *.o *.obj ~$* recycle:exclude_dir = sdileni/*/profile* tmp temp cache recycle:versions = yes recycle:touch = yes recycle:keeptree = yes
Minta 4
vfs objects = recycle recycle: repository = .recycle/%u recycle: version = true recycle: touch = true recycle: keeptree = true recycle: noversion = *.doc|*.xls|*.ppt recycle: exclude = *.tmp *.temp *.cache recycle: maxsize = 0
Minta 5
vfs objects = recycle recycle:repository = /home/depts recycle:keeptree = Yes recycle:touch = Yes recycle:versions = Yes recycle:exclude = *.tmp *.temp *.o *.obj ~$* *.~?? recycle:excludedir = /tmp /temp /cache
Iptables beállítások
iptables -A INPUT -p udp --dport 137 -j ACCEPT iptables -A INPUT -p udp --dport 138 -j ACCEPT iptables -A INPUT -p tcp --dport 139 -j ACCEPT iptables -A INPUT -p tcp --dport 445 -j ACCEPT
A 137 és a 138 port az nmbd démonhoz tartozik.
A 139 és a 445 port az smbd démonhoz tartozik.
SMB kliens Linux parancssorból
Telepítsük az smbclient programot:
apt-get install smbclient
smbclient -L localhost smbclient //server/megosztas
A localhost helyett lehet IP cím. Ügyeljünk a második sorban a a / perjelekre, ne tévesszük össze a \ visszaperjellel.
Grafikus adminisztrációs felület GTK
Telepítés:
apt-get install gadmin-samba
Indítás például:
gksu /usr/sbin/gadmin-samba
Indítás például GNOME felületen:
Alkalmazások -> Rendszereszközök -> GADMIN-SAMBA
Webalapú adminisztrációs felület
Telepítés:
apt install swat
Függelék
IPC$ megosztás
Az IPC$ megosztás a TCP/IP kapcsolatok tallózásához szükséges. A Windowsok csak akkor fogják tudni tallózni a Linuxos samba gépet, ha van egy ilyen nevű mogosztás is.
Megosztás példák
[dokumentumok] comment = Dokumentumok path = /srv/smb/dokumentumok browseable = yes writeable = yes public = yes [zene] comment = Zene path = /srv/smb/zene browseable = yes writeable = yes public = yes [kepek] comment = Kepek path = /srv/smb/kepek browseable = yes writeable = yes public = yes [Videok] comment = Videok path = /srv/smb/vedeok browseable = yes writeable = yes public = yes
smbtree
Az smbtree az smbclient csomag része.
Megjeleníti az elérhető megosztásokat:
WORKGROUP \\PUSZTA Samba 4.2.14-Debian \\PUSZTA\IPC$ IPC Service (Samba 4.2.14-Debian) \\PUSZTA\torony Puszta publikus torony \\PUSZTA\data Puszta publikus írható megosztás \\PUSZTA\pub Puszta publikus megosztas \\PUSZTA\print$ Printer Drivers