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?
files
permissions
ownership
Leonel
fuente
fuente
Respuestas:
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 (
file
comofile~
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,
nano
yjoe
tambiénnvi
yvim
(la versión mínima envim-tiny
) parecen sobrescribir en el lugar. Aunque supongo quevim
Emacs 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 renombrandofile.new
afile
. Dejando a un archivo de copia de seguridad, se podría crearfile.new
, enlacefile
afile~
y cambie el nombrefile.new
afile
. 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).
fuente
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 elsetgid
bit en el directorio principal :Por lo tanto, si
bob
edita un archivo usando un editor que vuelve a crear el archivo, el archivo editado terminará siendo propiedad debob:tomcat
Tomcat y aún podrá leerlo (con unumask
mínimo típico ). Siempretomcat
que 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 ...
fuente