Mientras estoy conectado, puedo hacer lo siguiente:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Entonces puedo abrir vim (no como root
), editar bar
, forzar una escritura w!
y el archivo se modifica.
¿Cómo puedo hacer que el sistema operativo no permita ninguna modificación de archivo?
ACTUALIZACIÓN 02 de marzo de 2017
chmod 500 foo
es una pista falsa: el permiso de escritura en un directorio no tiene nada que ver con la capacidad de modificar el contenido de un archivo, solo la capacidad de crear y eliminar archivos.chmod 400 foo/bar
de hecho evita que se modifique el contenido del archivo. Sin embargo , esto no prevenir los permisos de fichero de ser cambiado - el propietario de un archivo siempre puede cambiar los permisos de su archivo (asumiendo que puedan acceder al archivo es decir, permiso de ejecución en todos los directorios de los antepasados). De hecho, strace (1) revela que esto es lo que está haciendo vim (7.4.576 Debian Jessie): vim llama a chmod (2) para agregar temporalmente el permiso de escritura para el propietario del archivo, modifica el archivo y luego llama a chmod ( 2) nuevamente para eliminar el permiso de escritura. Es por eso que usandochattr +i
Works, solo root puede llamarchattr -i
. Teóricamente, vim (o cualquier programa) podría hacer lo mismo con chattr que con chmod en un archivo inmutable si se ejecuta como root.
root
?
vim
realidad está cambiando los permisos y luego volviéndolo a poner.