Linux, dlaczego nie mogę pisać, mimo że mam uprawnienia grupowe?

108

Chcę utworzyć plik w katalogu należącym do grupy pracowników, której jestem członkiem. Dlaczego nie mogę tego zrobić?

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
źródło
1
Czy masz uprawnienia do zapisu w katalogu biblioteki witryn w / usr / local / lib / R?
Ted Hopp,
1
Czy pierwsze polecenie, które opublikowałem, nie wskazuje, że grupa ma uprawnienia do zapisu?
Ben McCann,
3
Czy istnieje już site-library/tmpplik / katalog?
Jeremiah Willcock

Odpowiedzi:

200

Czy wylogowałeś się i zalogowałeś ponownie po wprowadzeniu zmian w grupie? Zobacz:
Odpowiedź superużytkownika związana z brakiem uprawnień dotykowych

AdamJonR
źródło
1
Jeśli otworzę nowe okno terminala, czy nie powinno to być traktowane jako nowy proces? Jestem prawie pewien, że próbowałem tego i nie zmusiło mnie to do wylogowania się.
Ben McCann,
7
@Ben: Rozpoczęcie nowego procesu dziedziczy uid / gids po jego rodzicu. Musisz się doskonałą programu (takich jak login, suitp) faktycznie ustawić UID / GID.
ephemient
4
Jeśli jest to niewygodne logout / login z powrotem, jak wynika z powyższego, można to zrobić w terminalu: su your-user-name. Powstała powłoka będzie miała zaktualizowane uprawnienia grupy.
TJ Crowder
2
Dzięki za to! Spędziłem około 15 minut wyciągając włosy, próbując zrozumieć, dlaczego nie mam uprawnień grupowych w folderze.
Jeremy Spencer
2
Wymagało to ponownego uruchomienia na Ubuntu 16.04 x64, a nie tylko wylogowania się i ponownego zalogowania
Kartikey Tanna
15

Dlaczego użytkownik Linuksa nie może edytować plików w grupie, do której należy?

Używam Ubuntu 12.04 i miałem ten sam problem, gdy użytkownik nie może pisać do pliku, do którego ma dostęp grupowy. Na przykład:

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                               

Zrestartuj terminal teraz, aby upewnić się, że użytkownicy i grupy odniosły skutek. Zaloguj się jako el.

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

Stwarza ostrzeżenie:

Warning: W10: Warning: Changing a readonly file"

Co? Zrobiłem wszystko dobrze, dlaczego to nie działa?

Odpowiedź:

Wykonaj pełny restart komputera. Zatrzymanie terminala nie wystarczy, aby rozwiązać te problemy.

Wydaje mi się, że apache2 używa również grupy www-data, więc zadanie w jakiś sposób uniemożliwiało poprawne wymuszanie użytkowników i grup. Nie tylko musisz się wylogować, ale musisz zatrzymać i ponownie uruchomić wszystkie usługi, które używają Twojej grupy. Jeśli ponowne uruchomienie się nie powiedzie, masz większe problemy.

Eric Leschinski
źródło
1
Co to są „większe problemy”?
Ejaz,
13

Miałem ten sam problem, sprawdź, czy folder ma więcej reguł ACL, czy nie!

Jeśli widzisz + (znak plus) podczas wyświetlania folderu, oznacza to, że ma on specjalne reguły dostępu. Na przykład:

[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

Wyświetl uprawnienia:

[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

Oznacza to, że mój użytkownik (user_in_apache_group) nie ma uprawnień do zapisu w tym folderze.

Rozwiązaniem jest to, co powiedział @techtonik, dodaj uprawnienia do zapisu dla użytkownika:

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

Sprawdź uprawnienia ponownie:

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

Mam nadzieję, że to pomoże. ;)

Laszlo Lugosi
źródło
8

Użyj Linux ACL (listy kontroli dostępu) - jest to bardziej szczegółowa wersja systemu uprawnień,

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

Spowoduje to ustawienie zarówno aktywnych praw do katalogu, jak i domyślnych praw do wszystkiego, co jest w nim utworzone.

To nie zadziała bez ponownego logowania, jeśli właśnie dodałeś siebie do staffgrupy, ale możesz ustawić uprawnienia tylko dla siebie dla bieżącej sesji.

anatoly techtonik
źródło
5

Wystąpił problem, gdy użytkownik nie mógł uzyskać dostępu do /foo/bar/bazkatalogu, nawet jeśli miał uprawnienia, ponieważ nie miał dostępu do barkatalogu.

Kolyunya
źródło
-2

Sprawdź, czy Twój katalog nadrzędny ma uprawnienia, zanim dodasz zawartość do tego pliku

sudo chmod -R 777 /yourDir/file.log
Mani P
źródło