====== Samba ====== * [[http://www.samba.org/cifs/docs/what-is-smb.html]] ===== Client ===== ==== Kommandozeile ==== aptitude -y install smbclient Alle Samba-Server im Netz zeigen. mit den Rechten eines bestimmten Benutzers: # smbtree -U fritz anonym (klappt aber nicht immer bzw. überall): # smbtree -N WORKGROUP \\VENUS Samba 3.0.23c \\VENUS\IPC$ IPC Service (Samba 3.0.23c) \\VENUS\HDD1 # smbtree -S -N WORKGROUP \\VENUS Samba 3.0.23c Alle Freigaben auf dem Rechner //venus// zeigen: # smbclient -L venus -N Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.23c] Sharename Type Comment --------- ---- ------- HDD1 Disk IPC$ IPC IPC Service (Samba 3.0.23c) Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.23c] Server Comment --------- ------- VENUS Samba 3.0.23c Workgroup Master --------- ------- WORKGROUP VENUS Alle Freigaben auf dem Rechner //mediabox// zeigen: # smbclient -L mediabox -N WARNING: The "username" option is deprecated Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.23c] Sharename Type Comment --------- ---- ------- HDD1 Disk IPC$ IPC IPC Service (Samba 3.0.23c) Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.23c] Server Comment --------- ------- FANTEC Samba 3.0.23c PSD28958 Workgroup Master --------- ------- WORKGROUP FANTEC Alle Freigaben auf dem Rechner //venus// zeigen, wenn der Netbios-Name und der DNS-Name nicht gleich sind: # smbclient -L venus -I 192.168.1.1 -N # smbclient -A /root/.mount -L //venus/ Einloggen in die Freigabe //HDD1//: # smbclient //venus/HDD1 -N Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.23c] Server not using user level security and no password supplied. smb: \> smb: \> exit Als //fritz// in die Freigabe //HDD1// einloggen: # smbclient //venus/HDD1 -U fritz Passwortlos in die Freigabe //HDD1// einloggen: # smbclient //venus/HDD1 -A identifikation.txt # vi /root/identifikation.txt username = fritz password = geheim domain = WORKGROUP Alles in einem Aufruf: > smbclient //windowsrechner/Freigabe Passwort -I 10.11.12.13 -W Workgroup -U Benutzername smb: \> > smbclient //windowsrechner/Freigabe Passwort -I 10.11.12.13 -W Workgroup -U Benutzername -c "ls Verzeichnis01/Verzeichnis02/Verzeichnis03" . D 0 Fri Jul 16 03:17:52 2021 .. D 0 Fri Jul 16 03:17:52 2021 datei_01.ide A 23834 Sun May 30 17:52:29 2021 datei_02.ide A 22131 Thu Jun 10 22:32:14 2021 datei_03.ide A 24368 Mon Jul 5 20:12:13 2021 ==== montieren ==== > aptitude -y install smbfs > mount //192.168.1.1/HDD1 /mnt/ -t cifs -o guest > mount //192.168.1.1/HDD1 /mnt/ -t cifs -o cred=/root/identifikation.txt > mount //192.168.1.1/HDD1 /mnt/ -t cifs -o noperm,iocharset=utf8,rw,file_mode=0775,dir_mode=0775,cred=/root/identifikation.txt //192.168.1.1/HDD1 /mnt/ > mount //192.168.1.1/HDD1 /mnt/ -t cifs -o nobrl,sfu,serverino,noperm,intr,hard,directio,uid=1000,gid=1000,rw,user,cred=/root/identifikation.txt > mount //venus/HDD1 /mnt/ -o fstype=cifs,ip=192.168.1.1,nobrl,sfu,serverino,noperm,intr,hard,directio,gid=1000,noacl,ro,user,cred=/root/identifikation.txt Seit Ubuntu-Version 11.04 sollte man die Option "mapchars" entfernen. > mount //windowsrechner/Freigabe/Verzeichnis01/Verzeichnis02/Verzeichnis03 /mnt -t cifs -o ip=10.11.12.13,vers=2.0,nobrl,sfu,serverino,noperm,intr,hard,gid=1000,noacl,ro,user,username=Benutzername,password=Passwort,domain=Workgroup > apt install cifs-utils > mount //192.168.1.1/HDD1 /mnt/ -t cifs -o ro,ip=192.168.1.1,nobrl,sfu,serverino,noperm,intr,hard,noperm,cred=/root/identifikation.txt ==== FreeBSD ==== * [[::FreeBSD:FreeBSD - smbFS]] ==== AutoFS / Automount (Linux) ==== Ubuntu 20.04 # apt install smbclient autofs cifs-utils ältere Linux-Versionen # aptitude -y install autofs smbfs smbclient # mkdir -p /etc/autofs/ # vi /etc/autofs/auto.server venus -fstype=cifs,ip=192.168.1.1,nobrl,sfu,serverino,noperm,intr,hard,directio,gid=1000,noacl,rw,user,cred=/root/identifikation.txt //venus/HDD1 multimedia -fstype=cifs,ip=192.168.1.2,nobrl,sfu,serverino,noperm,intr,hard,directio,gid=1000,noacl,rw,user,cred=/root/.mount.multimedia ://samba/multimedia tmp -fstype=cifs,vers=3.0,rw,noperm,nosetuids,ip=192.168.1.1,uid=1000,gid=1000,credentials=/root/identifikation.txt ://server.lan/tmp # vi /etc/auto.master /cifs /etc/autofs/auto.server -t 6 # /etc/init.d/autofs restart # ln -s /cifs/venus /home/ # ln -s /cifs/multimedia /home/ # ls -lha /home/venus/ # ls -lha /home/multimedia/ Jetzt wird ''/venus/HDD1'' bzw. ''/samba/multimedia'' immer nur bei Bedarf gemountet und nach 6 Sekunden inaktivität, wieder ausgehängt. Ubuntu 20.04 LTS: > echo "/cifs /etc/auto.cifs -g -t 10" >> /etc/auto.master > touch /etc/auto.cifs.windowsrechner > chmod 0600 /etc/auto.cifs.windowsrechner > echo "username=Benutzername" >> /etc/auto.cifs.windowsrechner > echo "password=Passwort" >> /etc/auto.cifs.windowsrechner > echo "domain=Workgroup" >> /etc/auto.cifs.windowsrechner > echo "windowsrechner -fstype=cifs,vers=2.0,rw,user,noauto,exec,ip=10.11.12.13,uid=1000,gid=1000,credentials=/etc/auto.cifs.windowsrechner ://windowsrechner/Freigabe" >> /etc/auto.cifs > service autofs restart > ls -lha /cifs/windowsrechner ===== Samba-Server ===== ==== installation von Samba 4.6 ==== > smbd -b | grep "CONFIGFILE" CONFIGFILE: /usr/local/etc/smb4.conf > mv /var/db/samba4/private /var/db/samba4/private_original > ln -s /home/etc/samba4/private /var/db/samba4/private > testparm -v > echo "samba_server_enable=YES" >> /etc/rc.conf die SHARE-Namen sollten nur max. 12 Zeichen lang sein > service samba_server status nmbd is not running. smbd is not running. > service samba_server start Performing sanity check on Samba configuration: OK Starting nmbd. Starting smbd. > service samba_server status nmbd is running as pid 68580. smbd is running as pid 68584. > ps ax | fgrep -v grep | egrep "samba|smbd|nmbd|winbindd" 68794 - Ss 0:00,00 /usr/local/sbin/nmbd --daemon --configfile=/usr/local/etc/smb4.conf 68798 - Ss 0:00,02 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf 68800 - S 0:00,00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf 68801 - S 0:00,00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf 68803 - S 0:00,00 /usr/local/sbin/smbd --daemon --configfile=/usr/local/etc/smb4.conf > smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" LOCKDIR: /var/db/samba4 STATEDIR: /var/db/samba4 CACHEDIR: /var/db/samba4 PRIVATE_DIR: /var/db/samba4/private ### Samba 4.0 - Binary: ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.2-release/Latest/samba4.tbz # server role = active directory domain controller # server services = +smb # dcerpc endpoint servers = remote # start smbd/nmbd/winbindd instead for domain member and standalone file server tasks # https://wiki.samba.org/index.php/Samba4/s3fs # https://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html [global] unix charset = UTF8 workgroup = ENERGIE server string = ERDE interfaces = 192.168.2.1/24 bind interfaces only = Yes passdb backend = smbpasswd smb passwd file = /home/etc/samba4/private/smbpasswd log file = /var/log/samba.log max log size = 50 min protocol = NT1 disable netbios = Yes enable asu support = Yes socket options = TCP_NODELAY IPTOS_LOWDELAY #socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536 os level = 64 preferred master = Yes domain master = Yes dns proxy = No ##socket address = 192.168.2.1 usershare prefix allow list = /tmp, /Export usershare prefix deny list = /etc, /dev, /boot, /root idmap config * : backend = tdb invalid users = root, @wheel valid users = kontor, multimedia, kinder, fritz, fratz create mask = 0664 directory mask = 0775 hosts allow = 127., 192.168.2. # aio read size = 65536 # aio write size = 65536 write cache size = 262144 case sensitive = Yes fstype = Samba ### Samba 4.0 - Binary: ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.2-release/Latest/samba4.tbz # server services = +smb -s3fs dcerpc endpoint servers = +unixinfo +browser enable core files = no client max protocol = SMB3 # load printers = no printable = no # #tls enabled = No #tls keyfile = #tls certfile = #tls cafile = #tls crlfile = #tls dh params file = [cdrom] comment = cdrom path = /cdrom valid users = kontor force user = kontor force group = kontor read only = Yes create mask = 0660 directory mask = 0770 [kontor] comment = kontor path = /home/kontor valid users = kontor force user = kontor force group = kontor read only = No create mask = 0660 directory mask = 0770 [tmp] comment = Tmp path = /tmp valid users = kontor, multimedia force user = kontor force group = kontor read only = No create mask = 0660 directory mask = 0770 [mm] comment = "Verzeichnis mit Multimediadaten" path = /Export/mm valid users = multimedia force user = multimedia force group = dlna read only = No create mask = 0660 directory mask = 0770 [kinder] comment = "Verzeichnis mit Multimediadaten für Kinder" path = /Export/kinder valid users = kinder force user = kinder force group = dlna read only = No create mask = 0660 directory mask = 0770 [freecom] comment = "Freecom - Laufwerk" path = /Freecom valid users = fritz, fratz force user = fritz force group = fritz read only = No create mask = 0666 directory mask = 0777 ==== Benutzer anlegen in Samba 3.4 ==== ACHTUNG!\\ __Die Benutzer, die mit ''smbpasswd'' Samba bekannt gemacht werden, dürfen **nicht** in der Gruppe ''"0"'' sein!\\ Sonst bekommt man den Fehler ''NT_STATUS_ACCESS_DENIED''.__ Als erstes muss natürlich Samba installiert werden: # aptitude -y install samba Dann brauchen wir einen Systemuser: # useradd fritz Samba muss den Benutzer natürlich auch kennen: # smbpasswd -a fritz oder für Scripte so: # echo -e "geheim\ngeheim" | smbpasswd -s -a fritz Das "-e" hinter dem ''echo'' und das "\n" zwischen den Passwortwiederholungen sind sehr wichtig, sonst funktioniert das automatische Anlegen des Benutzers nicht! so wird das Passwort in der Samba-Datenbank geändert: > smbpasswd -U fritz New SMB password: Retype new SMB password: man kann auch Benutzer wieder aus der SMB-Datenbank entfernen: > smbpasswd -x root smb_delete_user: Refusing to delete local system root account! Deleted user root. alle User, die Samba kennt, kann man so sehen: > pdbedit -L Ignoring unknown parameter "dcerpc endpoint servers" Ignoring unknown parameter "client max protocol" fritz:1000:User & > pdbedit -Lv --------------- Unix username: fritz NT username: Account Flags: [U ] User SID: S-1-5-21-2557483769-2213720445-2638791776-9000 Primary Group SID: S-1-5-21-2557483769-2213720445-2638791776-513 Full Name: Benutzer Home Directory: \\server\sysop HomeDir Drive: Logon Script: Profile Path: \\server\fritz\profile Domain: GRUPPE Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: never Kickoff time: never Password last set: Sa., 06 Nov. 2010 23:55:34 CET Password can change: Sa., 06 Nov. 2010 23:55:34 CET Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Passwort ändern: > echo 'geheim' | pdbedit -u fritz -t Benutzerdaten ändert: > pdbedit -ru fritz Benutzer aus der Samba-Datenbank löschen: > pdbedit -xu fritz Benutzer-Datenbank exportieren: > pdbedit -e smbpasswd:/pfad/zum/Archiv/samba-users.backup Benutzer-Datenbank importieren: > pdbedit -i smbpasswd:/pfad/zum/Archiv/samba-users.backup Jetzt muss Samba (smb.conf) noch konfiguriert werden: ==== /etc/samba/smb.conf - allgemeines Beispiel ==== workgroup = ARBEITSGRUPPE netbios name = SERVERNAME server string = Samba %v (%h) security = user hosts allow = 127. 172.0. 192.168.0. load printers = no log file = /var/log/samba/samba.log.%m socket options = TCP_NODELAY local master = yes os level = 64 domain master = yes preferred master = yes disable netbios = yes invalid users = root strict sync = yes sync always = yes kernel oplocks = yes unix extensions = yes case sensitive = yes [Freigabe] comment = Bemerkung path = /pfad/verzeichnis read only = no browseable = yes public = no valid users = fritz fratz ==== /etc/samba/smb.conf - konkretes Beispiel ==== [global] workgroup = WORKGROUP server string = Samba Server netbios name = FreeBSD-Server wins support = Yes hosts allow = 192.168.1. 192.168.2. 127. log file = /var/log/%m.log max log size = 50 security = share ; security = user ; security = server ; force user = nobody ; force group = nogroup socket options = TCP_NODELAY os level = 33 domain master = yes preferred master = yes dns proxy = no client code page = 850 [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writeable = no printable = yes [tmp] comment = Temporaerer Dateiraum path = /tmp read only = no public = yes browseable = yes create mask = 0777 [homes] comment = Homeverzeichnis valid users = %S read only = No browseable = No writeable = yes create mask = 0700 [var-tmp] comment = allgemeines Dateilager path = /var/tmp read only = No public = yes writeable = yes printable = no browseable = Yes Glücklicherweise braucht man Samba jetzt **nicht** neu zu starten! ====== SWAT ===== SWAT ist ein grafisches Konfigurationswerkzeug für Samba. ==== SWAT aktivieren ==== Hat man Samba mit SWAT installiert, dann kann man SWAT aktivieren in dem man in der Datei "///etc/inetd.conf//" die Zeile mit "swat" am Anfang durch das entfernen des "#" aktiviert: > vi /etc/inetd.conf ... # # Enable the following two entries to enable samba startup from inetd # (from the Samba documentation). Enable the third entry to enable the swat # samba configuration tool. # #netbios-ssn stream tcp nowait root /usr/local/sbin/smbd smbd #netbios-ns dgram udp wait root /usr/local/sbin/nmbd nmbd swat stream tcp nowait/400 root /usr/local/sbin/swat swat Läuft Samba/SWAT auf einem Linux, dann muss es in der Datei [[http://gertranssmb3.berlios.de/output/SWAT.html#xinetd|/etc/xinetd.d/swat]] durch das setzen einer Variablen aktiviert werden (alternativ kann man die Zeile auch, mit einem "#", auskommentieren): disable = no only_from = 127.0.0.1 192.168.100.0 und anschließend den INETD neu startet: > service inetd restart Jetzt kann man die SWAT-Oberfläche mit "http://server:901/" im Browser aufrufen (an Stelle von "__server__" muss natürlich die IP oder der Name des Samba-Servers stehen). ==== Problembehebung ==== Bekommt man jetzt im Browser ein **//Access Denied.//** angezeigt, dann fehlt u.U. noch der Benutzer "root" in der Samba-User-Datenbank. Dieses Problem kann vier verschiedene Ursachen haben: - man darf den Server-Namen nicht in der SWAT-URL-Zeile verwenden sondern nur die IP, das war bei mir (trotz funktionierendem DNS) der Fall; - man muss den Port 901/swat in der Datei ///etc/hosts.allow// extra erlauben; - der Benutzer "root" wird in der SMB-Datenbank verlangt (gelegentlich bei Linux-Distributionen); - SWAT hat nur lokal den Port 901 geöfnet; Lösung für Problem "1": http://192.168.100.1:901 Lösung für Problem "2": > vi /etc/hosts.allow ... # Swat - Samba port 901 swat : 192.168.100. : allow swat : ALL : deny Lösung für Problem "3": > smbpasswd -a root New SMB password: Retype new SMB password: Added user root. Lösung für Problem "4": Dann kann man den [[http://gertranssmb3.berlios.de/output/SWAT.html#id2598261|Port 901 mit SSL umleiten]] oder einen [[SSH-Tunnel]] bauen.