Скопіюйте дозволи безпеки одного файлу в інший


19

Я хотів би копіювати дозволи файлу на інший. Я не хочу копіювати дані, лише дозволи.

Наприклад, я створив новий файл і хочу, щоб він мав такі ж дозволи, як і інший файл, який вже існував.


Такі ж дозволи, як і інший файл, але відрізняються від каталогу, в якому вони перебувають?
PsychoData

Відповіді:


28

Це можна зробити за кілька кроків за допомогою icacls та текстового редактора.

Спочатку потрібно зберегти дозволи початкового файлу

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

вам потрібно буде відредагувати створений perms.txtвами файл у папці, в якій ви працювали icacls. Файл повинен виглядати приблизно так:

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

Ви можете проігнорувати всі речі на другому ряду, все, що нам цікаво, це перший ряд. Змініть на file1.binнове ім'я файлу file2.binта збережіть файл.

Тепер вам просто потрібно відновити права доступу до другого файлу, зауважте, що ми цього разу не включали ім'я файлу. (Якщо ви отримаєте помилку, яка говорить " Не всі привілеї або групи, на які посилаються, призначені абоненту. " Запустіть програму ще раз у підвищеному командному рядку.)

icacls C:\test\ /restore perms.txt

можливо, покладіть їх у сценарій, щоб дещо автоматизувати завдання?
PsychoData

2
Це можна зробити, але я не можу придумати верхній частині голови, як легко зробити крок 2. У будь-якому разі, якби я збирався його сценарію, я просто зробив би всю річ у Powershell, використовуючи File.GetAccessControl()іFile.SetAccessControl()
Скотт Чемберлен

4

Щоб зробити це в пакеті (скопіюйте пемісії безпеки із підпапки або всіх папок одного диска в ту саму папку / стриктуру файлів на іншому диску), створіть, скажімо, cpdacls.batфайл із цим вмістом:

@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

А потім запустити так cpdacls.bat e:\ f:\.

Зауважте, що структура папки в цільовій папці повинна бути такою ж, як структура папки у вихідній папці, взята з її кореня , не залежно від того, яку підпапку ви вказали як вихідну папку.


4

Найпростіший спосіб на сьогодні - це використовувати PowerShell і запускати:

Get-Acl .\file1 | Set-Acl .\file2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.