¿Por qué pude eliminar un archivo propiedad de root en mi directorio de inicio sin ser root?

40

Así que estaba haciendo algo de mantenimiento en mi servidor hoy y noté que podía eliminar un archivo propiedad de root en mi directorio de inicio.

Pude reproducir una muestra:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

Mi pregunta es ¿cómo pude eliminar un archivo que es propiedad de root y tiene permisos -rw-r--r--, mientras no soy root?

Carl Bennett
fuente
66
Puede eliminar la entrada en el directorio que apunta al archivo porque tiene acceso de escritura al directorio. No necesariamente puede eliminar el archivo; el archivo puede tener otro enlace duro en otro lugar.
user253751
2
Extensión divertida: también puede cambiar el nombre del archivo o crear enlaces duros.
Peter dice reinstalar a Mónica el
11
Por favor, reconsidere su elección para la respuesta aceptada, porque la respuesta actual es francamente engañosa: no se le permite hacer nada con respecto a los contenidos dentro de ella en función de los permisos del directorio .
Cthulhu
@Cthulhu Hecho! ¡Gracias a todos por todos los comentarios a estas preguntas y respuestas, sin duda mucha información útil aquí!
Carl Bennett

Respuestas:

34

Los permisos, el contenido y todos los atributos son parte del inodo. El nombre está en la entrada del directorio. Los permisos no se heredan de forma recursiva (excepto cuando usa valores predeterminados en las ACL de Posix).

Cuando elimina un archivo, internamente simplemente elimina un enlace duro de la entrada del directorio al inodo. Cuando se eliminan todos los enlaces duros y el inodo no está en uso, el sistema de archivos recuperará el espacio. Solo necesita permiso de escritura en la carpeta, independientemente de los permisos establecidos en el archivo (con la excepción del permiso ext inmutable). Lo mismo para una carpeta vacía.

Cuando elimina una carpeta que no está vacía, necesita permiso de escritura en la carpeta que está eliminando y su padre.

Mircea Vutcovici
fuente
1
Entonces, ¿los permisos están en el inodo o los permisos están en el enlace al inodo, y solo estoy eliminando ese enlace (y, por lo tanto, el único enlace se elimina, por lo que el inodo deja de existir)?
Carl Bennett
3
Los permisos están en el inodo. Esto se verifica fácilmente creando un enlace rígido a un archivo, cambiando los permisos sobre eso y luego verificando los permisos en el original.
Wouter Verhelst, el
pero digamos que hay un directorio y un archivo que pertenecen a la raíz, el directorio está en un directorio propiedad del usuario. Entonces no podrías eliminarlos, ¿verdad?
njzk2
1
Es un atributo específico de ext2, ext3 y ext4. Ejemplo: sudo touch test_file;sudo chattr +i test_file;rm -f test_fileVer:man chattr
Mircea Vutcovici
1
El atributo inmutable protege un archivo para cualquier cambio incluso desde la raíz.
Mircea Vutcovici
19

Cuando posee el directorio, se le permite hacer cualquier cosa y los contenidos dentro de él en función de los permisos del directorio. Por lo tanto, a pesar de no ser propietario del archivo, aún pudo eliminarlo porque tenía permiso de lectura / escritura en el directorio en el que residía el archivo.

inetknght
fuente
46
No exactamente. Por ejemplo, OP no podría modificar ese archivo propiedad de root. La cuestión es que eliminar un archivo no se considera una operación en el archivo sino más bien en el directorio (eliminar el puntero a un archivo) y es por eso que los permisos en el directorio importaron.
Cthulhu
1
@Cthulhu, ¿podría eliminar un archivo propiedad de raíz y crear uno nuevo modificado con el mismo nombre después?
KDEx
3
@ Morganor sí, podrías, pero ese ya no sería el mismo archivo. Para otro ejemplo (quizás más obvio), no podría leer el archivo en su directorio si perteneciera a la raíz y solo su propietario podría leerlo.
Cthulhu
@inetknght Esto debería aclararse. Entiendo que está tratando de referirse a la manipulación de los archivos, como entidades, pero eso no está claro. No puede modificar su contenido, por ejemplo. Y no menciona los atributos que pueden superar los permisos de directorio.
Mike S
1
@captcha Eso se debe a que el viarchivo se guarda primero en una copia temporal, luego se elimina el archivo original y se cambia el nombre de la copia al original (o algo así).
Cthulhu