segunda-feira, 6 de abril de 2009

Pesquisando as impressões efetuadas através do seu servidor de impressão

Conforme pôde ser visto no post anterior, configuramos a auditoria no equipamento que atuará como servidor de impressão. Agora, precisamos consultar de alguma maneira as impressões realizadas.

Como as impressões são realizadas e registradas no log de eventos do Windows, agora precisamos de um script exportar o log, já que a exportação padrão do visualizador de eventos não nos fornece os dados principais da impressão (o que foi impresso, tamanho do trabalho de impressão e quantas páginas).

Abaixo, anexo um script escrito em vbs (bem simples por sinal) que faz o trabalho para exportar para um arquivo texto no formato SQL. Confesso que este script não é dos melhores (faltou um pouco de tempo para melhorá-lo e ficar mais eficiente).

O script se conecta através de WMI para acessar os logs. A sintaxe da pesquisa é parecida com SQL e chama-se WQL (WMI Query Language).

---8<---

strComputer = "."
dim dtmData
dtmData = dateadd("d", -1, date())
strDataPesquisa = year(dtmData) & Right("0" & month(dtmData), 2) & Right("0" & day(dtmData), 2)
rem wscript.echo strDataPesquisa

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NTLogEvent " & _
"WHERE EventCode=10 and EventType=3 " ,,48)

set objFS = CreateObject("Scripting.FileSystemObject")

set objResultado = objFS.OpenTextFile("c:\windows\temp\logimpressoras.sql", 2, true)

For Each objItem in colItems

rem extrai a data e a hora.
strData = Left(objItem.TimeGenerated, 14)
strHora = Right(strData, 6)
strData = Left(strData, 8)
rem wscript.echo(strData)

if LTrim(RTrim(strData)) = Ltrim(RTrim(strDataPesquisa)) then

rem formata a data e hora
strData = Left(strData,4) & "-" & mid(strData, 5, 2) & "-" & Right(strData, 2)
strHora = Left(strHora, 2) & ":" & mid(strHora, 3, 2) & ":" & Right(strHora, 2)

strDtm = strData & " " & strHora

rem pega o tamanho da impressao e o numero de paginas
strSize = mid(objItem.Message, inStr(objItem.Message, "Size in bytes:"))
strSize = mid(strSize, inStr(strSize, ":")+1)
strPages = RTrim(LTrim(Mid(strSize, inStr(strSize, ":")+1)))
strSize = LTrim(RTrim(Left(strSize, inStr(strSize, ";") - 1)))

rem pega a identificacao do job
strJobNumber = LTrim(RTrim(Left(objItem.Message, inStr(objItem.Message, ",") - 1)))

rem pega o nome do trabalho de impressao
strJob = Mid(objItem.Message, inStr(objItem.Message, ",") + 1)

strOwner = Mid(objItem.Message, inStr(strJob, " owned by ")+12)

strJob = LTrim(RTrim(Left(strJob, inStr(strJob, " owned by ") - 1)))

rem trata apostrofos
strJob = replace(strJob, "'", "\'")

strPrinter = Mid(strOwner, inStr(strOwner, " was printed on ") + 16)
strPrinter = LTrim(RTrim(Left(strPrinter, inStr(strPrinter, " via port ") - 1)))

strOwner = Left(strOwner, inStr(strOwner, " was printed on ") - 1)
strOwner = LTrim(RTrim(Mid(strOwner, inStrRev(strOwner, " ") + 1)))

strSQL = "INSERT INTO tblImpressoes (strJob, strJobName, strProprietario, strImpressora, dtmImpressao, dblTamanho, dblPaginas) " & _
"VALUES ('" & strJobNumber & "', '" & strJob & "', '" & strOwner & "', '" & strPrinter & "', '" & strDtm & "', " & strSize & _
", " & strPages & ");" & chr(13) & chr(10)

objResultado.Write(strSQL)

end if

Next

objResultado.Close

set objResultado = nothing
set objFS = nothing
set colItems = nothing
set objWMIService = nothing

--->8---

Feito isto, bastou agendar a tarefa para ser executada uma vez ao dia para que o log fosse exportado para o arquivo texto.

No servidor onde armazeno os logs, fiz um script para baixar o arquivo e importá-lo na base de dados em MySQL, PostgreSQL, SQL Server, etc. A partir daí foi só efetuar a consulta da maneira que eu precisava, com agrupamentos, totais, somatórias e tudo mais.

Estas consultas podem ser feitas diretamente via planilha de cálculo ou desenvolver uma pequena página web para exibí-los.

Não é a melhor solução do mercado. Apesar de artesanal, resolve meu problema.

sábado, 28 de março de 2009

Auditoria de um servidor de impressões em Windows.

Esta semana tive alguns problemas com usuários que mandavam imprimir indiscriminadamente documentos pessoais em impressoras lá na empresa e nem se davam o trabalho de ir pegar suas impressões.

Nervosos, os usuários do departamento alvo reclamaram (e com razão), sobre tais impressões. Então decidi colocar auditoria no servidor de impressão da empresa (em windows mesmo).

Não é complicado ativar, apenas trabalhoso.

Primeiramente, você precisa ativar a auditoria da impressora. Através do gpedit.msc, clique em Configurações do computador | Configurações do Windows | Configurações de Segurança | Políticas locais | Políticas de auditoria. Habilite a opção Auditar acesso a objetos.

Em seguida, chame as propriedades da impressora em questão, clique em segurança e clique na opção Avançado. Na aba Auditoria, habilite a Opção Imprimir (Permitir e Negar).

Pronto. A partir de agora, todas as impressões vão para o log de eventos do Windows, no ítem System. A partir daí é só filtrar a origem como sendo Impressão e o ID de evento como sendo 10 para você ver todas as impressões dos usuários.

No próximo post, irei publicar uma opção para o log destas impressões.

segunda-feira, 16 de março de 2009

Habilitando auditoria no seu servidor Samba

Para aqueles que desejam habilitar auditoria no seu servidor Samba, basta habilitar o módulo audit. Este módulo pode ser carregado junto com outros que já estão carregados com o seu servidor Samba.

Para habilitá-lo, adicione as seguintes linhas na seção [global] do seu arquivo smb.conf:

vfs object = audit
audit:facility = LOCAL1
audit:priority = NOTICE

Tanto o recurso (facility) quanto a prioridade (priority) devem ser os mesmos utilizados na configuração do syslog.

quarta-feira, 4 de março de 2009

Acelerando a velocidade de seu servidor Apache 2.0 com o mod_deflate

Para aqueles que utilizam o Apache 2.0, podem-se aproveitar de uma funcionalidade que irá agilizar o download das páginas providas pelo seu servidor. Trata-se do mod_deflate, a qual está presente na maioria das distribuições do Apache.

Para habilitar, siga os seguintes passos alterando as seguintes linhas em seu httpd.conf:

LoadModule deflate_module modules/mod_deflate.so

E na seção Directory

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-eruby
AddOutputFilterByType DEFLATE text/html

Isto irá habilitar a compressão diretamente em todos os sites hospedados neste servidor. Caso deseje habilitar em algumas partes de um determinado site, coloque as linhas acima dentro da diretiva Directory. Também é possível colocá-las dentro de um virtual host.

Feito isto, basta reiniciar o serviço do Apache e está pronto.

domingo, 1 de março de 2009

Autenticando aplicações PHP no Active Directory.

Para aqueles que desenvolvem aplicações em PHP e precisa autenticar seus usuários diretamente no Active Directory, pode utilizar as funções de LDAP diretamente da linguagem. Mas para facilitar um pouco o desenvolvimento, padronizar e reaproveitar código, pode-se utilizar uma biblioteca pronta, chamada adLDAP.

Na versão 2.2 um dos recursos a ser implementados é a possibilidade de criar contas de e-mail no Microsoft Exchange.

Fica aí a dica.

Atualizado: Backup: Uma solução para Windows, Linux e BSD's

Nosso leitor megumijr, enviou algumas sugestões para resolver problemas de caracteres acentuados quando utilizado com sistemas que utilizam diferentes grupos de caracteres (UTF-8 e ISO8859-1).

Basicamente, a atualização consistem em adicionar no rsync.conf do windows a seguinte linha:

charset=iso8859-1

e alterar a chamada no script de backup acrescentando o parâmetro:

--iconv=utf8,iso88591

Aqui você poderá conferir o texto completo do artigo incluindo as atualizações sugeridas.

Agradecemos sua colagoração megumijr.

segunda-feira, 23 de fevereiro de 2009

Para quem utiliza WSUS

Para aqueles que utilizam WSUS (Windows Service Update Services) para atualizar suas estações na rede de computadores da empresa, aqui vai um facilitador para que, no primeiro momento (quando você está fazendo a instalação inicial da máquina), não tenha que ficar um tempo enorme esperando que o serviço de atualização automática baixe do seu servidor WSUS as correções que precisam ser aplicadas.

No prompt de comando, digite:

c:\windows\system32> wuauclt /ResetAuthorization /DetectNow

Vamos aos parâmetros:
/ResetAuthorization: força com que o cookie utilizado pelas atualizações automáticas perca a validade (geralmente este cookie tem validade de uma hora).

/DetectNow: força a detecção de novas correções a serem aplicadas.

Fonte: Technet