No puedo eliminar un archivo para el que tengo permisos de escritura como miembro del grupo


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

¿Lo que falta?

Respuestas:


22

Eliminar un archivo significa que está realizando cambios en el directorio en el que reside, no en el archivo en sí. Su grupo necesita rw en el directorio para poder eliminar un archivo. Los permisos en un archivo son solo para realizar cambios en el archivo en sí.

Esto puede parecer confuso al principio hasta que piense en cómo funciona el sistema de archivos. Un archivo es solo un inodo, y el directorio hace referencia al inodo. Al eliminarlo, solo está eliminando una referencia al inodo de ese archivo en el directorio. Entonces estás cambiando el directorio, no el archivo. Podría tener un enlace duro a ese archivo en otro directorio, y aún así podría eliminarlo del primer directorio sin cambiar realmente el archivo en sí, todavía existiría en el otro directorio.


Me pongo 775 drwxrwxr-xpor el directorio.
tshepang

1
¿Cuál es la propiedad grupal del directorio? Recuerde, el segundo 7 que mencionó es el permiso que tiene el grupo del directorio, no el grupo de su usuario.
jsbillings

1
ls -ld /path/to/directoryo simplemente ls -ld .si ya has cd'd a ese directorio.
jsbillings

1
por alguna razón, stat no puede buscar el ID de grupo 1002. stat busca el ID de grupo en / etc / group, NIS, LDAP, etc., y está recibiendo un error, por eso está viendo DESCONOCIDO. Intentaría correr getent group 1002para ver si te da un error más detallado.
jsbillings

1
En realidad, este comportamiento no me parece confuso en absoluto. Es idéntico a cómo funciona un directorio real "de la vida real", por eso se llama "directorio", y no, por ejemplo, "carpeta", que se comportaría de manera bastante diferente. Si quiero eliminar a alguien de mi directorio telefónico, no voy a su casa y la mato, simplemente tomo un bolígrafo y tacho su número. IOW: Necesito acceso de escritura al directorio, y no acceso a ella. Windows tiene carpetas, Unix tiene directorios, y ambos se comportan como sus contrapartes de la vida real. La confusión solo ocurre si los mezclas.
Jörg W Mittag

0

Solo el sistema puede eliminar un archivo, y solo si no tiene referencias. Un simple usuario solo puede desvincular un archivo, es decir, eliminarlo de un directorio. Necesita acceso de escritura a un directorio para desvincular un archivo de él. Desvincular un archivo no modifica el archivo, por lo que el acceso de escritura al archivo es irrelevante.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.