Запретить доступ к папкам и файлам

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

Мне нужно запретить группе доступ к папке/файлам C:\Windows\Installer

Я пробую использовать следующий код, но он применяется только к папке, а не ко всем файлам, он применяется только к некоторым файлам

$path = "C:\Windows\Installer"
 $acl = Get-Acl $path
 $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("YourUsers","FullControl", "ContainerInherit,ObjectInherit", "None", "Deny")
 $acl.AddAccessRule($AccessRule)
 Set-Acl -AclObject $acl -Path $path

Чего-то не хватает в моем скрипте?

ИЗМЕНЕНИЕ:
После проверки разрешений на файлы, которые я могу удалить, похоже, что наследование отключено

Как я могу проверить, отключено наследование или нет, и если оно отключено, как его включить

Мне нужно применить это к 5000 машинам, поэтому я делаю это через скрипт

Вы применяете изменение ACL только к папке, указанной в $path, чтобы применить ACL ко всему в папке, вам нужно перечислить каждый элемент рекурсивно:

$path = "C:\Windows\Installer"
$items = Get-ChildItem -Recurse $path

# Включает наследование для всех элементов в папке
foreach ($item in $items)
{
  $acl = Get-acl $item.FullName
  $acl.SetAccessRuleProtection($false,$true)
  Set-Acl -AclObject -Path $item.FullName
}

# Устанавливает разрешения файла/папки в нужное состояние
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("YourUsers","FullControl", "ContainerInherit,ObjectInherit", "None", "Deny")
foreach ($item in $items)
{
  $acl = Get-acl $item.FullName
  # Сравнивает разрешения элемента с разрешениями корневой папки, если они отличаются, применяет ACL
  if ((Compare-Object -ReferenceObject (Get-ACL $path) -DifferentObject (Get-ACL $item) -Property access) -ne $null)
  {
    $acl.AddAccessRule($AccessRule)
    Set-Acl -AclObject $item.FullName
  }
}
  

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

Ограничение доступа к папке и файлам в C:\Windows\Installer

Теория

Управление доступом к файлам и папкам в операционной системе Windows осуществляется через списки управления доступом (ACL). Эти списки позволяют назначать определенные права чтения, записи, исполнения или отказа в праве доступа. В вашей ситуации необходимо запретить группе пользователей полный доступ к папке C:\Windows\Installer, включая все её вложенные файлы и папки.

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

Пример

Давайте рассмотрим ваш скрипт и поправим его:

$path = "C:\Windows\Installer"
$group = "YourUsers"

# Получение всех элементов в папке с рекурсивным обходом.
$items = Get-ChildItem -Recurse $path

# Включение наследования прав доступа для всех элементов
foreach ($item in $items) {
    $acl = Get-Acl $item.FullName
    $acl.SetAccessRuleProtection($False, $True) # Обеспечивает, что права наследуются
    Set-Acl -AclObject $acl -Path $item.FullName
}

# Установка правила отказа в доступе
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($group, "FullControl", "ContainerInherit,ObjectInherit", "None", "Deny")

foreach ($item in $items) {
    $acl = Get-Acl $item.FullName

    # Проверка различий в ACL между элементом и корневой папкой
    if ((Compare-Object -ReferenceObject (Get-ACL $path) -DifferenceObject (Get-ACL $item) -Property Access) -ne $null) {
        $acl.AddAccessRule($AccessRule)
        Set-Acl -AclObject $acl -Path $item.FullName
    }
}

Применение

Скрипт позволяет рекурсивно применить правило отказа в доступе ко всем файлам и папкам внутри указанной директории. Это гарантирует, что права доступа наследуются корректно и применяются ко всем элементам, даже если изначально наследование было отключено.

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

Помните также о возможных правах администратора, которые могут быть необходимы для изменения ACL в системных директориях. Убедитесь, что вы выполняете скрипт от имени пользователя с нужными правами.

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

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