Pi - Samba Share mounten

Aufgrund des begrenzten Speichers eines Raspberry PI ist ein Zugriff auf ein externes NAS via SMB nicht unvorteilhaft. Auf einem aktuellen Raspbian ist dies in wenigen Schritten erledigt.

Inhaltsverzeichnis:

 

 

1. Installation des SMB-Clients

Auf aktuellen Raspbian Versionen läuft der SMB-Client Dienst, welchen wir für den Zugriff auf das externe NAS benötigen bereits. Ansonsten lässt sich der Dienst wie folgt im Terminal installieren.

Zunächst aktualisieren Sie die Paketquellen. Ein Schritt, den Sie vor jeder Installation durchführen sollten.

>  sudo apt update

Jetzt installieren Sie den eigentlichen Netzwerkdienst

>  sudo apt install smbclient

 

 

2. Erstellung eines sog. Mount-Points

In diesem Schritt erstellen Sie ein Verzeichnis, in welches Sie später die Freigabe Ihres NAS-Laufwerkes einbinden (mounten) können. Die Grundinstallation des Raspberry bringt ein Verzeichnis mnt mit, welches Sie direkt unterhalb des root-Pfades finden (/mnt). Legen Sie unterhalb dieses Pfades ein Verzeichnis an.

sudo mkdir /mnt/VERZEICHNISNAME

Den Platzhalter VERZEICHNISNAME ersetzen Sie gegen den gewünschten Namen des Verzeichnisses.

 

 

3. Manuelle Einbindung der NAS-Freigabe

Binden Sie nun Ihr Freigabeverzeichnis auf dem NAS in das im vorherigen Schritt erzeugte lokale Verzeichnis ein. Für einen ersten Test können Sie dazu das folgende Kommando benutzen:

> sudo mount -t cifs -o user=BENUTZERNAME,password=KENNWORT,rw,file_mode=0777,dir_mode=0777 //IP_ADRESSE_NAS/FREIGABENAME /mnt/VERZEICHNISNAME/

Ersetzen Sie bitte die Platzhalter BENUTZERNAME und KENNWORT dabei gegen einen auf dem NAS-Laufwerk hinterlegten Benutzer, welcher auf den Platzhalter (das Verzeichnis) FREIGABENAME Zugriffsrechte besitzt. Den Platzhalter IP_ADRESSE_NAS ersetzen Sie bitte ebenfalls gegen die IP-Adresse Ihres NAS, gegebenenfalls auch durch den korrespondierenden DNS-Namen.

Die Parameter des obigen kurz erläutert:

 

-t cifs

Das Argument -t gibt dem System den Dateisystemtyp vor.

In diesem Fall cifs, also Common Internet File System, eine Implementierung des Server Message Block (SMB) Protokolls.

Zulässige Dateisystemtypen sind: adfs, affs, autofs, cifs, coda, coherent, cramfs, debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4, ramfs, reiserfs, romfs, squashfs, smbfs, sysv, tmpfs, ubifs, udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs

 -o user=BENUTZERNAME,password=KENNWORT Angabe des auf dem NAS registrierten Benutzer mit dem Kennwort mit Zugriff auf die Freigabe.
 rw Bindet das Dateisystem lesend und schreibend ein. Möglich wären auch die Optionen -r für lesend und -w für schreibend.
 file_mode=0777,dir_mode=0777 Die Optionen sorgen dafür, dass jeder Nutzer die Freigabe lesend und schreibend nutzen darf. Etwas genauer wird das weiter unten bei der Einbindung via fstab beschrieben.

 iocharset=utf8

 Erzwingt die Nutzung des Zeichensatzes UTF8. Es lassen sich alle installierten Zeichensätze (NLS) nutzen.
 //IP_ADRESSE_NAS/FREIGABENAME Eingabe des IP-Adresse des NAS-Laufwerks, gefolgt von der Freigabe,
z.B. //192.168.1.10/Public
 /mnt/VERZEICHNISNAME/ Legt den Mount-Punkt auf dem lokalen Datenträger fest. Der Pfad muss in der Dateistruktur existieren.

 

Weitere Informationen zum mächtigen Befehl mount, unter anderem zum Mounten von Laufwerken durch "einfache" Benutzer, erhalten Sie durch die Eingabe von man mount.

 

4. Definition von Mountpoints via /etc/fstab

Damit die Netzwerkfreigabe bei einem Neustart des Raspberry automatisch verbunden wird, dazu ist ein Eintrag in der Datei /etc/fstab notwendig. Da in dieser Datei nach Möglichkeit der Benutzername und das Kennwort nicht im Klartext erscheinen sollen, ist noch etwas Vorarbeit notwendig.

 

4.1. Erzeugen der Authentifikationsdatei

Die beim manuellen Mount verwendeten Benutzerdaten legen wir in einer versteckten Datei im Benutzerverzeichnis meines Linux-Benutzers ab. Der Name der Datei ist dabei frei wählbar. Im nachfolgenden Beispiel wird der Name .smbuser benutzt. Der Punkt sorgt dafür, dass die Datei mit dem einfachen Befehl ls oder mit einem graphischen Dateibrowser zur Auflistung des Verzeichnisinhaltes nicht gefunden wird. Der Befehl ls -a bringt die Datei an der Kommandozeile zum Vorschein. Auf dem Raspberry gehe ich vom Standardbenutzer pi aus, daher ist das Homeverzeichnis /home/pi.

> nano /home/pi/.smbuser

 

credentials file 001

Die Platzhalter BENUTZER, PASSWORD und DOMAIN sind zu ersetzen. Der Parameter domain kann entfallen, wenn der Server keiner Windows-Domäne bzw. einem Active-Directory angehört.

Aktuell ist die Datei .smbuser mit folgenden Dateirechten versehen:

-rw-r--r-- 1 pi pi 51 Okt 16 18:44 .smbuser

Zur Verhinderung des Lesens der Datei durch fremde Benutzer ist nun noch der folgende Befehl erforderlich:

> chmod 600 ~/.smbuser

Das Ergebnis sieht nun so aus

-rw------- 1 pi pi 51 Okt 16 18:44 .smbuser

Nun kann nur der Benutzer pi lesend und schreibend auf die Datei .smbuser zugreifen.

 

4.2. Bearbeiten der Datei fstab

Dazu rufen wir die Datei mit Administrationsrechten mit dem Editor nano mit folgendem Befehl auf:

> sudo nano -Bw /etc/fstab

 Kurze Erläuterung der benutzten Parameter:

-B (--backup) Beim Speichern wird die vorherige Version mit dem Suffix ~ als Sicherheitskopie gespeichert.
-w (--nowrap)

Verhindert den Umbruch von langen Einträgen

 

Fügen Sie nun die folgenden Zeilen am Ende der Datei fstab ein:

# SMB-Freigabe:

//IP_ADRESSE_NAS/FREIGABENAME /mnt/VERZEICHNISNAME/ cifs credentials=/home/BENUTZERVERZEICHNIS/AUTHDATEI 0 0 

Die in Großbuchstaben geschriebenene Platzhalter sind zu ersetzen. Im Beispiel könnte die Zeile dann wie folgt aussehen:

//192.168.1.10/Public /mnt/public cifs credentials=/home/pi/.smbuser 0 0 

 

Die gesamte Datei fstab auf einem Raspberry zum Vergleich:

Beispieldatei /etc/fstab

 

Die Freigabe kann nun von einem Benutzer mit root-Rechten gemounted werden:

> sudo mount /mnt/public

 

 

4.3. Simulierte Dateirechte

Wenn der Server ein Windows-Rechner ist, werden die UNIX-Erweiterungen nicht unterstützt. Da das Einbinden normalerweise root-Rechte erfordert (sonst via /etc/fstab), erhält nur der Benuzter root die Schreibrechte. Selbiges gilt auch, wenn auf dem Server Samba läuft und dort in der Konfiguration in der Datei /etc/samba/smb.conf die Zeile unix extensions = no (im Teil [global]) eingetragen ist.

Daher müssen durch die Angaben von UID (user id), GID (group id), FILE_MODE und DIR_MODE auf dem Client andere Rechte emuliert werden. Um die korrekten Angaben für die UID und GID zu erhalten, geben Sie an der Kommandozeile ein:

> id

Exemplarisch könnte die gekürzte Ausgabe wie folgt aussehen:

uid=1000(pi) gid=1000(pi)

 

Der zugehörige fstab-Eintrag in unserem Beispiel ändert sich damit wie folgt:

//192.168.1.10/Public /mnt/public cifs credentials=/home/pi/.smbuser,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0

 

Der Benutzer mit root-Rechten kann die Freigabe nun mit dem nachfolgenden Befehl mounten.

> sudo mount /mnt/public

Der Unterschied zum ersten Beispiel ist, dass nun die Benutzerrechte emuliert werden, d.h. alle Dateioperation werden als Benutzer pi mit der Gruppe pi auf die Freigabe geschrieben.

 

4.4. Mounten durch den Benutzer

Damit ein Benutzer die Freigabe ohne root-Rechte einbinden kann, wird der Eintrag in der Datei /etc/fstab wie folgt verändert:

//192.168.1.10/Public /mnt/public cifs users,credentials=/home/pi/.smbuser,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0

 Das eigentliche Mouting geschieht nun ohne root-Rechte via:

> mount /mnt/public

 

 

5. Automount

Unter "Automount" wird das Einbinden von Laufwerken und Freigaben direkt beim Systemstart verstanden. Unterschieden wird beim Automount zwischen dem automatischen Einbinden für den persönlichen Benutzer oder alle Benutzer.

 

5.1. Automount für alle Benutzer

Sofern beim Eintrag in der Datei /etc/fstab die Option noauto nicht verwendet wurde, der benutzte Mountpoint im Besitz von root ist und die Netzwerkverbindung beim Start bereits zur Verfügung stand, dann kann die Freigabe automatisch allen Benutzern zur Verfügung gestellt werden.

Da die Netzwerkverbindung beim Start häufig erst etwas später zur Verfügung steht, kann man die Ausführung des Mouting mit dem einfachen Befehl sleep etwas verzögern. An dieser Stelle sei gesagt, dass dies keine wirklich zuverlässige Möglichkeit ist, da das wirkliche Vorhandensein der Netzwerkverbindung nicht geprüft wird.

Für eine einfache automatische Einbindung editieren Sie die Datei /etc/rc.local, indem Sie vor dem Kommando exit 0 die folgenden Zeilen einfügen:

sleep 10

mount -a

Die Zahl 10 hinter dem Kommando sleep wird in Sekunden angegeben und muss von Ihnen so angepasst werden, dass die Netzwerkverbindung zur Verfügung steht. Der Befehl mount -a bindet alle Freigaben ein, die nicht mit der Option noauto gekennzeichnet wurden.

Für ein professionelles Automounting von Freigaben müssen Sie ein sog. "Post-Connection-Script" erstellen. Das Verfahren wird hier allerdings nicht beschrieben.

 

5.2. Automount für einen bestimmten Benutzer

Im Gegensatz zum Automount für alle Benutzer ist dieser Weg deutlich einfacher. In den gängigen graphischen Oberflächen GNOME, KDE oder XFCE legen Sie einfach einen Eintrag im jeweiligen Bereich Startprogramme an, fügen Ihrem Mountpoint in der Datei fstab die Option noauto hinzu und verändern den Mountpoint so, dass der betreffende Benutzer dessen Eigentümer ist. Dann erstellen Sie ein kurzes Skript, machen es ausführbar und binden es in den Autostart der graphischen Oberfläche ein.

 

5.2.1. Autostart Ordner der graphischen Oberflächen
GNOME System -> Einstellungen -> Startprogramme
KDE Systemeinstellungen -> Erweitert -> Autostart
XFCE Einstellungen -> Alle Einstellungen -> Autostarted apps
LXDE (Raspian) ~/.config/lxsession/LXDE-pi/autostart

 

 

5.2.2. Erstellung des Automount-Skripts

Erstellen Sie zunächst den Mountpoint in der Datei /etc/fstab an einem Ort, dessen Eigentümer der Benutzer ist. Verwenden Sie die Optionen noauto und users. Im Beispiel sähe der vollständige Mountpoint dann so aus:

//192.168.1.10/Public /home/pi/mnt/public cifs noauto,users,credentials=/home/pi/.smbuser,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0

Legen Sie nun das Verzeichnis mnt unterhalb des Homeverzeichnisses /home/pi:

> mkdir /home/pi/mnt

Legen Sie das Verzeichnis public für den Mountpoint der Freigabe an:

> mkdir /home/pi/mnt/public

 

Im nächsten Schritt erstellen Sie ein Skript mit einem frei wählbaren Namen, z.B. mountvol.sh:

Das Skript legen Sie bitte an einem Ort innerhalb des Homeverzeichnisses des Benutzers ab, z.B. innerhalb von /home/pi:

> nano /home/pi/mountvol.sh

 

mountvol.sh

#! /bin/sh
#
mount /home/pi/mnt/public

 

Mit folgendem Kommando machen Sie die Datei ausführbar:

> chmod +x /home/pi/mountvol.sh

 

 

5.2.3. Einbindung des Skripts in den Autostart (Raspian)

Im letzten Schritt folgt nun die Einbindung in den Autostart der graphischen Oberfläche LXDE des Raspberry.

> nano ~/.config/lxsession/LXDE-pi/autostart

lxde autostart

Fügen Sie folgende Zeile in die Datei ein:

@lxterminal -e /home/pi/mountvol.sh

 Speichern Sie die Datei und starten den Raspberry neu.