Ich habe die Berechtigungen einer Datei geändert (chmod g+w testfile
) und Ausführen von ls -l testfile
ergibt:
-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile
Ich habe dieser Gruppe dann einen Benutzer hinzugefügt („/etc/group “ hat user1:x:1000:user2
line), aber ich kann diese Datei nicht als user2 bearbeiten. Warum ist das so?
Akzeptierte Antwort:
user2
muss sich ab- und wieder anmelden. Gruppenberechtigungen funktionieren folgendermaßen:
- Wenn Sie sich anmelden, erhalten Ihre Prozesse eine Gruppenmitgliedschaft in Ihrer Hauptgruppe, die in
/etc/passwd
erwähnt wird , sowie alle Gruppen, in denen Ihr Benutzer in/etc/group
erwähnt wird . (Genauer gesagt, diepw_gid
Feld ingetpw(your_uid)
, sowie alle Gruppen, in denen Ihr Benutzer ausdrücklich Mitglied ist. Jenseits von/etc/passwd
und/etc/group
, die Informationen können aus anderen Arten von Benutzerdatenbanken wie NIS oder LDAP stammen.) Die Hauptgruppe wird zur effektiven Gruppen-ID des Prozesses und die anderen Gruppen werden zu seinen zusätzlichen Gruppen-IDs. - Wenn ein Prozess eine Operation ausführt, die die Mitgliedschaft in einer bestimmten Gruppe erfordert, wie z. B. der Zugriff auf eine Datei, muss diese Gruppe entweder die effektive Gruppen-ID oder eine der zusätzlichen Gruppen-IDs des Prozesses sein.
Wie Sie sehen, wird Ihre Änderung an der Gruppenmitgliedschaft des Benutzers erst wirksam, wenn sich der Benutzer anmeldet. Für laufende Prozesse ist es zu spät. Der Benutzer muss sich also ab- und wieder anmelden. Wenn das zu umständlich ist, kann sich der Benutzer bei einer separaten Sitzung anmelden (z. B. auf einer anderen Konsole oder mit ssh localhost
). ).
Unter der Haube kann ein Prozess immer nur verlieren Privilegien (Benutzer-IDs, Gruppen-IDs, Fähigkeiten). Der Kernel startet die init
Prozess (der erste Prozess nach dem Booten), der als Root ausgeführt wird, und jeder Prozess ist letztendlich von diesem Prozess abstammt¹. Die login
process (oder sshd
, oder der Teil Ihres Desktop-Managers, der Sie anmeldet) immer noch als Root ausgeführt wird. Ein Teil seiner Aufgabe besteht darin, die Root-Rechte aufzugeben und zu den richtigen Benutzern und Gruppen zu wechseln.
Es gibt eine einzige Ausnahme:das Ausführen eines setuid- oder setgid-Programms. Dieses Programm erhält zusätzliche Berechtigungen:Es kann wählen, unter verschiedenen Teilmengen der Mitgliedschaften des übergeordneten Prozesses zu agieren, plus der zusätzlichen Mitgliedschaft in dem Benutzer oder der Gruppe, der die ausführbare setxid-Datei gehört. Insbesondere ein setuid-Root-Programm hat Root-Berechtigungen und kann daher alles tun²; so funktionieren Programme wie su
und sudo
ihren Job machen können.
¹ Es gibt gelegentlich Prozesse, die nicht von init abgeleitet sind (initrd, udev), aber das Prinzip ist das gleiche:Starte als root und verliere mit der Zeit die Privilegien.
² Sperren von mehrstufigen Sicherheitsframeworks wie SELinux.