Permissões para uso do EventLog - Windows 2003

Olá, pessoal!


Hoje vou falar sobre alguns problemas que tive que passar, a respeito do uso do EventLog, mais especificamente na gravação. São os erros:

System.Security.SecurityException: Requested registry access is not allowed.

Este erro ocorre quando uma aplicação tenta gravar um registro no EventLog, mas não possui permissões para gravar no registry do Windows. Isso acontece porque o os sources do EventLog ficam armazenados no registry, embaixo da seguinte chave: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application (isso para os sources que ficam na no Application, ainda temos os do Security, System, e outros que você venha a criar). Quando se quer criar um source novo, deve-se escrever no registry.

O importante a notar aqui é que a conta que está tentando escrever no EventLog deve ter permissão de escrita nessas chaves do registry. Ou então esse source já deve estar criado, para que este problema não ocorra.

Obs. Esse problema de permissão pode ser verificado através do Regmon, verificando os erros de ACCESS DENIED que ocorrem.

Cannot open log for source {0}. You may not have write access.

Este outro erro foi mais chato de descobrir, e acontecia quando uma conta de usuário tentava gravar em um source já existente no servidor, criado por outro serviço. Mesmo executando o Filemon e o Regmon, não aparecia nada que pudesse indicar onde estava o problema. Primeiro tentei dar permissão ao usuário que tentava gravar tanto nas chaves do registry quanto no arquivo onde ficam armazenados os dados do EventLog (%WINDIR%\system32\config), mas sem sucesso.

Neste caso, o que acontece é que no Windows 2003 Server, a permissão de gravação fica armazenada em uma chave no registry, chamada CustomSD (Custom Security Description). É ela que define quem pode gravar, ler e demais opções, dentro do EvenLog.

Essa chave fica em HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD, e seu valor é uma string a primeira vista muito confusa:
O:BAG:SYD:(D;;0xf0007;;;AN)(D;;0xf0007;;;BG)(A;;0xf0007;;;SY)(A;;0x7;;;BA) (A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)

Muita calma nessa hora, o que cada coisa quer dizer? Vamos quebrar essa string por partes, para entender:

O:BA A letra O indica que se está especificando o owner do objeto, no caso o grupo de administradores da máquina (Built-in Admin - BA).
G:SY A letra G indica que está sendo especificado o primary group, no caso System (SY).
D: Indica que é uma DACL, ao inves de uma entrada de auditoria ou SACL.
(D;;0xf0007;;;AN) Nega o acesso totalmente para o Anonymous (Deny para AN).
(D;;0xf0007;;;BG) Nega o acesso totalmente ao Built-in Guests (Deny para BG) .
(A;;0xf0005;;;SY) Permite que o System leia e limpe (incluindo DELETE, READ_CONTROL, WRITE_DAC, e WRITE_OWNER, indicado pelo 0xf0000).
(A;;0x7;;;BA) Permite READ, WRITE e CLEAR para o Built-in Admin (BA).
(A;;0x7;;;SO) Permite READ, WRITE e CLEAR para Server Operators (SO).
(A;;0x3;;;IU) Permite READ e WRITE para Interactive Users (IU).
(A;;0x3;;;SU) Permite READ e WRITE para Service accounts (SU).
(A;;0x3;;;S-1-5-3) Permite READ e WRITE para Batch accounts (S-1-5-3).

O valor 0x3 indica que é permitido leitura e escrita, pois ele é composto através da soma de ELF_LOGFILE_READ (0x0001) e ELF_LOGFILE_WRITE (0x0002). Outro valor que pode ser combinado é ELF_LOGFILE_CLEAR (0x0004).

Com isso, podemos dar as permissões necessárias, informando o que cada usuário pode fazer.

No meu caso, esse problema aconteceu quando um web service com impersonate ligado estava tentando gravar no registry. Os usuários autenticados não tinham permissão para gravar, então dava o erro. Foi adicionado o (A;;0x3;;;AU), e o problema foi corrigido!

E se eu quisesse dar permissão para o NETWORK SERVICE, que é a conta que o ASP.NET roda no Windows 2003, colocaria (A;;0x3;;;NS).

Espero que este post seja útil para mim tanto quanto os posts de outros blogs me foram, para resolver este problema (http://support.microsoft.com/kb/329291, http://www.leastprivilege.com/EventLogACLsInWindows2003.aspx e http://www.jameskovacs.com/blog/PermaLink.aspx?guid=cd6e5f6e-7107-48bc-8563-f5669706fcdc). É incrível como, se você perquisar no Google as mensagens de erro, acaba encontrando tantas threads de fóruns que citam este problema, mas não dão a resolução.

[]'s

Comentários

Postagens mais visitadas deste blog

Trocando configurações padrão do Live TIM

Uma proposta de Clean Architecure com Modelo de Atores

Testes automatizados em sistemas autenticados com certificados digitais, usando Selenium e PhantomJS