Linux, warum kann ich nicht schreiben, obwohl ich Gruppenberechtigungen habe?

108

Ich möchte eine Datei in einem Verzeichnis erstellen, das der Mitarbeitergruppe gehört, der ich angehöre. Warum kann ich das nicht tun?

bmccann@bmccann-htpc:~$ ls -l /usr/local/lib/R/
total 4
drwxrwsr-x 2 root staff 4096 2010-07-31 16:21 site-library
bmccann@bmccann-htpc:~$ id -nG bmccann
bmccann adm dialout cdrom plugdev staff lpadmin admin sambashare
bmccann@bmccann-htpc:~$ touch /usr/local/lib/R/site-library/tmp
touch: cannot touch `/usr/local/lib/R/site-library/tmp': Permission denied
Ben McCann
quelle
1
Haben Sie Schreibrechte für das Site-Library-Verzeichnis in / usr / local / lib / R?
Ted Hopp
1
Zeigt der erste Befehl, den ich gepostet habe, nicht, dass die Gruppe über Schreibrechte verfügt?
Ben McCann
3
Ist bereits eine site-library/tmpDatei / ein Verzeichnis vorhanden?
Jeremiah Willcock

Antworten:

200

Haben Sie sich nach den Gruppenänderungen abgemeldet und wieder angemeldet? Siehe:
Super User-Antwort mit fehlgeschlagenen Touch-Berechtigungen

AdamJonR
quelle
1
Wenn ich ein neues Terminalfenster öffne, sollte dies nicht als neuer Prozess betrachtet werden? Ich bin mir ziemlich sicher, dass ich das versucht habe und es hat nicht funktioniert und mich gezwungen, mich abzumelden.
Ben McCann
7
@Ben: Das Starten eines neuen Prozesses erbt uid / gids von seinem übergeordneten Prozess. Sie benötigen ein privilegiertes Programm (wie zB login, suusw.) zu setzen tatsächlich uid / gids.
Ephemient
4
Wenn es unpraktisch ist, sich abzumelden / wieder anzumelden, wie oben angegeben, können Sie dies in einem Terminal tun : su your-user-name. Die resultierende Shell verfügt über Ihre aktualisierten Gruppenberechtigungen.
TJ Crowder
2
Danke dafür! Ich verbrachte ungefähr 15 Minuten damit, mir die Haare auszureißen, um herauszufinden, warum ich keine Gruppenberechtigungen in einem Ordner hatte.
Jeremy Spencer
2
Es erforderte einen Neustart für mich unter Ubuntu 16.04 x64, nicht nur das Abmelden und erneutes Anmelden
Kartikey Tanna
15

Warum kann ein Linux-Benutzer keine Dateien in einer Gruppe bearbeiten, zu der er gehört?

Ich verwende Ubuntu 12.04 und hatte das gleiche Problem, bei dem ein Benutzer nicht in eine Datei schreiben kann, auf die er Gruppenzugriff erhält. Beispielsweise:

whoami                                        //I am user el
  el                                            

touch /foobar/test_file                       //make a new file

sudo chown root:www-data /foobar/test_file    //User=root  group=www-data

sudo chmod 474 /foobar/test_file              //owner and others get only read, 
                                              //group gets rwx


sudo groupadd www-data                        //create group called www-data    

groups                                        //take a look at the groups and see
 www-data                                     //www-data exists.

groups el                                     //see that el is part of www-data
  el : www-data                               

Starten Sie das Terminal jetzt neu, um sicherzustellen, dass die Benutzer und Gruppen wirksam werden. Loggen Sie sich als el.

vi /foobar/test_file                          //try to edit the file.

Erzeugt die Warnung:

Warning: W10: Warning: Changing a readonly file"

Was? Ich habe alles richtig gemacht, warum funktioniert es nicht?

Antworten:

Führen Sie einen vollständigen Neustart des Computers durch. Das Anhalten des Terminals reicht nicht aus, um diese Probleme zu beheben.

Ich denke, was passiert, ist, dass Apache2 auch die WWW-Datengruppe verwendet, also hat die Aufgabe irgendwie verhindert, dass die Benutzer und Gruppen korrekt durchgesetzt werden. Sie müssen sich nicht nur abmelden, sondern auch alle Dienste, die Ihre Gruppe verwenden, stoppen und neu starten. Wenn ein Neustart nicht funktioniert, haben Sie größere Probleme.

Eric Leschinski
quelle
1
Was sind "größere Probleme"?
Ejaz
13

Ich hatte das gleiche Problem. Überprüfen Sie, ob der Ordner weitere ACL-Regeln enthält oder nicht.

Wenn Sie beim Auflisten des Ordners + (Pluszeichen) sehen, bedeutet dies, dass es spezielle Zugriffsregeln gibt. Beispielsweise:

[user_in_apache_group@web02 html]$ ls -l
total 16
drwxrwxr-x  16 apache apache 4096 Sep  4 13:46 ilias
drwxrwxr-x+ 15 apache apache 4096 Sep  4 13:46 ilias5

Berechtigung anzeigen:

[user_in_apache_group@web02 html] getfacl ilias5
# file: ilias5
# owner: apache
# group: apache
user::rwx
user:user_in_apache_group:r-x
group::rwx
mask::rwx
other::r-x

Das bedeutet, dass mein Benutzer (user_in_apache_group) keine Schreibberechtigung für diesen Ordner hat.

Die Lösung ist, was @techtonik sagte, Schreibberechtigung für Benutzer hinzufügen:

[user_in_apache_group@web02 html]$ sudo setfacl -m u:user_in_apache_group:rwx ./ilias5

Überprüfen Sie die Berechtigung erneut:

[user_in_apache_group@web02 html] getfacl ilias5
...
user:user_in_apache_group:rwx
...

Ich hoffe es hilft. ;)

Laszlo Lugosi
quelle
8

Verwenden Sie die Linux-ACL (Zugriffssteuerungslisten) - es handelt sich um eine detailliertere Version des Berechtigungssystems.

setfacl -R -m 'group:staff:rwx' -m 'd:group:staff:rwx' /usr/local/lib/R/

Dadurch werden sowohl aktive Rechte für das Verzeichnis als auch Standardrechte für alle darin erstellten Rechte festgelegt.

Dies funktioniert ohne erneutes Anmelden nicht, wenn Sie sich gerade zur staffGruppe hinzugefügt haben. Sie können die Berechtigung jedoch nur für sich selbst für die aktuelle Sitzung festlegen.

anatoly techtonik
quelle
5

Ich hatte ein Problem, wenn ein Benutzer nicht auf das /foo/bar/bazVerzeichnis zugreifen konnte, obwohl er über Berechtigungen verfügte, weil er keinen Zugriff auf das barVerzeichnis hatte.

Kolyunya
quelle
-2

Überprüfen Sie, ob Ihr übergeordnetes Verzeichnis über Berechtigungen verfügt, bevor Sie dieser Datei Inhalt hinzufügen

sudo chmod -R 777 /yourDir/file.log
Mani P.
quelle