[[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)