Управление на ACL от PowerShell

Както знаете, във файловата система NTFS всеки обект (файл или папка) има свой собствен списък за контрол на достъпа (Достъп Контрол Списък, ACL). ACL определя кой (или какво) има достъп до обекта и какви операции е разрешено (или забранено) от този субект да извършва върху обекта.


PowerShell има две кратки команди за управление на ACL:

  • Вземете-ACL - Извлича ACL за обект. Получените данни могат да бъдат прехвърлени за по-нататъшна обработка (например чрез конвейер) или просто запазени във файл;
  • Комплект-ACL - инсталира нови или модифицира съществуващи ACL за обект.

Като най-простият пример, нека копираме разрешенията от една папка в друга:

Нека да сравним ACL преди и след. Както можете да видите, промените са очевидни.

управление

Когато копирате ACL, имайте предвид, че потребителят, при когото се извършва тази операция, трябва да е Собственик на източника на източника (в примера това е папката Тест) и да има право на поемане на собствеността. Въпросът е, че когато прехвърляте разрешения, не можете да прехвърлите друг собственик. Ако текущият потребител е собственик на папката Test и той има Take Ownership, тогава всички разрешения, включително собственика, ще бъдат копирани в папката Test2. Ако едно от условията не е изпълнено, ще бъде издадена грешка.

Копирането е полезно, но по-често трябва да задавате разрешения по-подробно. Класът .NET се използва за задаване на разрешения за NTFS FileSystemAccessRule, и списъкът с права е посочен в FileSystemRights Изброяване. Можете да покажете списък с възможни разрешения с командата:

Списъкът ще показва както основни, така и подробни разрешения (обикновено те се показват в раздела Разширени).

управление

Например, нека се опитаме да дадем на потребителя Testuser1 пълни права върху папката Test2:

Премахването на разрешенията се извършва по същия начин, но вместо метода SetAccessRule ще се използва метод RemoveAccessRule:

И един момент. Метод SetAccessRule напълно замества потребителските разрешения. Следователно, ако трябва да добавите нови права към съществуващите, използвайте AddAccessRule.