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
AND
Bitmaske, um das Maximum zu erzwingen (unerwünschte Rechte wegschneiden)OR
Bitmaske, 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
AND
750 => 750 (Die erste 7 ist okay, die zweite wird auf 5 gekürzt, die dritte wird auf 0 gekürzt.) - 000
AND
750 => 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
OR
750 => 750 (Sowohl bei der ersten als auch bei der zweiten Null wurde das Minimum unterschritten.) - 777
OR
750 => 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
AND
750 => 000 … 000OR
750 => 750 - 777
AND
750 => 750 … 750OR
750 => 750 - 700
AND
750 => 700 … 700OR
750 => 750 - 070
AND
750 => 050 … 050OR
750 => 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 mode
unddirectory mode
sind verwirrende und vor allem inkonsistente Alias-Bezeichnungen, die ignoriert werden sollten. Weg damit!- Alles, was
security
im Namen hat, bezieht sich auf die nachträgliche Änderung von Rechten; alles andere auf die Rechte beim Anlegen.- Alles, was
directory
im Namen hat, bezieht sich auf Verzeichnisse; alles andere auf Dateien.- Ein Statement ist entweder
... mask
oderforce ... mode
. Alles mit... mask
funktioniert dabei alsAND
, schneidet also überzählige Bits weg. Merke: A wie in „mask“ = A wie in „AND“. Alles mitforce ... mode
funktioniert 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
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