2008-10-14 6 views
3

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

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

ответ

4

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

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

+0

Я думаю, что это, вероятно, подталкивает проблему. Одна из поправок, однако,%% TEMP% для службы, работающей с привилегиями ususal, - это C: \ Windows \ Temp, а не временный каталог конкретного пользователя. – Charles 2008-10-15 13:35:21

0

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

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