1

Я видел, что могу использовать icacls чтобы найти все файлы, соответствующие SID, но как мне найти все файлы, которые НЕ имеют доступа для пользователя SYSTEM?

ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]
    finds all matching names that contain an ACL
    explicitly mentioning Sid.

1 ответ1

1

Я не провел много испытаний, но следующий сценарий PowerShell должен работать:

param([string]$path)

get-childitem $path -recurse | Foreach {
    $file=$_;get-acl $($_.FullName)} | Foreach {

    [bool]$SystemHasAccess = $false

    $_.GetAccessRules($True,$True,[Security.Principal.SecurityIdentifier]) | Foreach {
        if ($_.IdentityReference -eq "S-1-5-18") { $SystemHasAccess = $true }  # system sid
        if ($_.IdentityReference -eq "S-1-1-0") { $SystemHasAccess = $true }   # everyone sid                    
    }

    if ($SystemHasAccess -eq $false)
    {
       write-host "System has no access to $($file.FullName)"
    }
}

скопируйте код в файл, скажем «FindFilesWithoutSystemAccess.ps1», затем вызовите его, указав путь, который вы хотите найти:

FindFilesWithoutSystemAccess.ps1 -path C:\

Скрипт перебирает все файлы по пути, включая любые файлы в подкаталогах. Для каждого файла он просматривает все записи контроля доступа в списке контроля доступа файла. Если ни один из них не соответствует внутреннему sid системы (S-1-5-18), он выводит полное имя файла.

Возможно, что файл имеет ACE для системы, но это запрещенный ACE, что означает, что приведенный выше скрипт не перехватывает файл и система по-прежнему не может получить к нему доступ. Однако сценарий маловероятен, и вы можете использовать аналогичный сценарий для поиска таких файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .