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

Tags:

20 Antworten zu “Endlich verstehen: Samba-Rechtevergabe”

  1. steven sagt:

    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

  2. Defcon sagt:

    Hallo

    Danke für diesen Beitrag, war schon am Verzweifeln…

  3. Christian sagt:

    Vielen Dank, du hast Objekten vor der Zerstörung bewahrt, ich war schon kurz davor durchzu drehen…

    beste Grüße aus Berlin

  4. Nevada sagt:

    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.

  5. Jonas Pasche sagt:

    Ich weiß nicht, was „auf die Root“ bedeuten soll. Die numerische Notation der Berechtigungen wird beispielsweise hier erläutert.

  6. Mario sagt:

    „auf die Root“ = das Wurzelverzeichnis…

  7. Andrea sagt:

    Perfekt erklärt! Danach habe ich lange gesucht.

  8. Julian sagt:

    Vielen Dank. Hat mir sehr geholfen.

  9. Wolfgang sagt:

    Ich möchte, dass über Windows angelegte Unterordner und Dateien in einer bestehenden Samba-Freigabe immer drwxrwxrwx haben. Wie erreiche ich das?

  10. Jonas Pasche sagt:

    Dieser Blogpost dreht sich doch genau darum, zu erläutern, wie du das erreichst …

  11. Paul sagt:

    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.

  12. Martin sagt:

    Unglaublich, so bringt man auch Mac OS 10.5.8 mit einem Linux Samba-Server Manieren bei!
    Perfekt, vielen Dank!

  13. Nicolas sagt:

    Toller Artikel, einfach und verständlich, hat mir sehr gefholfen und habs auf anhieb verstanden
    Vielen Danke

  14. Mike sagt:

    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?

  15. Claus sagt:

    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 ?

  16. Jonas Pasche sagt:

    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.

  17. Leander sagt:

    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

  18. Leander sagt:

    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

  19. Thomas sagt:

    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?

  20. Jonas Pasche sagt:

    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.


Impressum