Вопрос или проблема
Этот скрипт пытается сделать следующее
- создать 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 после внесения изменений. В этом ответе мы подробно разберём процесс, основываясь на предоставленном вами сценарии.
Шаги для удаления прав
-
Создание директории: Для начала вам нужно создать директорию, к которой будут применяться права доступа.
-
Получение текущих прав доступа: После создания директории необходимо получить текущие настройки ACL.
-
Отключение наследования: Важно отключить наследование прав, чтобы все унаследованные права стали явными (explicit) и могли быть изменены.
-
Удаление прав доступа: Далее мы должны пройтись по списку разрешений и удалить те, которые соответствуют специфической группе или пользователю.
-
Обновление 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 и изменять разрешения на директории. Убедитесь, что вы всегда проверяете текущие права доступа после внесения изменений, чтобы избежать нежелательных проблем с доступом. Использование правильных команд и логика выполнения операций поможет в управлении безопасностью вашей системы.