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

9e6a4dd82e9c7223d2c7c86aa5362601.jpg

Многие системные администраторы в своей практике сталкиваются с файлопомойками, на которых их коллеги неродивые назначали права к файлам и папкам напрямую пользователю, а не группе доступа. А пользователей со временем удаляли из домена. Как итог имеем гору файлов и папок, у которых в разделе безопасность мы видим гору 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 и чистим ручками

© Habrahabr.ru