[[oktatas:linux:samba|< Samba]] ====== Samba fájlmegosztás ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2016, 2017, 2018, 2019 * Licenc: GNU Free Documentation License 1.3 * Web: http://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 ===== [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ő: [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 ===== Irodalom ===== ==== Linkek ==== * http://www.samba.org * https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server (2019) * http://wiki.samba.org/index.php/Samba4/HOWTO * http://wiki.samba.org/index.php/Samba4/Debian * http://wiki.samba.org/index.php/Windows7 * http://us6.samba.org/samba/docs/man/manpages-3/ * http://us6.samba.org/samba/docs/man/manpages-3/vfs_recycle.8.html * http://hup.hu/old/sambakonyv/ * http://szabilinux.hu * http://szabilinux.hu/samba/samba.zip * https://linuxconfig.org/how-to-configure-samba-server-share-on-debian-9-stretch-linux (2017) * https://wiki.samba.org/index.php/LDB (LDB, TDB; 2019) * https://linuxconfig.org/how-to-configure-samba-server-share-on-debian-9-stretch-linux (2019) * https://www.server-world.info/en/note?os=Debian_9&p=samba&f=2 (2019) * https://www.howtoforge.com/tutorial/debian-samba-server/ (2019) * https://forums.fedoraforum.org/showthread.php?180709-Where-is-smbpasswd-file (2019) * https://wiki.debian.org/SambaServerSimple (2019) CIFS: * http://www.samba.org/cifs/ * http://www.ubiqx.org/cifs/ AD menedzser Win7-től: * https://www.microsoft.com/hu-HU/download/details.aspx?id=7887 (W7) * https://www.microsoft.com/en-us/download/details.aspx?id=45520 (W10)