Forum: PC-Programmierung Berechtigungsvergabe unter Linux


von Johannes (Gast)


Lesenswert?

Hallo,
ich habe ein Verständnisproblem für Berechtigungen unter Linux.

angenommen ich habe einmal
testfolder1/f1.txt

Ich habe angefangen eine Gruppe (familie) zu erstellen, welche momentan 
einen user hat (Johannes)
Jetzt möchte ich gerne für dieser Gruppe Berechtigungen (nur lesen) 
anlegen.

chown johannes:familie testfolder1/f1.txt
chmod 440 testfolder1/f1.txt

heißt: Johannes darf lesen, komplette Gruppe familie darf lesen, alle 
anderen dürfen nichts.
Wenn ich jetzt also noch einen benutzer anlege und diesen in der Gruppe 
familie unterbringe, darf dieser Benutzer ebenfalls die Datei lesen.

Aber wer darf die Datei jetzt noch löschen? nur ich mit sudo? Oder gibt 
es noch andere wege?
Wie kann ich es machen, dass ein Benutzer aus familie mehr rechte (lesen 
und schreiben) bekommt?

Jetzt möchte ich gerne noch eine zweite Gruppe anlegen. familie2
Wie kann ich denn jetzt Einstellen, dass familie2 auch zugriffsrechte 
bekommt?
Ich müsste ja eigentlich erst mit chown den Besitzer wechseln? Was 
passiert dann mit den Berechtigungen für familie?

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

Johannes schrieb:
> Hallo,
> ich habe ein Verständnisproblem für Berechtigungen unter Linux.
>
> angenommen ich habe einmal
> testfolder1/f1.txt
>
> Ich habe angefangen eine Gruppe (familie) zu erstellen, welche momentan
> einen user hat (Johannes)
> Jetzt möchte ich gerne für dieser Gruppe Berechtigungen (nur lesen)
> anlegen.
>
> chown johannes:familie testfolder1/f1.txt
> chmod 440 testfolder1/f1.txt
>
> heißt: Johannes darf lesen, komplette Gruppe familie darf lesen, alle
> anderen dürfen nichts.
> Wenn ich jetzt also noch einen benutzer anlege und diesen in der Gruppe
> familie unterbringe, darf dieser Benutzer ebenfalls die Datei lesen.
>
> Aber wer darf die Datei jetzt noch löschen? nur ich mit sudo? Oder gibt
> es noch andere wege?
> Wie kann ich es machen, dass ein Benutzer aus familie mehr rechte (lesen
> und schreiben) bekommt?
>
> Jetzt möchte ich gerne noch eine zweite Gruppe anlegen. familie2
> Wie kann ich denn jetzt Einstellen, dass familie2 auch zugriffsrechte
> bekommt?
> Ich müsste ja eigentlich erst mit chown den Besitzer wechseln? Was
> passiert dann mit den Berechtigungen für familie?

Datei neu anlegen oder Löschen braucht Schreibrechte auf das 
Verzeichnis. Also

chown johannes:familie testfolder1/
chmod ug+rwx testfolder1/

Will man das feiner steuern braucht man ACLs (Access Control List). 
Siehe z.B. https://wiki.ubuntuusers.de/ACL/

von Johannes (Gast)


Lesenswert?

Nikolaus S. schrieb:
> Datei neu anlegen oder Löschen braucht Schreibrechte auf das
> Verzeichnis. Also
>
> chown johannes:familie testfolder1/
> chmod ug+rwx testfolder1/

Wenn Benutzer2 auch schreibrechte haben soll (Benutzer3 aber z.B. 
nicht), muss ich das mit ACLs machen?
Oder ich ändere den Benutzer zu Benutzer2? was wird dann mit den Rechten 
von johannes?

von Egon D. (Gast)


Lesenswert?

Johannes schrieb:

> Wenn Benutzer2 auch schreibrechte haben soll (Benutzer3
> aber z.B. nicht), muss ich das mit ACLs machen?
> Oder ich ändere den Benutzer zu Benutzer2? was wird dann
> mit den Rechten von johannes?

Ganz allgemein: Du musst für jede Teilmenge der Nutzer,
die in genau dieser Zusammenstellung für wenigstens eine
Datei Privilegien genießen dürfen, eine eigene Gruppe
definieren. Es ist nicht möglich, Gruppen von Gruppen zu
bilden oder zu einer Gruppe fallweise noch einzelne Nutzer
dazuzunehmen oder auszuschließen.
Die einzige Ausnahme ist nur der Eigentümer; der muss nicht
Mitglied der privilegierten Gruppe sein, weil er ja sowieso
die Eigentümerrechte hat.

Wenn es die Nutzer "Mutter", "Vater", "Lisa", "Hannes" und
"Oma" gibt, dann müssten also 2^5-1 = 31 Gruppen eingerichtet
werden, damit alle Kombinationen möglich sind (die leere
Gruppe ist nicht erforderlich).

von Andreas M. (amesser)


Lesenswert?

Wie wäre es mit "chmod 640" für die Datei? Der Besitzer kann dann lesen 
und schreiben, die Gruppe nur lesen. Wie bereits gesagt entspricht Datei 
anlegen/löschen dem Schreibrecht auf dem Ordner. Allerdings ist "ug+rwX" 
genau das, was der der TO nicht will. Richtig wäre für den Order 
"u=rwx,g=rx,o-rwx" oder anders "chmod 750". ACLs braucht man hierfür 
noch lange nicht.

von Joachim S. (oyo)


Lesenswert?

Johannes schrieb:
> Wenn Benutzer2 auch schreibrechte haben soll (Benutzer3 aber z.B.
> nicht), muss ich das mit ACLs machen?
> Oder ich ändere den Benutzer zu Benutzer2? was wird dann mit den Rechten
> von johannes?

Vielleicht hilft Dir das zum Verständnis:
Im klassischen Linux-Dateiberechtigungs-System hat jede Datei genau 
einen zugeordneten "Eigentümer", einen Benutzer. Weiterhin hat jede 
Datei genau eine zugeordnete "Gruppe", eine Benutzergruppe.

Dieses vergleichsweise einfache/minimalistische Berechtigungssystem ist 
natürlich etwas eingeschränkt. Weil man eben bspw. nicht sagen kann: 
Sowohl die Mitglieder von "Benutzergruppe2" als auch die Mitglieder von 
"Benutzergruppe3" als auch "Benutzer3" und Benutzer4" (die in keiner der 
beiden Benutzergruppen sind), haben diesen und jeden Zugriff.

Das ist gerade für Windows-Umsteiger ungewohnt, weil die das von Windows 
halt anders kennen, wo die Dateisystem-Berechtigungen viel komplexer 
vergeben werden können.
Linux ermöglicht mit einer irgendwann eingeführten Erweiterung namens 
ACL (Access Control Lists) aber ebenfalls solche komplexen 
Berechtigungen. Hauptunterschied ist, dass eine Datei klassischerweise 
nur genau eine Benutzergruppe etc. haben kann, bei ACL hingegen eine 
beliebig lange LISTE von Berechtigungen.

Obwohl wahrscheinlich jedes Desktop-Linux und die meisten Linux-Server 
ACL von Haus aus unterstützen, werden ACLs in der Praxis trotzdem nur 
äusserst selten verwendet. Das minimalistische klassische 
Berechtigungssystem ist in den meisten Fällen doch ausreichend und 
leichter zu handhaben; ich würde vermuten dass ACL in der Praxis fast 
ausschliesslich da zum Einsatz kommen, wo ein Linux-Server als 
Dateiserver für andere PCs im gleichen Netzwerk verwendet wird.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Nikolaus S. schrieb:
> Datei neu anlegen oder Löschen braucht Schreibrechte auf das
> Verzeichnis.

Korrekt.

Die Berechtigungen auf die Datei bestimmen Lesen/Schreiben, die 
Berechtigungen auf das Verzeichnis bestimmen Anlegen/Löschen.

Dabei sei hier noch eine kleine Spezialität erwähnt, die auch unter 
Linux in /tmp angewandt wird: Hier können User beliebige Dateien 
anlegen, aber nur ihre eigenen Dateien auch wieder löschen. Erreicht 
wird das durch das "Sticky-Bit".
1
chmod +t Verzeichnis

Ich halte dieses Feature gerade für Ordner, die mehreren Usern zur 
Verfügung stehen sollen, für äußerst nützlich. Zusätzlich müssen 
natürlich die Regeln für Anlegen/Löschen, die durch das Write-Bit (user, 
group, other) eingestellt werden, eingehalten werden.

P.S.
Beachte: Das Sticky-Bit für (ausführbare) Dateien hat eine gänzlich 
andere Bedeutung als für Verzeichnisse.

: Bearbeitet durch Moderator
von Rolf M. (rmagnus)


Lesenswert?

Joachim S. schrieb:
> Im klassischen Linux-Dateiberechtigungs-System hat jede Datei genau
> einen zugeordneten "Eigentümer", einen Benutzer. Weiterhin hat jede
> Datei genau eine zugeordnete "Gruppe", eine Benutzergruppe.

Was es auch noch gibt, ist der "Rest der Welt" - bzw. alle anderen 
Benutzer. Man kann also beispielsweise einstellen, dass alle Benutzer 
eine Datei lesen dürfen, aber nur die Gruppe auch schreiben darf.
Nur mehrere begrenzte Gruppen mit unterschiedlichen Rechten gehen eben 
ohne ACL nicht.

: Bearbeitet durch User
von Jemand (Gast)


Lesenswert?

Egon D. schrieb:
> Es ist nicht möglich, Gruppen von Gruppen zu
> bilden oder zu einer Gruppe fallweise noch einzelne Nutzer
> dazuzunehmen oder auszuschließen.

Nunja... wenn man seine User in einem LDAP verwaltet, geht das schon, 
aber jemand, der nach den Basics von Benutzerrechten fragt, dürfte 
vermutlich noch eine Weile brauchen, um so etwas einrichten zu können...

von Jemand (Gast)


Lesenswert?

Johannes schrieb:
> Hallo,
> ich habe ein Verständnisproblem für Berechtigungen unter Linux.
>
> angenommen ich habe einmal
> testfolder1/f1.txt
>
> Ich habe angefangen eine Gruppe (familie) zu erstellen, welche momentan
> einen user hat (Johannes)
> Jetzt möchte ich gerne für dieser Gruppe Berechtigungen (nur lesen)
> anlegen.
>
> chown johannes:familie testfolder1/f1.txt
> chmod 440 testfolder1/f1.txt
>
> heißt: Johannes darf lesen, komplette Gruppe familie darf lesen, alle
> anderen dürfen nichts.
> Wenn ich jetzt also noch einen benutzer anlege und diesen in der Gruppe
> familie unterbringe, darf dieser Benutzer ebenfalls die Datei lesen.
>
> Aber wer darf die Datei jetzt noch löschen? nur ich mit sudo? Oder gibt
> es noch andere wege?
> Wie kann ich es machen, dass ein Benutzer aus familie mehr rechte (lesen
> und schreiben) bekommt?
>
> Jetzt möchte ich gerne noch eine zweite Gruppe anlegen. familie2
> Wie kann ich denn jetzt Einstellen, dass familie2 auch zugriffsrechte
> bekommt?
> Ich müsste ja eigentlich erst mit chown den Besitzer wechseln? Was
> passiert dann mit den Berechtigungen für familie?

Wir können jetzt hunderte Postings mit Millionen von Worten schreiben, 
aber jede Beschreibung wird immer abstrakt bleiben. Zudem gibt es 
bereits einen Haufen an guten Texte zu diesem Thema; eine Suche nach 
"linux permissions tutorial" und/oder "linux dateirechte erklärt" 
liefert viele, viele tausend lesenswerte Ergebnisse.

Ansonsten empfehle ich Dir wärmstens, einfach mal ein bisschen herum zu 
spielen und es auszuprobieren. Das muß ja nicht auf Deiner "richtigen" 
Installation passieren, sondern kann auch in einer VM oder einem 
Docker-Container passieren, wie Du magst. Sofern Docker installiert ist, 
landest Du mit dem Befehl "docker run -it --rm ubuntu" direkt auf der 
Rootshell eines Containers mit einem Ubuntu-Linux, darin kannst Du 
spielen soviel Du willst, und wenn Du diesen Container wieder verläßt, 
wird er (aber nicht das Image!) automatisch wieder gelöscht (--rm).

Ansonsten kann man mit ACLs weitere Freigaben einstellen, oder mit 
Techniken wie AppArmot, SE-Linux oder RSBAC weitere Einschränkungen. Ich 
empfehle Dir aber, daß Du erst einmal die Basics erlernen und 
beherrschen solltest, bevor Du Dich an das Erforschen weiterer 
Möglichkeiten begibst.

Nebenbei bemerkt: wenn Du bei der Erforschung der Basics mit den 
einfachen Rechten (read, write, execute) für Dateibesitzer, Gruppen, und 
Andere durch bist, empfehle ich Dir wärmstens, Dich auch mit den 
weiteren Möglichkeiten vertraut zu machen, also Setuid-, Setgid- und 
Sticky-Bits auf Dateien und insbesondere auch auf Verzeichnissen! Viel 
Erfolg!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.