Samba auf Arch Linux installieren

Möchte man die Linux- und WIndows-Welt kombinieren, kommt man langfristig nicht um das SMB (Server Message Block), bzw. CIFS (Common Internet File System) Protokoll herum. Um Daten zwischen beiden Weilten auszutauschen, ist dies der einfachste Weg. Bei Windows sind diese Protokolle schon seit Urzeiten der De-Facto-Standard, während bei Linux es NFS (Network File System) ist. Da es wesentlich leichter ist, Linux das SMB Protokoll beizubringen, als umgekehrt Windows auf NFS Pfaden wandeln zu lassen, beschreibe ich hier die Installation von SAMBA, die Linux die entsprechende Protokolle beibringt.



1. Softwarepakete installieren

Unter Arch Linux gibt es 3 entsprechende Pakete:

  • samba
  • smbclient
  • cifs-utils

Möchte man nur einen Server installieren, so das Windows Clients auf Linux Netzlaufwerke zugreifen können, reicht es das Paket samba zu installieren. Wenn man allerdings lediglich als Linux Client auf Windows Freigaben zugreifen möchte, reicht es aus, das Paket smbclient zu installieren. Oder wenn man die Freigabe auch unter Linux mounten möchte, dann cifs-util.

Ich empfehle grundsätzlich immer die 3 Pakete samba, smbclient und cifs-utils zu installieren, unabhängig davon, ob man einen Server oder nur einen Client einsetzen möchte. Meistens braucht man als Server auch immer mal die Möglichkeit, andere Freigaben zu testen und als Client kommt man auch immer recht schnell da hin, mal eben selber eine Freigabe zu erstellen.

Zusätzlich würde ich empfehlen, das avahi Paket zu installieren. Avahi repräsentiert eine kostenfreie Umsetzung von Zeroconf, einer Technologie, die es Geräten ermöglicht, sich in einem lokalen Netzwerk zu verbinden, ohne manuelle Konfiguration erforderlich zu machen. Das ist weniger für Windows interessant, als für MacOS und grafische Tools unter Linux.

Um nun die Pakte zu installieren, gibt man auf der Konsole folgendes ein:

$ sudo pacman -S samba smbclient cifs-utils avahi

Der SMB Client setzt die Datei /etc/samba/smb.conf voraus. Entsprechende Konfigurationseinträge werden nicht vorausgesetzt, so dass das anlegen einer leeren Datei vollkommen ausreichend ist. Sofern ein Server eingerichtet werden soll, wird diese Datei ebenfalls benötigt:

$ sudo touch /etc/samba/smb.conf

Damit ist auch schon die Grundkonfiguration abgeschlossen, und es kann entweder als Client auf andere Freigaben zugegriffen werden, oder entsprechende Freigaben als Server konfiguriert werden.


2. Server einrichten

2.1 Dienste aktvieren

Damit die Server Dienste nach einem Neustart automatisch geladen werden, müssen die entsprechenden Dienste aktiviert werden:

$ sudo systemctl enable smb.service
$ sudo systemctl enable nmb.service
$ sudo systemctl enable avahi-daemon.service

Sollten im Netzwerk nur Rechner mit Windows 10 oder höher vorhanden sein, ist der NMB (NetBIOS Message Block) Dienst nicht mehr notwendig, bzw. Windows 10 und höher unterstützen dieses Protokoll nicht mehr. Stattdessen muss hier WSD (Web Services for Devices) installiert werden.

2.1.1 WSDD installieren

Sofern Windows 10 oder höher eingesetzt wird, und der Samba Server im Netzwerk gefunden werden soll (z.B. automatische Anzeige im Windows Explorer), wird der WSD Dienst benötigt. Dieses Paket kann über das AUR (Archlinux User Repository) herunter geladen werden.

Sofern noch nicht installiert, werden als generelle Voraussetzungen für das AUR noch git und die Entwickler-Tools benötigt:

$ sudo pacman -S --needed base-devel git

Danach kann das WSDD2 Paket installiert werden:

$ git clone https://aur.archlinux.org/wsdd2.git
$ cd wsdd2
$ makepkg -si

Danach kann auch der WSD Dienst aktiviert werden:

$ sudo systemctl enable wsdd2.service

2.2 Server konfigurieren

Es gibt 2, bzw. 3 Möglichkeiten, wie man Samba konfiguriert. Der Standard war bis vor einiger Zeit grundsätzlich die Datei /etc/samba/smb.conf. Dort wurde nicht nur die Konfiguration des Servers selber, sondern auch der einzelnen Freigaben vorgenommen. Und dann gibt es noch die Möglichkeit, die entsprechenden Konfigurationen über eine Registry Datenbank zu erledigen. Und die 3. Möglichkeit wäre es dann noch, beide Möglichkeiten parallel zu nutzen, man kann also sowohl Einträge in der /etc/samba/smb.conf machen, aber auch über die Registry.

Der große Vorteil über die Registry ist, das eine Skriptgesteuerte Konfiguration wesentlich einfacher ist. Und die Änderungen werden sofort übernommen. Arbeitet man mit der Konfigurationsdatei, dann muss der Dienst nach jeder Änderung neu gestartet werden. Ich werde mich auf den 3. Punkt konzentrieren.

Dazu muss die Datei /etc/samba/smb.conf einmalig geöffnet werden, und folgendes eingetragen werden:

[global]
        include = registry

Danach kann der Samba Dienst gestartet werden:

$ sudo systemctl start smb.service

Die Konfigurationsdatei /etc/samba/smb.conf ist in mehreren Sektionen unterteilt. Unter [global] fallen alle Einstellungen, die den Server direkt betreffen. Auch für die Registry gelten die selben Angaben. Auch hier wird als Sektion dann global ausgewählt. Möchte man also zum Beispiel für den Server die Arbeitsgruppe festlegen, dann würde man in die /etc/samba/smb.conf folgendes eintragen:

[global]
        workgroup=WORKGROUP

Damit wäre der Name der Arbeitsgruppe dann auf “WORKGROUP” eingestellt. Um dies über die Registry zu erledigen, gibt man folgenden Befehl ein:

$ sudo net conf setparm global "workgroup" "WORKGROUP"

Der net Befehl ist sehr mächtig. Über den 1. Parameter conf wird in die Konfiguration gewechselt, dann als 2. Parameter die Sektion, also in diesem Fall global gefolgt vom eigentlichen Konfigurationsparameter workgroup mit dem Wert WORKGROUP. Da Windows Leerzeichen zulässt, sollte man sich angewöhnen die Parameter in Anführungszeichen zu setzen. Bei einzelnen Wörtern ist dies nicht notwendig, schadet aber auch nicht.

Die Konfiguration der Registry kann man sich so anschauen:

$ sudo net conf list

Und bekommt an diesem Punkt folgendes zurück:

[global]
        workgroup = WORKGROUP

Wie man sieht, ist die Ausgabe gleich dem, als wenn man direkt die /etc/samba/smb.conf sich anschauen würde, hätte man die Konfiguration darüber vorgenommen.

Jetzt muss noch der Rest für eine grundlegende Konfiguration eingetragen werden:

$ sudo net conf setparm global "server string" "%h, Samba %v"
$ sudo net conf setparm global "load printers"  "no"
$ sudo net conf setparm global "wins support"  "yes"
$ sudo net conf setparm global "dns proxy"  "no"
$ sudo net conf setparm global "security"  "user"
$ sudo net conf setparm global "map to guest"  "never"
$ sudo net conf setparm global "guest account"  "nobody"
$ sudo net conf setparm global "name resolve order" "lmhosts host wins bcast"
$ sudo net conf setparm global "wide links" "yes"
$ sudo net conf setparm global "smb1 unix extensions" "no"
$ sudo net conf setparm global "follow symlinks" "yes"
$ sudo net conf setparm global "interfaces" "192.168.59.132/24"
$ sudo net conf setparm global "invalid users" "root"
$ sudo net conf setparm global "use sendfile" "yes"
$ sudo net conf setparm global "min receivefile size" "16384"
$ sudo net conf setparm global "deadtime" "30"
$ sudo net conf setparm global "strict allocate" "yes"

Schaut man sich nun die Konfiguration an, bekommt man wesentlich mehr Einträge zurück:

$ sudo net conf list
[global]
        workgroup = WORKGROUP
        server string = %h, Samba %v
        load printers = no
        wins support = yes
        dns proxy = no
        security = user
        map to guest = never
        guest account = nobody
        name resolve order = lmhosts host wins bcast
        wide links = yes
        smb1 unix extensions = no
        follow symlinks = yes
        interfaces = 192.168.59.132/24
        invalid users = root
        use sendfile = yes
        min receivefile size = 16384
        deadtime = 30
        strict allocate = yes

Die Parameter sind wie folgt konfiguriert:

  • workgroup = WORKGROUP
    • Gibt den Namen der Arbeitsgruppe an
  • server string = %h, Samba %v
    • Name des Samba Servers, die Variablen %h stehen für den Hostnamen und %v für die Sambaversion
  • load printers = no
    • Deaktiviert den Drucker Server
  • wins support = yes
    • Aktiviert den WINS (Windows Internet Naming Service) Dienst, als den DNS für Netbios über TCP/IP
  • dns proxy = no
    • Wenn der gesuchte Name nicht über WINS gefunden würde, wird auch nicht über DNS gesucht
  • security = user
    • Die Sicherheit gilt nicht nur auf Freigabeebene, sondern der entsprechende User muss auch auf dem Windows Rechner vorhanden sein.
  • map to guest = never
    • Ein fehlgeschlagener Anmeldeversuch würde normalerweise auf den Gast Account umgeleitet, was hier deaktiviert wird.
  • guest account = nobody
    • Der Gast Account wird dadurch deaktiviert
  • name resolve order = lmhosts host wins bcast
    • Reihenfolge, wie die Namensauflösung stattfinden soll
  • wide links = yes
    • Falls im Linux Filesystem ein symbolischer Link auf ein Verzeichnis ausserhalb des gemappten Laufwerkes wäre, würde der Zugriff nicht funktionieren. Vorsicht, dies kann ein Sicherheitsproblem darstellen, falls man versehen einen Link falsch setzt.
  • smb1 unix extensions = no
    • Dieser Parameter gilt für uralte Clients, die noch das SMB1 Protokoll verwenden würden. Und es würde beim aktivieren der Parameter “wide links” automatisch deaktiviert.
  • follow symlinks = yes
    • Windows soll symbolischen Links folgenden, die innerhalb des Shares existieren.
  • interfaces = 192.168.59.132/24
    • IP Adresse, an dem der Samba Server gebunden werden soll.
  • invalid users = root
    • Der Benutzer “root” darf für Samba nicht verwendet werden.
  • use sendfile = yes
    • Tuning Parameter, welcher die Systemlast senken soll.
  • min receivefile size = 16384
    • Tuning Parameter, mit dem man die SMBwriteX Aufrufe anpassen kann.
  • dead time = 30
    • Gibt die Zeit an, nach der inaktive Verbindungen beendet werden.
  • strict allocate = yes
    • Tuning Parameter, den Samba anweist Speicher vorab zu reservieren.

Die Beschreibungen sind nur marginal als Hinweis zu sehen. Wer tiefer dort einsteigen möchte, dem sei die Wiki des Samba Projektes ans Herz gelegt. Es gibt auch noch etliche weitere Parameter, mit dem man das Verhalten steuern kann. An dieser Stelle geht es nur um die Einrichtung eines einfachen Samba Servers.

2.3 Benutzer anlegen

Damit man auch auf den Samba Server zugreifen kann, müssen zuerst die entsprechenden Benutzer auch auf dem Linux System selber angelegt sein. Und auf dem Windows Rechner, der später auf diesen Samba zugreifen möchte, ebenfalls.

2.3.1 Linux Benutzer anlegen

Hier im Beispiel wird ein Benutzer mit dem Namen “samtest” angelegt und ein Password vergeben:

$ sudo useradd -m -s /bin/bash samtest
$ sudo passwd samtest

2.3.2 Samba Benutzer anlegen

Dieser Benutzer muss auch in die Samba Datenbank eingetragen werden. Da Samba eine eigene Passwortverwaltung hat, muss erneut ein Passwort vergeben werden. Dieses Passwort kann unabhängig vom Linux Passwort sein.

$ sudo smbpasswd -a samtest

2.4 Laufwerksfreigabe anlegen

Jetzt wird noch ein Pfad freigegeben, den ich in diesem Beispiel “testdir” genannt habe. Diese Bezeichnung ist dann eine neue Sektion, die in die Registry eingetragen wird. Analog würden diese Einträge ansonsten in die /etc/samba/smb.conf eingetragen:

$ sudo net conf setparm testdir "valid users" "samtest"
$ sudo net conf setparm testdir "path" "/download"
$ sudo net conf setparm testdir "available" "yes"
$ sudo net conf setparm testdir "browsable" "yes"
$ sudo net conf setparm testdir "public" "no"
$ sudo net conf setparm testdir "writeable" "yes"
$ sudo net conf setparm testdir "comment" "Testverzeichnis"
$ sudo net conf setparm testdir "printable" "no"
$ sudo net conf setparm testdir "guest ok" "no"
$ sudo net conf setparm testdir "create mask" "0644"
$ sudo net conf setparm testdir "directory mask" "0755"
$ sudo net conf setparm testdir "veto files" "/*lost+found*/"

Auch hier kann man sich die Konfiguration wieder anschauen:

$ sudo net conf list

Allerdings wird hier die gesamte Konfiguration angezeigt, also auch die globale Konfiguration. Und sollten weitere Freigaben vorhanden sein, werden diese ebenfalls ausgegeben. Möchte man sich aber nur diese eine Freigabe anschauen, dann einfach folgendes eingeben:

$ sudo net conf showshare testdir

Und man bekommt nur die Konfigurationseinträge für diese Freigabe angezeigt:

[testdir]
        path = /download
        available = yes
        browseable = yes
        guest ok = no
        read only = no
        comment = Testverzeichnis
        printable = no
        create mask = 0644
        directory mask = 0755
        veto files = /*lost+found*/
        valid users = samtest

Ich habe die Parameter wie folgt gewählt:

  • path = /download
    • Welcher Pfad des Samba Linux Filesystem freigegeben werden soll.
  • available = yes
    • Hier kann man die Freigabe deaktivieren, ohne die Freigabe zu löschen.
  • browseable = yes
    • Wenn diese Freigabe im automatisch Explorer gefunden werden soll, muss der Parameter aktiviert werden.
  • guest ok = no
    • Obwohl generell der Gastzugang deaktiviert ist, sollte dies bei der Freigabe zusätzlich ebenfalls angegeben werden
  • read only = no
    • Da auch schreibend zugegriffen werden kann, muss dieser Parameter deaktiviert werden.
  • comment = Testverzeichnis
    • Hier kann man der Freigabe einen Kommentar hinzufügen, der auch im Windows Explorer angezeigt wird.
  • printable = no
    • Wichtig nur für Druckerfreigaben (Spool Files), für normale Freigaben deaktivieren.
  • create mask = 0644
    • Datei Maske beim anlegen von neuen Dateien
  • directory mask = 0755
    • Verzeichnis Maske beim anlegen eines neuen Verzeichnisses.
  • veto files = /*lost+found*/
    • Dateien, die nicht in der Freigabe angezeigt werden sollen
  • valid users = samtest
    • Durch Komma getrennte Liste von Benutzern, die diese Freigabe nutzen dürfen.

3. Client einrichten

3.1 Freigaben anzeigen

Als erstes sollte man sich erst einmal die Freigaben anzeigen lassen:

$ sudo smbclient -L 192.168.59.132

Dieser Befehl zeigt alle Freigaben auf dem angegebenen Server an:

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (archvm, Samba 4.7.3)
        testdir         Disk      Testverzeichnis

3.1 Zugriff auf Freigabe

Mit dem Befehl smbclient hat man einen FTP-ähnliches Tool, die auf Samba Freigaben zugreifen kann. Damit kann man auch Dateien herunterladen und vieles weitere mehr. Die Syntax ähnelt auch dem FTP Protokoll:

$ sudo smbclient '\\192.168.59.132\testdir' -U samtest

Die Ausgabe sieht dann wie folgt aus. In dem Beispiel wurde eine Datei heruntergeladen:

Password for [WORKGROUP\samtest]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Sat Jan 20 14:26:25 2024
  ..                                  D        0  Sat Jan 20 14:26:25 2024
  hallo.txt                           A       10  Sat Jan 20 14:26:25 2024
  test.txt                            N        0  Sat Jan 20 14:19:29 2024

                56450188 blocks of size 1024. 41845464 blocks available
smb: \> mget hallo.txt
Get file hallo.txt? y
getting file \hallo.txt of size 11 as hallo.txt (10,7 KiloBytes/sec) (average 5,4 KiloBytes/sec)
smb: \> 

3.2 Freigabe mounten

Möchte man die Freigabe mounten, wird auf jeden Fall das Paket cifs-utils benötigt. Danach wird, entsprechende Parameter vorausgesetzt, eine Freigabe wie jedes andere Laufwerk eingehangen:

$ sudo mount --mkdir -t cifs //192.168.59.132/testdir /mnt/testdir -o username=samuser,password=samuser,workgroup=WORKGROUP,iocharset=utf8,uid=samuser,gid=1000

Der Parameter “--mkdir” gibt an, dass das lokale Verzeichnis, in der die Freigabe eingehangen werden soll, angelegt wird, falls nicht schon vorhanden. Gefolgt von “-t cfis” wird hier das Protokoll angegeben. Dann wird der Pfad der Netzwerkfreigabe, ähnlich wie bei Windows in der Form “//192.168.59.132/testdir” eingegeben gefolgt vom lokalen Pfad, wo diese Freigabe eingehangen werden soll, in diesem Beispiel “/mnt/testdir

Danach kommen mit “-o” noch einige Optionen, die jeweils mit Komma separiert sind:

  • username=samuser
    • Benutzername der Freigabe
  • password=samuser
    • Passwort der Freigabe, wird dieses nicht angegeben, kommt ein entsprechender Prompt nach dem Passwort beim mounten.
  • workgroup=WORKGROUP
    • Angabe der Arbeitsgruppe
  • iocharset=utf8
    • Gibt die Zeichencodierung an, die verwendet werden soll.
  • uid=samuser
    • Benutzer, mit denen die Dateien gemountet werden, wenn nicht angegeben wird “root” benutzt.
  • gid=1000
    • Gruppe, mit denen die Dateien gemountet werden, wenn nicht angegeben wird “root” benutzt.

4. Fazit

Mit wenigen Konfigurationsschritten kann man eine einfache Netzwerkfreigabe unter Samba einrichten. Auch ist das einhängen einer Samba oder auch Windows Freigabe unter Linux recht leicht möglich.

Samba kann natürlich wesentlich mehr. Es ist möglich, ein ganzes Domain-Controller System mit Samba aufzubauen. Wobei der Aufwand dann schon deutlich größer ist, und den Rahmen einer kurzen Anleitung sprengen würde. Auf der Projektseite des Samba Projektes sind, bei Interesse, tiefer gehende Informationen zu diesen Themen zu finden.

Wie man Arch Linux installiert, habe ich in dieser Anleitung zusammengefasst.


Quellen:

https://wiki.archlinux.org/title/samba
https://www.samba.org/
https://www.oreilly.com/openbook/samba/book/appc.pdf

0 Comments
Älteste
Neueste
Inline-Feedbacks
Alle Kommentare anzeigen
Nach oben scrollen