Назад | Перейти на главную страницу

Список прав доступа к папке пользователя

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

Мне нужно найти все папки, к которым у него был доступ, и отозвать его разрешения, а затем настроить его с другим набором разрешений на доступ.

Есть ли какой-нибудь инструмент (желательно бесплатный), который перечисляет все разрешения NTFS для данного пользователя? Я пробовал использовать AccessEnum от Sysinternals, но список не может быть отфильтрован по имени пользователя и бесполезен для меня. Я тоже посмотрел на CACLS, но, насколько я могу судить, он отображает разрешения, упорядоченные по файлу, а не по пользователю.

Любые идеи?

Похоже, это помогает (возможно, с оговоркой) найти все папки, к которым у пользователя someuser есть доступ, в этом примере на диске C, с помощью встроенной команды Windows icacls:

icacls c:\*. /findsid someuser /t /c /l

/ T необходим, чтобы указать ему рекурсивные каталоги. Параметр / c необходим, чтобы он продолжал работать, даже если обнаружил ошибки. / L заставляет его работать с символическими ссылками (если есть). (Последняя буква L, и эти флаги могут быть в верхнем или нижнем регистре.)

В *. будет распознаваться старожилами DOS как способ сказать «ищите каталоги, а не файлы». Конечно, если вы действительно хотите найти файлы, а не папки, измените его на *.*, и, конечно, вы можете указать его на любой диск или запустить его из любой папки, не указав путь к диску / папке и разрешив поиск только относительно этой папки.

Я искал тот же ответ, что и OP, и нашел эту запись, но был ошеломлен, увидев только предложение, основанное на загружаемом инструменте. Как и другие, я предпочел использовать что-то встроенное, и я нашел это в этом инструменте icacls.

И я подтвердил, что он работает в Windows Server 2012, 2008 и Windows 7, поэтому подозреваю, что он также будет работать в Server 2003, Windows 8 и так далее.

В итоговом списке будут папки, указанные строчкой за строчкой, например:

Обнаружен SID: c: \ somedir \ somesubdir.

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

c: \ Информация о системном томе: доступ запрещен.

И если вы можете искать весь диск, это может привести к сотням таких ошибок, что затруднит поиск результатов на них.

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

Теперь, если вы хотели скрыть эти ошибки, вы не сможете использовать команду find для передачи по конвейеру только тех результатов, которые ДЕЙСТВИТЕЛЬНО успешны (те, которые ДОЛЖНЫ относиться к «SID found»), потому что ошибки НЕ будут отфильтрованы. трубкой к команде find. Вместо этого, если вы хотите удалить все ошибки, вам нужно использовать довольно неясный трюк перенаправления потока ошибок (stderr) в «битовое ведро» с помощью 2>nul:. Таким образом, приведенный выше пример будет выглядеть следующим образом:

icacls c:\*. /findsid someuser /t /c /l 2>nul:

Только помните, что некоторые из папок, которые генерировали такие ошибки, ошибки которых теперь скрыты, вполне могут быть папками, к которым у пользователя с именем someuser ДЕЙСТВИТЕЛЬНО есть доступ, но у ВАС нет. Так что вы можете дважды подумать, чтобы просто игнорировать эти ошибки. но если вы хотите, вы можете это сделать.

Я понимаю, что такая возможность потенциально ограничивает ценность этого ответа. Если кто-нибудь, более знакомый с вещами, хотел бы дополнить или исправить мой ответ, я буду приветствовать это.

Вы можете использовать PowerShell без необходимости загружать что-либо еще. Это будет работать с v2.0 и новее:

$ReferenceAccountName = 'DOMAIN\Username'
[string[]]$SearchDirectories = @('X:\SomeDirectory', 'F:\AnotherDirectory')

foreach ($RootDir in $SearchDirectories) {
    $DirACL = Get-Acl -Path $RootDir
    foreach ($ACL in $DirACL.Access){
        if ($ACL.IdentityReference -like $ReferenceAccountName){
            Write-Output $RootDir
        }
    }
    foreach ($Directory in (Get-ChildItem -Path $RootDir -Recurse | `
                            Where-Object -FilterScript {$_.Attributes `
                            -contains 'Directory'})){
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access){
            if ($ACL.IdentityReference -like $ReferenceAccountName){
                Write-Output $Directory.FullName
            }
        }
    }
}

Это не так чисто, как то, что доступно в PowerShell v3 и более поздних версиях, но оно будет работать. Это выведет список найденных каталогов в строковом формате.

Вы можете легко вывести их как объекты и продолжить работу с ними (экспортировать их в файл CSV, удалять записи по мере их обнаружения, обновлять тикет информацией ... и т. Д.), Манипулируя входным объектом Write- Выходные вызовы.

Я нашел решение своего вопроса. Я считаю, что это очень просто и чисто. Вам нужно только установить subinacl и запустить одну строку из командной строки.

Вы можете скачать subinacl здесь. Хотя официально он поддерживается только в Windows 2000, Windows XP и Windows Server 2003, он также должен работать в Windows Vista, Windows Server 2008 и Windows 7.

Затем вы запускаете из командной строки следующее:

subinacl /testmode /noverbose /outputlog=c:\TEXTFILENAME.TXT /subdirectories=directoriesonly X:\*.* /findsid=DOMAIN\username

куда ИКС: это диск, который вы сканируете и имя пользователя - это пользователь, разрешения которого вы хотите указать. Сканирование может занять некоторое время, и вы получите результат в TEXTFILENAME.TXT.

Если вы используете переключатель / noverbose вы получаете компактный список прав доступа - в основном вы видите, к каким каталогам у пользователя есть доступ (с масками доступа и некоторыми другими вещами, которые иногда могут пригодиться).

Я использовал OpenOffice Calc чтобы импортировать список, а затем применил Пользовательский фильтр и отфильтровал только те строки, которые начинаются с + ФАЙЛ. Эти строки содержат каталоги, к которым у пользователя есть доступ. Вот так, используя простые инструменты, вы получаете только актуальную информацию.

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