Pull to refresh

Чистим права доступа к файлам и папкам от удалённых пользователей

Level of difficultyMedium
Reading time1 min
Views2.2K

Многие системные администраторы в своей практике сталкиваются с файлопомойками, на которых их коллеги нерадивые назначали права к файлам и папкам напрямую пользователю, а не группе доступа. А пользователей со временем удаляли из домена. Как итог имеем гору файлов и папок, у которых в разделе безопасность мы видим гору sid ов. Чтобы побороть данную проблему предлагаю небольшой powershell скрипт

# Каталог в котором выполнять проверку
$folder="D:\DT$\data"
# Получаем список всех файлов, папок и подпапок
$resc = gci -recurse $folder
# Построчно обрабатываем полученный массив
foreach($r in $resc){
    # Получаем acl лист объекта, в случае ошибки выводим путь до  проблемного файла/папки
    try {$acl = (Get-Item $r.fullname ).GetAccessControl('Access') }  catch { "error path" + $r.fullname  }
    # Отсортируем явно назначенные и содержащие в названии кусок SID
    $acesToRemoves = $acl.Access | ?{ $_.IsInherited -eq $false -and $_.IdentityReference -like "S-1-*"}
    # На случай если  несколько таких потеряшек у объекта
    foreach ( $acesToRemove in $acesToRemoves){
        # Отфильтровываем пустые переменные дабы избежать ошибок
        if ($acesToRemove){
            $r.fullname # Выводим с чем работаем
            # Удаляем sid из acl листа и применяем новый acl на папку/файл
            $acl.RemoveAccessRuleAll($acesToRemove)
            Set-Acl -AclObject $acl $r.fullname
        }
    }
}

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

ищем проблемные объекты при помощи утилиты AccessEnum https://learn.microsoft.com/ru-ru/sysinternals/downloads/accessenum и чистим ручками

Tags:
Hubs:
+5
Comments5

Articles