Si creo un archivo y luego cambio sus permisos a 444
(solo lectura), ¿cómo rm
puede eliminarlo?
Si hago esto:
echo test > test.txt
chmod 444 test.txt
rm test.txt
... rm
me preguntará si deseo eliminar el archivo protegido contra escritura test.txt
. Hubiera esperado que rm
no se pueda eliminar dicho archivo y que tendría que hacer chmod +w test.txt
primero. Si lo hago rm -f test.txt
a continuación, rm
se eliminará el archivo sin siquiera preguntar, a pesar de que se de sólo lectura.
¿Alguien puede aclarar? Estoy usando Ubuntu 12.04 / bash.
permissions
files
rm
readonly
Magnus
fuente
fuente
Respuestas:
Todas las
rm
necesidades son permisos de escritura + ejecución en el directorio padre. Los permisos del archivo en sí son irrelevantes.Aquí hay una referencia que explica el modelo de permisos más claramente de lo que podría:
fuente
+t
para que las personas ya no puedan modificar o eliminar archivos en ese directorio que no son de su propiedad, incluso si tienen acceso de escritura al directorio?chattr
para agregar la marca inmutable a los archivos. Si no, entonces ire_and_curses es bastante correcto.Ok, de acuerdo con tu comentario a ire_and_curses, lo que realmente quieres hacer es hacer que algunos archivos sean inmutables. Puedes hacer eso con el
chattr
comando. Por ejemplo:p.ej
No puede hacer nada en un archivo inmutable: no puede eliminarlo, editarlo, sobrescribirlo, cambiarle el nombre, cambiarlo o mostrarlo, ni nada más. Lo único que puede hacer con él es leerlo (si los permisos de Unix lo permiten) y (como root)
chattr -i
eliminar el bit inmutable.No todos los sistemas de archivos admiten todos los atributos. AFAIK, inmutable es compatible con todos los sistemas de archivos de Linux comunes (incluidos ext2 / 3/4 y xfs. Zfsonlinux no admite atributos en este momento)
fuente
lsattr
para enumerar atributos.rm
de que esto nunca se me ocurrió ...¡Una respuesta a esta pregunta afirma que puede eliminar un archivo del directorio solo si tiene solo
write
permiso, es totalmente incorrecto! ¡solo inténtalo! Otorguewrite
permiso a un directorio e intente eliminarlo, ¡no puede!Para eliminar un archivo dentro de un directorio necesita ambos
write
yexecute
permiso en el directorioAhora volvamos a la pregunta: para eliminar un archivo usando
rm
simplemente está eliminando su información de inodo del directorio, es decir, noshredding
lo está del disco. Si la información del archivo de inodo no está en el directorio, no puede acceder (también porque no puede verlo ya que no está en la lista de su directorio principal), es decir, se elimina por usted.Por lo tanto, para eliminar un archivo de un directorio, todo lo que necesita es permiso en el directorio; los permisos en ese archivo son irrelevantes
fuente