Как удалить разрешения NTFS для конкретного пользователя на каталоге с помощью PowerShell?

Вопрос или проблема

Этот скрипт пытается сделать следующее

  • создать SHARE, отключить наследование и преобразовать унаследованные правила в явные правила.
  • удалить любые права у BUILTIN\Utilisateurs на этот каталог

К сожалению, в конце права остаются теми же, и Utilisateurs все еще в правилах!

Что я делаю не так?

$sharePath = "C:\SHARE"

New-Item -Path $sharePath -ItemType Directory
$acl = Get-Acl -Path $sharePath
$acl.SetAccessRuleProtection($true, $true)
Set-Acl -Path $sharePath -AclObject $acl

Write-Host "До :"
$acl.Access | Format-List *

$groupToRemove = "BUILTIN\Utilisateurs"
foreach ($accessRule in $acl.Access) {
    if ($accessRule.IdentityReference -eq $groupToRemove) {
        # Удалить правило. Это, похоже, работает, потому что возвращает true в powershell
        $acl.RemoveAccessRule($accessRule)
    }
}

Set-Acl -Path $sharePath -AclObject $acl

Write-Host "После :"
$acl.Access | Format-List *

Решено, вам нужно заново получить acl после отключения наследования

$sharePath = "C:\SHARE"

New-Item -Path $sharePath -ItemType Directory
$acl = Get-Acl -Path $sharePath
$acl.SetAccessRuleProtection($true, $true)
Set-Acl -Path $sharePath -AclObject $acl

# НУЖНО ЗАНОВО ПОЛУЧИТЬ ACL
$acl = Get-Acl -Path $sharePath

Write-Host "До :"
$acl.Access | Format-List *

$groupToRemove = "BUILTIN\Utilisateurs"
foreach ($accessRule in $acl.Access) {
    if ($accessRule.IdentityReference -eq $groupToRemove) {
        # Удалить правило. Это, похоже, работает, потому что возвращает true в powershell
        $acl.RemoveAccessRule($accessRule)
    }
}

Set-Acl -Path $sharePath -AclObject $acl

Write-Host "После :"
$acl.Access | Format-List *

Ответ или решение

Удаление NTFS прав конкретного пользователя с помощью PowerShell

Для удаления NTFS прав определённого пользователя на директории в Windows с использованием PowerShell важно учесть несколько ключевых моментов: правильное редактирование ACL (Access Control List), отключение наследования прав и обновление ACL после внесения изменений. В этом ответе мы подробно разберём процесс, основываясь на предоставленном вами сценарии.

Шаги для удаления прав

  1. Создание директории: Для начала вам нужно создать директорию, к которой будут применяться права доступа.

  2. Получение текущих прав доступа: После создания директории необходимо получить текущие настройки ACL.

  3. Отключение наследования: Важно отключить наследование прав, чтобы все унаследованные права стали явными (explicit) и могли быть изменены.

  4. Удаление прав доступа: Далее мы должны пройтись по списку разрешений и удалить те, которые соответствуют специфической группе или пользователю.

  5. Обновление ACL: После изменения необходимо заново установить модифицированные права доступа.

Пример кода

Вот исправленный и оптимизированный код для выполнения вышеуказанных шагов:

# Укажите путь к директории
$sharePath = "C:\SHARE"

# Создаем новую директорию
New-Item -Path $sharePath -ItemType Directory

# Получаем ACL для этой директории
$acl = Get-Acl -Path $sharePath

# Отключаем наследование и конвертируем унаследованные правила в явные
$acl.SetAccessRuleProtection($true, $true)
Set-Acl -Path $sharePath -AclObject $acl

# **Обновляем ACL после отключения наследования**
$acl = Get-Acl -Path $sharePath

Write-Host "Перед удалением прав:"
$acl.Access | Format-List *

# Указываем группу или пользователя, права которого нужно удалить
$groupToRemove = "BUILTIN\Utilisateurs"

# Проходим по списку разрешений и удаляем указанный доступ
foreach ($accessRule in $acl.Access) {
    if ($accessRule.IdentityReference -eq $groupToRemove) {
        $acl.RemoveAccessRule($accessRule)
        Write-Host "Право удалено для: $groupToRemove"
    }
}

# Устанавливаем обновленный ACL
Set-Acl -Path $sharePath -AclObject $acl

Write-Host "После удаления прав:"
$acl.Access | Format-List *

Пояснение к коду

  • New-Item: Этот командлет создает новую директорию, если она не существует.
  • Get-Acl: Получает текущий объект ACL для указанного пути.
  • SetAccessRuleProtection: Отключает наследование и делает существующие права явными.
  • RemoveAccessRule: Удаляет права доступа конкретного пользователя или группы.
  • Set-Acl: Применяет изменения к объекту ACL, фактически обновляя разрешения на директории.

Почему важно получение ACL после отключения наследования?

После отключения наследования и преобразования унаследованных правил в явные, текущий объект ACL изменяется. Чтобы удалить права успешно, необходимо заново получить обновленный объект ACL, так как старый объект уже не отражает текущую конфигурацию прав доступа.

Заключение

Правильное управление правами доступа – это важный аспект безопасности в Windows. Используя PowerShell, вы можете эффективно управлять ACL и изменять разрешения на директории. Убедитесь, что вы всегда проверяете текущие права доступа после внесения изменений, чтобы избежать нежелательных проблем с доступом. Использование правильных команд и логика выполнения операций поможет в управлении безопасностью вашей системы.

Оцените материал
Добавить комментарий

Капча загружается...