Атрибуты безопасности файла искажаются при копировании файла

У меня есть служба Windows, которая обновляет наш продукт. Он копирует файлы продукта во временный каталог, обычно «C:\Windows\Temp», исправляет двоичные файлы, а затем использует MoveFileEx для копирования файлов обратно в каталог установки при перезагрузке, обычно «C:\Program Files\Product». ". Файлы в каталоге установки наследуют свои атрибуты безопасности из родительской папки. После копирования, исправления и перезагрузки в файлах в каталоге установки отсутствуют некоторые ACL. В частности, файлы больше не имеют ACL для группы «Пользователи», поэтому пользователи больше не могут запускать программу после перезагрузки.

Кто-нибудь может объяснить, что здесь происходит? Похоже, что при копировании из каталога установки во временный каталог файлы наследуют ACL временного каталога. Однако в MoveFileEx/Reboot файлы наследуют только те ACL, которые являются общими как для каталогов установки, так и для временных каталогов.


person Charles    schedule 14.10.2008    source источник


Ответы (2)


В Windows, если вы копируете файл, файл принимает ACL целевого каталога. Если вы перемещаете файл, ACL переопределяет все, что он может наследовать от этого каталога. Я не уверен, как MoveFileEx может работать с файлом по-другому.

Временный каталог обычно находится в профиле пользователя (оба %TMP% и %TEMP% обычно указывают на него), поэтому копирование файлов здесь будет иметь разрешения для этого пользователя. Перемещение этих файлов в каталог программных файлов приведет к тому, что с ними будут связаны только права пользователя, и, следовательно, они могут быть запущены только пользователем, выполняющим установку.

person Duncan    schedule 14.10.2008
comment
Я думаю, что это, вероятно, прибивает проблему. Однако одно исправление: каталог %TEMP% для службы, работающей с обычными привилегиями, — это C:\Windows\Temp, а не временный каталог конкретного пользователя. - person Charles; 15.10.2008

Одним из возможных обходных путей является исправление копий файлов в одном каталоге, но с разными именами. После перезагрузки исправленные версии могут быть заменены. В качестве альтернативы сначала выполните перезагрузку, а затем исправьте их на месте и просто создайте их резервную копию во временном каталоге на случай, если потребуется ручной откат.

Если вы действительно хотите переместить их в другое место, создание временной папки в том же месте, что и файлы, которые нужно исправить, поможет сохранить разрешения неизменными, если каталог использует унаследованные разрешения.

person J c    schedule 14.10.2008