Non riesco a eliminare un file per il quale ho i permessi di scrittura come membro del gruppo


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

Che cosa manca?

Risposte:


22

L'eliminazione di un file significa che stai apportando modifiche alla directory in cui risiede, non al file stesso. Il tuo gruppo ha bisogno di rw nella directory per poter rimuovere un file. Le autorizzazioni per un file servono solo per apportare modifiche al file stesso.

Questo potrebbe inizialmente sembrare confuso fino a quando non pensi a come funziona il filesystem. Un file è solo un inode e la directory fa riferimento all'inode. Rimuovendolo, stai semplicemente rimuovendo un riferimento all'inode di quel file nella directory. Quindi stai cambiando la directory, non il file. Potresti avere un collegamento reale a quel file in un'altra directory e saresti ancora in grado di rimuoverlo dalla prima directory senza effettivamente modificare il file stesso, esisterebbe comunque nell'altra directory.


Ricevo 775 drwxrwxr-xper la directory.
Tshepang,

1
Qual è la proprietà del gruppo della directory? Ricorda, il secondo 7 che hai citato è l'autorizzazione del gruppo della directory, non del gruppo dell'utente.
jsbillings,

1
ls -ld /path/to/directoryo semplicemente ls -ld .se hai già eseguito il cd-cd in quella directory.
jsbillings,

1
per qualsiasi motivo, stat non può cercare l'ID di gruppo 1002. stat cerca l'ID di gruppo in / etc / group, NIS, LDAP, ecc., e viene visualizzato un errore, ecco perché viene visualizzato SCONOSCIUTO. Proverei a correre getent group 1002per vedere se ti dà un errore più dettagliato.
jsbillings,

1
In realtà, non trovo affatto questo comportamento confuso. È identico al modo in cui funziona una directory reale "reale", motivo per cui si chiama "directory" e non, ad esempio, "cartella", che si comporterebbe in modo abbastanza diverso. Se voglio cancellare qualcuno dalla mia rubrica del telefono, non vado a casa sua e non la uccido, prendo semplicemente una penna e scrivo il suo numero. IOW: Ho bisogno dell'accesso in scrittura alla directory e nessun accesso a lei. Windows ha cartelle, Unix ha directory ed entrambe si comportano come le loro controparti nella vita reale. La confusione si verifica solo se li mescoli.
Jörg W Mittag,

0

Solo il sistema può eliminare un file e solo se non ha riferimenti. Un semplice utente può solo scollegare un file, ovvero rimuoverlo da una directory. È necessario l'accesso in scrittura a una directory per scollegare un file da essa. Scollegare un file non modifica il file, quindi l'accesso in scrittura al file è irrilevante.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.