Dado un usuario no root "joshua", como root creé un archivo llamado "foo" en el directorio de inicio de joshua (/ home / johsua /); se ve así:
-rw-r--r-- 1 root root 0 12-19 21:00 foo
y luego eliminarlo como joshua, puedo eliminarlo con éxito.
Esperaría que Joshua no tenga suficiente permiso para eliminarlo. ¿Es algún tipo de 'Herencia de permisos'? Mi plataforma es Debian 5.0.7.
sudo
u otra escalada de privilegios. Probablemente pasaste por alto algo.Respuestas:
El usuario no eliminó el archivo, el sistema sí. El usuario simplemente eliminó el archivo de su propio directorio. El sistema eliminó el archivo porque su recuento de referencias cayó a cero. Es solo casualidad que el usuario que elimina el archivo del directorio bajó su recuento de referencia a cero. (Si el archivo se vinculó a otro directorio o se abrió un identificador en el archivo, no se habría eliminado).
El sistema elimina archivos automáticamente cuando su recuento de referencias cae a cero. El propietario del archivo no importa. Hay muchas formas en que alguien que no sea el propietario de un archivo puede reducir el recuento de referencias del archivo a cero.
Eliminar un archivo de un directorio (llamado 'desvinculación') es una operación en el directorio. Desvincular un archivo reduce su recuento de referencias.
Del mismo modo, un usuario que no sea el propietario podría cerrar el último identificador de un archivo que no está vinculado a ningún directorio. Cerrar ese identificador también eliminaría el archivo, ya que nuevamente el recuento de referencias se reduciría a cero.
fuente
rm
comando enturbia un poco las aguas, porquerm
es una abreviatura de "eliminar", y los usuarios están capacitados para pensarrm
en una operación de "eliminación". Muchos usuarios lo usanrm
todos los días sin saber que la operación que realmente realiza es un "desvinculado", no un "borrado". Como resultado, no debería sorprender que muchos usuarios encuentren este comportamiento sorprendente cuando lo encuentran por primera vez.rm
comando de hecho elimina un archivo o directorio de un directorio. Es peor en Windows donde se llama al comandodel
, porque solía eliminar un archivo pero en máquinas Windows modernas (desde NT4), también es una operación de desvinculación.Primera aproximación: para eliminar un archivo necesita permisos de escritura en la carpeta que lo contiene. Así que prueba / home / johsua / foo / bar, da 755 a foo y 644 a bar.
fuente