Vorrang von Benutzer und Gruppenbesitzer bei den Dateiberechtigungen

20

Ich bin (für mich) auf etwas Unerwartetes gestoßen, was Dateiberechtigungen unter Linux (Arch Linux) betrifft. Grundsätzlich habe ich:

  • userX im groupX
  • fileX userX:groupX ---rwx----

Was mich verwundert: Ich kann keine Aktion ( rwx) ausführen fileX. Ist das richtig? Kann jemand bitte bestätigen, dass dies tatsächlich das erwartete Verhalten ist?

Die einzigen Aktionen, die ich ausführen kann, sind mvund rmweil ich Schreibberechtigungen für das übergeordnete Verzeichnis habe.

Die Sache ist, ich dachte immer, diese Berechtigungen kollabieren, beginnend mit der allgemeinsten (other -> group -> user). Mit anderen Worten, wenn es o=rwxwen interessiert, wie die Einstellungen für die Gruppe und den Benutzer sind? Anscheinend ist dies nicht der Fall, aber es ergibt für mich keinen Sinn. es scheint nicht intuitiv zu sein. Das Einzige, wofür dieser Ansatz nützlich zu sein scheint, ist das einfache Ausschließen einer bestimmten Person / Gruppe. Außerdem sollte der Besitzer (und die Gruppe?) chmodSowieso in der Lage sein, richtig? Irgendwelche Gedanken dazu?

Alex
quelle
bist du definitiv in groupX?
Exussum
Ja, auf jeden Fall. überprüft effektive gid mitid
alex

Antworten:

24

Die Sache ist, ich dachte immer, diese Berechtigungen kollabieren, beginnend mit der allgemeinsten (other -> group -> user).

Wenn dies der Fall wäre, würden "andere" Berechtigungen für alle gelten.

Mit anderen Worten, wenn o = rwx, wen interessiert es, wie die Einstellungen für Gruppe und Benutzer sind?

Das ist anders als in deinem vorherigen Satz. Hier implizieren Sie, dass die Berechtigungen zusammen oder zusammen gegeben sind, z. B. dass userX die Leseberechtigung besitzt, wenn userX die Datei besitzt und die Datei vom Benutzer lesbar ist, oder wenn eine Gruppe, zu der userX gehört, die Datei besitzt und die Datei eine Gruppe ist -lesbar oder wenn die Datei nicht lesbar ist. Aber so funktioniert es nicht. In der Tat o=rwxbedeutet dies, dass die rwxBerechtigungen für andere gelten, aber nichts über Entitäten aussagt, die keine anderen sind.

Erstens spielt es keine direkte Rolle, zu welcher Gruppe ein Benutzer gehört. Der Kernel kennt keine Benutzer, die zu Gruppen gehören. Der Kernel verwaltet für jeden Prozess eine Benutzer-ID (die effektive UID ) und eine Liste von Gruppen-IDs (die effektive GID und die zusätzlichen GIDs). Die Gruppen werden zur Anmeldezeit durch den Anmeldeprozess bestimmt - es ist der Anmeldeprozess, der die Gruppendatenbank liest (z /etc/group. B. ). Benutzer- und Gruppen-IDs werden von untergeordneten Prozessen geerbt¹.

Wenn ein Prozess versucht, eine Datei mit herkömmlichen Unix-Berechtigungen zu öffnen:

  • Wenn der Benutzer, der die Datei besitzt, die effektive UID des Prozesses ist, werden die Benutzerberechtigungsbits verwendet.
  • Andernfalls werden die Gruppenberechtigungsbits verwendet, wenn die Eigentümergruppe der Datei die effektive GID des Prozesses oder eine der zusätzlichen Gruppen-IDs des Prozesses ist.
  • Andernfalls werden die anderen Berechtigungsbits verwendet.

Es wird immer nur ein Satz von RWX-Bits verwendet. Der Benutzer hat Vorrang vor der Gruppe, die Vorrang vor anderen hat. Wenn Zugriffssteuerungslisten vorhanden sind , wird der oben beschriebene Algorithmus verallgemeinert:

  • Befindet sich in der Datei eine ACL für die effektive UID des Prozesses, wird anhand dieser ermittelt, ob der Zugriff gewährt wird.
  • Andernfalls werden die Gruppenberechtigungsbits verwendet, wenn in der Datei eine Zugriffssteuerungsliste für die effektive GID des Prozesses oder eine der zusätzlichen Gruppen-IDs des Prozesses vorhanden ist.
  • Andernfalls werden die anderen Berechtigungsbits verwendet.

Siehe auch Präzedenz von ACLS , wenn ein Benutzer zu mehreren Gruppen gehört , um weitere Informationen darüber , wie ACL - Einträge verwendet werden, einschließlich der Wirkung der Maske.

Dies -rw----r-- alice internszeigt eine Datei an, die von Alice gelesen und geschrieben werden kann und die von allen anderen Benutzern außer Praktikanten gelesen werden kann. Auf eine Datei mit Berechtigungen und Inhabern können ----rwx--- alice internsnur Praktikanten mit Ausnahme von Alice zugreifen (unabhängig davon, ob sie Praktikantin ist oder nicht). Da Alice anrufen kann chmod, um die Berechtigungen zu ändern, bietet dies keine Sicherheit. Es ist ein Randfall. Auf Systemen mit ACLs ermöglicht der generalisierte Mechanismus das Entfernen von Berechtigungen von bestimmten Benutzern oder bestimmten Gruppen, was manchmal nützlich ist.

Das Verwenden eines einzelnen Satzes von Bits anstelle des Ordnens aller Bits für jede Aktion (Lesen, Schreiben, Ausführen) hat mehrere Vorteile:

  • Dies hat den nützlichen Effekt, dass auf Systemen mit ACLs Berechtigungen von einer Gruppe von Benutzern oder Gruppen entfernt werden können. Auf Systemen ohne ACLs können Berechtigungen aus einer Gruppe entfernt werden.
  • Die Implementierung ist einfacher: Überprüfen Sie einen Satz von Bits, anstatt mehrere Sätze von Bits miteinander zu kombinieren.
  • Es ist einfacher, die Berechtigungen einer Datei zu analysieren, da weniger Vorgänge erforderlich sind.

¹ Sie können sich ändern, wenn ein setuid- oder setgid-Prozess ausgeführt wird. Dies hängt nicht mit dem vorliegenden Problem zusammen.

Gilles 'SO - hör auf böse zu sein'
quelle
alex
vielen Dank für Ihre Zeit; +1 für die sehr detaillierte und ziemlich technische Antwort
Alex
Gute Antwort. Aber ich habe eine Frage zu Ihren letzten Stichpunkten: Ist es wirklich einfacher zu implementieren und zu analysieren? Würde die Überprüfung von Berechtigungen nicht einfach darauf hinauslaufen, die Berechtigungen zusammen zu ODER zu ordnen, wie dies nach Meinung von OP der Fall war?
Gardenhead
Dieser Randfall kommt mir noch albern vor: (userX in groupX) + (userZ in groupX). Sie haben einen fileX-BenutzerX: groupX --- rwx ----. Jetzt kann der ursprüngliche Ordnerersteller userX nicht auf fileX zugreifen, userZ jedoch. Und beide gehören zur selben Gruppe. Wirklich nicht intuitiv.
alexfvolk
4

Die spezifischeren Berechtigungen haben Vorrang vor den weniger spezifischen.

BenutzerX in GruppeX

fileX userX: groupX --- rwx ----

Da Sie der Eigentümer der Datei sind, erhalten Sie nur Eigentümerberechtigungen. Der Besitzer hat keine Berechtigungen. Sie können also nichts tun. Wären Sie nicht der Eigentümer der Datei und ein Gruppenmitglied, würden Gruppenberechtigungen gelten.

Bitte lesen Sie diesen Abschnitt der Wiki-Seite

https://en.wikipedia.org/wiki/File_system_permissions#Classes

kog
quelle
2

-rwxrw---- bedeutet, dass der Besitzer Lese-, Schreib- und Ausführungsberechtigungen hat, die Gruppe Lese- und Schreibberechtigungen hat und andere keine Berechtigungen haben.

Mit den von Ihnen angegebenen Berechtigungen erhält die Gruppe 'groupX' die Berechtigung zum Lesen, Schreiben und Ausführen der Datei. Wenn Sie Mitglied der Gruppe "groupX", aber nicht der Eigentümer der Datei sind, gelten diese Berechtigungen für Sie.

In diesem Fall gehe ich davon aus, dass Sie tatsächlich der Eigentümer der Datei sind. Nur die für den Eigentümer festgelegten Berechtigungen gelten dann für Sie. Natürlich kann der Eigentümer die Berechtigungen für die Datei überschreiben oder ändern. Die Gruppe kann dies jedoch nicht. Zum Beispiel werden Sie von vim aufgefordert, zu bestätigen, ob Sie in eine Datei schreiben, für die Sie keine Schreibberechtigung haben, für die Sie jedoch Eigentümer sind.

Normalerweise lese ich Berechtigungen von links nach rechts. Bin ich der Besitzer? Wenn ja, gelten die Besitzerberechtigungen. Wenn nicht; Bin ich ein Mitglied der Gruppe? Wenn ja, gelten Gruppenberechtigungen. Wenn nicht, dann gelten für mich die Berechtigungen für "Andere".

In einigen Fällen ist es nützlich, Eigentümer einer Datei zu sein, aber keine Schreibrechte zu haben. Es schützt Sie vor versehentlichem Löschen oder Ändern der Datei. Persönlich habe ich die Berechtigung 400 für alle meine Vorlagendateien festgelegt, um sicherzustellen, dass ich sie nicht versehentlich ändere. Gleiches gilt für Ausführungsberechtigungen.

Arnefm
quelle
1
Ich glaube, Sie haben die Frage falsch verstanden. Als das OP sagte, dass die Berechtigungen als "Andere" -> "Gruppe" -> "Benutzer" "zusammenfallen", meinte es meiner Meinung nach, dass bei der Bestimmung, ob Ihre Aktion zulässig ist, zuerst die Berechtigungen "Andere", dann die Berechtigungen "Gruppe" und schließlich (wenn alles andere) überprüft werden scheitert) "User" diejenigen.
Joseph R.
@ JosephR. yeap, das ist , was ich meinte :)
alex
Oh, ich entschuldige mich. Ich werde diesen Teil entfernen. Gibt es irgendetwas Nützliches in der Antwort?
Arnefm
Hinweis: Sie sollten Ihre Antwort ein wenig ändern und den zweiten Absatz entfernen (oder neu formulieren), da er irgendwie "dunkel" ist (es ist nicht klar genug, was dem von mir beschriebenen Verhalten widerspricht)
alex
Beim zweiten Gedanken war ich vielleicht zu schnell, um die Antwort zu akzeptieren. Das tut mir leid. Sie sagen also, dass es manchmal nützlich ist, keine Schreibrechte zu haben, damit Sie nicht versehentlich einige wichtige Dateien ändern. Aber was nützt es, wenn andere über die vollen Berechtigungen verfügen? (also ... du wirst daran gehindert, Fehler zu machen, aber keine anderen )
alex
0

Ich konnte einen Benutzer zu einer Gruppe hinzufügen, der Gruppe Berechtigungen für ein Verzeichnis (070) erteilen und dann NACH EINEM NEUSTART auf den Ordner zugreifen.

Gruppe erstellen: sudo groupadd Gruppenname

Benutzer zur Gruppe hinzufügen : sudo gpasswd -a Benutzername Gruppenname

Stellen Sie sicher, dass sich das gesamte Verzeichnis im korrekten Gruppenbesitz befindet (muss aktuelles Mitglied von groupname sein, um ausgeführt zu werden): sudo chgrp -R groupname directory_path /

Geben Sie nur die Gruppe rwx für den Ordner an (könnte nur rw sein, passen Sie sie nach Bedarf an): sudo chmod -R 070 directory_path

Vergewissern Sie sich, dass Sie sich abgemeldet und wieder angemeldet haben. Wenn dies nicht funktioniert, starten Sie den Computer neu. Das hat bei mir funktioniert.

Justin Woods
quelle