Endlich verstehen: Samba-Rechtevergabe
Wer blickt denn bitte bei create mask, create mode, force create mode, force directory mode, force directory security mode, force security mode, directory mask, directory mode, directory security mask und security mask noch durch?
Wenn man die bestehende Samba-Doku dazu einfach mal wegschmeißt und frisch an die Sache herangeht, ist das System eigentlich sehr leicht nachvollziehen und folgt einer gewissen inneren Logik.
Zunächst: Keine der Anweisungen erzwingt für sich bestimmte Rechte. Nein, auch nicht die mit force im Namen (was ich früher in meiner Unkenntnis immer dachte).
Stattdessen geben die entsprechenden Konfigurationen ein Minimum und ein Maximum für die Rechte vor. Die Maximum-Angaben verhindern, dass ein Client zuviele Rechte vergibt (z.B. Ausführungsrechte, wenn die von ihm angelegten Dateien nie ausgeführt werden sollen); die Minimum-Angaben setzen Rechte, auf die nicht verzichtet werden soll (z.B. Gruppenschreibrechte in einer gemeinsam genutzten Freigabe, auch wenn der Client die gar nicht setzen wollte).
Minimum und Maximum funktionieren durch eine bitweise Verknüpfung mit AND und OR. Die endgültigen zum Einsatz kommenden Rechte werden wie folgt berechnet:
- Rechte, die der Client gerne setzen möchte
ANDBitmaske, um das Maximum zu erzwingen (unerwünschte Rechte wegschneiden)ORBitmaske, um das Minimum zu erzwingen (erzwungene Rechte setzen)- ergibt endgültige Rechte
AND entfernt alle Bits, die in der Client-Vorgabe gesetzt wurden, aber nicht in der Maske stehen, d.h. es werden Rechte weggenommen, die der Client sich zuviel nehmen wollte. Beispiele:
- 777
AND750 => 750 (Die erste 7 ist okay, die zweite wird auf 5 gekürzt, die dritte wird auf 0 gekürzt.) - 000
AND750 => 000 (Alle drei Nullen liegen bereits innerhalb des Maximums.)
OR setzt alle Bits, die in der Client-Vorgabe nicht gesetzt wurden, aber in der Maske stehen, d.h. es werden Rechte erzwungen, die der Client gar nicht gesetzt hat. Beispiele:
- 000
OR750 => 750 (Sowohl bei der ersten als auch bei der zweiten Null wurde das Minimum unterschritten.) - 777
OR750 => 777 (Alle drei Siebenen erreichen oder übertreffen bereits das Minimum.)
Durch Kombination (und zwar nur durch Kombination!) der beiden lassen sich damit faktisch ganz bestimmte Rechte erzwingen, nämlich in dem Minimum und Maximum auf den gleichen Wert gesetzt werden. Hier mal einige Beispiele mit 750 als Minimum (erster Schritt) und als Maximum (zweiter Schritt):
- 000
AND750 => 000 … 000OR750 => 750 - 777
AND750 => 750 … 750OR750 => 750 - 700
AND750 => 700 … 700OR750 => 750 - 070
AND750 => 050 … 050OR750 => 750
Weil’s so schön ist, wird auch noch unterschieden zwischen der Rechtevergabe beim Anlegen und der nachträglichen Rechteveränderung über die entsprechende Dialogbox des Windows-Clients.
Nun wird’s also Zeit für die entscheidenden …
Faustregeln
create modeunddirectory modesind verwirrende und vor allem inkonsistente Alias-Bezeichnungen, die ignoriert werden sollten. Weg damit!- Alles, was
securityim Namen hat, bezieht sich auf die nachträgliche Änderung von Rechten; alles andere auf die Rechte beim Anlegen.- Alles, was
directoryim Namen hat, bezieht sich auf Verzeichnisse; alles andere auf Dateien.- Ein Statement ist entweder
... maskoderforce ... mode. Alles mit... maskfunktioniert dabei alsAND, schneidet also überzählige Bits weg. Merke: A wie in „mask“ = A wie in „AND“. Alles mitforce ... modefunktioniert dabei alsOR, setzt also nicht angegebene Bits dazu. Merke: O wie in „force“ und „mode“ = O wie in „OR“.
Aus Regel 2, 3 und 4 ergeben sich damit alle möglichen 2 ^ 3 = 8 Kombinationen: Aktion (Anlegen/Ändern), Objekt (Datei/Verzeichnis), Methode (Minimum/Maximum).
Und wer sich gerne eine kleine Kurzübersicht der möglichen Kombinationen an den Monitor tackern will, nimmt diese hier:
Kurzübersicht
Rechtevergabe beim Anlegen erzwingen:
- Dateien:
- [max] create mask
- [min] force create mode
- Verzeichnisse:
- [max] directory mask
- [min] force directory mode
Rechtevergabe beim Ändern erzwingen:
- Dateien:
- [max] security mask
- [min] force security mode
- Verzeichnisse:
- [max] directory security mask
- [min] force directory security mode
Tip: Üblicherweise möchte man ja nicht, dass einmal beim Anlegen gesetzte Rechte nachträglich verändert werden – dann hätte man sich das Erzwingen der Rechte beim Anlegen ja auch gleich sparen können. Insofern sollte eine Nicht-„security“-Einstellung immer durch die entsprechende „security“-Einstellung ergänzt werden.
Fazit:
Will man nur ein Maximum an Rechten erzwingen (= bestimmte Rechte verbieten, obwohl der Client sie setzen wollte), braucht man diese vier Einstellungen (wir erinnern uns: Maximum wird durch AND erzielt, AND mit A, so wie in „mask“):
create mask
directory mask
security mask
directory security mask
Will man nur ein Minimum an Rechten erzwingen (= bestimmte Rechte immer setzen, auch wenn der Client das gar nicht wollte), braucht man jene vier Einstellungen (wir erinnern uns: Minimum wird durch OR erzielt, OR mit O, so wie in „force“ und in „mode“):
force create mode
force directory mode
force security mode
force directory security mode
Will man ganz bestimmte Rechte erzwingen, unabhängig davon, was der Client sich für Rechte wünscht, braucht man alle acht Einstellungen:
create mask
force create mode
directory mask
force directory mode
security mask
force security mode
directory security mask
force directory security mode
Tags: samba
26. Januar 2011 um 11:48
Moin moin,
die erlaeuterung der moeglichen Rechtevergabe in samba finde ich sehr gut beschrieben und leicht zu verstehen. In den letzten monaten habe ich 2 revisionen von samba verpasst und mir war auch nicht gleich klar, um was es sich bei diesen verschiedenen mode’s und mask’s handelt.
Danke fuer diesen post ;)
Grueße aus HH
~steven
01. April 2013 um 00:06
Hallo
Danke für diesen Beitrag, war schon am Verzweifeln…
29. Mai 2013 um 12:24
Vielen Dank, du hast Objekten vor der Zerstörung bewahrt, ich war schon kurz davor durchzu drehen…
beste Grüße aus Berlin
15. Juni 2013 um 10:40
Hi,
wenn ich Schreib und Leserechte auf die Root haben will, welche zahlen muss ich dann eintragen? Das hab ich nicht verstanden wofür welche Zahlen stehen.
15. Juni 2013 um 16:08
Ich weiß nicht, was „auf die Root“ bedeuten soll. Die numerische Notation der Berechtigungen wird beispielsweise hier erläutert.
03. Juli 2013 um 15:06
„auf die Root“ = das Wurzelverzeichnis…
04. Juli 2013 um 10:32
Perfekt erklärt! Danach habe ich lange gesucht.
13. Oktober 2013 um 11:47
Vielen Dank. Hat mir sehr geholfen.
24. Oktober 2013 um 07:55
Ich möchte, dass über Windows angelegte Unterordner und Dateien in einer bestehenden Samba-Freigabe immer drwxrwxrwx haben. Wie erreiche ich das?
24. Oktober 2013 um 10:36
Dieser Blogpost dreht sich doch genau darum, zu erläutern, wie du das erreichst …
11. Dezember 2013 um 11:18
Ein sehr schöner Artikel und die beste Quelle die ich zu dem Thema finden konnte! Vielen Dank!!
Leider ist er in Bezug auf Samba 4 nicht mehr ganz aktuell, da dort aus Übersichtsgründen alle „security“-Anweisungen entfernt wurden.
06. Januar 2014 um 22:47
Unglaublich, so bringt man auch Mac OS 10.5.8 mit einem Linux Samba-Server Manieren bei!
Perfekt, vielen Dank!
08. Januar 2014 um 13:43
Toller Artikel, einfach und verständlich, hat mir sehr gefholfen und habs auf anhieb verstanden
Vielen Danke
09. Januar 2014 um 10:31
Hmm leider funktioniert das bei mir nicht. Ich habe Samba 3.6.3 und alle 8 masks/modes auf 0770 gesetzt. Trotzdem erstellt er mir die Ordner mit 750 auf dem Server. Jemand eine Idee?
04. März 2014 um 16:13
Hallo,
beim Erstellen von Verzeichnissen (Samba 3.6.3) erhalte ich mit folgenden Einstellungen
# permissions when creating a directory
directory mask = 770
force directory mode = 770
# permissions when modifying a directory
directory security mask = 770
force directory security mode = 770
auf ext4 Verzeichnisse, die das Recht 750 haben. Erst beim Ändern erhalten diese das gewünschte Recht 770.
Ein Fehler in Samba ?
04. März 2014 um 16:18
Sorry, aber das Debugging von Konfigurationen auf Servern, die nicht unserer Kontrolle unterliegen, ist für uns nicht zu leisten. Letztlich ist das hier ein Blog und kein Supportforum; in der Samba-Community sollest du hier kompetente Antworten erhalten.
03. Juni 2014 um 21:34
Hi Jonas,
zuerst einmal vielen Dank für das Tutorial. Ist klar, dass ihr hier kein support eröffnen wollt ;) aber das Tutorial – so schön es auch sein mag – ist unvollständig. Mike vom 09. Januar 2014 um 10:31 und Claus vom 04. März 2014 um 16:13 haben beide Recht. Warum? Weil das setzen aller acht Einstellungen nicht das beschriebene Resultat erbringt. Wenn alle auf 0770 gesetzt sind resultieren erstellte Ordner in „drwxr-xr-x“ und Files in „-rwxr–r–„. Es wäre super wenn das im Tutorail vervollständigt werden kann, da es für viele das gewünschte Setup geteilter Samba Shares abbilden soll. Vielen Dank
MfG
03. Juni 2014 um 22:23
Hier ist ein funktionierender smb4.conf Ausschnitt für Samba 4:
[…]
[global] (können meines Wissens nach aber auch je Share gesetzt werden)
[…]
# Disable CIFS UNIX extensions, since they confuse MS Win clients
unix extensions = No
# Force file and dir modes
create mask = 0770
force create mode = 0770
directory mask = 0770
force directory mode = 0770
[…]
Die Einstellung „unix extensions = No“ macht hier den kleinen, aber feinen Unterschied. Zudem ist zu bemerken, dass die 4x security Einstellungen:
– [max] security mask
– [min] force security mode
– [max] directory security mask
– [min] force directory security mode
nicht mehr Bestandteil von Samba 4 sind. Quelle https://www.samba.org/samba/history/samba-4.0.0.html
MfG
09. Dezember 2014 um 12:34
Ja, schade. Ich fand das sehr anschaulich, aber eben für smb4 ungeeignet.
Gibt’s einen Nachfolger für diesen Post?
V.a. mit diesen beiden
„Will man nur ein Minimum an Rechten erzwingen“ dann …
und „Will man ganz bestimmte Rechte erzwingen“ dann …
Kann das jemand ergänzen?
09. Dezember 2014 um 14:01
Da ist – mangels weiterer Beschäftigung mit Samba – kein Nachfolgepost angedacht. Dieser hier ist vom November 2010 und spiegelt den damaligen Erkenntnisstand wider Das ist hier ja auch kein Samba-Dokumentations-Wiki, sondern eben nur ein Blogpost, und eben ein recht alter noch dazu. Das Beste, was er heute noch tun kann, ist, Leute mit Kenntnissen in der Konfiguration aktueller Samba-Versionen zu eigenen Blogposts zu motivieren. Da ist hier aber nicht der richtige Ort für.