Inhaltsverzeichnis

Samba

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

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
/usr/local/etc/smb4.conf
### 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 /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:

  1. 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;
  2. man muss den Port 901/swat in der Datei /etc/hosts.allow extra erlauben;
  3. der Benutzer "root" wird in der SMB-Datenbank verlangt (gelegentlich bei Linux-Distributionen);
  4. 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 Port 901 mit SSL umleiten oder einen SSH-Tunnel bauen.