Pregunta

Tengo un servicio de Windows que actualiza nuestro producto. Copia los archivos del producto en un directorio temporal, generalmente " C: \ Windows \ Temp " ;, parchea los archivos binarios, y luego usa MoveFileEx para copiar los archivos nuevamente al directorio de instalación en un reinicio, generalmente " C: \ Archivos de programa \ Producto " ;. Los archivos en el directorio de instalación están heredando sus atributos de seguridad de la carpeta principal. Después de la copia, revisión y reinicio, faltan algunos ACL en los archivos en el directorio de instalación. Específicamente, los archivos ya no tienen la ACL para el grupo de Usuarios, por lo que los usuarios ya no pueden ejecutar el programa después del reinicio.

¿Alguien puede explicar qué está pasando aquí? Parece que al copiar desde el directorio de instalación al directorio temporal, los archivos heredan las ACL del directorio temporal. Sin embargo, en el MoveFileEx / Reboot, los archivos solo heredan las ACL que los directorios de instalación y temporales tienen en común.

¿Fue útil?

Solución

En Windows, si copia un archivo, el archivo toma las ACL del directorio de destino. Si mueve un archivo, la ACL va con él y reemplaza a cualquiera que pueda heredar de ese directorio. No estoy seguro de cómo MoveFileEx podría operar de manera diferente en un archivo.

El directorio temporal generalmente se ubica debajo del perfil de usuario (tanto% TMP% como% TEMP% generalmente apuntan aquí), por lo que copiar los archivos aquí tendrá permisos para ese usuario. Mover esos archivos al directorio de archivos de programa solo llevará los derechos de los usuarios y, por lo tanto, solo el usuario que los instala puede ejecutarlos.

Otros consejos

Una posible solución es parchear copias de los archivos en el mismo directorio pero con diferentes nombres. Después del reinicio, las versiones parcheadas podrían intercambiarse. Como alternativa, reinicie primero y luego aplíqueles parches en el lugar, y luego haga una copia de seguridad en el directorio temporal en caso de que se requiera una reversión manual.

Si realmente desea moverlos a una ubicación diferente, crear una carpeta temporal en el mismo lugar que los archivos que se van a parchar ayudaría a que los permisos sigan siendo los mismos, suponiendo que el directorio esté usando permisos heredados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top