Zugriffsrechte auf gemeinsame Dateien für mehrere User mit bindfs festlegen

Ich stand an mehreren Stellen vor dem Problem, auf einen gemeinsamen Ordner und Dateien mit verschiedenen Benutzern zugreifen zu wollen. Aus Sicherheitsgründen sollten allerdings nicht alle Benutzer Lese- und Schreibrechte haben, sondern ich wollte die Rechte gerne feiner festlegen.

Anzeige:

Das Problem

Konkret hatte ich zwei Fälle.

  1. Lokale User sollten über SAMBA Shares lesend und schreibend auf die Files zugreifen können.
  2. Ein lokal installierter Webserver soll nur lesend auf die Dateien zugreifen können
  3. Ein externer Server soll über einen SSH Zugang lesen und schreiben können.

im zweiten Fall sollte

  1. ein Webserver lesend und schreibend auf ein Verzeichnis und Dateien zugreifen können
  2. ein weiterer Benutzer lesend und schreibend auf das selbe Verzeichnis und Dateien zugreifen.

Grundsätzlich lassen sich beide Fälle lösen, indem alle Benutzer die auf das Verzeichnis lesend und schreibend zugreifen können sollen in eine Benutzergruppe gepackt werden und diese als primäre Gruppe festgelegt wird. Dies war auch meine ursprüngliche Lösung.

Durch setzen der entsprechenden umask werden alle Dateien und Verzeichnisse beim Erstellen mit Lese- und Schreibrechten für die betroffenen Benutzer ausgestattet. Das Setzen des Lesezugriffs für alle Benutzer erlaubt es weiteren Benutzern auf die Dateien zugreifen zu können, ohne Schreibzugriff zu erhalten.

Leider habe ich die Lösung als unbefriedigend empfunden. Standardmäßig habe ich eine umask von 027 gesetzt, wobei sonstige Benutzer grundsätzlich weder Lese- noch Schreibrechte erhalten. Dies musste ich wieder aufweichen.
Außerdem herrscht im gemeinsamen Verzeichnis ein Wildwuchs an Dateien von verschiedenen Benutzern.
Durch das setzen einer gemeinsamen Standardgruppe, werden alle von den betroffenen Benutzern erstellte Dateien überall mit der gemeinsamen Gruppe erstellt und können dadurch auch überall von den betroffenen Usern gelesen bzw. geschrieben werden. Ich hätte das Recht allerdings gerne auf das eine, gemeinsame Verzeichnis beschränkt.

Generell habe ich das hantieren mit verschiedenen Dateirechten, Gruppen, umask usw. als unübersichtlich und chaotisch empfunden und habe mich mit der Lösung schlichtweg nicht wohlgefühlt.

Die Lösung

Durch Zufall bin ich auf eine Lösung gestoßen, welche mir sehr viel besser gefällt: bindfs

Mit bindfs lässt sich ein Verzeichnis an verschiedenen Stellen mit verschiedenen Berechtigungen mounten. Auf Wunsch werden alle in das Verzeichnis geschriebenen Dateien mit einem bestimmten User und bestimmten Rechten erstellt.

D.h.:

Anzeige:
  1. Jeder Benutzer sieht das Verzeichnis so als wäre es sein eigenes und mit den Rechten die dieser Benutzer benötigt. z.B. Eigentümer sftp:sftp
  2. In Wirklichkeit werden die Dateien aber mit den Rechten eines anderen Benutzers ins Dateisystem geschrieben. z.B. www-data:www-data
  3. Alle Dateien die außerhalb des gemeinsamen Verzeichnisses geschrieben werden, werden mit den normalen Rechten des Users geschrieben (z.B. im Homeverzeichnis).

Bindfs ist somit sehr flexibel, was das einstellen von Berechtigungen für einen gemeinsamen Mountpoint angeht. Realisiert wird dies durch die Benutzung von FUSE, was zwar sehr flexibel und bei mir bisher auch sehr zuverlässig ist, allerdings sehr viel weniger performat und mehr Last auf der CPU erzeugt als das direkte Schreiben ins Dateisystem.

Es macht also Sinn, dass der Benutzer der die Dateien ständig benutzt (z.B. der Webserver oder Samba) auch der tatsächliche Eigentümer der Files ist und auch direkt in das gemeinsame Verzeichnis schreibt.

Benutzer welche das Verzeichnis nicht ständig benutzen mounten das gemeinsame Verzeichnis über bindfs.

ein Beispiel

In diesem Beispiel wird ein gemeinsames Verzeichnis für die Benutzer samba und sftp erstellt, in welches beide Benutzer schreiben dürfen. Tatsächlich werden alle Dateien aber mit dem Benutzer samba ins Dateisystem geschrieben.

Installieren lässt sich bindfs unter Ubuntu / Debian aus den Paketquellen

sudo apt install bindfs

Dann kann der gemeinsame Ordner erstellt und die gewünschten tatsächlichen Rechte vergeben werden

sudo mkdir -p /mnt/samba/shares
sudo chown -R samba: /mnt/samba/shares

Als nächstes wird der Mountpoint für den zusätzlichen User erstellt.

sudo mkdir -p /mnt/sftp/samba
sudo chown -R sftp: /mnt/sftp/samba

Damit /mnt/samba/shares auch unter /mnt/sftp/samba mit den entsprechenden Rechten gemounted wird muss folgender Eintrag in die /etc/fstab hinzugefügt werden:

bindfs#/mnt/samba/shares /mnt/sftp/samba fuse force-user=sftp,force-group=sftp,create-for-user=samba,create-for-group=samba,chgrp-ignore,chown-ignore,chmod-ignore 0 0

Dadurch werden alle durch den Benutzer sftp erstellten Dateien tatsächlich mit dem Benutzer samba erstellt.

Test

zum testen erstellen wir mit jedem Benutzer eine Datei, jeweils im Verzeichnis welches diesem User gehört.
zuerst als User samba

Anzeige:
su samba
cd /mnt/samba/shares
touch testfile-samba.txt

dann als User sftp

su sftp
cd /mnst/sftp/samba
touch testfile-sftp.txt

und siehe da: In beiden Verzeichnissen erscheinen nun beide Dateien. Im Verzeichnis des Users samba mit diesem als Eigentümer und im Verzeichnis des Users sftp mit diesem als Eigentümer.

 

weitere Beispiele und die Dokumentation ist auf der Homepage des Projekts zu finden: http://bindfs.org/


Dieser Text ist lizensiert unter einer Creative Commons Namensnennung 4.0 International Lizenz.
Titelbild “löschen-ordner-icon-symbol-2013197” von Pixabay steht unter Creative Commons CC0

Anzeige:
Amazon Echo Spot, Intelligenter Lautsprecher und Bildschirm mit Alexa - Schwarz
Preis: EUR 129,99
(Stand von: 20.02.2019 3:46 - Details
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.
)
1 neu von EUR 129,990 gebraucht
  • Echo Spot wurde so entwickelt, dass es überall bei Ihnen zuhause hinpasst. Schauen Sie sich mit der 2. Generation unserer Fernfeld-Spracherkennung Ihre tägliche Videozusammenfassung an, zeigen Sie Songtexte, die Wettervorhersage oder To-do- und Einkaufslisten an, durchsuchen Sie Audible, hören Sie Hörbücher und vieles mehr. Allein mithilfe Ihrer Stimme - einfach fragen.
  • Echo Spot verbindet sich mit dem cloudbasierten Alexa Voice Service, um Musik abzuspielen, die Nachrichten vorzulesen, Fragen zu beantworten, Musikwecker zu stellen, Ihr Smart Home zu steuern und mehr.
  • Fragen Sie einfach nach einem Song, Künstler oder Genre und zeigen Sie mit Amazon Music Songtexte an. Außerdem können Sie Musik und Bücher von Spotify, TuneIn and Audible streamen.
  • Verwenden Sie die integrierten Lautsprecher oder verbinden Sie externe Lautsprecher über Bluetooth oder ein 3,5 mm-Stereokabel. Mit Multiroom Musik können Sie Musik auf Ihren Echo-Geräten in verschiedenen Räumen wiedergeben (verfügbar für Amazon Music, TuneIn und Spotify, Bluetooth wird nicht unterstützt).
  • Steuert kompatible Smart Home-Geräte. Bitten Sie Alexa Ihre Lampen einzuschalten, die Babykamera oder die Haustürkamera anzuzeigen. Außerdem können Sie Ihre Thermostate, Stecker und mehr bedienen.
  • Rufen Sie andere mit einem Echo-Gerät oder der Alexa App an und senden Sie ihnen Nachrichten, sprechen Sie per Videoanruf mit Familienmitgliedern und Freunden, die ein Echo Spot, Echo Show oder die Alexa App haben. Oder verbinden Sie sich schnell mit anderen Echo-Geräten bei Ihnen zuhause.
  • Dank Tausender Skills lernt Alexa ständig dazu und erhält neue Funktionen. Bitten Sie Alexa einfach ein Taxi oder eine Pizza zu bestellen, den Zugfahrplan abzurufen und mehr.

1 Kommentar


Die Angabe eines Namens oder einer Webseite ist optional. Weitere Informationen: siehe Datenschutzerklärung