Copiez les autorisations de sécurité d'un fichier dans un autre

19

Je voudrais répliquer les autorisations d'un fichier sur un autre. Je ne veux pas copier les données, seulement les autorisations.

Par exemple, j'ai créé un nouveau fichier et je veux qu'il ait les mêmes autorisations qu'un autre fichier qui existait déjà.

TaoTao
la source
Mêmes autorisations qu'un autre fichier, mais différentes du répertoire dans lequel elles se trouvent?
PsychoData

Réponses:

28

Vous pouvez le faire en quelques étapes avec icacls et un éditeur de texte.

Vous devez d'abord enregistrer les autorisations du fichier d'origine

icacls C:\test\file1.bin /save perms.txt

vous devrez modifier le perms.txt fichier que vous venez de créer dans le dossier que vous avez exécuté icacls. Le fichier devrait ressembler à ceci:

file1.bin
D:AI(A;;0x1301bf;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)

Vous pouvez ignorer tout ce qui se trouve sur la 2e rangée, tout ce qui nous intéresse, c'est la première rangée. Remplacez le file1.binpar votre nouveau nom de fichier file2.binet enregistrez le fichier.

Maintenant, il vous suffit de restaurer les autorisations de fichier sur le 2ème fichier, notez que nous n'avons pas inclus le nom de fichier cette fois. (Si vous obtenez une erreur indiquant que « tous les privilèges ou groupes référencés ne sont pas attribués à l'appelant », exécutez à nouveau le programme dans une invite de commandes élevée.)

icacls C:\test\ /restore perms.txt
Scott Chamberlain
la source
peut-être les mettre dans un script pour automatiser quelque peu la tâche?
PsychoData
2
Cela pourrait être fait, mais je ne peux pas penser du haut de ma tête comment faire l'étape 2 facilement. Quoi qu'il en soit, si je devais le scénariser, je ferais tout cela dans Powershell en utilisant File.GetAccessControl()etFile.SetAccessControl()
Scott Chamberlain
4

Pour le faire dans un lot (copier les autorisations de sécurité d'un sous-dossier ou de tous les dossiers d'un lecteur vers le même dossier / fichier de restriction sur un autre lecteur), créez un, disons, un cpdacls.batfichier avec ce contenu:

@echo off
for /r %1 %%f in (.) do call :icacls_one %%f %2

goto :eof

:icacls_one

icacls %1\*.* /save %TEMP%\perms.txt
icacls %2.%~pnx1 /restore %TEMP%\perms.txt
del /q %TEMP%\perms.txt

Et puis lancez-le comme cpdacls.bat e:\ f:\ .

Notez que la structure de dossiers dans le dossier de destination doit être la même que la structure de dossiers dans le dossier source, prise à partir de sa racine , sans dépendre du sous-dossier que vous avez spécifié comme dossier source.

Olexa
la source
4

La manière la plus simple, de loin, est d'utiliser PowerShell et d'exécuter:

Get-Acl .\file1 | Set-Acl .\file2
Giovanni Bassi
la source