Si creo un archivo y luego cambio sus permisos a 444(solo lectura), ¿cómo rmpuede eliminarlo?
Si hago esto:
echo test > test.txt
chmod 444 test.txt
rm test.txt
... rmme preguntará si deseo eliminar el archivo protegido contra escritura test.txt. Hubiera esperado que rmno se pueda eliminar dicho archivo y que tendría que hacer chmod +w test.txtprimero. Si lo hago rm -f test.txta continuación, rmse 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
rmnecesidades 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
+tpara 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?chattrpara 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
chattrcomando. 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 -ieliminar 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
lsattrpara enumerar atributos.rmde que esto nunca se me ocurrió ...¡Una respuesta a esta pregunta afirma que puede eliminar un archivo del directorio solo si tiene solo
writepermiso, es totalmente incorrecto! ¡solo inténtalo! Otorguewritepermiso a un directorio e intente eliminarlo, ¡no puede!Para eliminar un archivo dentro de un directorio necesita ambos
writeyexecutepermiso en el directorioAhora volvamos a la pregunta: para eliminar un archivo usando
rmsimplemente está eliminando su información de inodo del directorio, es decir, noshreddinglo 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