J'ai un service Windows qui met à jour notre produit. Il copie les fichiers du produit dans un répertoire temporaire, généralement "C: \ Windows \ Temp", corrige les binaires, puis utilise MoveFileEx pour copier les fichiers dans le répertoire d'installation lors d'un redémarrage, généralement "C: \ Program Files \ Product ". Les fichiers du répertoire d'installation héritent leurs attributs de sécurité du dossier parent. Après la copie, le correctif et le redémarrage, il manque des ACL dans les fichiers du répertoire d'installation. Plus précisément, les fichiers n'ont plus la liste de contrôle d'accès pour le groupe Utilisateurs, de sorte que les utilisateurs ne peuvent plus exécuter le programme après le redémarrage. Est-ce que quelqu'un peut expliquer ce qui se passe ici? Il semble que la copie du répertoire d'installation dans le répertoire temporaire, les fichiers héritent les ACL du répertoire temporaire. Cependant, sur le MoveFileEx/Reboot, les fichiers héritent uniquement des ACL que les répertoires install et temp ont en commun.Attributs de sécurité de fichier endommagés lors de la copie d'un fichier
Répondre
Dans Windows si vous copiez un fichier, le fichier prend les ACL du répertoire de destination. Si vous déplacez un fichier, l'ACL l'emporte sur tout ce qu'il pourrait hériter de ce répertoire. Je ne sais pas comment MoveFileEx pourrait fonctionner différemment sur un fichier.
Le répertoire temporaire est généralement situé sous le profil utilisateur (les deux% TMP% et% TEMP% pointent généralement ici) afin de copier les fichiers ici auront des autorisations pour cet utilisateur. Le déplacement de ces fichiers vers le répertoire des fichiers de programme ne prendra que les droits de ces utilisateurs et ne pourra donc être exécuté que par l'utilisateur installant.
Une solution de contournement potentielle consiste à patcher des copies des fichiers avec-dans le même répertoire mais avec des noms différents. Après le redémarrage, les versions corrigées peuvent être permutées. Vous pouvez également effectuer un redémarrage, puis les patcher sur place et les sauvegarder dans le répertoire temporaire si une restauration manuelle est requise. Si vous voulez vraiment les déplacer vers un emplacement différent, créer un dossier temporaire au même endroit que les fichiers à patcher aiderait les autorisations à rester les mêmes en supposant que le répertoire utilise des autorisations héritées.
Je pense que c'est probablement le problème. Une correction cependant, le répertoire% TEMP% pour un service s'exécutant avec les privilèges ususal est C: \ Windows \ Temp plutôt que le répertoire temporaire d'un utilisateur spécifique. – Charles