Проблема с разрешениями для файлов, созданных PerfMon
Мы пытаемся реализовать некоторую регистрацию данных в файлах CSV с использованием набора сборщиков данных в PerfMon (в системе Windows Server 2008R2).
Проблема, с которой мы сталкиваемся, заключается в том, что мы (по-видимому) не можем контролировать права доступа, установленные для файлов журналов, созданных perfmon.
Мы хотим, чтобы файлы журнала, созданные perfmon, имели права "Все: F" ("Полный доступ для всех"). Итак, у нас есть настройка структуры каталогов, в которой все журналы попадают в папку:
c: \ vms \ PerfMonLogs \% MACHINENAME% (например, c:\vms\PerfMonLogs\EvaluationG2)
В приведенном выше примере c: \ vms \ PerfMonLogs \ EvaluationG2 имеет разрешения "Все":F (ниже - icacls для этого каталога)
EVALUATIONG2 / Все:(OI)(CI)(F) NT AUTHORITY\SYSTEM:(OI)(CI)(F) BUILTIN\ Администраторы: (OI) (CI) (F) BUILTIN \ Пользователи журнала производительности: (OI) (Р)
При запуске набора сборщиков данных он создает новые подпапки и файлы в каталоге c:\vms\PerfMonLogs\EvaluationG2, например (C:\vms\PerfMonLogs\EVALUATIONG2\M11d26y2012N3)
Каждый из этих каталогов и файлов имеет следующие разрешения:
M11d26y2012N3 NT AUTHORITY \ SYSTEM: (OI) (CI) (F) BUILTIN \ Администраторы: (OI) (CI) (F) BUILTIN \ Пользователи журнала производительности:(OI)(R)
Так что эти новые папки, а не просто наследуют разрешения от родительской папки (не знаю почему).
Теперь мы попытались добавить Everyone: F, используя вкладку безопасности на наборе сборщика (без кубиков).
Есть идеи? Как мы контролируем права доступа к файлам журналов, созданным набором сборщиков данных perfmon?
1 ответ
Наборы сборщиков данных могут содержать конфиденциальную информацию о компьютере, поэтому для доступа к ним обычно требуется, чтобы пользователь был как минимум членом группы "Пользователи журнала производительности". Я не верю, что вы можете создать DCS с автоматически измененными разрешениями (Every 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.
редактирование: Сначала я подумал о том, чтобы использовать вкладку "Задача" на странице "Свойства" в DCS: "Запустите это запланированное задание, когда набор сборщиков данных остановится", но это не для запланированных задач, а задач WMI.
edit # 2: Хорошо, это становится довольно сумасшедшим, но вы можете создать новую запланированную задачу, и ее триггером будет запуск "По событию". Затем нажмите "Пользовательский" и нажмите "Новый фильтр событий". Затем вручную отредактируйте фильтр XML:
<QueryList>
<Query Id="0" Path="Microsoft-Windows-TaskScheduler/Operational">
<Select Path="Microsoft-Windows-TaskScheduler/Operational">
*[System[TimeCreated[timediff(@SystemTime) <= 3600000]]]
and
*[System[(EventID='102')]]
and
*[EventData[Data and (Data='YOUR DATA COLLECTOR SET NAME')]]
</Select>
</Query>
</QueryList>
Теперь вы создадите запланированное задание, которое будет запускаться, когда ваш набор сборщиков данных завершит свою работу, и он рекурсивно изменит списки ACL структуры каталогов на "Все полный доступ".