¿Cómo mantener la propiedad de un archivo después de editarlo?

¿Cómo mantener la propiedad de un archivo después de editarlo?

Mi pregunta es similar aeste otro, excepto que se pregunta sobre archivos recién creados.

En mi caja Unix, los usuariosAlicia,Betoygatoestan en el grupogato.

Los archivos de configuración del servidor Tomcat son propiedad del usuario tomcat y del grupo tomcat.

Cambié los permisos de este archivo a legible y grabable por grupo para que Alice y Bob puedan editar los archivos.

Sin embargo, he notado que después de editarlo, el archivo pasa a ser propiedad del último usuario que lo editó.

P:¿Es posible cambiar los permisos para que Alice y Bob puedan editar los archivos sin cambiar su propiedad?

¿Cómo cambia la propiedad la edición de un archivo?

Respuesta1

El usuario resultantedel archivo depende de lo que haga el editor. Algunos editores guardan el archivo truncándolo y escribiendo sobre el archivo (sin cambiar el inodo). Y algunos editores cambian el nombre del archivo a otro nombre ( filees file~habitual) y crean un nuevo archivo con el nombre del original. La modificación del archivo original mantiene al mismo propietario, la creación de uno nuevo hace que el nuevo archivo sea propiedad del UID del proceso de creación.

De los editores que tengo en Debian, nanoy joe, también nviy vim(la versión mínima en vim-tiny) parecen sobrescribirse en el lugar. Aunque supongo vimque Emacs probablemente sea configurable en lo que hace.


Stephen comenta sobreactualizaciones atómicas. El problema con la recreación in situ es que el archivo se trunca a una longitud cero y luego se escribe. Otro proceso podría abrirlo y leerlo antes de que se escriban todos los datos.

Se realizaría una actualización atómica creando la nueva versión como, por ejemplo file.new, y luego cambiando el nombre file.newa file. Al dejar un archivo de respaldo, se puede crear file.new, vincular filey file~luego cambiarle el file.newnombre file. El cambio de nombre es atómico en el sentido de que cualquier proceso que acceda al archivo por nombre obtiene la versión antigua o la nueva, nada intermedio. Por supuesto, cualquier identificador de archivo abierto apuntará al archivo que se mantuvo abierto, brindando una vista consistente del archivo.


Desde elpermisos de archivosDesde el punto de vista, guardar sobre el mismo archivo (inodo) requiere acceso de escritura al archivo en sí (pero no al directorio), cambiarle el nombre y crear uno nuevo requiere acceso de escritura al directorio (pero no al archivo original).

(Cambiar el nombre y recrear también es, por cierto, una forma de arreglar los permisos de los archivos en caso de que alguien cree o modifique un archivo en un directorio compartido, pero se olvide de darle acceso de escritura al grupo).

Respuesta2

Comoexplicadoporilkkachu, si el editor que se utiliza crea un nuevo archivo al guardar, entonces no hay forma de controlar eldueñodel archivo. Sin embargo, lo que probablemente realmente le importe es asegurarse de que Tomcat pueda leer los archivos; puede hacerlo asegurándose de que su grupo sea tomcat(y que su grupo pueda leerlos), y eso se puede aplicar en archivos nuevos configurando el setgidbit en el archivo principaldirectorio:

chmod g+s .

Por lo tanto, si bobedita un archivo usando un editor que lo recrea, el archivo editado terminará siendo propiedad de bob:tomcatTomcat y aún podrá leerlo ( umaskal menos con un formato típico). Siempre que el tomcatgrupo pueda escribir en el directorio principal, cualquier usuario de ese grupo podrá editar archivos en el directorio (aunque solo sea volviéndolos a crear).

Sin embargo, recomendaría considerar cambiar sus procesos; probablemente no debería editar archivos directamente en la ubicación desde la que Tomcat los lee. Idealmente, los archivos se mantendrían en un VCS de algún tipo y se implementarían mediante un proceso separado (posiblemente automatizado). De esa manera evitarás todos estos problemas de propiedad...

información relacionada