Al usuario que no es sudo se le muestra el mensaje "rm: eliminar archivo vacío normal protegido contra escritura" en lugar de permiso denegado

Al usuario que no es sudo se le muestra el mensaje "rm: eliminar archivo vacío normal protegido contra escritura" en lugar de permiso denegado

Agregué un disco adicional a un servidor Linux.

Agregué la siguiente línea al fstab:

UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1          ext4    defaults 0 0

Luego creé un punto de montaje /disk1 y lo monté.

 sudo mkdir /disk1
 sudo mount /disk1

Luego creé un archivo vacío touch1.txt como usuario "hari" y sus permisos eran los siguientes

sudo touch test1.txt

-rw-rw-r-- 1 hari hari     0 Sep 12 18:23 test1.txt

Ahora, cuando inicio sesión como otro usuario y elimino el archivo test1.txt, en realidad me pregunta y luego me lo niega en lugar de decir "Permiso denegado". ¿Por qué es así? y ¿cómo puedo hacer para que se comporte como "normal"?

hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file ‘test2.txt’? y
rm: cannot remove ‘test2.txt’: Operation not permitted

Respuesta1

Los permisos de Unix son un poco extraños cuando se trata de la operación de eliminación.

Para empezar, eliminar un archivo realmente implica eliminar el enlace al archivo de un directorio. Dado que la mayoría de los sistemas de archivos Unix permiten enlaces físicos, es posible que el archivo esté vinculado desde más de un directorio, por lo que existe más de un enlace. Y cuando elimina un enlace, el archivo no se elimina a menos que no existan otros enlaces.

Por esta razón, la llamada al sistema real utilizada para "eliminar" un archivo se llama unlink. Sin embargo, la utilidad de comando de shell que realiza la desvinculación se llama rm, que es un mnemotécnico para "eliminar".

Dado que la operación de desvinculación modifica ladirectorio(eliminando la entrada del directorio) y no el archivo, el permiso necesario para la operación es el permiso de escrituraen el directorio. Los permisos del archivo en sí son irrelevantes.

Sin embargo, resulta que es un error común intentar eliminar un archivo que en realidad no le pertenece de un directorio en el que tiene permiso de escritura. (Más exactamente, la situación no es común, pero en los casos en que existe, es algo común intentar eliminar el archivo por error).

Para ayudar a proteger a los administradores de sistemas de dispararse a sí mismos, la rmutilidad primero verifica que la persona que la invoca tenga permiso de escritura en elarchivo, aunque ese permiso no es necesario para desvincular el archivo. Por razones obvias, realiza esta comprobación antes de intentar eliminar el archivo.

La rmutilidad lo hacenocompruebe si se permite el uso para desvincular el archivo, porque "verificar antes de actuar" generalmente se considera de mal estilo. Más bien, realiza la acción deseada e informa el error si el sistema operativo devuelve un error. En este caso, el sistema operativo informará EACCES porque el usuario no tiene acceso de escritura al directorio.

La desafortunada consecuencia es que si intenta eliminar un archivo para el cual no tiene permiso de escritura de un directorio en el que no tiene permiso de escritura, rmle preguntará inútilmente si desea continuar y luego le informará del error.

información relacionada