Estaba usando Vim el otro día como siempre, cuando noté algo extraño. Esto es lo que hice:
~$ touch testfile
~$ ls -l | grep testfile
-rw-r--r-- 1 username groupname 0 Jul 23 10:00 testfile
~$ vim testfile
Luego hice un cambio, y salvé y renuncié :wq. Muy normal. Entonces, sin embargo:
~$ sudo chown root:root testfile
~$ sudo chmod 644 testfile
~$ sudo -k
~$ ls -l | grep testfile
-rw-r--r-- root root 0 Jul 23 10:02 testfile
~$ vim testfile
Por lo tanto, el usuario root debería tener acceso a R / W y todos los demás solo deberían haber leído. Edite el archivo, intente guardar, no puede. Impresionante, trabajando según lo previsto. Sin embargo, si guarda con :w!, vim cambia de algún modo la propiedad del archivo a nombre de usuario: grupo de usuarios y el archivo se guarda. Incluso si haces esto:
~$ sudo chmod 444 testfile
~$ sudo -k
~$ ls -l | grep testfile
-r--r--r-- 1 root root 0 Jul 23 10:06 testfile
~$ vim testfile
¡ Todavía puedes sobrescribir con :w!! ¿Qué está pasando? ¿Cómo puede violar las leyes de propiedad de archivos y permisos como este? Miré la página de ayuda en vim diciendo :help :wy encontré esto:
:w[rite]! [++opt] Like ":write", but forcefully write when 'readonly' is set or there is another reason why writing was refused.
Note: This may change the permission and ownership of the file and break (symbolic) links. Add the 'W' flage to 'cpoptions' to avoid this.
No he podido escribir en un archivo en vim anteriormente cuando no debería, así que supongo que el verdadero corazón de mi pregunta es, ¿cómo puedo hacer que un archivo no sea editable por vim y por qué no se basa en el archivo? permisos del sistema, como era de esperar, y ¿qué mecanismo está usando vim para editar el archivo que otros editores (gedit, nano) no pueden usar?
EDITAR: La computadora en la que probé esto está usando el kernel de Linux 3.15.5-2-ARCH. El número de versión de Vim es 7.4.373-1, y es el que instaló pacman: no lo compilé desde cero con ninguna opción especial.
CAP_CHOWNSe requiere llamar chown(2). Por cierto, puedo reproducir en Debian, con vim 7.4.