Nie mogę usunąć pliku, do którego mam uprawnienia do zapisu jako członek grupy

12
$ touch testfile
$ chmod g+w testfile
$ sudo adduser user2 user1
$ stat -c'%a %A' testfile
664 -rw-rw-r--
$ su user2
Password: 
$ groups
user2 user1
$ rm testfile 
rm: cannot remove `testfile': Permission denied

Czego brakuje?

tshepang
źródło

Odpowiedzi:

22

Usunięcie pliku oznacza, że ​​wprowadzasz zmiany w katalogu, w którym on się znajduje, a nie w samym pliku. Twoja grupa potrzebuje rw katalogu, aby móc usunąć plik. Uprawnienia do pliku służą wyłącznie do wprowadzania zmian w samym pliku.

Na początku może się to wydawać mylące, dopóki nie pomyślisz o tym, jak działa system plików. Plik jest tylko i-węzłem, a katalog odnosi się do i-węzła. Usuwając go, usuwasz po prostu odwołanie do i-węzła tego pliku w katalogu. Zmieniasz więc katalog, a nie plik. Mógłbyś mieć twardy link do tego pliku w innym katalogu, i nadal byłbyś w stanie usunąć go z pierwszego katalogu bez zmiany samego pliku, nadal istniałby w innym katalogu.

jsbillings
źródło
Dostaję 775 drwxrwxr-xdo katalogu.
tshepang
1
Jaka jest własność grupy do katalogu? Pamiętaj, że drugie 7, o którym wspomniałeś, to uprawnienie, które ma grupa katalogu, a nie grupa użytkownika.
jsbillings
1
ls -ld /path/to/directorylub po prostu ls -ld .jeśli masz już cd do tego katalogu.
jsbillings
1
z jakiegokolwiek powodu stat nie może wyszukać identyfikatora grupy 1002. stat wyszukuje identyfikator grupy w / etc / group, NIS, LDAP itp., i pojawia się błąd, dlatego widzisz NIEZNANY. Spróbuję uruchomić, getent group 1002aby zobaczyć, czy to daje bardziej pełny błąd.
jsbillings
1
W rzeczywistości nie uważam tego zachowania za mylące. Jest identyczny z działaniem rzeczywistego katalogu „rzeczywistego”, dlatego nazywa się „katalogiem”, a nie na przykład „folderem”, który zachowywałby się zupełnie inaczej. Jeśli chcę usunąć kogoś z mojej książki telefonicznej, nie idę do jej domu i nie zabijam jej, po prostu biorę długopis i przekreślam jej numer. IOW: Potrzebuję dostępu do zapisu do katalogu i żadnego dostępu do niej. Windows ma foldery, Unix ma katalogi i oba zachowują się jak ich prawdziwe odpowiedniki. Zamieszanie dzieje się tylko wtedy, gdy je pomieszasz.
Jörg W Mittag
0

Tylko system może usunąć plik i tylko wtedy, gdy nie ma żadnych odniesień. Zwykły użytkownik może jedynie odłączyć plik, to znaczy usunąć go z katalogu. Potrzebujesz dostępu do zapisu do katalogu, aby odłączyć plik od niego. Odłączenie pliku nie modyfikuje pliku, więc dostęp do pliku do zapisu jest nieistotny.

David Schwartz
źródło