Raspberry Pi: Dateifreigabe im Netzwerk

Möchte man Daten einfach vom Windows Rechner auf den Raspberry verschieben, lohnt es sich einen Samba Server zu installieren. Man kann dann einen Ordner für das Netzwerk freigeben, worauf dann angemeldete Benutzer zugreifen können. Man kann also ein rudimentäres NAS (Network Attached Storage, Netzwerk angeschlossener Speicher) ohne Webinterface aufbauen um zum Beispiel einen Medienserver mit Medien zu versorgen oder als Backup-Lösung.

Samba installieren leicht gemacht!

Samba zu installieren, ist nicht wirklich schwer, die Konfiguration dagegen erfordert ein wenig Kenntnis. Zum Installieren gibt man folgende Befehlskette in die Bash ein:

sudo apt-get -y update && sudo apt-get -y install samba samba-common-bin

Dateifreigabe erstellen

Zuerst erstellt man, wenn nötig, den entsprechenden Ordner, der freigegeben werden soll. Ich erstelle in meinem Beispiel zwei Ordner auf meinem eingebundenen USB-Stick. Dazu führe ich den Befehl sudo mkdir /media/usb01/videos /media/usb01/music aus. Dieser erstellt mir jetzt zwei Ordner namens videos und music.

Die Ordner sollen mehr oder weniger von der Freigabe aus dem Netzwerk beschrieben werden, daher erstelle ich einen neuen Benutzer der nur für genau diese Aufgabe da ist. Dazu gebe ich sudo adduser --no-create-home --disabled-password --disabled-login shareuser in die Bash ein. Nach Ausfüllen der Accountinformationen, die ich einfach mit Enter weg drücke, ist der Benutzer shareuser nun ohne Home-Verzeichnis und mit deaktivierten Passwort und deaktivierten Login erstellt.

Zu guter Letzt gebe ich shareuser die Owner-Rechte über die eben angelegten Ordner. Der Befehl sudo chown shareuser:shareuser /media/usb01/music/ /media/usb01/videos/ erledigt dies.

Nun kommen wir zur Konfiguration der Freigabe. Dazu legt man mit sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.save vorsichtshalber eine Sicherungskopie an. Anschließend öffnet man mit sudo nano /etc/samba/smb.conf die Konfigurationsdatei im Nano-Editor.

In der Konfigurationsdatei sucht man nun mit [STRG]+[W] nach security. Der Eintrag # security = user wird in security = user umgeändert. Damit muss sich der Anwender am Share anmelden, bevor er es nutzen darf. Es gibt auch noch die Möglichkeit domain zu verwenden, wenn man den Samba-Server in eine Windows-Domäne eingliedert.

Nun suchen wir nach [homes]. Alle Einträge werden mit # auskommentiert. Würde man dies nicht machen, würde das Home-Verzeichnis des angemeldeten Benutzers als Freigabe erscheinen. Dies will man aber normalerweise nicht. Möchte man Daten dennoch in das Home-Verzeichnis verschieben lässt man die Einträge wie sie sind. Mit [STRG]+[K] kann man die Einträge auch komplett entfernen.

Das gleiche machen wir mit den darauf folgenden Einträgen [printers] und [print$]. Das sieht bei mir nun so aus:

smb.conf_homeDie Einträge mit ; sind ebenfalls auskommentiert und müssen daher nicht mit einer # versehen werden.

Nun kommen wir zu den eigentlichen Freigaben. Dazu scrollen wir mit den Pfeiltasten ganz nach unten. Dort gebe ich nun für beide Shares folgende Daten an:

[Videos]
comment = Video folder for Mediaserver
path = /media/usb01/videos
writable = yes
force user = shareuser

[Music]
comment = Music folder for Mediaserver
path = /media/usb01/music
writable = yes
force user = shareuser
valid users = Skeleter

Kurz erklärt:
[Name] – Der Freigabename
comment = – Kommentarzeile
path = – Der entsprechende Pfad zum freizugebenden Ordner
writable = yes – Schreibzugriff auf dem Share, ansonsten können angemeldete Benutzer nicht schreibend zugreifen.
force user = shareuser – Wird verwendet, damit alle Benutzer als der Benutzer shareuser auf dem Ordner argieren. Würde dies nicht angegeben, könnte zum Beispiel Benutzer X nicht Daten von Benutzer Y löschen, da verschiedene Besitzrechte für die Dateien vorhanden sind.
valid users = – Bestimmt welche Benutzer auf die Freigabe zu greifen dürfen. Fehlt der Eintrag dürfen alle Samba-Nutzer zugreifen. Mit @NAME können Gruppen berechtigt werden, wobei NAME hier mit dem jeweiligen Name der zu berechtigenden Gruppe ausgetauscht werden muss.

Die Daten ändert ihr entsprechend euren Anforderungen ab.

Hinweis: Auf einem NTFS-Datenträger kann jeder Benutzer alles machen. Alle Dateien und Ordner werden mit Vollzugriff berechtigt. Ein User shareuser sowie der Eintrag force user = shareuser in der Konfigurationsdatei sind dann nicht nötig.

Mit [STRG]+[O] speichern wir in Nano die Datei und mit [STRG]+[X] verlassen wir den Editor

Als nächstes benötigt man den Benutzeraccount, der auf die Shares zugreifen kann. Dazu ein kleiner Hinweis. Wenn ihr den gleichen Benutzernamen wie in Windows erstellt mit dem gleichen Passwort das ihr in Windows verwendet müsst ihr die Anmeldedaten nicht eingeben. Windows versucht es automatisch mit den eigenen Anmeldeinformationen und sobald die passen könnt ihr auf die Shares ohne weitere Störungen zugreifen. Ansonsten kommt halt die Abfrage.

Ich erstelle für mich also wieder mit dem Befehl sudo adduser --no-create-home --disabled-password --disabled-login --force-badname Skeleter einen Benutzer. Achtet auf die Groß- und Kleinschreibung. Die muss stimmen, wenn ihr die Windows-Anmeldedaten mit verwenden wollt.
–force-badname taucht in dem Befehl auf, da der Useraccount Skeleter am Anfang groß geschrieben ist und das nicht Linux-Standard ist. Normalerweise wird alles klein geschrieben.

Nachdem alle Accountinformationen angegeben wurden, führt man nun noch sudo smbpasswd -a Skeleter aus. Damit bekommt der Unix-Account Skeleter ein Samba-Passwort und wird in die Liste der Samba-User eingetragen. Das Passwort kann das Gleiche wie beim Anmelden am Computer sein, dennoch wird dort getrennt. In der Abfrage trage ich das Passwort ein, welches ich bei Windows verwende. Und fertig. Wenn ich nun in meinem Windows Explorer in der Adresszeile \\192.168.1.9\ eintrage sehe ich die verfügbaren Shares. Ihr tragt natürlich eure IP-Adresse bzw. euren Hostname ein.

Es gibt eine Möglichkeit eine Art Netzwerk-Papierkorb zu erstellen, allerdings habe ich mich damit nicht beschäftigt. Für jene die es interessiert, besucht mal http://wiki.ubuntuusers.de/Samba_Server/smb.conf#Netzwerk-Papierkorb.

Windows-Freigabe in Linux einbinden

Was in die eine Richtung geht, funktioniert auch in die Andere. Und dazu muss man Samba nicht installieren sondern benötigt nur den mount-Befehl, welchen ich in dem Artikel Raspberry Pi: Externe Datenspeicher einbinden bereits erklärt habe. Will man beispielsweise die Freigabe \\Skeleter-PC\Media auf dem Raspberry verfügbar machen, erstellt man zuerst ein Ordner für den Mountpoint unter /mnt/ oder /media/.

Ich habe mir diesmal einen Ordner unter /mnt/ mit dem Befehl sudo mkdir /mnt/skeleter-media erstellt. Hat man dies erledigt führt man für das genannte Beispiel folgenden Befehl aus:

sudo mount -t cifs //Skeleter-PC/Media /mnt/skeleter-media -o user=Skeleter

Nach der korrekten Eingabe des Passworts ist das Share nun an skeleter-media gebunden und kann verwendet werden. Achtet auf Groß- und Kleinschreibung!

Mit umount /mnt/skeleter-media kann das Netzlaufwerk wieder entfernt werden. Man kann dies natürlich über die fstab-Datei wieder automatisch einbinden lassen. Dazu wird dann folgende Zeile benötigt, die mit einem Editor wie Nano in die Datei hinzugefügt wird:

//Skeleter-PC/Media  /mnt/skeleter-media  cifs  username=Skeleter,password=******,defaults  0  0

Das Problem ist hier, dass das Passwort für jeden lesbar eingetragen wird. Möchte man dies verhindern kann man eine Datei erstellen, welche die Anmeldeinformationen unterhält aber nicht von jedem gelesen werden kann. Dazu erstellt man mit nano .smbcredentials eine neue versteckte Datei. Der Punkt vor dem Dateinamen macht diese Datei versteckt. Der Name der Datei kann beliebig sein. In die Datei schreibt man nun untereinander die Anmeldedaten rein.

username=Skeleter
passwort=******

Nun müssen die Rechte verändert werden, so dass in unserem Fall nur noch die Benutzer root und pi auf die Datei zugreifen können. Dazu führt man sudo chmod 600 .smbcredentrials aus. Damit kann offiziell nur noch pi auf die Datei zugreifen. Root kann alles und kann aus diesem Grund drauf zugreifen.

Zum Schluss wird die Zeile in fstab in folgende Zeile abgeändert:

//Skeleter-PC/Media  /mnt/skeleter-media  cifs  credentials=/home/pi/.smbcredentials,defaults  0  0

Je nachdem wo die Datei gespeichert wird, sieht der Pfad entsprechend anders aus.

Dies ist meiner Meinung nach aber auch keine wirklich sichere Variante. Außerdem kann offensichtlich nur der Benutzer root vollständig auf die Dateien zugreifen. Alle anderen Anwender haben nur Leserechte.

Es ist aber wahrscheinlich so wieso der seltenere Fall das ein Linux Rechner Zugriff auf ein Windows Shares benötigt. Zur Vervollständigung wollte ich dies hier allerdings auch kurz mit anreißen.

12 Gedanken zu “Raspberry Pi: Dateifreigabe im Netzwerk

  1. Hallo,
    wie bekomme ich es denn hin, dass ich von Windows auch auf einen Raspberry Ordner etwas schreiben kann? Zur Zeit kann ich nur die Daten herunterziehen.

    MfG
    Johannes

    • In dem du für jeden User die Berechtigung auf dem Ordner freigibst. Das macht aber viel Arbeit, daher habe ich valid User verwendet, um den Zugriff zu begrenzen und stattdessen auf einen allgemeinen Anwendungsaccount zurückgegriffen.

  2. Das Anlegen von “shareuser” verlief planmäßig. Anlegen, Enter/Enter/Enter.

    Später jedoch:

    Statt des Anlegens schlägt dies mit leerzeichen versetzter Namen wohl fehl,
    dieser soll laut Artikel allerdings mit dem des Windows-PCs übereinstimmen.

    sudo adduser –no-create-home –disabled-password –disabled-login –force-badname “Vor- Nachname”
    > … [user “Vor-” does not exist.]

    Vorausgesetzt natürlich, Windows 7 soll unberührt bleiben:
    Wie teile ich dem Terminal nun also das Leerzeichen im mit?

    • Eine ausgezeichnete Frage, meine Anleitung bezieht sich auf Einwortnamen. Ich würde es mit Name\ hier, also \ , probieren. Genau kann ich es leider aber auch nicht sagen, ich müsste mich auch belesen. Leerzeichen-Namen sind eh eher schlecht für die Administration, das macht man normalerweise nicht.

      • Möglicherweise findet jemand eines Tages eine Antwort,
        um sie uns hier mitzuteilen. Interessant wäre es ja eh…

        Ich wiederholte den Vorgang – nebst eines neu’angelegten Windows-Nutzers.
        Dabei ging ich sehr präzise, nahezu identisch vor – aber:

        Seitens des raspPI scheint alles zu klappen, bis mein geteilter Ordner sogar
        unter Windows im Netzwerk auftaucht.
        Versuche ich dann, darauf zu gelangen, wird mit “Access denied.” erstmal nach
        username/password gefragt > eingeben > lädt rum, meint dann aber plötzlich
        “network name (or path) not found” wohingegen der Klick auf die Fehlerdiagnose
        klar zeigt: “permission denied”. Ideen?

  3. Wieso legst du einmal einen Benutzer mit dem Namen “shareuser” und einmal einen mit Namen “Skeleter” an? Reicht nicht einer der beiden?

    • shareuser ist der Linux-Benutzer mit dem Samba auf den Ordner zugreift. Skeleter ist der Samba-Benutzer mit dem man dann Schlussendlich als Alias shareuser drauf zugreift.

      Man kann die Berechtigungen natürlich durchaus weit verzweigter machen und jedem Benutzer verschiedene Berechtigungen geben. Ich habe mit shareuser allerdings eine relativ schnelle Variante um mit allen Samba-Usern die gleichen Rechte zu haben. Somit muss man sich nicht mit den Linux-Rechten auseinandersetzen, sondern kann das alles an einem Ort über die Samba Config machen.

      Ein wenig wie die Freigabe- und NTFS-Berechtigungen bei Windows, welche ebenfalls getrennt voneinander betrachtet werden müssen.

      Um es in die Windows-Welt zu übertragen. Ich habe jedem Zugriff auf den Ordner über das Filesystem gegeben, kürze die entsprechenden Rechte aber dahingehend, dass nicht jeder auf der Freigabe arbeiten kann. Nicht die sauberste Art und Weise, aber eine Schnelle.

  4. Pingback: Raspberry Pi: MiniDLNA Server installieren | LierschIT

  5. Pingback: JDownloader als Docker Container bereitstellen | LierschIT

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert