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

11

Mi pregunta es similar a esta otra , excepto que uno pregunta acerca de los archivos recién creados.

En mi cuadro de Unix, los usuarios alice , bob y tomcat están en el grupo tomcat .

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

He cambiado los permisos de este archivo a legible y escribible por grupo para que Alice y Bob puedan editar los archivos.

Sin embargo, he notado que después de la edición, 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 la edición de un archivo cambia su propiedad de todos modos?

Leonel
fuente
Es su objetivo asegurarse de que Tomcat siga siendo el propietario de los archivos, o es asegurarse de que: el servidor Tomcat continúa funcionando; Alice y Bob pueden continuar editando los archivos, y que la seguridad se mantiene?
ctrl-alt-delor
1
Supongo que el servicio tomcat se ejecuta bajo el usuario 'tomcat', en función de la forma en que está redactada su pregunta. Probablemente esto no sea deseable, ya que un exploit de tomcat podría hacer que su propia configuración se reescriba para exponer bits de su servidor que puede no tener en cuenta. Debería considerar usar un grupo diferente que pueda escribir la configuración, mientras que el grupo tomcat puede leer, pero no escribir.
Ed Neville
1
Lectura de fondo recomendada
Gilles 'SO- deja de ser malvado'

Respuestas:

17

El usuario resultante del 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 ( filecomo file~es habitual) y crean un nuevo archivo con el nombre del original. La modificación del archivo original mantiene al propietario igual, al crear uno nuevo, el nuevo archivo es propiedad del UID del proceso de creación.

De los editores que tengo en Debian, nanoy joetambién nviy vim(la versión mínima en vim-tiny) parecen sobrescribir en el lugar. Aunque supongo que vimEmacs probablemente sean configurables en lo que hacen.


Stephen comenta sobre las actualizaciones atómicas . El problema con la recreación en el lugar es que el archivo se trunca a cero, luego se escribe. Otro proceso podría abrirse y leerlo antes de que se escriban todos los datos.

Se realizaría una actualización atómica creando la nueva versión como se dice file.new, y luego renombrando file.newa file. Dejando a un archivo de copia de seguridad, se podría crear file.new, enlace filea file~y cambie el nombre file.newa file. El cambio de nombre es atómico en el sentido de que cualquier proceso que acceda al archivo por su nombre obtiene la versión anterior o la nueva, no nada intermedio. Cualquier identificador de archivo abierto, por supuesto, apuntará al archivo que se mantuvo abierto, dando una vista coherente del archivo.


Desde el punto de vista de los permisos de archivo , guardar sobre el mismo archivo (inodo) requiere acceso de escritura al archivo en sí (pero no al directorio), renombrarlo y crear uno nuevo requiere acceso de escritura al directorio (pero no al archivo original )

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

ilkkachu
fuente
66
La creación y el cambio de nombre también es la única forma de garantizar que el archivo se actualice atómicamente utilizando la semántica POSIX.
Stephen Kitt
Buena explicación
Mian Asbat Ahmad
13

Según lo explicado por ilkkachu , si el editor que se está utilizando crea un nuevo archivo al guardarlo, entonces no hay forma de controlar al propietario del archivo. Sin embargo, lo que probablemente realmente le interese es asegurarse de que Tomcat pueda leer los archivos; puedes hacerlo asegurándote de que su grupo es tomcat(y su grupo puede leerlo), y eso se puede aplicar en los nuevos archivos configurando el setgidbit en el directorio principal :

chmod g+s .

Por lo tanto, si bobedita un archivo usando un editor que vuelve a crear el archivo, el archivo editado terminará siendo propiedad de bob:tomcatTomcat y aún podrá leerlo (con un umaskmínimo típico ). Siempre tomcatque el grupo principal pueda escribir en el directorio , cualquier usuario en ese grupo podrá editar archivos en el directorio (aunque solo sea volviendo a crearlos).

Sin embargo, recomendaría buscar cambiar sus procesos; probablemente no debería estar editando archivos directamente en la ubicación de donde Tomcat los lee. Idealmente, los archivos se mantendrían en un VCS de algún tipo y se desplegarían mediante un proceso separado (posiblemente automatizado). De esa manera, evitas todos estos problemas de propiedad ...

Stephen Kitt
fuente
buena solución !!
Mian Asbat Ahmad