Eine Samba-Freigabe erstellen

Alessio, Peter Lilley, Petr Bokoc Version F32 Last review: 2020-12-01

Samba ermöglicht Windows- und anderen Clients die Verbindung zu Dateifreigabeverzeichnissen auf Linux-Rechnern. Es implementiert das Server Message Block (SMB)-Protokoll. Diese Anleitung beschreibt die Einrichtung eines freigegebenen Dateiverzeichnisses auf einem Fedora-Rechner, auf das andere Computer im lokalen Netzwerk zugreifen können.

Samba installieren und aktivieren

Die folgenden Befehle installieren Samba und konfigurieren es so, dass es über systemctl ausgeführt wird. Außerdem wird die Firewall so eingestellt, dass der Zugriff auf Samba von anderen Computern erlaubt ist.

$ sudo dnf install samba
$ sudo systemctl enable smb --now
$ firewall-cmd --get-active-zones
$ sudo firewall-cmd --permanent --zone=FedoraWorkstation --add-service=samba
$ sudo firewall-cmd --reload

Freigabe eines Verzeichnisses in /home

In diesem Beispiel geben Sie ein Verzeichnis innerhalb Ihres Home-Verzeichnisses frei, auf das nur Ihr Benutzer Zugriff hat.

Samba verwendet nicht die Betriebssystembenutzer zur Authentifizierung. Daher muss Ihr Benutzerkonto in Samba dupliziert werden. Wenn Ihr Konto auf dem Host beispielsweise jane lautet, muss der Benutzer jane auch in Samba angelegt werden. Die Benutzernamen müssen übereinstimmen, die Passwörter können jedoch unterschiedlich sein.

Erstellen Sie einen Benutzer namens jane in Samba:

$ sudo smbpasswd -a jane

Erstellen Sie ein Verzeichnis, das als Freigabe für jane dienen soll, und legen Sie den korrekten SELinux-Kontext fest:

$ mkdir /home/jane/share
$ sudo semanage fcontext --add --type "samba_share_t" "/home/jane/share(/.*)?"
$ sudo restorecon -R ~/share

Die Samba-Konfiguration befindet sich in der Datei /etc/samba/smb.conf. Durch Hinzufügen des folgenden Abschnitts am Ende der Datei wird Samba angewiesen, für jane eine Freigabe namens „share“ im soeben erstellten Verzeichnis /home/jane/share einzurichten.

[share]
        comment = My Share
        path = /home/jane/share
        writeable = yes
        browseable = yes
        public = yes
        create mask = 0644
        directory mask = 0755
        write list = user

Starten Sie Samba neu, damit die Änderungen wirksam werden:

$ sudo systemctl restart smb

Freigabe eines Verzeichnisses für viele Benutzer

In diesem Beispiel geben Sie ein Verzeichnis (außerhalb Ihres Home-Verzeichnisses) frei und erstellen eine Gruppe von Benutzern, die Lese- und Schreibrechte für die Freigabe haben.

Beachten Sie, dass ein Samba-Benutzer auch Systembenutzer sein muss, um die Dateisystemberechtigungen zu berücksichtigen. In diesem Beispiel wird eine Systemgruppe myfamily für zwei neue Benutzer, jack und maria, erstellt.

$ sudo groupadd myfamily
$ sudo useradd  -G myfamily jack
$ sudo useradd  -G myfamily maria

Sie könnten diese Benutzer ohne Systempasswort anlegen. Dadurch würde der Zugriff auf das System über SSH oder lokale Anmeldung verhindert.

Fügen Sie jack und maria zu Samba hinzu und erstellen Sie deren Passwörter:

$ sudo smbpasswd -a jack
$ sudo smbpasswd -a maria

Richten Sie das freigegebene Verzeichnis ein:

$ sudo mkdir /home/share
$ sudo chgrp myfamily /home/share
$ sudo chmod 770 /home/share
$ sudo semanage fcontext --add --type "samba_share_t" "/home/share(/.*)?"
$ sudo restorecon -R /home/share

Jede Freigabe wird durch einen eigenen Abschnitt in der Datei /etc/samba/smb.conf beschrieben. Fügen Sie diesen Abschnitt am Ende der Datei hinzu:

[family]
        comment = Family Share
        path = /home/share
        writeable = yes
        browseable = yes
        public = yes
        valid users = @myfamily
        create mask = 0660
        directory mask = 0770
        force group = +myfamily

Erläuterung des Vorstehenden:

  • valid users: Nur Benutzer der Gruppe family haben Zugriffsrechte. Das @ kennzeichnet einen Gruppennamen.

  • force group = +myfamily: Dateien und Verzeichnisse werden mit dieser Gruppe anstelle der Benutzergruppe erstellt.

  • create mask = 0660: Die Dateien in der Freigabe werden mit Berechtigungen erstellt, die es allen Gruppenbenutzern ermöglichen, von anderen Benutzern erstellte Dateien zu lesen und zu schreiben.

  • directory mask = 0770: wie zuvor, aber für Verzeichnisse.

Starten Sie Samba neu, damit die Änderungen wirksam werden:

$ sudo systemctl restart smb

Samba-Benutzer verwalten

Ein Samba-Benutzerpasswort ändern

Wichtig: Die Passwörter für den Systembenutzer und den Samba-Benutzer können unterschiedlich sein. Der Systembenutzer wird benötigt, um die Dateisystemberechtigungen zu verwalten.

$ sudo smbpasswd maria

=== Einen Samba-Benutzer entfernen

$ sudo smbpasswd -x maria

Falls Sie den Systembenutzer nicht benötigen, entfernen Sie ihn ebenfalls:

$ sudo userdel -r maria

== Fehlerbehebung und Protokolle

Die Samba-Protokolldateien befinden sich in /var/log/samba/

$ sudo tail -f /var/log/samba/log.smbd

Sie können die Ausführlichkeit erhöhen, indem Sie Folgendes zum Abschnitt [global] der Datei /etc/samba/smb.conf hinzufügen:

[global]
        loglevel = 5

Um die Syntax der Konfigurationsdatei /etc/samba/smb.conf zu überprüfen, verwenden Sie den Befehl testparm. Beispielausgabe:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Um die aktuellen Samba-Verbindungen anzuzeigen, verwenden Sie den Befehl smbstatus. Beispielausgabe:

Samba version 4.12.3
PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing
----------------------------------------------------------------------------------------------------------------------------------------
7259    jack         jack         192.168.122.1 (ipv4:192.168.122.1:40148)  SMB3_11           -                    partial(AES-128-CMAC)

Service      pid     Machine       Connected at                     Encryption   Signing
---------------------------------------------------------------------------------------------
family       7259    192.168.122.1 Fri May 29 14:03:26 2020 AEST    -            -

No locked files

=== Probleme beim Zugriff auf die Freigabe

Einige Dinge, die Sie überprüfen sollten, wenn Sie nicht auf die Freigabe zugreifen können.

  1. Stellen Sie sicher, dass der Benutzer sowohl als Systembenutzer als auch als Samba-Benutzer existiert + Suchen Sie maria in der Samba-Datenbank: + [source, console]

$ sudo pdbedit -L | grep maria

maria:1002:

+ Bestätigen Sie, dass maria auch als Systembenutzer existiert.

+

$ cat /etc/passwd | grep maria

maria:x:1002:1002::/home/maria:/bin/bash

+ . Prüfen Sie, ob das freigegebene Verzeichnis und die Unterverzeichnisse den korrekten SELinux-Kontext haben.

+

$ ls -dZ /home/share

unconfined_u:object_r:samba_share_t:s0 /home/share

+ . Prüfen Sie, ob der Systembenutzer die Zugriffsberechtigung für das freigegebene Verzeichnis besitzt.

+

$ ls -ld /home/share

drwxrwx---. 2 root myfamily 4096 May 29 14:03 /home/share

+ In diesem Fall sollte der Benutzer der Gruppe myfamily angehören.

  1. Prüfen Sie in der Konfigurationsdatei /etc/samba/smb.conf, ob der Benutzer und die Gruppe über die entsprechenden Zugriffsrechte verfügen.

    [family]
            comment = Family Share
            path = /home/share
            writeable = yes
            browseable = yes
            public = yes
            valid users = @myfamily
            create mask = 0660
            directory mask = 0770
            force group = +myfamily

    In diesem Fall sollte der Benutzer der Gruppe myfamily angehören.

=== Probleme beim Schreiben in die Freigabe

  1. Prüfen Sie in der Samba-Konfigurationsdatei, ob der Benutzer/die Gruppe Schreibberechtigungen besitzt. + [source, conf]

[family]
        comment = Family Share
        path = /home/share
        writeable = yes
        browseable = yes
        public = yes
        valid users = @myfamily
        create mask = 0660
        directory mask = 0770
        force group = +myfamily

+ In diesem Beispiel sollte der Benutzer der Gruppe myfamily angehören.

  1. Überprüfen Sie die Berechtigungen des Freigabeverzeichnisses.

    $ ls -ld /home/share
    
    drwxrwx---. 2 root myfamily 4096 May 29 14:03 /home/share

    Dieses Beispiel setzt voraus, dass der Benutzer Teil der Gruppe myfamily ist, die über Lese-, Schreib- und Ausführungsberechtigungen für das Verzeichnis verfügt.