Главная

Thursday, 5 January 2023

Управление NTFS правами в AD из PowerShell.


Всем привет.

Каждый файл и папка в файловой системе NTFS имеет список управления доступом (ACL). Список контроля доступа содержит набор записей управления доступом (ACE). Каждый ACE определяет разрешение на файл или папку для учетной записи. Например, глобальной группе Sales AD можно предоставить полный контроль над файлом. Разрешения также могут быть унаследованы от родительских папок. Если вы создадите новую папку, а затем создать файл в этой папке, новый файл наследует разрешения от родительской папки и из любой другой родительской папки по умолчанию. Вы можете управлять списком ACL, чтобы добавлять или удалять разрешения, и вы можете изменить наследование.

В PowerShell существует ограниченная поддержка  для управления разрешениями NTFS. PowerShell имеет командлеты Get-ACL и Set-ACL, но создание отдельных ACE и управление наследованием требует использования .NET Framework. Более рациональным подходом считается использование стороннего модуль NTFSSecurity, который позволяет управлять ACE и ACL, включая работу с наследованием.

В варианте ниже используется сервер SRV1, присоединенный к домену сервер общего назначения, работающий под управлением Windows Server 2019. Группа Sales должна существовать в Active Directory (AD), но если ее нет, то мы ее создадим. Для этого будем использовать учетную запись, которая является членом группы администраторов домена, и выполним инструкции из консоли PowerShell в режиме Администратора

1.  Инсталируем NTFSSecurity модуль с PowerShell Gallery:

Install-Module NTFSSecurity -Force

2.  Оценим список команд модуля:

Get-Command -Module NTFSSecurity


3.  Создадим папку и новый файл в ней:

New-Item -Path C:\Secure1 -ItemType Directory "Secure" | Out-File -FilePath C:\Secure1\Secure.Txt

4.  Смотрим ACL для этой папки:

Get-NTFSAccess -Path C:\Secure1 |  Format-Table -AutoSize


5.  Смотрим ACL для файла:

Get-NTFSAccess C:\Secure1\Secure.Txt |   Format-Table -AutoSize


6.  Создаем группу Sales если она еще не существует:

try {

  Get-ADGroup -Identity 'Sales' -ErrorAction Stop

}

catch {

  New-ADGroup -Name Sales -GroupScope Global

}

7.  Проверяем что группа реально создана:

Get-ADGroup -Identity Sales


8.  Даем доменным администраторам полный контроль на папку:

$AHT1 = @{

  Path         = 'C:\Secure1'

  Account      = 'Reskit\Domain Admins' 

  AccessRights = 'FullControl'

}

Add-NTFSAccess @AHT1 

9.  Удаляем доступ для Builtin\Users access для файла Secure.Txt:

$AHT2 = @{

  Path         = 'C:\Secure1\Secure.Txt'

  Account      = 'Builtin\Users' 

  AccessRights = 'FullControl'

}

Remove-NTFSAccess @AHT2 

10.  Удаляем наследование прав на папку:

$IRHT1 = @{

  Path  = 'C:\Secure1'

  RemoveInheritedAccessRules = $True

}

Disable-NTFSAccessInheritance @IRHT1

11.  Добавим группе Sales доступ к папке:

$AHT3 = @{

  Path         = 'C:\Secure1\'

  Account      = 'Reskit\Sales' 

  AccessRights = 'FullControl'

}

Add-NTFSAccess @AHT3

12. Получим обновленный ACL для папки:

Get-NTFSAccess -Path C:\Secure1 |   Format-Table -AutoSize


13. Получим обновленный ACL для файла:

Get-NTFSAccess -Path C:\Secure1\Secure.Txt |  Format-Table -AutoSize 


14. Также мы можем проверить эффективные NTFS разрешения на конкретный файл или папку с помощью командлета Get-EffectiveAccess. Допустим мы предоставили доступ на некоторую папку нескольким группам безопасности AD и теперь хотим понять, есть ли у конкретного аккаунта (SID) доступ к данной папке или нет. Как это сделать, не выводя состав групп AD, в которых входит его учетная запись? В этой ситуации как раз поможет функция проверки эффективные NTFS разрешений. Допустим, нужно проверить эффективные права на все вложенные папки в каталоге для пользователя Reskit\Sales:

Get-ChildItem -Path c:\Secure1 -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'Reskit\Sales' | select Account, AccessControlType, AccessRights, FullName

Либо мы можем проверить эффективные разрешения на конкретный файл:

Get-Item -Path 'C:\Secure1\Secure.Txt' | Get-NTFSEffectiveAccess -Account 'Reskit\Sales' | Format-List


Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?