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
  • 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 … 000 OR 750 => 750
  • 777 AND 750 => 750 … 750 OR 750 => 750
  • 700 AND 750 => 700 … 700 OR 750 => 750
  • 070 AND 750 => 050 … 050 OR 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

  1. create mode und directory mode sind verwirrende und vor allem inkonsistente Alias-Bezeichnungen, die ignoriert werden sollten. Weg damit!
  2. Alles, was security im Namen hat, bezieht sich auf die nachträgliche Änderung von Rechten; alles andere auf die Rechte beim Anlegen.
  3. Alles, was directory im Namen hat, bezieht sich auf Verzeichnisse; alles andere auf Dateien.
  4. Ein Statement ist entweder ... mask oder force ... mode. Alles mit ... mask funktioniert dabei als AND, schneidet also überzählige Bits weg. Merke: A wie in „mask“ = A wie in „AND“. Alles mit force ... mode funktioniert dabei als OR, 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

Eine Antwort auf „Endlich verstehen: Samba-Rechtevergabe“

  1. 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.