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

Проблема с разрешениями для файлов, созданных PerfMon

Мы пытаемся реализовать запись некоторых данных в файлы CSV с помощью набора сборщиков данных в PerfMon (в системе Windows Server 2008R2).

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

Мы хотим, чтобы файлы журнала, созданные perfmon, имели разрешения «Все: F» («Полный доступ для всех»). Итак, у нас есть настройка структуры каталогов, в которой все журналы помещаются в папку:

c: \ vms \ PerfMonLogs \% MACHINENAME% (например, c: \ vms \ PerfMonLogs \ EvaluationG2)

В приведенном выше примере c: \ vms \ PerfMonLogs \ EvaluationG2 имеет права доступа Все: F (ниже icacls для этого каталога)

ОЦЕНКА G2 / Все: (OI) (CI) (F) NT AUTHORITY \ SYSTEM: (OI) (CI) (F) BUILTIN \ Administrators: (OI) (CI) (F) BUILTIN \ Пользователи журнала производительности: (OI) ( Р)

Когда набор сборщиков данных запускается, он создает новые подпапки и файлы в c: \ vms \ PerfMonLogs \ EvaluationG2, например (C: \ vms \ PerfMonLogs \ EVALUATIONG2 \ M11d26y2012N3)

Каждый из этих каталогов и файлов имеет следующие разрешения:

M11d26y2012N3 NT AUTHORITY \ SYSTEM: (OI) (CI) (F) BUILTIN \ Administrators: (OI) (CI) (F) BUILTIN \ Пользователи журнала производительности: (OI) (R)

Итак, эти новые папки, а не просто наследуют разрешения от родительской папки (не знаю почему).

Теперь мы попробовали добавить «Все: F», используя вкладку «Безопасность» в наборе сборщиков (без кубиков).

Любые идеи? Как мы можем контролировать права доступа к файлам журнала, создаваемым набором сборщиков данных perfmon?

Наборы сборщиков данных могут содержать конфиденциальную информацию о компьютере, поэтому для доступа к ним обычно требуется, чтобы пользователь был хотя бы членом группы «Пользователи журнала производительности». Я не верю, что вы можете создать DCS с автоматически изменяемыми разрешениями (Everyone FullControl), как вы говорите.

Как это обходное решение:

Запустите этот сценарий PS как запланированную задачу:

$Path = "C:\PerfLogs\Admin\New Data Collector Set"
$ACL  = (Get-Item $Path).GetAccessControl("Access")
$ACE  = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow")
$ACL.AddAccessRule($ACE)
ForEach($_ In Get-ChildItem $Path -Recurse)
{
    Set-Acl -ACLObject $ACL $_.FullName
}

Я протестировал это в Windows 7 с PS 2.0 (такой же, как 2008R2) и подтвердил, что он действительно размещает ACE «Все с полным доступом» для каждого объекта рекурсивно в каталоге, определенном в переменной $ Path.

edit: Сначала я подумал использовать вкладку «Задача» на странице «Свойства» DCS «Запускать эту запланированную задачу, когда набор сборщиков данных останавливается», но это не для запланированных задач, а скорее для задач WMI.

edit # 2: Хорошо, это становится довольно сумасшедшим, но вы можете создать новую запланированную задачу, и ее триггер будет запускать «По событию». Затем нажмите «Пользовательский» и нажмите «Новый фильтр событий». Затем вручную отредактируйте XML-фильтр:

<QueryList>
  <Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
    <Select Path="Microsoft-Windows-TaskScheduler/Operational">
        *[System[TimeCreated[timediff(@SystemTime) &lt;= 3600000]]]
         and
        *[System[(EventID='102')]]
         and
        *[EventData[Data and (Data='YOUR DATA COLLECTOR SET NAME')]] 
    </Select>
  </Query>
</QueryList>

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