Samba - Erstellen Sie Unterverzeichnisfreigaben mit eigenen Berechtigungen

9

Ich habe eine Samba-Freigabe, die viele Ordner wie diesen enthält:

share
  - folderA
  - folderB
  - folderC
  - folderD

Es gibt ungefähr 20 Benutzer, die auf diese Freigaben zugreifen. Jeder Benutzer kann individuell auf einige der Verzeichnisse zugreifen, z. B. kann Ben auf Ordner A und Ordner C zugreifen, nicht jedoch auf Ordner B und Ordner D. Jenny kann auf Ordner B und Ordner C zugreifen und so weiter.

Ich möchte nicht, dass die Benutzer jeden Ordner mounten, den sie benötigen. Ich möchte, dass sie den Ordner "share" mounten, der alle Unterordner enthält. Der Zugriff wird dann durch Festlegen der Linux-Berechtigungen eingeschränkt.

Ich habe für jedes Unterverzeichnis eine Gruppe erstellt und die Benutzer zu diesen Gruppen hinzugefügt. Die Zugriffskontrolle funktioniert perfekt für vorhandene Dateien. Wenn ein Benutzer eine Datei in einem Unterverzeichnis erstellt, wird dies jedem anderen Benutzer verweigert, der über die Berechtigung zum Lesen / Schreiben in diesem Verzeichnis verfügt. Um dies zu lösen, habe ich mit der Samba-Maskierung herumgespielt, kann sie aber nicht zum Laufen bringen.

Mein Samba-Conf sieht folgendermaßen aus:

guest ok = no

[global]
workgroup = WORKGROUP
security  = user
encrypt passwords = yes

[Share]
path        = /var/samba
valid users = @everybody
read only   = no
writeable   = yes

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderA

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderB

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderC

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderD

Offensichtlich ist jeder Benutzer in der Gruppe jeder, sodass er die Freigabe mit den Unterverzeichnissen bereitstellen kann. Der Zugriff für jedes Unterverzeichnis funktioniert einwandfrei. Aber wenn Ben eine Datei in Ordner C erstellt, erhält die Datei die Dateiberechtigungen -rwxr - r--, aber es sollte -rwxrwx --- sein

Ich denke, die Freigaben für die einzelnen Ordner funktionieren überhaupt nicht, weil ich versucht habe, beschreibbar = nein und schreibgeschützt = ja zu setzen, um es zu testen. Smbd und nmbd neu gestartet und die Netzwerkfreigabe erneut bereitgestellt (in Windows 10). Die Benutzer konnten Dateien erstellen und ihre eigenen ändern.

Dies läuft auf einem Himbeer-Pi mit Himbeer. Die Festplatte mit den Dateien wird als ext4 formatiert und über fstab gemountet.

Soner
quelle
Um die gewünschten Zugriffsrechte auf Dateien zu erzwingen, verwenden Sie die force create mode = 770Anweisung im folderCAbschnitt Ihrer Konfiguration.
Oleg Bolden
Danke, das hat das Problem eigentlich nicht gelöst, aber ich habe festgestellt, dass ich Leerzeichen in den Pfaden meiner echten smb.conf hatte: [folderA] path = / var / samba / einige Ordner mit Leerzeichen. Ich habe dieses Problem gelöst, indem ich den Pfad mit "(" / var / samba / some Ordner mit Leerzeichen ") eingeschlossen habe. Die Einstellungen im Absatz [OrdnerA] werden nur verwendet, wenn der Benutzer [OrdnerA] direkt bereitstellt, die Einstellungen jedoch nicht Wird verwendet, wenn der Benutzer [Freigabe] bereitstellt und in Ordner A navigiert. Die Einstellungen von [Freigabe] werden für Ordner A verwendet. Wie kann ich die [Freigabe] -Einstellungen für Ordner A umgehen, ohne Ordner A direkt zu mounten, aber über [Freigabe] darauf zuzugreifen?
soner

Antworten:

5

Versuchen Sie diese Konfiguration (für Freigabeabschnitte):

[Share]
path        = /var/samba
valid users = @everybody
force group = +everybody
writeable   = yes
create mask = 0660
force create mode = 0110
directory mask = 0770

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
force group = +users_folderA
browseable = no

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
force group = +users_folderB
browseable = no

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
force group = +users_folderC
browseable = no

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
force group = +users_folderD
browseable = no

Vergessen Sie nicht, die Konfiguration zu überprüfen und Samba neu zu starten:

# testparm
# service smbd restart
# service nmbd restart

Berechtigungen festlegen:

chown root:everybody /var/samba
chmod 770 /var/samba
chown root:users_folderA /var/samba/folderA
chmod 2770 /var/samba/folderA
chown root:users_folderB /var/samba/folderB
chmod 2770 /var/samba/folderB
chown root:users_folderC /var/samba/folderC
chmod 2770 /var/samba/folderC
chown root:users_folderD /var/samba/folderD
chmod 2770 /var/samba/folderD

Auf diese Weise ist kein direkter Zugriff auf interne Ordner zulässig. Darüber hinaus sind sie überhaupt nicht sichtbar und können nur über den übergeordneten Ordner aufgerufen werden.

Oleg Bolden
quelle
Danke, das hat funktioniert. Jetzt haben wir ein weiteres Problem, dass Excel 2016 keine Dateien mit mehr als 13 KB in Samba speichern kann. Aber das ist ein anderes Thema. Vielen Dank für Ihre Hilfe!
Soner