Ich habe einer Gruppe einen Benutzer hinzugefügt, aber die Gruppenberechtigungen für Dateien haben weiterhin keine Auswirkung


17

Ich habe die Berechtigungen einer Datei ( chmod g+w testfile) geändert und es ls -l testfilegibt:

-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile

Ich habe dann einen Benutzer zu dieser Gruppe hinzugefügt (" / etc / group " hat eine user1:x:1000:user2Zeile), kann diese Datei jedoch nicht als Benutzer2 bearbeiten. Warum ist das so?


Antworten:


28

user2 muss sich abmelden und wieder anmelden. Gruppenberechtigungen funktionieren folgendermaßen:

  • Wenn Sie sich anmelden, erhalten Ihre Prozesse eine Gruppenmitgliedschaft in Ihrer Hauptgruppe, die in erwähnt wird /etc/passwd, sowie in allen Gruppen, in denen Ihr Benutzer erwähnt wird /etc/group. (Genauer gesagt, das pw_gidFeld in getpw(your_uid)sowie alle Gruppen , von denen Ihre Benutzer ein explizites Mitglied . Jenseits /etc/passwdund /etc/groupdie Informationen von anderen Arten von Benutzerdatenbanken wie NIS oder LDAP kommen können.) Die Hauptgruppe der Prozess des wird effektive Gruppen - ID und die anderen Gruppen werden ihre zusätzlichen Gruppen-IDs .
  • Wenn ein Prozess einen Vorgang ausführt, der die Mitgliedschaft in einer bestimmten Gruppe erfordert, z. B. den 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 der Gruppenmitgliedschaft des Benutzers erst wirksam, wenn sich der Benutzer anmeldet. Für die Ausführung von Prozessen ist es zu spät. Der Benutzer muss sich also abmelden und wieder anmelden. Wenn dies zu viel Mühe bereitet, kann sich der Benutzer in einer separaten Sitzung anmelden (z. B. auf einer anderen Konsole oder mit ssh localhost).

Unter der Haube kann ein Prozess immer nur Berechtigungen verlieren (Benutzer-IDs, Gruppen-IDs, Funktionen). Der Kernel startet den initProzess (den ersten Prozess nach dem Start) als root und jeder Prozess wird letztendlich von diesem Prozess abgeleitet¹. Der loginProzess (oder sshdder Teil Ihres Desktop-Managers, der Sie anmeldet) wird weiterhin als root ausgeführt. Ein Teil seiner Aufgabe besteht darin, die Root-Berechtigungen zu löschen und zu den richtigen Benutzern und Gruppen zu wechseln.

Es gibt eine einzige Ausnahme: Ausführen eines setuid- oder setgid- Programms. Dieses Programm erhält zusätzliche Berechtigungen: Es kann auswählen, ob es unter verschiedenen Teilmengen der Mitgliedschaften des übergeordneten Prozesses sowie der zusätzlichen Mitgliedschaft in dem Benutzer oder der Gruppe, der bzw. der die ausführbare Datei setxid gehört, agieren soll. Insbesondere hat ein setuid-Root-Programm Root-Berechtigungen und kann daher alles² ausführen. So mögen suund sudokönnen Programme ihre Arbeit machen.

¹ Es gibt gelegentlich Prozesse, die nicht von init (initrd, udev) abgeleitet sind, aber das Prinzip ist dasselbe: Beginnen Sie als root und verlieren Sie mit der Zeit die Berechtigungen.
² Sperren von mehrstufigen Sicherheitsframeworks wie SELinux.


1
Beachten Sie, dass bei Verwendung einer Desktop-GUI durch einfaches Abmelden und erneutes Anmelden in einem Terminalfenster die Gruppenmitgliedschaft nicht zurückgesetzt wird. Ich hatte dieses Problem und muss mich auch von meiner GUI-Sitzung
abmelden

3
@ user394 Durch Abmelden und erneutes Anmelden wird die Gruppenmitgliedschaft zurückgesetzt. Wenn Sie lediglich ein Terminalfenster schließen, werden Sie nicht abgemeldet.
Gilles 'SO- hör auf böse zu sein'

10

Möglicherweise müssen Sie Benutzer2 abmelden und wieder anmelden (oder versuchen Sie einfach, ssh'in, um eine neue Anmeldesitzung zu erstellen). Überprüfen Sie die Ausgabe von id --groups, um die numerischen Gruppen-IDs für einen Benutzer anzuzeigen.


1

sudo su $(whoami)

Im Wesentlichen die gleiche Problemumgehung wie ssh localhost, aber verwendbar, ohne dass ein SSH-Server installiert ist.

Solange du Wurzel hast. Wenn Sie jedoch gerade eine neue Gruppe hinzugefügt und Berechtigungen geändert haben, ist dies wahrscheinlich der Fall.


Dies ist zwar eine weniger vollständige Antwort als die akzeptierte, aber manchmal möchten Sie wissen, wie eine Uhr gebaut wird, und manchmal möchten Sie nur wissen, wie spät es ist. Diese Antwort hat mir bei einem Trick geholfen, der funktionieren kann, bis ich mich das nächste Mal aus- und wieder einlogge. Danke.
Benjamin Staton

0

Es gibt einen Fall, in dem die Benutzerabmeldung nicht hilft, wenn Sie die ControlMaster-Anweisung ssh für den Host verwenden. Wenn Sie Ihr Konto zu einer Gruppe hinzufügen, sich über dieselbe ControlMaster-Verbindung abmelden und erneut anmelden, wird in der Sitzung weiterhin keine neue Mitgliedschaft angezeigt. Sie müssen die Master-Verbindung mit Gewalt unterbrechen

ssh -O exit hostname

bevor Sie sich wieder anmelden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.