<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Ricardobarbosams&#039;s Blog</title>
	<atom:link href="http://ricardobarbosams.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ricardobarbosams.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Wed, 19 Oct 2011 15:26:55 +0000</lastBuildDate>
	<language></language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ricardobarbosams.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Ricardobarbosams&#039;s Blog</title>
		<link>http://ricardobarbosams.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ricardobarbosams.wordpress.com/osd.xml" title="Ricardobarbosams&#039;s Blog" />
	<atom:link rel='hub' href='http://ricardobarbosams.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Meu cachorro tem 3 cabeças ?! :P</title>
		<link>http://ricardobarbosams.wordpress.com/2011/10/18/meu-cachorro-tem-3-cabecas/</link>
		<comments>http://ricardobarbosams.wordpress.com/2011/10/18/meu-cachorro-tem-3-cabecas/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 04:11:11 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=305</guid>
		<description><![CDATA[Ola, após um longo e muiiito longo período volto a postar, o principal culpado por esse exílio de postagem é o trabalho, vida pessoal, familia, cachorros, futebol, mãe, pai, namorada, e o principal de todos a falta de tempo devido a todos os outros motivos . Mas o assunto deste post foi algo que de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=305&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ola, após um longo e muiiito longo período volto a postar, o principal culpado por esse exílio de postagem é o trabalho, vida pessoal, familia, cachorros, futebol, mãe, pai, namorada, e o principal de todos a falta de tempo devido a todos os outros motivos <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Mas o assunto deste post foi algo que de maneira nenhuma deixaria de postar é um assunto que não encontrei muita informações compilada em um único ponto, mas sim em vários links disponivéis na internet.<br />
Como todo tutorial sobre o assunto e bom falar sobre as origens, é a origem que iremos desvendar é o nome de um dos nossos softwares coadjuvante, o kerberos que veio de cerberus ou cérbero.</p>
<p>Faz parte da mitologia grega, cerberus ou kerberos era um cão de três cabeças e cobras ao redor do pescoço que guardava o reino subterrâneo dos mortos, o qual Hades deus da guerra era o &#8220;mentor&#8221;, hades irmão de Zeus e filho de Cronos <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Bom mitologia grega não é o foco, nosso objetivo e falar sobre o software kerberos, assim como o cerberus protege o reino de Hades o nosso kerberos pode proteger nossa infra-estrutura de rede, fazer o controle de acesso.</p>
<p>O kerberos se diferencia dos outros metódos de controle de acesso por autenticar o usuário apenas uma única vez depois disso ele trabalha com o que chamamos de tickets ou &#8220;segredos&#8221;.<br />
Ele faz a autenticação de usuários, computadores ou hosts e serviços de rede, tais como e-mail, http, ftp esses serviços que suportam kerberos damos o nome de &#8220;serviços kerberizados&#8221;, cada usuário, host ou serviços na linguagem do kerberos recebe o nome de &#8220;principal&#8221;. O kerberos utiliza um &#8220;meio de campo&#8221; para fazer a checagem entre os principals e serviço de autenticação, o kerberos sozinho não autentica nínguem, ele precisa do servidor de autenticação ou base de usuário. Uma observação importante é possivel fazer o kerberos autenticar utilizando sua própria base o que não é muito utilizado. O &#8220;meio de campo&#8221; utilizado pelo kerberos para interfacear principal e base de dados se chama KDC (Key Distribution Center ­ Centro de Distribuição de Chaves), responsável pela validação da identidade dos principals em conjunto com os serviços kerberizados. No processo de validação e criado uma chave secreta o qual é gerada utilizando a senha do usuário como item obrigatorio.</p>
<p>O KDC armazena a base de dados de principal e suas chaves, que são utilizadas para autenticação.</p>
<p>Vamos descrever alguns conceitos da estrutura kerberos:</p>
<ul>
<li>realm: Um reino ou realm kerberos é um grupo de computadores que compartilham informações contidas numa base de dados de autenticação ou kerberos e fazem uso do KDC.  O reino possui um nome que o identifica e, geralmente, é o mesmo nome do<br />
domínio DNS, porém em letras maiúsculas. Apesar dessa característica não ser<br />
obrigatória, ela tem sido comumente usada nas implementações do Kerberos.</li>
<li>Principal: Como dito anteriormente o principal é qualquer item que pode fazer uso do kerberos ou ser autenticada. Isso inclui usuários, hosts e serviços de rede. Cada principal possui uma chave secreta o qual é constituida pela sua própria senha. Com isso o KDC e o principal conhecem essa chave.<br />
O principal é formado por três partes:</p>
<ul>
<li>primário ­ é a primeira parte do principal. Pode ser o nome de um usuário ou serviço. Para um servidor é a palavra host.</li>
</ul>
<ul>
<li>instância ­ serve para qualificar o primário. É uma palavra que vem antes do principal separado por uma barra (/). Após a barra posso ter termos diferentes, são eles:</li>
</ul>
<ol>
<li>Usuário: Após a barra teremos o usuario e sua credencial</li>
<li>Host: Após a barra teremos o nome dns deste host.</li>
<li>reino ou realm: Parte do nome do principal que indica o reino do principal</li>
</ol>
<p>Um exemplo de um principal seria: primário/instância@REINO. Para um principal de usuário seria:</p>
<blockquote><p>ricardobarbosa@YAMAHA.CORP<br />
ricardobarbosa/administrator@YAMAHA.CORP</p></blockquote>
<p>onde a palavra &#8220;administrator&#8221; indica que o principal tem privilégios administrativos no Kerberos.</p>
<p>Exemplo de principais de serviços ou host a parte que seria o primário indica o serviço, um exemplo:</p>
<blockquote><p>HTTP/firewall.yamaha.corp@YAMAHA.CORP<br />
FTP/ftp.yamaha.corp@YAMAHA.CORP</p></blockquote>
<p>Se o nome do reino não for informado será usado como o reino padrão do contexto, isso no arquivo de configuração do kerberos ou seja /etc/krb5.conf.</li>
</ul>
<p>Bom já que falamos demais poderiamos agora ter um pouco de ação ou quase isso fazer um teste de mesa e mostrar o passo a passo da conexão kerberos. Para isso imaginei o seguinte ambiente.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2011/10/kerberos1.jpeg"><img class="aligncenter size-full wp-image-317" title="kerberos1" src="http://ricardobarbosams.files.wordpress.com/2011/10/kerberos1.jpeg?w=600" alt=""   /></a></p>
<p>1 &#8211; Neste exemplo a estação com serviço de login kerberizado faz um request para o KDC solicitando um TGT.</p>
<p>2 &#8211; O KDC recebe o request e busca pelo principal da conexão na base de dados Kerberos ou seja no Active Directory, se o principal existe, o KDC pega a chave secreta do principal gerada com a senha do principal. Com isso ele irá gerar a chave de sessão e o TGT.  Nesse momento o KDC tem a chave secreta do principal, a chave de sessão e o TGT, blz, o KDC nesse momento criptografa o TGT com uma chave que somente ele KDC conhece. Nesse momento eu tenho o TGT criptografado com senha que somente o KDC conhece e a chave de sessão, após isso o KDC criptografa esse dois itens com a chave do usuário e o envia para o mesmo.</p>
<p>3 &#8211; Ao receber essa resposta, o cliente (kinit ou login) solicita a senha ao usuário e após a digitação da senha ela é convertida na chave secreta do usuário.</p>
<p>Essa chave é, então, utilizada para descriptografar a mensagem recebida do KDC, que contém a chave de sessão e o TGT<br />
(criptografado pela chave do KDC). Perceba que a senha do usuário nunca foi para o meio somente nos endpoint no caso KDC e cliente. Vamos a um outro conceito para continuar nosso raciocínio.</p>
<p><strong>O arquivo keytab</strong></p>
<p>Cada usuario na base de dados possui uma senha, assim como cada serviço possue uma chave, onde esta chave e conhecida apenas pelo KDC e o próprio principal</p>
<p>No KDC essa chave e armazenada na base de dados. Agora no servidor que esta sendo executado o serviço as chaves são armazenadas localmente em tabelas em arquivos conhecidos como arquivos keytab. O serviço kerberizado utiliza o arquivo keytab da mesma forma que um usuário informa sua senha no ato de login. Quando o serviço precisa se autenticar ele utilizar a senha armazenada no arquivo keytab para se autenticar.</p>
<p><strong>Utilizando o serviço kerberizado.</strong></p>
<p>Para utilizar o serviço kerberizado e necessário o arquivo keytab no servidor onde roda o serviço. Vamos imaginar outro ambiente o qual será o foco do nosso post. Tenho o mesmo ambiente anterior mas agora tenho o Active Directory e KDC no mesmo servidor é o que existe na vida real <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  o AD da microsoft já tem o kerberos embutido. Bom acrescentaremos o nosso servidor proxy mas especificamente squid <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  veja o diagrama abaixo.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2011/10/kerberos2.jpeg"><img class="aligncenter size-full wp-image-320" title="kerberos2" src="http://ricardobarbosams.files.wordpress.com/2011/10/kerberos2.jpeg?w=600&#038;h=368" alt="" width="600" height="368" /></a></p>
<p>O cliente no navegador fará acesso a internet através do proxy que tem o serviço &#8220;HTTP&#8221;. O navegador verifica se no cache existe um ticket para acesso ao serviço solicitado. Se não existir, envia ao KDC uma solicitação de acesso ao serviço, ou seja envia um request solicitando um TGS(Ticket Granting Service) a partir do TGT.</p>
<p>1 &#8211; O navegador envia ao KDC o TGT a mensagem de solicitação TGS além de informação de horário(timestamp), criptografado com a chave de sessão que ele recebeu na conexão anterior. (lembra que tinha o TGT e a chave de sessão, esta chave e para uso apenas nas conexoes cliente e KDC).</p>
<p>2 &#8211; O KDC recebe descriptografa e obtém o TGT(criptografado com a chave conhecida apenas pelo KDC), com isso ele descriptografa o TGT com sua chave secreta e usando a chave de sessão descriptografa a mensagem de horário(timestamp). Presumindo que o KDC obteve exito nesse passos ele assume que o usuário é quem diz ser.</p>
<p>3 &#8211; O KDC gera então uma nova chave de sessão esta para ser usado entre servidor Proxy e cliente, cria um novo ticket (TGS) contendo a nova chave de sessão e identificação de usuário. Logo em seguida criptografa com a chave secreta do servidor a mesma chave que esta no keytab local <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . O KDC também criptografa a nova chave de sessão para ser usada entre servidor e cliente utilizando a primeira chave de sessão que deve ser usada somente entre KDC e cliente( E chave pra caramba né <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>4 &#8211; O novo ticket criptografado com a chave do servidor ( a mesma do keytab) e a nova chave de sessão criptografada( a chave para ser usada entre proxy e cliente) com a chave de sessão do usuário( a chave que deve ser usada entre KDC e cliente) são enviados ao usuário.</p>
<p>5 &#8211; O cliente recebe o ticket (TGS) e a chave de sessão (para ser usada entre proxy e cliente) enviados pelo KDC, descriptografa a chave de sessão (criptografada pela chave de sessão, aquela usada entre KDC e cliente lembra foi enviada a chave de sessão entre proxy e cliente criptografada com esta chave) e logo em seguida armazena ambas as chaves no cache de credenciais. Ele usa a nova chave de sessão( a que deve ser usado entre proxy e cliente) para criptografar uma mensagem, e envia ao servidor proxy juntamente TGS.</p>
<p>6 &#8211; O servidor recebe o pacote e de posse da chave secreta dele mesmo(Aquela que está no arquivo keytab o qual está segura no disco local <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) e a usa para descriptografar o ticket (TGS) recebido do usuário, tendo acesso, portanto, à identidade do usuário e à chave de sessão (aquela que foi criada para ser usada entre proxy e cliente não a chave que foi criada para ser usada entre KDC e cliente <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) . Com essa chave de sessão o servidor abre a mensagem recebida do cliente, com isso automaticamente autentica o usuário.</p>
<p>7 &#8211; Após isso se o usuário tem permissão para navegar em determinada URL o acesso e concedido senão negado. Nesse ponto ambos tanto cliente como servidor proxy  têem a chave de sessão criada pelo KDC para comunicação entre eles, e podem utilizá-la para criptografar o tráfego entre eles.</p>
<p>Veja que a comunicação fluiu sem em um único momento a senha ir para a rede <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  e para deixar mais seguro se alguém conseguir interceptar os tickets e chave de sessão ainda temos o tempo de expiração que deixará inutil a chave <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bom agora depois de teoria e explicações ao meu ver satisfatoria vamos a implantação e configuração criei um ambiente de exemplo tenho isso em produção em vários clientes e funciona muito bem. Antes de continuar quero deixar claro que kerberos não envolve somente nisso que expliquei acima a coisa flue da forma que disse mas existe muito detalhes que não abortei aqui para não deixar extenso então se querem conhecer a fundo meu conselho apontem seus links para a página do MIT http://web.mit.edu/kerberos/. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Segue abaixo o ambiente de exemplo iremos utilizar os seguintes softwares e servidores</p>
<p><strong>servidor proxy :<br />
Softwares: </strong>squid 3.0, kerberos 5.0 versão clientes e config, squid_kerb_ldap um helper de autenticação para o squid desenvolvido pelo Markus Moeller, tive a oportunidade de trocar uma idéia com esse cara na lista squid-users e um cara muito gente boa e sanou várias dúvidas que tinha em relação ao squid_kerb_ldap.</p>
<p><strong>Servidor KDC:<br />
Softwares:</strong> Normalmente você ja deve ter isso na sua empresa ou na empresa que trabalha, tratasse do poderoso servidor de diretório da Microsoft &#8211; Active Directory e sim ele já possue um KDC embutido criado pela Microsoft ao contrário do que muitos pensam sim a Microsoft usa Software Livre, implementa e reimplementa e funciona muito bem <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong>Cliente:</strong><br />
Como nosso ambiente é para sistemas Microsoft iremos utilizar qualquer estação que faça parte do domínio.</p>
<p>Segue mais alguns dados:</p>
<blockquote><p>Dominio: YAMAHA.CORP<br />
Servidor Proxy: 192.168.0.15<br />
Servidor DC Windows 2008 R2: 192.168.0.8<br />
Usuário do AD para criação do keytab: squid<br />
Senha: 123456 ( e apenas para testes)</p></blockquote>
<p>Vamos por a mão na massa inicialmente instalar o squid estou utilizando a distribuição Ubuntu.</p>
<blockquote><p>[root@firewall root]# aptitute install squid3 krb5-config krb5-clients krb5-user libsasl2-modules-gssapi-mit</p></blockquote>
<p>Depois vamos baixar o pacote squid_kerb_ldap no site <a title="http://squidkerbauth.sourceforge.net/" href="http://squidkerbauth.sourceforge.net/">http://squidkerbauth.sourceforge.net/</a>.</p>
<p>Para compilar o squid_kerb_ldap iremos precisar do pacote de compilação do ubuntu e bibliotecas de desenvolvimento do kerberos</p>
<blockquote><p>[root@firewall root]# aptitute install build-essential libkrb5-dev</p></blockquote>
<p>Vamos compilar o squid_kerb_ldap.</p>
<blockquote><p>[root@firewall root]# cd squid_kerb_ldap<br />
[root@firewall root]# ./configure<br />
[root@firewall root]# make</p></blockquote>
<p>Após compilar será gerado um binário chamado &#8220;squid_kerb_ldap&#8221;, copie este binário para o caminho &#8220;/usr/lib/squid3/&#8221;, na instalação do squid já consta o squid_kerb_auth.</p>
<p>Vamos agora a configuração do squid para que ele passe a reconhecer usuários via kerberos.</p>
<blockquote><p>auth_param negotiate program /usr/lib/squid3/squid_kerb_auth -s HTTP/proxy.yamaha.local<br />
auth_param negotiate children 10<br />
auth_param negotiate keep_alive on</p></blockquote>
<p>se for autenticar por usuários utilize</p>
<blockquote><p># acl que solicita autenticação para o usuário ricardo barbosa no caso eu <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
acl ricardobarbosa proxy_auth ricardobarbosa@YAMAHA.CORP<br />
# Acl para dar match nos sites que serão permitidos<br />
acl sites_liberados src &#8220;/etc/squid3/sites_liberados.cfg&#8221;</p>
<p># permite o acesso as conexões autenticas via kerberos pelo usuário ricardo barbosa a sites_liberados<br />
http_access allow ricardobarbosa sites_liberados</p></blockquote>
<p>Se for por grupo utilize</p>
<blockquote><p># acl externa que utiliza squid_kerb_ldap<br />
external_acl_type g_restrito ttl=3600 negative_ttl=3600 %LOGIN /usr/lib/squid3/squid_kerb_ldap -g G_restrito@YAMAHA.CORP<br />
# Acl para dar match na acl externa<br />
acl grupo_grestrito external g_restrito<br />
# Acl para dar match nos sites que serão permitidos<br />
acl sites_liberados src &#8220;/etc/squid3/sites_liberados.cfg&#8221;</p>
<p># Permitindo o grupo restrito do AD ao lista de sites liberados<br />
http_access allow grupo_gretrito sites_liberados</p></blockquote>
<p>Agora e hora de gerar o arquivo keytab o windows possue um comando de linha que gera o keytab ai depois e somente necessário copiar para o servidor proxy, segue o comando abaixo.</p>
<blockquote><p>c:\&gt; ktpass -princ HTTP/proxy.yamaha.corp@YAMAHA.CORP -mapuser YAMAHA\squid -crypto All -mapop set -pass 123456 -ptype KRB5_NT_SRV_HST -out HTTP.keytab</p></blockquote>
<p>E bem intuitivo vamos a cada item</p>
<ul>
<li>-princ HTTP/proxy.yamaha.corp@YAMAHA.CORP: Principal do servidor proxy, nós lembramos o que é principal senão lembra volte lá em cima no começo do tutorial e leia de novo <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </li>
<li>-mapuser YAMAHA\squid: Nome do usuário que será gerado o keytab</li>
<li>-crypto All: Será gerado o keytab com todas os algoritmos de criptografia que o KDC do AD suporta.</li>
<li>-mapop set -pass 123456: Definindo a senha</li>
<li>-ptype KRB5_NT_SRV_HST: Define que o tipo do principal no caso é um &#8220;host service instance&#8221;. Outras possiveis opção são:
<ol>
<li>KRB5_NT_PRINCIPAL: Este o principal de uso geral.</li>
<li>KRB5_NT_SRV_INST: É um instancia de serviço de usuário.</li>
<li>KRB5_NT_SRV_HST: É uma instancia de serviço de host.</li>
</ol>
</li>
<li>-out HTTP.keytab: Nome do arquivo keytab gerado</li>
</ul>
<p>No seguinte link tem mais informações sobre a ferramenta ktpass <a href="http://technet.microsoft.com/en-us/library/cc753771%28WS.10%29.aspx" title="http://technet.microsoft.com/en-us/library/cc753771%28WS.10%29.aspx">http://technet.microsoft.com/en-us/library/cc753771%28WS.10%29.aspx</a></p>
<p>Depois de keytab gerado copie o arquivo para o servidor Linux via ssh pscp te vira <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Um detalhe quando você gera o keytab você não pode resetar a senha no meu caso do usuário squid se você fizer, vai invalidar o arquivo keytab e terá de gerar outro. Isso porque existe um campo no keytab que é chamado kvno que é simplesmente um acrônimo para &#8220;número da versão da chave&#8221; ou key version number. para ajudar<br />
distinguir entre várias chaves associados com o mesmo principal (por<br />
exemplo, se um usuário alterar sua senha), cada chave é associada a uma versão de chave. Números de versão-chave normalmente começam em zero quando o principal é criado pela primeira vez e são incrementados por um cada vez que a senha é alterada.</p>
<p>Para verificar o kvno do keytab utilize.</p>
<blockquote><p>
[root@firewall root]# kvno HTTP/proxy.yamaha.corp<br />
HTTP/proxy.yamaha.corp@YAMAHA.CORP: kvno = 3<br />
[root@firewall root]#
</p></blockquote>
<p>Para deixar esse &#8220;controle&#8221; do kvno automático você pode colocar o servidor proxy no domínio utilizando samba com kerberos, e utilizar o keytab a partir do samba ai seus problemas acabaram <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Para autenticar a partir do keytab utilize o comando.</p>
<blockquote><p>
[root@firewall root]# kinit -V -k -t /etc/krb5.keytab HTTP/proxy.yamaha.corp<br />
Authenticated to Kerberos v5<br />
[root@firewall root]# </p></blockquote>
<p>Agora vamos testar navegar. Alguns navegadores não suportam autenticação kerberos é o caso do Safari e Opera. O Internet Explorer e Firefox funciona nativamente, o IE precisa a opção &#8220;autenticação integrada do windows&#8221; estar marcada dentro da aba avançado dentro de propriedades de internet o que já vem padrão.</p>
<blockquote><p>
1318895606.294    224 172.31.1.51 TCP_MISS/204 674 GET http://www.google.com.br/csi? <strong>thor@YAMAHA.CORP</strong> DIRECT/74.125.91.106 image/gif<br />
1318895671.192    672 172.31.1.51 TCP_MISS/200 15648 GET http://www.google.com.br/ <strong>aquaman@YAMAHA.CORP</strong> DIRECT/74.125.91.104 text/html<br />
1318895672.040    264 172.31.1.51 TCP_MISS/204 391 GET http://www.google.com.br/csi? <strong>kakaroto@YAMAHA.CORP</strong> DIRECT/74.125.91.104 image/gif<br />
1318895695.747      0 172.31.1.51 TCP_DENIED/407 3222 GET http://www.google.com.br/search? &#8211; NONE/- text/html<br />
1318895696.402    507 172.31.1.51 TCP_MISS/200 13464 GET http://www.google.com.br/search? <strong>ironman@YAMAHA.CORP</strong> DIRECT/74.125.91.104 text/html<br />
1318895696.845      0 172.31.1.51 TCP_DENIED/407 3140 GET http://www.google.com.br/csi? &#8211; NONE/- text/html<br />
1318895697.426    421 172.31.1.51 TCP_MISS/204 674 GET http://www.google.com.br/csi? <strong>hulk@YAMAHA.CORP</strong> DIRECT/74.125.91.99 image/gif<br />
1318895718.361      0 172.31.1.51 TCP_DENIED/407 3027 GET http://www.google.com.br/url? &#8211; NONE/- text/html<br />
1318895718.636    262 172.31.1.51 TCP_MISS/302 1009 GET http://www.google.com.br/url? <strong>spiderman@YAMAHA.CORP</strong> DIRECT/74.125.91.99 text/html<br />
1318895723.604      0 172.31.1.51 TCP_DENIED/407 3019 GET http://www.google.com.br/url? &#8211; NONE/- text/html<br />
1318895723.908    292 172.31.1.51 TCP_MISS/302 993 GET http://www.google.com.br/url? <strong>superman@YAMAHA.CORP</strong> DIRECT/74.125.91.99 text/html<br />
1318895724.972    414 172.31.1.51 TCP_MISS/200 13980 GET http://www.google.com.br/search? <strong>batman@YAMAHA.CORP</strong> DIRECT/74.125.91.99 text/html<br />
1318895725.115      0 172.31.1.51 TCP_DENIED/407 3140 GET http://www.google.com.br/csi? &#8211; NONE/- text/html<br />
1318895725.572    421 172.31.1.51 TCP_MISS/204 674 GET http://www.google.com.br/csi? <strong>ricardobarbosa@YAMAHA.CORP</strong> DIRECT/74.125.91.105 image/gif
</p></blockquote>
<p>Parece que este servidor de proxy e da liga da justiça ou o QG dos superheróis <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<p>Até a próxima qualquer dúvida post uma pergunta.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/305/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/305/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/305/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=305&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2011/10/18/meu-cachorro-tem-3-cabecas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2011/10/kerberos1.jpeg" medium="image">
			<media:title type="html">kerberos1</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2011/10/kerberos2.jpeg" medium="image">
			<media:title type="html">kerberos2</media:title>
		</media:content>
	</item>
		<item>
		<title>Redirecionando portas e janelas no Cisco ASA :P</title>
		<link>http://ricardobarbosams.wordpress.com/2010/10/11/redirecionando-portas-e-janelas-no-cisco-asa-p/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/10/11/redirecionando-portas-e-janelas-no-cisco-asa-p/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 18:48:51 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=279</guid>
		<description><![CDATA[A situação e a seguinte conforme desenho abaixo. Preciso redirecionar 2 porta externas distintas para a mesma porta interna, ou seja, redirecionar tudo que chega na porta 80 e 8080 no ip outside 200.200.200.200 para o endereço ip interno 192.168.10.10 na mesma porta 80. A principio isso e fácil criamos 2 nat estaticos conforme abaixo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=279&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A situação e a seguinte conforme desenho abaixo.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/10/asa_redir.jpeg"></a></p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/10/asa_redir.jpeg"><img class="aligncenter size-medium wp-image-280" title="asa_redir" src="http://ricardobarbosams.files.wordpress.com/2010/10/asa_redir.jpeg?w=300&#038;h=76" alt="" width="300" height="76" /></a></p>
<p>Preciso redirecionar 2 porta externas distintas para a mesma porta interna, ou seja, redirecionar tudo que chega na porta 80 e 8080 no ip outside 200.200.200.200 para o endereço ip interno 192.168.10.10 na mesma porta 80. A principio isso e fácil criamos 2 nat estaticos conforme abaixo</p>
<blockquote><p>static(inside, outside) tcp 200.200.200.200 80 192.168.10.10 80 netmask 255.255.255.255<br />
static(inside, outside) tcp 200.200.200.200 8080 192.168.10.10 80 netmask 255.255.255.255</p></blockquote>
<p>Mas esta solução não ira funcionar, a primeira regra irá funcionar sem problemas, mas quando inserir a segunda regra ele irá reclamar dizendo que já existe uma regra de nat estatico para a porta 80 e o que fazer então?</p>
<p>Vamos trabalhar com access-list. Criaremos 2 access-list&#8217;s</p>
<blockquote><p>access-list policy1 permit tcp host 192.168.10.10 eq 80 any<br />
access-list policy2 permit tcp host 192.168.10.10 eq 80 any</p>
<p>static (inside,outside) tcp 200.200.200.200 80 access-list policy1<br />
static (inside,outside) tcp 200.200.200.200 8080 access-list policy2</p></blockquote>
<p>Simples né.</p>
<p>Att.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/279/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=279&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/10/11/redirecionando-portas-e-janelas-no-cisco-asa-p/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/10/asa_redir.jpeg?w=300" medium="image">
			<media:title type="html">asa_redir</media:title>
		</media:content>
	</item>
		<item>
		<title>Mini análise forense</title>
		<link>http://ricardobarbosams.wordpress.com/2010/10/08/mini-analise-forense/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/10/08/mini-analise-forense/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 02:32:47 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=268</guid>
		<description><![CDATA[Após um longo tempo sem postar achei um tempo entre trabalho e correria para montar um post um mini analises de binarios no Linux com comando file, nm, strings, strace, ltrace, etc. Introdução Em ocasiões frequentemente depois de um ataque, podemos encontrar em nossos servidores binarios ou executaveis misteriosos. Programas que podem ter sido usado [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=268&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Após um longo tempo sem postar achei um tempo entre trabalho e correria para montar um post um mini analises de binarios no Linux com comando file, nm, strings, strace, ltrace, etc.</p>
<p><strong>Introdução</strong></p>
<p>Em ocasiões frequentemente depois de um ataque, podemos encontrar em nossos servidores binarios ou executaveis misteriosos. Programas que podem ter sido usado por um hacker para comprometer sua rede ou servidor.<br />
Pode-se utilizar técnicas e métodos juntamente com ferramentas para fornece pistas do que o programa suspeito faz.</p>
<p><strong>Como saber o tipo de arquivo?</strong></p>
<p>Para obter informação do tipo do arquivo e muito simples e fácil utilizamos um software para isso o comando &#8220;file&#8221;. veja um exemplo de uso do mesmo:</p>
<blockquote><p>root@capsula:~# file /bin/ls<br />
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped<br />
root@capsula:~# file mkdosfs<br />
/sbin/mkdosfs: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.8, statically linked, not stripped<br />
root@capsula:~#</p></blockquote>
<p>Um item interessante à analisar nos 2 binarios é que o comando &#8220;ls&#8221; esta construindo com links dinamicos enquanto o comando &#8220;mkdosfs&#8221; esta construido estaticamente. Por padrão o compilador gcc constroi o aplicativo dinamicamente. Este comportamento pode ser alterado através do flag -static. Com isso deixando o binario sem a dependência de libs externas porém deixando o arquivo maior.</p>
<p>Fiz um &#8220;hello world&#8221; em C para demostrar isso. Segue abaixo o exemplo.</p>
<blockquote><p>
root@capsula:~/dev# gcc teste.c -o dinamic<br />
root@capsula:~/dev# gcc -static teste.c -o static<br />
root@capsula:~/dev# ls -lh<br />
total 744K<br />
-rwxr-xr-x 1 root root 8.3K 2010-10-07 21:46 dinamic<br />
-rwxr-xr-x 1 root root 725K 2010-10-07 21:46 static<br />
-rw-r&#8211;r&#8211; 1 root root   71 2010-10-07 21:46 teste.c<br />
root@capsula:~/dev#
</p></blockquote>
<p>Vejam a diferença entre os tamanhos do binario compilado statico e dinamico. Outro item a se averiguar e a string &#8220;stripped&#8221; e &#8220;not stripped&#8221;, afinal o que quer dizer isso?<br />
Um binario &#8220;stripped&#8221; significa que o mesmo não possue os símbolos do arquivo objeto. Simbolos que são gerados pelo compilador e ajudam na busca de informaçoes sobre o binário analisado.</p>
<p>Um hacker pode eliminar os simbolos do binário através do comando &#8220;strip&#8221;.</p>
<blockquote><p>root@capsula:~/dev# ls -lh static<br />
-rwxr-xr-x 1 root root 725K 2010-10-07 21:46 static<br />
root@capsula:~/dev# strip static<br />
root@capsula:~/dev# ls -lh static<br />
-rwxr-xr-x 1 root root 650K 2010-10-07 21:51 static<br />
root@capsula:~/dev#
</p></blockquote>
<p>Repare no exemplo acima que o tamanho do binario diminui, legal neh <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Bom digamos que o hacker esqueceu de sumir com os símbolos do binario, podemos analisá-los entao. Existe um comando que nos auxilia nessa tarefa o comando &#8220;nm&#8221;, ele lista os simbolos do binario.</p>
<blockquote><p>root@capsula:~/dev# nm static<br />
nm: static: no symbols<br />
root@capsula:~/dev#
</p></blockquote>
<p>Mas se analisarmos o binário compilado &#8220;dinamic&#8221; será que ele possue simbolos?</p>
<blockquote><p>root@capsula:~/dev# nm dinamic<br />
0000000000600e40 d _DYNAMIC<br />
0000000000600fe8 d _GLOBAL_OFFSET_TABLE_<br />
0000000000400638 R _IO_stdin_used<br />
                 w _Jv_RegisterClasses<br />
0000000000600e20 d __CTOR_END__<br />
0000000000600e18 d __CTOR_LIST__<br />
0000000000600e30 D __DTOR_END__<br />
0000000000600e28 d __DTOR_LIST__<br />
00000000004006e8 r __FRAME_END__<br />
0000000000600e38 d __JCR_END__<br />
0000000000600e38 d __JCR_LIST__<br />
0000000000601020 A __bss_start<br />
0000000000601010 D __data_start<br />
00000000004005f0 t __do_global_ctors_aux<br />
0000000000400490 t __do_global_dtors_aux<br />
0000000000601018 D __dso_handle<br />
                 w __gmon_start__<br />
0000000000600e14 d __init_array_end<br />
0000000000600e14 d __init_array_start<br />
0000000000400550 T __libc_csu_fini<br />
0000000000400560 T __libc_csu_init<br />
                 U __libc_start_main@@GLIBC_2.2.5<br />
0000000000601020 A _edata<br />
0000000000601030 A _end<br />
0000000000400628 T _fini<br />
00000000004003f0 T _init<br />
0000000000400440 T _start<br />
000000000040046c t call_gmon_start<br />
0000000000601020 b completed.7382<br />
0000000000601010 W data_start<br />
0000000000601028 b dtor_idx.7384<br />
0000000000400500 t frame_dummy<br />
0000000000400524 T main<br />
                 U printf@@GLIBC_2.2.5<br />
root@capsula:~/dev#
</p></blockquote>
<p>Sim e bastante <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Note que nosso binário não faz nada demais apenas usa a função &#8220;printf&#8221;, mas olhe bem no final do comando &#8220;nm&#8221;. Vemos um &#8220;printf&#8221;, como funcionou para visualizar o acesso a função &#8220;printf&#8221;, funciona para outras chamadas de sistemas como &#8220;socket&#8221;, &#8220;connect&#8221;, &#8220;ioctl&#8221;, etc. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong>Olhando dentro do executável <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </strong></p>
<p>Existe um comando que nos permite olhar em até certa parte dentro de um executável. O comando &#8216;strings&#8217; ele permite obter os textos de caracteres armazenado no executável. Vejamos um exemplo:</p>
<blockquote><p>
root@capsula:~/dev# strings dinamic<br />
/lib64/ld-linux-x86-64.so.2<br />
__gmon_start__<br />
libc.so.6<br />
printf<br />
__libc_start_main<br />
GLIBC_2.2.5<br />
fff.<br />
=/<br />
fffff.<br />
l$ L<br />
t$(L<br />
|$0H<br />
Hello World<br />
root@capsula:~/dev#
</p></blockquote>
<p>Veja bem no final o conteudo do nosso printf &#8220;hello world&#8221;. Se estiver analisando um binário misterioso com esse comando você obter detalhes da função &#8220;printf&#8221; ou qualquer outra cadeia de caracteres que o binário misterioso faz uso.</p>
<p><strong>Análise dinâmica.</strong></p>
<p>Apos analisarmos o binario e verificar que não oferece perigo podemos executá-lo e analisar quais chamadas de sistemas e bibliotecas que ele chama ou executa.<br />
Possuimos 2 comandos para isso, são eles:</p>
<ul>
strace &#8211; Permite visualizar as chamadas de sistemas que são executadas pelo binário.<br />
ltrace &#8211; Permite visualizar as bibliotecas executadas pelo binário.
</ul>
<p><strong>strace</strong></p>
<blockquote><p>
root@capsula:~/dev# strace ./dinamic<br />
execve(&#8220;./dinamic&#8221;, ["./dinamic"], [/* 20 vars */]) = 0<br />
brk(0)                                  = 0&#215;1128000<br />
access(&#8220;/etc/ld.so.nohwcap&#8221;, F_OK)      = -1 ENOENT (No such file or directory)<br />
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbe5c153000<br />
access(&#8220;/etc/ld.so.preload&#8221;, R_OK)      = -1 ENOENT (No such file or directory)<br />
open(&#8220;/etc/ld.so.cache&#8221;, O_RDONLY)      = 3<br />
fstat(3, {st_mode=S_IFREG|0644, st_size=17219, &#8230;}) = 0<br />
mmap(NULL, 17219, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fbe5c14e000<br />
close(3)                                = 0<br />
access(&#8220;/etc/ld.so.nohwcap&#8221;, F_OK)      = -1 ENOENT (No such file or directory)<br />
open(&#8220;/lib/libc.so.6&#8243;, O_RDONLY)        = 3<br />
read(3, &#8220;\177ELF\2\1\1\3&gt;\1`\355\1&#8243;&#8230;, 832) = 832<br />
fstat(3, {st_mode=S_IFREG|0755, st_size=1572232, &#8230;}) = 0<br />
mmap(NULL, 3680296, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbe5bbb2000<br />
mprotect(0x7fbe5bd2c000, 2093056, PROT_NONE) = 0<br />
mmap(0x7fbe5bf2b000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0&#215;179000) = 0x7fbe5bf2b000<br />
mmap(0x7fbe5bf30000, 18472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbe5bf30000<br />
close(3)                                = 0<br />
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbe5c14d000<br />
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbe5c14c000<br />
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbe5c14b000<br />
arch_prctl(ARCH_SET_FS, 0x7fbe5c14c700) = 0<br />
mprotect(0x7fbe5bf2b000, 16384, PROT_READ) = 0<br />
mprotect(0&#215;600000, 4096, PROT_READ)     = 0<br />
mprotect(0x7fbe5c155000, 4096, PROT_READ) = 0<br />
munmap(0x7fbe5c14e000, 17219)           = 0<br />
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), &#8230;}) = 0<br />
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbe5c152000<br />
write(1, &#8220;Hello World&#8221;, 11Hello World)             = 11<br />
exit_group(0)                           = ?<br />
root@capsula:~/dev#</p>
</blockquote>
<p><strong>ltrace</strong></p>
<blockquote><p>root@capsula:~/dev# ltrace ./dinamic<br />
__libc_start_main(0&#215;400524, 1, 0x7fff6d162488, 0&#215;400560, 0&#215;400550<br />
printf(&#8220;Hello World&#8221;)                                                        = 11<br />
Hello World+++ exited (status 0) +++<br />
root@capsula:~/dev#
</p></blockquote>
<p>Note que o nosso softwarezinho de exemplo chama um certo número de chamadas e apenas executa a função &#8220;printf&#8221;, presente na biblioteca stdio.h ou libc conforme a string indica &#8220;__libc_start_main&#8221;.</p>
<p>Bom espero ter conseguido demostrar algumas formas de analisar arquivos executáveis ou binários. E espero daqui para frente ter tempo para postar. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Att.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/268/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=268&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/10/08/mini-analise-forense/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>
	</item>
		<item>
		<title>Fazendo um pit-stop</title>
		<link>http://ricardobarbosams.wordpress.com/2010/08/23/fazendo-um-pit-stop/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/08/23/fazendo-um-pit-stop/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 01:39:11 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=246</guid>
		<description><![CDATA[Saindo um pouco do convencional de postagem e após um longo tempo sem postar, resolvi postar uma utilidade publica que achei interessante. Tive que trocar o pneu da minha moto e fui pesquisar sobre pneus, qualidades, durabilidade, etc. E encontrei alguns dados interessante, códigos que todo pneu possue para ser identificado. Nao sei vocês mas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=246&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Saindo um pouco do convencional de postagem e após um longo tempo sem postar, resolvi postar uma utilidade publica que achei interessante. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Tive que trocar o pneu da minha moto e fui pesquisar sobre pneus, qualidades, durabilidade, etc. E encontrei alguns dados interessante, códigos que todo pneu possue para ser identificado. Nao sei vocês mas eu não sabia agora sei e para quem possa um dia ter que comprar um pneu segue como escolher. (obs: valido para pneus de moto e carro).</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/08/decifrandoopneu.jpg"><img class="aligncenter size-medium wp-image-247" title="decifrandoopneu" src="http://ricardobarbosams.files.wordpress.com/2010/08/decifrandoopneu.jpg?w=300&#038;h=221" alt="" width="300" height="221" /></a></p>
<p>Figura tirada do site http://forum.rodao.com.br/forum/viewthread.php?forum_id=17&amp;thread_id=442</p>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Arial"; font-size:x-small } --></p>
<table border="1" cellspacing="0" rules="NONE">
<col width="86"></col>
<col width="1000"></col>
<tbody>
<tr>
<td width="86" height="17" align="RIGHT">1</td>
<td width="1000" align="LEFT"><strong><span style="font-family:Times New Roman;">Marca do fabricante</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">1A</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Logotipo do Fabricante</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">2</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Modelo ou tipo do pneu</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">3</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Características e dimensões do pneu (medida do pneu)</span></strong></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT">P &#8211; Quando houver a letra p, significa que o pneu tem uso principal em veículos de passeio. Caso esteja escrito M/C o uso destina-se a motocicletas</td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT">185 &#8211; Largura da secção (em mm)</td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT">65 &#8211; Relação entre a altura da lateral (H) e a largura total do pneu (secção do pneu) (S)</td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT">R &#8211; Significa que o pneu é radial. Se for pecedido da letra Z indica que o pneu suporta velocidades entre 240km/h e 300km/h</td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT">14 &#8211; Diâmetro do aro interno pneu (em polegadas)</td>
</tr>
<tr>
<td height="17" align="RIGHT">4</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Índice de carga/código de velocidade.</span></strong></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">No exemplo 85/T &gt;&gt; 85 = 115kg &#8211; T = 190 km/h</span></td>
</tr>
<tr>
<td height="17" align="RIGHT">5</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Pneu com câmara (Tube Tyre) ou pneu sem câmara (Tubeless)</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">6</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">TWI (Tread Wear Indicators) &#8211; Indicadores de desgaste do pneu &#8211; quando atingidos pelo desgaste, indicam que o pneu deve ser trocado</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">7</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Códigos internos para controle de fabricação (só a fábrica entende essa parte!)</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">8</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Local de fabricação</span></strong></td>
</tr>
<tr>
<td height="32" align="RIGHT">9</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Matrícula D.O.T &#8211; indica o estabelecimento de produção, tipo do pneu e período de fabricação (no exemplo o nº 201 indica 20ª semana de 1981 se vier seguido do símbolo (&lt;) significa que foi produzido na década de 90 e assim por diante</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">10</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Dados referentes à composição e estrutura do pneu</span></strong></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">PLIES = camadas de lonas</span></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">SIDEWALL = flanco (lateral do pneu)</span></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">TREAD = banda de rodagem</span></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">STEEL = aço</span></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">POLYESTER = poliéster</span></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">NYLON = náilon</span></td>
</tr>
<tr>
<td height="17" align="RIGHT">11</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Dados referentes à carga e pressão máximos:</span></strong></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">Max load- carga máxima em kg e Lbs</span></td>
</tr>
<tr>
<td height="17" align="LEFT"></td>
<td align="LEFT"><span style="font-family:Times New Roman;">MAX PRESS &#8211; pressão máxima</span></td>
</tr>
<tr>
<td height="17" align="RIGHT">12</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Registro de homologação (exigência mercado europeu)</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">13</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Símbolo de homologação do Inmetro</span></strong></td>
</tr>
<tr>
<td height="17" align="RIGHT">14</td>
<td align="LEFT"><strong><span style="font-family:Times New Roman;">Classificação do pneu junto a UTQG (legislação dos EUA) </span></strong></td>
</tr>
</tbody>
</table>
<p>Atenciosamente. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/246/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=246&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/08/23/fazendo-um-pit-stop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/08/decifrandoopneu.jpg?w=300" medium="image">
			<media:title type="html">decifrandoopneu</media:title>
		</media:content>
	</item>
		<item>
		<title>Super Heróis do Mundo corporativo</title>
		<link>http://ricardobarbosams.wordpress.com/2010/05/05/super-herois-do-mundo-corporativo/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/05/05/super-herois-do-mundo-corporativo/#comments</comments>
		<pubDate>Wed, 05 May 2010 02:25:12 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=205</guid>
		<description><![CDATA[Encontrei esse &#8220;artigo&#8221; quando esperava fazer a revisão do meu carro, e achei interessante uma analógia dos profissionais de TI com super-heroi, afinal todo profissional de TI é um heroií. Segue abaixo. Você certamente deve conhecer vários profissionais com diferentes capacidades e características. Cada um tem seus pontos fortes e fracos do mundo corporativo. A [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=205&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Encontrei esse &#8220;artigo&#8221; quando esperava fazer a revisão do meu carro, e achei interessante uma analógia dos profissionais de TI com super-heroi, afinal todo profissional de TI é um heroií. Segue abaixo.</p>
<p>Você certamente deve conhecer vários profissionais com diferentes capacidades e características. Cada um tem seus pontos fortes e fracos do mundo corporativo. A seguir você encontra um guia rápido para identificar esses seres, com a peculiaridades de cada um.<br />
<strong><br />
Wolverine</strong></p>
<p>Os professionais wolverine são selvagens e muito obstinados, porém parte para ação sem pensar ou planejar muito.<br />
<strong><br />
Pontos fortes</strong></p>
<p>-Encaram qualquer desafio.<br />
-Não descansam enquanto não cumprem o objetivo desejado.<br />
-Não temem o fracasso.<br />
-Recuperam-se rápido das ações malsucedidas.<br />
<strong><br />
Pontos fracos</strong><br />
-Não planejam.<br />
-Agem intuitivamente.<br />
-Possuem falta de diplomacia.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/05/wolverine1.jpg"><img src="http://ricardobarbosams.files.wordpress.com/2010/05/wolverine1.jpg?w=244&#038;h=300" alt="" title="wolverine1" width="244" height="300" class="aligncenter size-medium wp-image-206" /></a></p>
<p><strong>Batman</strong></p>
<p>Esses profissionais fazem o tipo silencioso, porém são sábios e observadore. Preferem pensar muito e nunca parte para a ação sem um plano bem traçado.</p>
<p><strong>Pontos fortes</strong><br />
-São planejadores habeis.<br />
-Sempre tem um plano B.<br />
Observadores e atentos, sempre sabem o que está ocorrendo a sua volta.</p>
<p><strong>Pontos fracos</strong><br />
-Silenciosos, não vendem muito bem, o que prejudica sua imagem<br />
-Tendem a não delegar tarefas.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/05/batman.jpg"><img src="http://ricardobarbosams.files.wordpress.com/2010/05/batman.jpg?w=300&#038;h=225" alt="" title="batman" width="300" height="225" class="aligncenter size-medium wp-image-207" /></a></p>
<p><strong>Superman</strong></p>
<p>São diplomáticos e extremamentes altruistas. Ótimos líderes e capazes de fazer legiões inteiras o seguirem.</p>
<p><strong>Pontos fortes</strong><br />
-São persuasivas e carismáticas ao extremo.<br />
-Educados e comunicativos, vendem-se muito bem.<br />
-Pólidos e diplomáticos, resolvem as situações sem brigas ou extresse.</p>
<p><strong>Pontos fracos</strong><br />
-Por pensarem demais nos outros, acabam absorvendo problemas que não deveriam.<br />
-Por terem uma imagem de muito bonzinhos, os outros tiram vantagem disso.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/05/superman-wallpaper.jpg"><img src="http://ricardobarbosams.files.wordpress.com/2010/05/superman-wallpaper.jpg?w=300&#038;h=225" alt="" title="superman-wallpaper" width="300" height="225" class="aligncenter size-medium wp-image-208" /></a></p>
<p><strong>Mulher maravilha</strong></p>
<p>Essa é a incansável e guerreira que vive no mundo do patriarcado, em que precisa , além de provar todo o seu valor na luta cotidiana, trabalhar o dobro para ter o mesmo reconhecimento dados aos homens.</p>
<p><strong>Pontos fortes</strong><br />
-Inteligência emocional.<br />
-Determinação.<br />
-Visão perférica(vê tudo o que esta acontecendo ao seu redor).</p>
<p><strong>pontos fracos</strong><br />
-Descontrole emocional (em alguns dias do mês).<br />
-Jornada dupla(trabalha fora e ainda cuida da casa) causa fadiga.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/05/mulher_maravilha.jpg"><img src="http://ricardobarbosams.files.wordpress.com/2010/05/mulher_maravilha.jpg?w=600" alt="" title="mulher_maravilha"   class="aligncenter size-full wp-image-209" /></a></p>
<p><strong>Homem Aranha</strong></p>
<p>Este é o tipo que vive pendurado pelo teto. Muitos jovens, porém fiéis e dedicados, esses profissionais tem várias ocupações, dividindo a atenção com diversos trabalhos e tentando(ainda que em vão) levar uma vida pessoal regular.</p>
<p><strong>Pontos fortes</strong><br />
-São dedicados e esforçados e fiéis.<br />
-Agéis e flexíveis, tem grande capacidade de adaptação a várias funções.<br />
<strong><br />
Pontos fracos</strong><br />
-Ainda imaturos, muitas vezes cometem deslizes que comprometem um melhor resultado.<br />
-Vivem cansados por não focarem suas tarefas ou não souberem dividir o tempo.</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/05/spiderman_1.jpg"><img src="http://ricardobarbosams.files.wordpress.com/2010/05/spiderman_1.jpg?w=300&#038;h=225" alt="" title="spiderman_1" width="300" height="225" class="aligncenter size-medium wp-image-210" /></a></p>
<p> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/205/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=205&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/05/05/super-herois-do-mundo-corporativo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/05/wolverine1.jpg?w=244" medium="image">
			<media:title type="html">wolverine1</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/05/batman.jpg?w=300" medium="image">
			<media:title type="html">batman</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/05/superman-wallpaper.jpg?w=300" medium="image">
			<media:title type="html">superman-wallpaper</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/05/mulher_maravilha.jpg" medium="image">
			<media:title type="html">mulher_maravilha</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/05/spiderman_1.jpg?w=300" medium="image">
			<media:title type="html">spiderman_1</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalando vsphere client no windows 7</title>
		<link>http://ricardobarbosams.wordpress.com/2010/04/01/instalando-vspher-client-no-windows-7/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/04/01/instalando-vspher-client-no-windows-7/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 17:12:29 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[virtualizacao]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=167</guid>
		<description><![CDATA[Este post e o resultado da tentativa de instalação do vsphere client no windows 7. Este post e a &#8220;portabilidade&#8221; do seguinte artigo http://www.techhead.co.uk/running-vmware-vsphere-client-on-windows-7. Quando você instala o vsphere client em um windows 7 e tenta executa-lo encontra a seguinte tela de erro: Esse erro e contornavel. Primeiro obtenha uma cópia do arquivo system.dll de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=167&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este post e o resultado da tentativa de instalação do vsphere client no windows 7. Este post e a &#8220;portabilidade&#8221; do seguinte artigo <a href="http://www.techhead.co.uk/running-vmware-vsphere-client-on-windows-7">http://www.techhead.co.uk/running-vmware-vsphere-client-on-windows-7</a>. Quando você instala o vsphere client em um windows 7 e tenta executa-lo encontra a seguinte tela de erro:</p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/04/vsphere_erro2.png"><img class="aligncenter size-medium wp-image-179" title="vsphere_erro" src="http://ricardobarbosams.files.wordpress.com/2010/04/vsphere_erro2.png?w=300&#038;h=124" alt="" width="300" height="124" /></a></p>
<p>Esse erro e contornavel. Primeiro obtenha uma cópia do arquivo system.dll de uma máquina windows 7 com .NET versão 3.5 SP1 instalado, ou obtenha direto do link abaixo <a href="http://www.techhead.co.uk/running-vmware-vsphere-client-on-windows-7">http://www.4shared.com/file/254124783/2cdd7844/system.html</a>. Crie uma pasta no caminho de instalacao do vsphere client normalmente em <strong>&#8220;%ProgramFiles%\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\Lib&#8221;</strong>. No mesmo diretório edite o arquivo <strong>&#8220;VpxClient.exe.config&#8221;</strong> e adicione o seguinte trecho, abaixo da string &#8220;&#8221; salve o arquivo e tente abrir o vsphere</p>
<blockquote><p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;<br />
&lt;configuration&gt;<br />
&lt;system.net&gt;<br />
&lt;connectionManagement&gt;<br />
&lt;clear/&gt;<br />
&lt;add address=&#8221;*&#8221; maxconnection=&#8221;8&#8243; /&gt;<br />
&lt;/connectionManagement&gt;<br />
&lt;/system.net&gt;<br />
&lt;appSettings&gt;<br />
&lt;add key = &#8220;protocolports&#8221; value = &#8220;https:443&#8243;/&gt;<br />
&lt;/appSettings&gt;<br />
<strong>&lt;runtime&gt;<br />
&lt;developmentMode developerInstallation=&#8221;true&#8221;/&gt;<br />
&lt;/runtime&gt;</strong><br />
&lt;/configuration&gt;</p></blockquote>
<p>Após coloque o caminho <strong>&#8220;%ProgramFiles%\VMware\Infrastructure\Virtual Infrastructure  Client\Launcher\Lib&#8221;</strong> na variável de ambiente path.</p>
<p>Agora tente abrir o vsphere client que irá funcionar. Comigo funcionou <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a href="http://ricardobarbosams.files.wordpress.com/2010/04/vsphere_login1.png"><img class="aligncenter size-medium wp-image-176" title="vsphere_login1" src="http://ricardobarbosams.files.wordpress.com/2010/04/vsphere_login1.png?w=300&#038;h=269" alt="" width="300" height="269" /></a></p>
<p>Att.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=167&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/04/01/instalando-vspher-client-no-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/04/vsphere_erro2.png?w=300" medium="image">
			<media:title type="html">vsphere_erro</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/04/vsphere_login1.png?w=300" medium="image">
			<media:title type="html">vsphere_login1</media:title>
		</media:content>
	</item>
		<item>
		<title>Postfix a La Carte :)</title>
		<link>http://ricardobarbosams.wordpress.com/2010/03/30/postfix-a-la-carte/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/03/30/postfix-a-la-carte/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 01:44:38 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[E-mail]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=129</guid>
		<description><![CDATA[Este e uma compilação das formas possiveis de uso do postfix como eu tive uma certa dificuldade de entender alguns conceitos do postfix como para que servia o virtual_alias_* , virtual_mailbox_*. Então resolvi falar um pouco sobre algumas formas que o postfix trabalha.  Vamos lá Arroz com feijão O feijão com arroz do postfix é [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=129&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este e uma compilação das formas possiveis de uso do postfix como eu tive uma certa dificuldade de entender alguns conceitos do postfix como para que servia o virtual_alias_* , virtual_mailbox_*.</p>
<p>Então resolvi falar um pouco sobre algumas formas que o postfix trabalha.  Vamos lá <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong>Arroz com feijão</strong></p>
<p>O feijão com arroz do postfix é bem simples iremos configurar um servidor de e-mail respondendo a um único dominio apenas. No nosso exemplo o dominio será yamaha.com.br. Será usada essa mesma configuração para todos os ambientes posteriores de teste que utilizaremos.</p>
<p>Dominio: yamaha.com.br<br />
SMTP: mail.yamaha.com.br<br />
Endereço IP: 192.168.1.10/24</p>
<p>Segue topologia abaixo:</p>
<p style="text-align:center;"><a href="http://ricardobarbosams.files.wordpress.com/2010/03/postfix1.jpeg"><img class="alignnone size-full wp-image-138" title="postfix" src="http://ricardobarbosams.files.wordpress.com/2010/03/postfix1.jpeg?w=600&#038;h=323" alt="" width="600" height="323" /></a></p>
<blockquote><p><code><br />
myhostname = mail.yamaha.com.br<br />
mydomain = yamaha.com.br<br />
mydestination = localhost, yamaha.com.br<br />
</code></p></blockquote>
<p>Vamos la o primeiro parametro é o &#8220;myhostname&#8221; o qual é o nome do host que esta instalado o servidor de e-mail, ou seja o MTA(MTA e o servidor de e-mail proprieamente dito) no nosso caso configuramos o nome do servidor de e-mail como &#8220;mail.yamaha.com.br&#8221; um nome ficticio.<br />
O segundo parametro é o &#8220;mydomain&#8221; que indica o nome do domínio que o servidor de e-mail(postfix) acomoda.<br />
O terceiro parametro &#8220;mydestination&#8221; e muito importante ele que diz quais dominios o servidor de e-mail ira atender, no caso yamaha.com.br, entao sendo assim todos os emails destinados ao user@yamaha.com.br deverá ser entregue ao nosso servidor com endereço ip 192.168.1.10 ou mail.yamaha.com.br qualquer outra coisa por exemplo user@honda.com.br será rejeitado com a mensagem nos logs &#8220;user unknown&#8221;.</p>
<p><strong>Funcionamento</strong></p>
<p>O usuário na estação workstation envia um email apartir de fulano@yamaha.com.br para ciclano@yamaha.com.br, para esse envio funcionar os usuarios fulano e ciclano devem existir no /etc/passwd. Outro exemplo o fulano@honda.com.br envia e-mail para ciclano@yamaha.com.br o mta do dominio honda ira consultar o registro MX do dominio yamaha.com.br no servidor dns responsavel pelo dominio no caso ns1.yamaha.com.br o qual irá responder mail.yamaha.com.br, assim sendo o cliente fulano@honda.com.br envia outro pedido para resolucao de endereço ip do nome mail.yamaha.com.br para somente entao enviar o email para ciclano@yamaha.com.br. Quando o postfix receber o pacote de dados ira checar se existe o usuario ciclano no /etc/passwd e entregar a mensagem. Esse e o hello world em postfix <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
<strong><br />
Preparando os ingredientes</strong></p>
<p>Blz funcionou o ambiente com um único dominio, mas se eu precisar de que um postfix atender a mais de um dominio. Por exemplo yamaha.com.br e honda.com.br? para isso vou utilizar o virtual domain do postfix. Postfix pode enviar, receber e armazenar mensagem para mais de um dominio usando dois métodos.</p>
<ul>
<li> virtual_alias_domains</li>
<li> virtual_mailbox_domains</li>
</ul>
<p>O primeiro método virtual_alias_domains expande o número de dominios para o qual o servidor postfix é o destino final. Os dominios listados no parametro &#8220;mydestination&#8221; são chamados de dominios canonicos porque normalmente listão todas os domínios da máquina local. Para ter dominios a mais ou seja sem o dominio ser local é preciso criar um virtual_alias_domains. Por exemplo no exemplo anterior nos tinhamos o base de usuarios de email ficava no /etc/passwd e atendia pelo dominio yamaha.com.br, porém imaginemos que acontece aquelas fusões de grandes empresas e a yamaha comprasse a honda. Entao teriamos que ter alguns usuarios com o dominio yamaha.com.br e o dominio honda, dessa forma teriamos o usuário fulano como fulano@yamaha.com.br e fulano@honda.com.br na mesma máquina. Utilizando a configuração anterior poderiamos ter esse ambiente utilizando virtual_alias_domains. Um alias e um apelido logo um alias_domains e um apelido para o dominio no caso o dominio local se chama yamaha.com.br e o apelido seria honda.com.br. Esse apelido pode ser para a mesma conta de usuario, mailbox ou para conta de usuario distinta, outra mailbox. Segue nova configuração abaixo.</p>
<blockquote><p><code>myhostname = mail.yamaha.com.br<br />
mydomain = yamaha.com.br<br />
mydestination = localhost, yamaha.com.br<br />
virtual_alias_domains = honda.com.br<br />
virtual_alias_maps = hash:/etc/postfix/virtual_alias_maps<br />
</code></p></blockquote>
<p>Veja o arquivo &#8220;/etc/postfix/virtual_alias_maps&#8221;.</p>
<blockquote><p><code><br />
# honda.com.br<br />
postmaster@honda.com.br           postmaster@yamaha.com.br<br />
jaspion@honda.com.br                 jaspion@yamaha.com.br<br />
batman@honda.com.br                bruce@yamaha.com.br<br />
bruce@honda.com.br                   bruce@yamaha.com.br<br />
</code></p></blockquote>
<p><strong>Espaguete</strong></p>
<p>Vamos testar o envio de mensagem.</p>
<blockquote><p><code><br />
# echo test | sendmail bruce@honda.com.br<br />
ou<br />
# mail -s test bruce@honda.com.br<br />
</code></p></blockquote>
<p>Vejam os logs do envio do e-mail.</p>
<blockquote><p><code><br />
Mar 26 08:28:04 mail postfix/qmgr[5224]: C8FDBF292:<br />
from=&lt;<strong>root@yamaha.com.br</strong>&gt;, size=1266, nrcpt=1 (queue active)<br />
Mar 26 08:28:04 mail postfix/smtpd[5230]: disconnect from<br />
localhost[127.0.0.1]<br />
Mar 26 08:28:04 mail postfix/local[5226]: C8FDBF292:<br />
to=&lt;<strong>bruce@honda.com.br</strong>&gt;, relay=local, delay=0.02,<br />
delays=0.01/0/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)<br />
</code></p></blockquote>
<p>Vemos nas partes em negrito a origem(quem enviou o e-mail) e o destino do e-mail no caso root@yamaha.com.br(from) e bruce@honda.com.br(to).</p>
<p><strong>Rocambolé de carne <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </strong></p>
<p>O próximo método de virtual domain é o virtual_mailbox_domains, um virtual_mailbox_domains são domínios para os usuários que não têm uma conta local (isto é, para os usuários que não estão no arquivo /etc/passwd). Existe um agente de entrega(delivery agent): virtual e local. Por padrão o postfix utiliza o agente local o agente de entrega virtual(virtual delivery agent) não pode acessar seu sistema de usuário local(/etc/passwd) para procurar os nomes dos destinatários. Em vez disso, o agente de distribuição virtual depende inteiramente de mapa que não têm nada a ver com o seu sistema informados na configuração(virtual_mailbox_maps, virtual_mailbox_aliases). Segue abaixo uma configuração utilizando virtual_mailbox_*.</p>
<blockquote><p><code><br />
myhostname = mail.yamaha.com.br<br />
mydomain = yamaha.com.br<br />
mydestination = localhost.$mydomain, $myhostname<br />
mynetworks = 127.0.0.0/8, 192.168.0.0/16, 10.1.4.0/24, 10.0.0.0/24<br />
virtual_mailbox_domains = honda.com.br<br />
virtual_uid_maps = static:2001<br />
virtual_gid_maps = static:1001<br />
virtual_mailbox_base = /maildir<br />
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox_recipients<br />
virtual_alias_maps = hash:/etc/postfix/virtual_mailbox_aliases<br />
</code></p></blockquote>
<p>Arquivo &#8220;/etc/postfix/virtual_mailbox_recipients&#8221;.</p>
<blockquote><p><code><br />
batman@honda.com.br        batman/<br />
robin@honda.com.br    robin/<br />
aquaman@honda.com.br    aquaman/<br />
superman@honda.com.br      superman/<br />
flash@honda.com.br           flash/<br />
</code></p></blockquote>
<p>O caracter &#8220;/&#8221; indica que a mailbox está no formato maildir não mais em mailbox, que é o padrão do postfix. Arquivo &#8220;/etc/postfix/virtual_mailbox_aliases&#8221;</p>
<blockquote><p><code><br />
bruce@honda.com.br       batman@honda.com.br<br />
dick@honda.com.br      robin@honda.com.br<br />
clark@honda.com.br     superman@honda.com.br<br />
barry@honda.com.br   flash@honda.com.br<br />
</code></p></blockquote>
<p>Vamos testar o envio de mensagem.</p>
<blockquote><p><code><br />
# echo test | sendmail bruce@honda.com.br<br />
ou<br />
# mail -s test bruce@honda.com.br<br />
</code></p></blockquote>
<p>Vejam os logs do envio do e-mail.</p>
<blockquote><p><code><br />
Mar 26 08:28:04 mail postfix/qmgr[5224]: C8FDBF292:<br />
from=&lt;<strong>root@yamaha.com.br</strong>&gt;, size=1266, nrcpt=1 (queue active)<br />
Mar 26 08:28:04 mail postfix/smtpd[5230]: disconnect from<br />
localhost[127.0.0.1]<br />
Mar 26 08:28:07 mail postfix/local[5226]: CE83BF287:<br />
to=&lt;<strong>batman@honda.com.br</strong>&gt;, orig_to=&lt;<strong>bruce@honda.com.br</strong>&gt;,<br />
relay=local, delay=0.24, delays=0.01/0/0/0.24, dsn=2.0.0, status=sent<br />
(delivered to maildir)<br />
</code></p></blockquote>
<p>Lembrando que toda essa configuração ocorreu sem autenticação e apenas para ilustrar e elucidar os conceitos de virtual_alias e virtual_mailbox que quando comecei a mexer com postfix achei muito confuso e não vi uma documentação explicando apenas receitas de bolos. </p>
<p>Att.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=129&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/03/30/postfix-a-la-carte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>

		<media:content url="http://ricardobarbosams.files.wordpress.com/2010/03/postfix1.jpeg" medium="image">
			<media:title type="html">postfix</media:title>
		</media:content>
	</item>
		<item>
		<title>Entrando dentro do kernel sem bater na porta :D</title>
		<link>http://ricardobarbosams.wordpress.com/2010/03/19/entrando-dentro-do-kernel-sem-bater-na-porta-d/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/03/19/entrando-dentro-do-kernel-sem-bater-na-porta-d/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 06:39:59 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=122</guid>
		<description><![CDATA[Ola após um longo período bem turbulento sem postagem devido a falta de tempo, agora me sobrou um tempo resolvi postar algo interessante(pelo menos para mim), esse e o primeiro de alguns posts que quero falar sobre lkm. Mas e ai? que macumba é LKM?!?. Bom LKM é Load Kernel Module ou módulos do kernel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=122&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ola após um longo período bem turbulento sem postagem devido a falta de tempo, agora me sobrou um tempo resolvi postar algo interessante(pelo menos para mim), esse e o primeiro de alguns posts que quero falar sobre lkm. Mas e ai? que macumba é LKM?!?. Bom LKM é Load Kernel Module ou módulos do kernel carregavéis &#8220;aportuguesado&#8221; <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . O que exatamente é um módulo do kernel? Os módulos são pedaços de código que podem ser carregadas e descarregadas dentro do kernel. Eles estendem a funcionalidade do kernel sem a necessidade de reiniciar o sistema. Por exemplo, um tipo de módulo é o driver de dispositivo, que permite o acesso ao hardware conectados ao sistema. Sem os módulos, teríamos que ter o núcleo do sistema operacional na forma de um kernel monolíticos e quando fosse adicionar novas funcionalidades teria que ser feito direto na imagem do kernel. Ou seja nova compilação, recompilação,.., etc. Outra desvantagem em kernel monoliticos é o tamanho do arquivo de imagem do kernel se torna grande devido a ter que conter todo os &#8220;pedaços&#8221; de codigos ou drivers para cada possível placa de rede, placa de video, ou dispositivo quaisquer, sem contar que a cada inserção de dispositivo um novo suporte de driver também deve ser adicionado gerando com isso a necessidade de recompilar o kernel e reiniciar a máquina. Bom eu desenvolvi esse modulo quando estava no primeiro ano de faculdade nos primórdios do meu aprendizado em Linux. Conforme eu for encontrando tempo vou postar alguns lkm que fiz um deles para interceptar syscall, device driver didatico, criar uma syscall, o duro vai ser converter e ajustar meu código de kernel 2.4 para 2.6 <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Bom para criar um lkm voce precisa de pre-requisitos um deles  é saber a melhor linguagem de todos os tempos &#8220;C&#8221; <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  sendo assim eu vou pressupor que voce leitor ja é um programador C. Segue codigo abaixo do nosso LKM.</p>
<blockquote><p>
<code><br />
/*<br />
 *  hello_world.c - Um simples LKM.<br />
 */<br />
#include <code>&lt;</code>linux/module.h<code>&gt;</code>  /* cabeçalhos requeridos */<br />
#include <code>&lt;</code>linux/kernel.h<code>&gt;</code></p>
<p>int init_module(void)<br />
{<br />
        printk(KERN_INFO "Hello world 1.\n");<br />
        return 0;<br />
}</p>
<p>void cleanup_module(void)<br />
{<br />
        printk(KERN_INFO "Goodbye world 1.\n");<br />
}<br />
</code>
</p></blockquote>
<p>Vamos as explicações? Pois bem as primeiras linhas e bem intuitivo declaracao de bilbliotecas do kernel. Na linha:</p>
<blockquote><p>
<code><br />
int init_module(void)<br />
{<br />
        printk(KERN_INFO "Hello world 1.\n");<br />
        return 0;<br />
}<br />
</code>
</p></blockquote>
<p>E a função responsavél por inicializar nosso módulo ou seja carrega nosso código dentro do espaço kernel, vamos fazer uma parada aqui. Afinal o que é espaço kernel? Bom uma regra, todo LKM e executado no assim chamado &#8220;espaço kernel&#8221; ou &#8220;kernel space&#8221; enquanto que aplicativos como o editor vim, openoffice, firefox rodam em &#8220;espaço usuário&#8221; ou &#8220;user space&#8221;. Livro do Tannenbaum função de um sistema operacional é a de criar programas ou softwares para serem executados em um computador e criar uma interface para esses programas ou softwares protegendo o acesso nao autorizado a dispositivos de hardware e software tirando assim a responsabilidade do programador de aplicativos de se preocupar em carregar registradores da CPU chamar interrupção tal, etc. Esse &#8220;espaço&#8221; assim designado e chamado de espaço kernel e cria essa proteção dos softwares de usuários do sistema operacional. Bom agora que sabemos o que é espaço kernel e espaço usuário continuamos analisando o código.</p>
<blockquote><p>
<code><br />
void cleanup_module(void)<br />
{<br />
        printk(KERN_INFO "Goodbye world 1.\n");<br />
}<br />
</code>
</p></blockquote>
<p>Como temos a função de entrada no kernel(kernel space), também temos a função de saida do kernel &#8220;cleanup_module&#8221; simples né. Agora vamos a função dentro de cada item(init e cleanup) os &#8220;printk&#8221;. Quem e acostumado ou é programador C já sacou o que faz o printk sim ele e equivalente ao printf no espaço usuário porém com resalvas. A macro &#8220;KERN_INFO&#8221; é uma macro que indica prioridade para a mensagem via printk normalmente utilizado pelo ksyslog ou klogd em sistemas Linux antigos. Com isso você pode definir prioridade quando for definir mensagem para o programador do kernel. Existem 8 niveis de prioridade definidas no arquivo de cabeçalho kernel.h normalmente nos fontes do kernel fica em linux-versao/include/linux/kernel.h, vejam as prioridades abaixo.</p>
<blockquote><p>
<code><br />
#define KERN_EMERG      ""   /* system is unusable                   */<br />
#define KERN_ALERT      ""   /* action must be taken immediately     */<br />
#define KERN_CRIT       ""   /* critical conditions                  */<br />
#define KERN_ERR        ""   /* error conditions                     */<br />
#define KERN_WARNING    ""   /* warning conditions                   */<br />
#define KERN_NOTICE     ""   /* normal but significant condition     */<br />
#define KERN_INFO       ""   /* informational                        */<br />
#define KERN_DEBUG      ""   /* debug-level messages                 */<br />
</code>
</p></blockquote>
<p>Blz código explicado vamos compilar, mas antes precisamos criar um arquivo Makefile para ser utilizado pela ferramenta de compilação make. Segue Makefile abaixo:</p>
<blockquote><p>
<code><br />
obj-m += hello_world.o</p>
<p>all:<br />
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules</p>
<p>clean:<br />
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean<br />
</code>
</p></blockquote>
<p>Não é intuito deste post explicar o funcionamento do make senão o post vai ficar muito extenso talvez num post futuro. Após a criacao do arquivo execute o comando make</p>
<blockquote><p>
<code><br />
root@capsula:~/lkm# ls<br />
hello_world.c  Makefile<br />
root@capsula:~/lkm#<br />
root@capsula:~/lkm# make<br />
make -C /lib/modules/2.6.31-14-generic-pae/build M=/home/ricardobarbosa/lkm modules<br />
make[1]: Entering directory `/usr/src/linux-headers-2.6.31-14-generic-pae'<br />
  CC [M]  /home/ricardobarbosa/lkm/hello_world.o<br />
  Building modules, stage 2.<br />
  MODPOST 1 modules<br />
  CC      /home/ricardobarbosa/lkm/hello_world.mod.o<br />
  LD [M]  /home/ricardobarbosa/lkm/hello_world.ko<br />
make[1]: Leaving directory `/usr/src/linux-headers-2.6.31-14-generic-pae'<br />
root@capsula:~/lkm# ls<br />
hello_world.c   hello_world.mod.c  hello_world.o  Module.markers  Module.symvers<br />
hello_world.ko  hello_world.mod.o  Makefile       modules.order<br />
root@capsula:~/lkm#<br />
</code>
</p></blockquote>
<p>Ótimo meu módulo compilou com sucesso e podemos ver o modulo .ko (uma curiosidade sabe oque significa a extensao .ko &#8211; Kernel Object). Vamos subir nosso módulo dentro do kernel? para isso utilizamos o comando insmod (utilitário para carregamento e descarregamento de lkm).</p>
<blockquote><p>
<code><br />
root@capsula:~/lkm# modinfo hello_world.ko<br />
filename:       hello_world.ko<br />
srcversion:     140276773A3090F6F33891F<br />
depends:<br />
vermagic:       2.6.31-14-generic-pae SMP mod_unload modversions 586<br />
root@capsula:~/lkm# insmod hello_world.ko<br />
root@capsula:~/lkm# lsmod<br />
Module                  Size  Used by<br />
<strong>hello_world              988  0 </strong><br />
crc_ccitt               1852  1 dahdi<br />
iptable_filter          3100  0<br />
ip_tables              11692  1 iptable_filter<br />
x_tables               16544  1 ip_tables<br />
snd_intel8x0           30168  0<br />
snd_ac97_codec        101216  1 snd_intel8x0<br />
ppdev                   6688  0<br />
ac97_bus                1532  1 snd_ac97_codec<br />
psmouse                56180  0<br />
snd_pcm                75488  2 snd_intel8x0,snd_ac97_codec<br />
serio_raw               5280  0<br />
snd_timer              22276  1 snd_pcm<br />
lp                      8964  0<br />
i2c_piix4              10124  0<br />
snd                    59204  4 snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer<br />
parport_pc             32228  0<br />
soundcore               7264  1 snd<br />
snd_page_alloc          9252  2 snd_intel8x0,snd_pcm<br />
parport                35340  3 ppdev,lp,parport_pc<br />
pcnet32                33156  0<br />
mii                     5212  1 pcnet32<br />
floppy                 54980  0<br />
root@capsula:~/lkm#<br />
</code>
</p></blockquote>
<p>Blz nosso lkm subiu sem erro e podemos ver ele carregado quando executamos o comando lsmod(list modules). Subimos o módulo e como sabemos se o nosso módulo funcionou?? Para isso iremos usar o comando dmesg utilitário que exibe as mensagens de inicialização e vindas do kernel.</p>
<blockquote><p>
<code><br />
root@capsula:~/lkm#<br />
.....<br />
[  105.300548] eth0: link up, 100Mbps, full-duplex<br />
[  115.782079] eth0: no IPv6 routers present<br />
[13593.784665] hello_world: module license 'unspecified' taints kernel.<br />
[13593.785548] Disabling lock debugging due to kernel taint<br />
[13593.785716] Hello world 1.<br />
root@capsula:~/lkm#<br />
</code>
</p></blockquote>
<p>Notem a mensagem hello world nosso módulo subiu perfeitamente notem tambem a mensagem &#8220;hello_world: module license &#8216;unspecified&#8217; taints kernel.&#8221; isso é uma forma de indicar que nosso módulo foi inserido no kernel sem uma declaração de licença explicita, o que falta é uma declaração da licença usada pelo módulo. Para isso usamos a macro.</p>
<blockquote><p>
<code><br />
 MODULE_LICENSE("GPL");<br />
</code>
</p></blockquote>
<p>Adicione o código acima ao fonte e recompile o módulo. após isso a mensagem de &#8220;hello_world: module license &#8216;unspecified&#8217; taints kernel.&#8221; irá sumir. Com essa declaração de licença GPL nosso módulo terá acesso aos símbolos do kernel GPL, isso é feito para garantir que tudo dentro do kernel seja GPL <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Agora iremos remover nosso módulo das entranhas do kernel para isso outro utilitário rmmod</p>
<blockquote><p>
<code><br />
root@capsula:~/lkm# rmmod hello_world<br />
root@capsula:~/lkm# dmesg<br />
....<br />
[  105.300548] eth0: link up, 100Mbps, full-duplex<br />
[  115.782079] eth0: no IPv6 routers present<br />
[16057.727314] Hello world 1.<br />
[17080.476439] Goodbye world 1.<br />
root@capsula:~/lkm#<br />
</code>
</p></blockquote>
<p>Nossa este post estava ficando gigante, espero ter conseguido passar o assunto de forma objetiva. Qualquer dúvidas em relação ao assunto e claro se eu souber basta perguntar <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  </p>
<p>Até a próxima.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/122/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=122&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/03/19/entrando-dentro-do-kernel-sem-bater-na-porta-d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>
	</item>
		<item>
		<title>Problemas corriqueiros com o apt-get</title>
		<link>http://ricardobarbosams.wordpress.com/2010/01/21/problemas-corriqueiros-com-o-apt-get/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/01/21/problemas-corriqueiros-com-o-apt-get/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:05:08 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=98</guid>
		<description><![CDATA[Vou postar uma séries de resoluções de problemas que eu tive com a ferramenta &#8220;apt&#8221; e &#8220;dpkg&#8221; umas que descobri outras que li em outros blogs a referência esta no final do post. Problema 1: Se estiver tentando instalar um pacote e receber a mensagem E: The package XXXX needs to be reinstalled, but I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=98&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Vou postar uma séries de resoluções de problemas que eu tive com a ferramenta &#8220;apt&#8221; e &#8220;dpkg&#8221; umas que descobri outras que li em outros blogs a referência esta no final do post.</p>
<p><strong>Problema 1:</strong><br />
Se estiver tentando instalar um pacote e receber a mensagem</p>
<blockquote><p>E: The package XXXX needs to be reinstalled, but I can&#8217;t find an archive for it.<br />
E: Internal error opening cache (1). Please report.</p></blockquote>
<p>ou</p>
<blockquote><p>dpkg &#8211; warning, overriding problem because &#8211;force enabled:<br />
Package is in a very bad inconsistent state &#8211; you should<br />
reinstall it before attempting a removal.</p></blockquote>
<p>ou</p>
<blockquote><p>subprocess post-removal script returned error exit status 127<br />
Errors were encountered while processing:</p></blockquote>
<p><strong>Solução:</strong> Utilize o comando &#8220;dpkg &#8211;remove &#8211;force-remove-reinstreq nome_do_pacote&#8221;, um exemplo para a remoção do pacote vim.</p>
<blockquote><p>dpkg &#8211;remove &#8211;force-remove-reinstreq vim</p></blockquote>
<p>Força a remoção do pacote inconsistente.</p>
<p><strong>Problema 2</strong></p>
<p>Se receber a seguinte mensagem:</p>
<blockquote><p>The packages have files that are overwritten. &#8211; The packages have dependencies poorly resolved &#8211; There are conflicts between packages &#8211; a package can not be removed or updated by dpkg</p></blockquote>
<p><strong>Solução</strong><br />
execute os comandos</p>
<blockquote><p>#echo &#8220;force-all&#8221; &gt;/etc/dpkg/dpkg.cfg<br />
#apt-get -f install</p></blockquote>
<p><strong>Problema 3</strong></p>
<p>Um pacote é instalado e por alguma razão corrompido , você tenta instalar novamente e o apt-get diz que já esta instalado!</p>
<p><strong>Solução:</strong></p>
<blockquote><p>#apt-get remove seu_pacote_corrompido<br />
#apt-get update<br />
#apt-get clean<br />
#apt-get &#8211;reinstall install nome_do_pacote</p></blockquote>
<p><strong>Problema 4</strong>: O apt-get reclama que o repositório não tem a chave GPG(NO_PUBKEY) que serve para verificar a autenticidade dos pacotes</p>
<p><strong>Solução:</strong><br />
Para resolver isso, execute o comando &#8220;apt-get update&#8221;</p>
<p>Copie o código que aparece no erro em negrito no log abaixo:</p>
<blockquote><p>W: GPG error: ftp://ftp.debian.org/ testing Release:<br />
The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY <strong>010908312D230C5F</strong></p>
<p>W: There is no public key available for the following key IDs:<br />
010908312D230C5F</p></blockquote>
<p>Então rode os comandos com o key ID encontrado:</p>
<blockquote><p>#gpg &#8211;keyserver pgpkeys.mit.edu &#8211;recv-key 010908312D230C5F<br />
#gpg -a &#8211;export 010908312D230C5F | sudo apt-key add -</p></blockquote>
<p><strong>Problema 5:</strong> Mensagem de erro como</p>
<blockquote><p>sub-processo post-installation script retornou estado de saída de erro -1<br />
Erros foram encontrados durante o processamento de:</p></blockquote>
<p><strong>Solução</strong><br />
Para solucionar determine o nome do pacote que causou o erro, por exemplo no log abaixo, mostro em negrito o nome do pacote que causou o problema no meu caso(em negrito, xosview):</p>
<blockquote><p>newaliases: warning: valid_hostname: numeric hostname: 69522<br />
newaliases: fatal: bad parameter value: 69522<br />
dpkg: error processing <strong>xosview</strong> (–configure):<br />
subprocess post-installation script returned error exit status 75 sub-processo post-installation script retornou estado de saída de erro 75<br />
Errors were encountered while processing:<br />
Erros foram encontrados durante o processamento de:<br />
xosview</p></blockquote>
<p>Tendo determinado o nome do pacote, execute os comandos adaptado para teu pacote</p>
<blockquote><p>#rm -f /var/lib/dpkg/info/xosview.post*<br />
#rm -f /var/lib/dpkg/info/xosview.pre*<br />
#apt-get -f install</p></blockquote>
<p><strong>Problema 6:</strong> Erro durante a remoção de pacote..</p>
<p><strong>Solução</strong></p>
<p>TROQUE abaixo a palavra pacote_defeituoso pelo nome do pacote que não quer ser removido e então rode estes comandos:</p>
<blockquote><p>#rm -f /var/lib/dpkg/info/pacote_defeituoso.post*<br />
#rm -f /var/lib/dpkg/info/pacote_defeituoso.pre*<br />
#apt-get remove escreva_aqui_o_nome_do_pacote_defeituoso</p></blockquote>
<p><strong>Problema 7:</strong> Erro no /var/lib/dpkg/status…</p>
<p>Muitas vezes o apt-get da erros de leitura no arquivo /var/lib/dpkg/status</p>
<p><strong>Solução</strong></p>
<blockquote><p>#cp /var/lib/dpkg/status-old /var/lib/dpkg/status</p></blockquote>
<p><strong>Problema 8:</strong> Se o problema de erro em /var/lib/dpkg/status… persiste ou exibe a mensagem &#8220;erro de out of room também&#8221; ou a mensagem abaixo</p>
<blockquote><p>E: Dynamic MMap ran out of room</p></blockquote>
<p><strong>Solução</strong></p>
<p>Edite o arquivo /etc/apt/apt.conf, aumentando o cache limit.</p>
<blockquote><p>Apt::Cache-Limit “8388604″;</p></blockquote>
<p><a href="http://www.ubuntu-ac.org/archives/319">http://www.ubuntu-ac.org/archives/319</a><br />
<a href="http://linuxhard.org/site/archives/1013">http://linuxhard.org/site/archives/1013</a></p>
<p>Espero que este post ajude. Afinal o apt tem o poder da vaca <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<blockquote>
<p>root@Capsula:~# apt-get moo<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(__)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(oo)<br />
&nbsp;&nbsp;/&#8212;&#8212;\/<br />
  / &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;||<br />
 *  /\&#8212;/\<br />
&nbsp;&nbsp;~~   ~~<br />
&#8230;.&#8221;Have you mooed today?&#8221;&#8230;<br />
root@Capsula:~#</p>
</blockquote>
<p>Att.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=98&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/01/21/problemas-corriqueiros-com-o-apt-get/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>
	</item>
		<item>
		<title>Script em ruby para monitoramento de serviços &#8211; Nagios</title>
		<link>http://ricardobarbosams.wordpress.com/2010/01/13/script-em-ruby-para-monitoramento-de-servicos-nagios/</link>
		<comments>http://ricardobarbosams.wordpress.com/2010/01/13/script-em-ruby-para-monitoramento-de-servicos-nagios/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 04:19:11 +0000</pubDate>
		<dc:creator>ricardobarbosams</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ricardobarbosams.wordpress.com/?p=56</guid>
		<description><![CDATA[&#160;&#160;&#160;Estou em um projeto de monitoramento de infra-estrutura de TI onde estou tendo que monitorar roteadores, servidores(tanto linux quando windows). Para o monitoramento dos recursos mais usuais como CPU, memória, trafego, etc, o uso do SNMP e plugins padrões do nagios são bastante eficazes. Entretanto, tive que monitorar processos e daemon destes servidores e pelo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=56&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">&nbsp;&nbsp;&nbsp;Estou em um projeto de monitoramento de infra-estrutura de TI onde estou tendo que monitorar roteadores, servidores(tanto linux quando windows). Para o monitoramento dos recursos mais usuais como CPU, memória, trafego, etc, o uso do SNMP e plugins padrões do nagios são bastante eficazes. Entretanto, tive que monitorar processos e daemon destes servidores e pelo menos na busca nos plugins padroes do nagios não encontrei algum que pudesse atender minha demanda. Então parti para o desenvolvimento, teria que criar um script que iria dar um get em MIB de vários servidores buscando determinado processo. Graças aos padrões criados do protocolo SNMP existe na principal &#8220;base de dados&#8221; de um host uma MIB chamada MIB-2(Padrão na maioria das implementações) que já possue essas informações(como nome de processos, uso de memória por processo, etc). Então vi a chance de aprender uma nova linguagem de programação. Há tempos venho tentando arrumar um tempo para aprender ruby, eis que a chance surgiu. Resolvi desenvolver o script de monitoramento do Nagios em ruby. Fiz um &#8220;hello world&#8221; em ruby, e logo percebi o poder dessa linguagem. Uma linguagem dinâmicamente tipada, possue um framework criado para desenvolvimento web o <strong>Rails</strong>, além disso no ruby tudo o que é manipulado é um objeto, não havendo tipos primitivos, ela é altamente produtivo(você escreve pouco e faz muito), e várias outras vantagens <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . O Ruby foi criado por Yukihiro “Matz” Matsumoto, o qual dizia que a linguagem deveria ter o nome de uma pedra preciosa, o qual batizou o nome de ruby.</p>
<p style="text-align:justify;">&nbsp;&nbsp;Bom para começar a escrever meu plugin do nagios precisaria ver como funciona a parte de sockets no ruby ou usar uma biblioteca pronta. Para minha &#8220;sorte&#8221; essa bilblioteca existe <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a href="http://snmplib.rubyforge.org/">http://snmplib.rubyforge.org/</a></p>
<p style="text-align:justify;">&nbsp;&nbsp;Utilizei a snmplib, fiz alguns testes com sucesso fiquei impressionado com a rapidez de se &#8220;fazer as coisas&#8221;. O código que se segue funciona da seguinte forma, ele vai receber via parametros de linha de comando a comunidade SNMP, versão SNMP, nome do processo/aplicativo a verificar, um descritivo além do endereço IP.</p>
<blockquote>
<p style="text-align:justify;">#!/usr/bin/env ruby</p>
<p>include SNMP<br />
require &#8216;optparse&#8217;<br />
require &#8216;pp&#8217;<br />
require &#8216;snmp&#8217;</p>
<p>optparse = OptionParser.new do|opts|<br />
&nbsp;opts.banner = &#8220;Usage: check_windows_processes_snmp.rb [options] host&#8221;</p>
<p>&nbsp;options[:opt_comunidade] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-c&#8217;, &#8216;&#8211;comunidade NOME&#8217;, &#8216;Nomme da Comunidade SNMP&#8217; ) do|comunidade|<br />
&nbsp;&nbsp;options[:opt_comunidade] = comunidade<br />
end</p>
<p>&nbsp;options[:opt_descricao] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-d&#8217;, &#8216;&#8211;descricao NOME&#8217;, &#8216;Descricao do processo&#8217; ) do|descricao|<br />
&nbsp;&nbsp;options[:opt_descricao] = descricao<br />
&nbsp;end</p>
<p>&nbsp;options[:opt_versao] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-v&#8217;, &#8216;&#8211;versao NOME&#8217;, &#8216;Versao SNMP&#8217; ) d do|versao|<br />
&nbsp;&nbsp;options[:opt_versao] = versao<br />
&nbsp;end</p>
<p>&nbsp;options[:opt_processo] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-p&#8217;, &#8216;&#8211;processo NOME&#8217;, &#8216;Nome do Processo&#8217; ) do|processo|<br />
&nbsp;&nbsp;options[:opt_processo] = processo<br />
&nbsp;end</p>
<p>&nbsp;opts.on( &#8216;-h&#8217;, &#8216;&#8211;help&#8217;, &#8216;Display this screen&#8217; ) do<br />
&nbsp;&nbsp;puts opts<br />
&nbsp;&nbsp;exit<br />
&nbsp;end<br />
end</p>
<p>optparse.parse!</p>
<p>if ( (options[:opt_versao] == nil) &amp;&amp; (options[:opt_comunidade] == nil) &amp;&amp; (options[:opt_processo] == nil) )<br />
&nbsp;&nbsp;puts &#8220;Argumentos inexistente: utilize o parametro -h para obter ajuda&#8221;<br />
&nbsp;&nbsp;exit<br />
end</p>
<p>comunidade = options[:opt_comunidade]<br />
processo = options[:opt_processo]<br />
descricao = options[:opt_descricao]</p>
<p>case options[:opt_versao]<br />
&nbsp;when &#8220;1&#8243;<br />
&nbsp;&nbsp;versao = :SNMPv1<br />
&nbsp;when &#8220;2c&#8221;<br />
&nbsp;&nbsp;versao = :SNMPv2c<br />
&nbsp;when &#8220;3&#8243;<br />
&nbsp;&nbsp;versao = :SNMPv3<br />
end</p>
<p>axou = 0</p>
<p>Manager.open(:Host =&gt; ARGV[0],:Version =&gt; versao, :Community =&gt; comunidade) do |manager|<br />
&nbsp;ifTable = ObjectId.new(&#8220;1.3.6.1.2.1.25.4.2.1.2&#8243;)<br />
&nbsp;next_oid = ifTable<br />
&nbsp;while next_oid.subtree_of?(ifTable)<br />
&nbsp;&nbsp;response = manager.get_next(next_oid)<br />
&nbsp;&nbsp;varbind = response.varbind_list.first<br />
&nbsp;&nbsp;next_oid = varbind.name<br />
&nbsp;&nbsp;string = varbind.to_s<br />
&nbsp;&nbsp;if string.match(processo)<br />
&nbsp;&nbsp;&nbsp;puts &#8220;Processo: #{descricao} STATUS: rodando&#8221;<br />
&nbsp;&nbsp;&nbsp;axou = 1<br />
&nbsp;&nbsp;end<br />
&nbsp;end<br />
end</p>
<p>if ( axou != 1 )<br />
&nbsp;puts &#8220;Processo: #{descricao} STATUS: stop&#8221;<br />
&nbsp;exit<br />
end</p>
</blockquote>
<p style="text-align:justify;">Encontrei um biblioteca muito interessante chamada optparse <a href="http://ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html">(http://ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html)</a> ela serve para manipular caracteres passados na linha de comando vamos dissecar esse código por partes. Abaixo declaração de bilblioteas como você faz em outras linguagens como C, Perl e python, etc.</p>
<blockquote>
<p style="text-align:left;">include SNMP<br />
require &#8216;optparse&#8217;<br />
require &#8216;pp&#8217;<br />
require &#8216;snmp&#8217;</p>
</blockquote>
<p style="text-align:justify;">Aqui declaramos um objeto do tipo &#8220;OptionParser&#8221; que será o obejto para manipular os parametros repassados pela linha de comandos. Um parametro interessante dessa biblioteca é o &#8220;objeto.on&#8221;, o qual insere cada parametros da linha de comando no caso criamos a opção de linha de comando &#8220;-c&#8221;, &#8220;-v&#8221;, &#8220;-p&#8221; e &#8220;-d&#8221; para você especificar a comunidade SNMP, versão do protocolo SNMP usado, nome do processo/aplicativo e descrição respectivamente.</p>
<blockquote><p>optparse = OptionParser.new do|opts|<br />
&nbsp;opts.banner = &#8220;Usage: check_windows_processes_snmp.rb [options] host&#8221;</p>
<p>&nbsp;options[:opt_comunidade] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-c&#8217;, &#8216;&#8211;comunidade NOME&#8217;, &#8216;Nomme da Comunidade SNMP&#8217; ) do|comunidade|<br />
&nbsp;&nbsp;options[:opt_comunidade] = comunidade<br />
&nbsp;end</p>
<p>&nbsp;options[:opt_descricao] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-d&#8217;, &#8216;&#8211;descricao NOME&#8217;, &#8216;Descricao do processo&#8217; ) do|descricao|<br />
&nbsp;&nbsp;options[:opt_descricao] = descricao<br />
&nbsp;end</p>
<p>&nbsp;options[:opt_versao] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-v&#8217;, &#8216;&#8211;versao NOME&#8217;, &#8216;Versao SNMP&#8217; ) do|versao|<br />
&nbsp;&nbsp;options[:opt_versao] = versao<br />
&nbsp;end</p>
<p>&nbsp;options[:opt_processo] = nil<br />
&nbsp;&nbsp;opts.on( &#8216;-p&#8217;, &#8216;&#8211;processo NOME&#8217;, &#8216;Nome do Processo&#8217; ) do|processo|<br />
&nbsp;&nbsp;options[:opt_processo] = processo<br />
&nbsp;end</p>
<p>&nbsp;opts.on( &#8216;-h&#8217;, &#8216;&#8211;help&#8217;, &#8216;Display this screen&#8217; ) do<br />
&nbsp;&nbsp;puts opts<br />
&nbsp;&nbsp;exit<br />
&nbsp;end<br />
end</p></blockquote>
<p style="text-align:justify;">Aqui fazemos uma validação(precaução) caso o usuário digite o script sem parametro algum.</p>
<blockquote><p>if ( (options[:opt_versao] == nil) &amp;&amp; (options[:opt_comunidade] == nil) &amp;&amp; (options[:opt_processo] == nil) )<br />
&nbsp;&nbsp;puts &#8220;Argumentos inexistente: utilize o parametro -h para obter ajuda&#8221;<br />
&nbsp;&nbsp;exit<br />
end</p></blockquote>
<p style="text-align:justify;">Definimos as variaveis comunidade, processo, descricao e versao obtidos atraves da biblioteca &#8220;optparse&#8221;. Uma pecualiaridade manipulamos a variavel versao para utilizar a MACRO correspondente a versão do protocolo SNMP. Utilizei uma variavel &#8220;axou&#8221; para manipular quando encontrar o retorno da busca.</p>
<blockquote><p>comunidade = options[:opt_comunidade]<br />
processo = options[:opt_processo]<br />
descricao = options[:opt_descricao]</p>
<p>case options[:opt_versao]<br />
&nbsp;&nbsp;when &#8220;1&#8243;<br />
&nbsp;&nbsp;&nbsp;&nbsp;versao = :SNMPv1<br />
&nbsp;&nbsp;when &#8220;2c&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;versao = :SNMPv2c<br />
&nbsp;&nbsp;when &#8220;3&#8243;<br />
&nbsp;&nbsp;&nbsp;&nbsp;versao = :SNMPv3<br />
end</p>
<p>axou = 0</p></blockquote>
<p style="text-align:justify;">Abaixo temos a parte do código que faz o &#8220;get&#8221; na MIB dos servidores via biblioteca &#8220;snmplib&#8221;, são passados os parametros host, versão, comunidade, e o retorno e analisado com o nome do processo passado via linha de comando se der &#8220;match&#8221; ele escreve que o processo esta rodando no servidor em questão, senão(a variavel &#8220;axou&#8221; esta definida como falso ou seja igual a zero), ele testa a variavel axou e printa que o processo não esta sendo executado.</p>
<blockquote><p>Manager.open(:Host =&gt; ARGV[0],:Version =&gt; versao, :Community =&gt; comunidade) do |manager|<br />
&nbsp;&nbsp;&nbsp;ifTable = ObjectId.new(&#8220;1.3.6.1.2.1.25.4.2.1.2&#8243;)<br />
&nbsp;&nbsp;&nbsp;next_oid = ifTable<br />
&nbsp;&nbsp;&nbsp;while next_oid.subtree_of?(ifTable)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response = manager.get_next(next_oid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varbind = response.varbind_list.first<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next_oid = varbind.name<br />
&nbsp;&nbsp;&nbsp;&nbsp;string = varbind.to_s<br />
&nbsp;&nbsp;&nbsp;&nbsp;if string.match(processo)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts &#8220;Processo: #{descricao} STATUS: rodando&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;axou = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;end<br />
end</p>
<p>if ( axou != 1 )<br />
&nbsp;&nbsp;puts &#8220;Processo: #{descricao} STATUS: stop&#8221;<br />
&nbsp;&nbsp;exit<br />
end</p></blockquote>
<p style="text-align:justify;">Abaixo segue a execução do script.</p>
<p>ricardobarbosa@capsula:~$ ./check_snmp.rb<br />
Argumentos inexistente: utilize o parametro -h para obter ajuda<br />
ricardobarbosa@capsula:~$ ./check_snmp.rb -h<br />
Usage: check_windows_processes_snmp.rb [options] host<br />
-c, &#8211;comunidade NOME            Nomme da Comunidade SNMP<br />
-d, &#8211;descricao NOME             Descricao do processo<br />
-v, &#8211;versao NOME                Versao SNMP<br />
-p, &#8211;processo NOME              Nome do Processo<br />
-h, &#8211;help                       Display this screen<br />
ricardobarbosa@capsula:~$</p>
<p style="text-align:justify;">Testamos o snmp via comando snmpwalk do tools net-snmp(<a href="http://www.net-snmp.org/">http://www.net-snmp.org/</a>), vamos buscar os nomes de todos os processos.</p>
<blockquote><p>ricardobarbosa@capsula:~$ snmpwalk -c public -v 2c 192.168.1.3 hrSWRunName<br />
HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: &#8220;init&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.2 = STRING: &#8220;kthreadd&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.3 = STRING: &#8220;migration/0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4 = STRING: &#8220;ksoftirqd/0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.5 = STRING: &#8220;watchdog/0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.6 = STRING: &#8220;events/0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.7 = STRING: &#8220;khelper&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.41 = STRING: &#8220;kblockd/0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.44 = STRING: &#8220;kacpid&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.45 = STRING: &#8220;kacpi_notify&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.88 = STRING: &#8220;kseriod&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.123 = STRING: &#8220;pdflush&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.124 = STRING: &#8220;pdflush&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.125 = STRING: &#8220;kswapd0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.167 = STRING: &#8220;aio/0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.1289 = STRING: &#8220;ata/0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.1294 = STRING: &#8220;ata_aux&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.1308 = STRING: &#8220;scsi_eh_0&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.1312 = STRING: &#8220;scsi_eh_1&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.2317 = STRING: &#8220;kjournald&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.2473 = STRING: &#8220;udevd&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.2667 = STRING: &#8220;kpsmoused&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.3648 = STRING: &#8220;dhclient3&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4041 = STRING: &#8220;getty&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4044 = STRING: &#8220;getty&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4047 = STRING: &#8220;getty&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4051 = STRING: &#8220;getty&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4053 = STRING: &#8220;getty&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4090 = STRING: &#8220;syslogd&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4109 = STRING: &#8220;dd&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4111 = STRING: &#8220;klogd&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4130 = STRING: &#8220;sshd&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4186 = STRING: &#8220;mysqld_safe&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4228 = STRING: &#8220;mysqld&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4229 = STRING: &#8220;logger&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4313 = STRING: &#8220;asterisk&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4359 = STRING: &#8220;atd&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4370 = STRING: &#8220;cron&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4392 = STRING: &#8220;apache2&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4408 = STRING: &#8220;apache2&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4410 = STRING: &#8220;apache2&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4412 = STRING: &#8220;apache2&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4413 = STRING: &#8220;apache2&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4414 = STRING: &#8220;apache2&#8243;<br />
HOST-RESOURCES-MIB::hrSWRunName.4415 = STRING: &#8220;miniserv.pl&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4422 = STRING: &#8220;login&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4423 = STRING: &#8220;bash&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4439 = STRING: &#8220;bash&#8221;<br />
HOST-RESOURCES-MIB::hrSWRunName.4855 = STRING: &#8220;snmpd&#8221;<br />
ricardobarbosa@capsula:~$</p></blockquote>
<p style="text-align:justify;">Em seguida executamos nosso script em busca do processo apache2 e do postfix para verificar a inexistencia do processo.</p>
<blockquote><p>ricardobarbosa@capsula:~$ ./check_snmp.rb -c public -v 2c -d &#8220;Servidor HTTP APACHE2&#8243; -p apache2 192.168.1.3<br />
Processo: Servidor HTTP APACHE2 STATUS: rodando<br />
ricardobarbosa@capsula:~$<br />
ricardobarbosa@capsula:~$ ./check_snmp.rb -c public -v 2c -d &#8220;Servidor SMTP POSTFIX&#8221; -p master 192.168.1.3<br />
Processo: Servidor SMTP POSTFIX STATUS: stop<br />
ricardobarbosa@capsula:~$</p></blockquote>
<p style="text-align:justify;">Agora e necessário configurar o arquivo checkcommands.cfg do nagios e inserir o comando com as variaveis.(para o post não ficar muito extenso não vou passar essa configuração num post futuro eu farei isso <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )<br />
Não sou desenvolvedor atualmente mas já trabalhei como desenvolvedor delphi e php. Gosto de criar códigos que me ajudem na infra-estrutura. Espero que o post seja útil até a próxima.</p>
<p>Att.<span id="more-56"></span><!--more--></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardobarbosams.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardobarbosams.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardobarbosams.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardobarbosams.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardobarbosams.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardobarbosams.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardobarbosams.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardobarbosams.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardobarbosams.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardobarbosams.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardobarbosams.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardobarbosams.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardobarbosams.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardobarbosams.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardobarbosams.wordpress.com&amp;blog=11014929&amp;post=56&amp;subd=ricardobarbosams&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardobarbosams.wordpress.com/2010/01/13/script-em-ruby-para-monitoramento-de-servicos-nagios/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00a6428a9a981b17f6f718850789fd03?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ricardobarbosams</media:title>
		</media:content>
	</item>
	</channel>
</rss>
