Je ne peux pas supprimer un fichier pour lequel j'ai des autorisations d'écriture en tant que membre du groupe

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

Que manque-t-il?

tshepang
la source

Réponses:

22

La suppression d'un fichier signifie que vous apportez des modifications au répertoire dans lequel il réside, et non au fichier lui-même. Votre groupe a besoin de rw sur le répertoire pour pouvoir supprimer un fichier. Les autorisations sur un fichier sont uniquement destinées à apporter des modifications au fichier lui-même.

Cela peut sembler déroutant au début jusqu'à ce que vous réfléchissiez au fonctionnement du système de fichiers. Un fichier n'est qu'un inode et le répertoire fait référence à l'inode. En le supprimant, vous supprimez simplement une référence à l'inode de ce fichier dans le répertoire. Vous modifiez donc le répertoire, pas le fichier. Vous pourriez avoir un lien dur vers ce fichier dans un autre répertoire, et vous seriez toujours en mesure de le supprimer du premier répertoire sans réellement changer le fichier lui-même, il existerait toujours dans l'autre répertoire.

jsbillings
la source
Je reçois 775 drwxrwxr-xpour le répertoire.
tshepang
1
Quelle est la propriété de groupe de l'annuaire? N'oubliez pas que le deuxième 7 que vous avez mentionné est l'autorisation dont dispose le groupe de l'annuaire, pas le groupe de votre utilisateur.
jsbillings
1
ls -ld /path/to/directoryou simplement ls -ld .si vous avez déjà enregistré ce répertoire.
jsbillings
1
pour une raison quelconque, stat ne peut pas rechercher l'ID de groupe 1002. stat recherche l'ID de groupe dans / etc / group, NIS, LDAP, etc., et il obtient une erreur, c'est pourquoi vous voyez UNKNOWN. J'essaierais de courir getent group 1002pour voir si cela vous donne une erreur plus verbeuse.
jsbillings
1
En fait, je ne trouve pas du tout ce comportement déroutant. Il est identique à la façon dont fonctionne un répertoire "réel", c'est pourquoi il est appelé "répertoire", et non, par exemple, "dossier", qui se comporterait de manière très différente. Si je veux supprimer quelqu'un de mon annuaire téléphonique, je ne vais pas chez elle et je la tue, je prends simplement un stylo et je frappe son numéro. IOW: J'ai besoin d'un accès en écriture au répertoire et pas d'accès à elle. Windows a des dossiers, Unix a des répertoires, et les deux se comportent comme leurs homologues réels. La confusion ne se produit que si vous les mélangez.
Jörg W Mittag
0

Seul le système peut supprimer un fichier, et uniquement s'il n'a pas de références. Un simple utilisateur peut uniquement dissocier un fichier, c'est-à-dire le supprimer d'un répertoire. Vous devez disposer d'un accès en écriture à un répertoire pour dissocier un fichier de celui-ci. La dissociation d'un fichier ne le modifie pas, donc l'accès en écriture au fichier n'est pas pertinent.

David Schwartz
la source