Skopiuj uprawnienia bezpieczeństwa jednego pliku do drugiego

19

Chciałbym zreplikować uprawnienia pliku do innego. Nie chcę kopiować danych, tylko uprawnienia.

Na przykład utworzyłem nowy plik i chcę, aby miał takie same uprawnienia jak inny plik, który już istniał.

TaoTao
źródło
Te same uprawnienia co inny plik, ale inne niż katalog, w którym się znajdują?
PsychoData,

Odpowiedzi:

28

Możesz to zrobić w kilku krokach za pomocą icacls i edytora tekstu.

Najpierw musisz zapisać uprawnienia oryginalnego pliku

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

musisz edytować perms.txtwłaśnie utworzony plik w dowolnym folderze, w którym się uruchomiłeś icacls. Plik powinien wyglądać mniej więcej tak:

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

Możesz zignorować wszystkie rzeczy w drugim rzędzie, wszystko, na czym nam zależy, to pierwszy rząd. Zmień na file1.binnową nazwę pliku file2.bini zapisz plik.

Teraz wystarczy przywrócić uprawnienia do pliku w drugim pliku, zwróć uwagę, że tym razem nie podaliśmy nazwy pliku. (Jeśli pojawi się komunikat o błędzie „ Nie wszystkie wymienione przywileje lub grupy są przypisane do dzwoniącego. ” Uruchom program ponownie w wierszu polecenia z podwyższonym poziomem uprawnień).

icacls C:\test\ /restore perms.txt
Scott Chamberlain
źródło
może umieścić je w skrypcie, aby nieco zautomatyzować zadanie?
PsychoData,
2
Można to zrobić, ale nie mogę oderwać głowy od głowy, jak łatwo zrobić krok 2. W każdym razie, gdybym miał to napisać, zrobiłbym wszystko w Powershell, używając File.GetAccessControl()iFile.SetAccessControl()
Scott Chamberlain
4

Aby utworzyć partię (skopiuj pemisje zabezpieczeń z podfolderu lub wszystkich folderów jednego dysku do tego samego folderu / pliku na innym dysku), utwórz, powiedzmy, cpdacls.batplik o następującej treści:

@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

A potem uruchom to jak cpdacls.bat e:\ f:\.

Pamiętaj, że struktura folderów w folderze docelowym musi być taka sama jak struktura folderów w folderze źródłowym, pobierana z jego katalogu głównego , niezależnie od tego, który podfolder został określony jako folder źródłowy.

Olexa
źródło
4

Jak dotąd najprostszym sposobem jest użycie programu PowerShell i uruchomienie:

Get-Acl .\file1 | Set-Acl .\file2
Giovanni Bassi
źródło