<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Petryx</title>
	
	<link>http://petryx.blogrs.com.br</link>
	<description>Linux, Java, Processamento de Imagem, Informática, ......</description>
	<pubDate>Sun, 16 Nov 2008 14:53:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/petryxfeed" type="application/rss+xml" /><feedburner:emailServiceId>2034071</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><item>
		<title>Módulo Kernel Capable discovery</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/454961185/</link>
		<comments>http://petryx.blogrs.com.br/2008/11/16/modulo-kernel-capable-discovery/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 14:53:28 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Segurança]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[módulo kernel]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=107</guid>
		<description><![CDATA[Posix capabilities permite que as capacidades do super usuário root sejam delegadas a binários, possibilitando que usuários comuns possam executar um serviço. Usando esse recurso de forma correta pode-se executar serviços utilizando somente as capacidades mínimas, ao contrário de executar com todos os privilégios do root. 
Publiquei um artigo na revista Linux Magazine Ed. 48 [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Módulo Kernel Capable discovery", url: "http://petryx.blogrs.com.br/2008/11/16/modulo-kernel-capable-discovery/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Posix capabilities permite que as capacidades do super usuário root sejam delegadas a binários, possibilitando que usuários comuns possam executar um serviço. Usando esse recurso de forma correta pode-se executar serviços utilizando somente as capacidades mínimas, ao contrário de executar com todos os privilégios do root. </p>
<p>Publiquei um artigo na revista Linux Magazine Ed. 48 mostrando como usar Posix Capabilities para rodar serviços como: Samba, Dns e apache. Reduzindo os chances de acontecer um ataque de buffer overflow, onde se consiga abrir um terminal de super usuário.</p>
<p>Para descobrir as capacidades exigidas pelos serviços reescrevi o módulo de kernel capable_probe desenvolvido originalmente por Serge E. Hallyn. Na primeira versão usei jprobe ao invés de kprobe, fiz uma associação entre o valor numérico e a string. Ex. 21:CAP_SYS_ADMIN. Porém, esse código pode encher os logs do sistema, pois captura todos os processos que estão rodando. Para sanar o problema, reescrevi o módulo para que aceite como parâmetro o processo que se deseja monitorar, reduzindo dessa forma as mensagens duplicadas no log.</p>
<p><strong>Download do módulo</strong></p>
<pre name='code' class='sh'>
wget http://petryx.blogrs.com.br/capable_discovery-0.1.0.tar.bz2
</pre>
<p><strong>Instalação</strong></p>
<pre name='code' class='sh'>
tar -xjvf capable_discovery-0.1.0.tar.bz2
cd capable_discovery-0.1.0
make
make install
</pre>
<p><strong>Utilização</strong></p>
<p>Por exemplo, queremos descobrir qual as capacidades exigidas para rodar o comando ping.</p>
<pre name='code' class='sh'>
modprobe capable_discovery catch=ping
ping 127.0.0.1
</pre>
<p>Em outro terminal</p>
<pre name='code' class='sh'>
tail -f /var/log/messages
localhost Module capable_discovery inserted for discover the capabilities of "ping" process
localhost capability 21=CAP_SYS_ADMIN for ping
localhost capability 13=CAP_NET_RAW for ping
localhost capability 7=CAP_SETUID for ping
localhost capability 21=CAP_SYS_ADMIN for ping
localhost capability 21=CAP_SYS_ADMIN for ping
</pre>
<p>Como podemos ver o ping precisa das capacidades 7,13,21</p>
<p>Após usar o módulo devemos removê-lo com o seguinte comando:</p>
<pre name='code' class='sh'>
rmmod  capable_discovery
</pre>
<p>Confirmando a remoção do módulo irá aparecer nos logs a seguinte mensagem:</p>
<p>Nov 16 11:57:06 localhost Module capable_discovery unregistered</p>
<p>Para monitar outro processo o módulo deve ser recarregado passando como parâmetro o nome do processo.</p>
<p>Qualquer dúvida,sugestão, crítica ou elogio, deixe um comentário.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=M%C3%B3dulo+Kernel+Capable+discovery&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F11%2F16%2Fmodulo-kernel-capable-discovery%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=6WdHWp"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=6WdHWp" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/11/16/modulo-kernel-capable-discovery/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/11/16/modulo-kernel-capable-discovery/</feedburner:origLink></item>
		<item>
		<title>Montando .nrg no Linux</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/452255063/</link>
		<comments>http://petryx.blogrs.com.br/2008/11/13/montando-nrg-no-linux/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 22:12:35 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Dicas Linux]]></category>

		<category><![CDATA[dicas Linux]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=120</guid>
		<description><![CDATA[A extensão nrg é um arquivo do Nero Burning Rom, que é usado para criar e queimar imagens ISO 9666.
Mas as vezes não queremos queimar um DVD ou CD, somente necessitamos acessar o conteúdo.
Como o Linux sempre tem solução pra tudo. Podemos montar a imagem nrg, com o seguinte comando:

mount -o loop,offset=307200 arquivo.nrg /mnt/temp

Se quiser [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Montando .nrg no Linux", url: "http://petryx.blogrs.com.br/2008/11/13/montando-nrg-no-linux/" });</script>]]></description>
			<content:encoded><![CDATA[<p>A extensão nrg é um arquivo do Nero Burning Rom, que é usado para criar e queimar imagens ISO 9666.<br />
Mas as vezes não queremos queimar um DVD ou CD, somente necessitamos acessar o conteúdo.</p>
<p>Como o Linux sempre tem solução pra tudo. Podemos montar a imagem nrg, com o seguinte comando:</p>
<pre name='code' class='sh'>
mount -o loop,offset=307200 arquivo.nrg /mnt/temp
</pre>
<p>Se quiser saber mais sobre o formato de arquivo nrg acesse:<a href="http://en.wikipedia.org/wiki/NRG_(file_format)"> http://en.wikipedia.org/wiki/NRG_(file_format)</a>.</p>
<p>E não se esqueçam estamos com uma super promoção assine gratuitamente nosso <a href="http://petryx.blogrs.com.br/feed/">feeds</a>.</p>
<p>Forte Abraço.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=Montando+.nrg+no+Linux&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F11%2F13%2Fmontando-nrg-no-linux%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=mpHhZh"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=mpHhZh" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/11/13/montando-nrg-no-linux/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/11/13/montando-nrg-no-linux/</feedburner:origLink></item>
		<item>
		<title>PL/PGSQL Funções Aninhadas</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/436381903/</link>
		<comments>http://petryx.blogrs.com.br/2008/10/29/plpgsql-funcoes-aninhadas/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 00:22:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Tutoriais]]></category>

		<category><![CDATA[pl/pgsql]]></category>

		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=119</guid>
		<description><![CDATA[Utilizando a versão 8.2.7 do Postgresql verifiquei a possibilidade de criar funções aninhadas.
Veja o exemplo:

CREATE OR REPLACE FUNCTION testNestedFunction() RETURNS  REAL as
$$

DECLARE
v_test REAL;
r REAL;
BEGIN
   CREATE OR REPLACE FUNCTION addTest(a REAL,b REAL) RETURNS REAL AS
   $BODY_ADDTEST$
	DECLARE
		r REAL;
	BEGIN
		r := a + b;
	RETURN r;
   END;
   $BODY_ADDTEST$language plpgsql;

   [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "PL/PGSQL Funções Aninhadas", url: "http://petryx.blogrs.com.br/2008/10/29/plpgsql-funcoes-aninhadas/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Utilizando a versão 8.2.7 do Postgresql verifiquei a possibilidade de criar funções aninhadas.<br />
Veja o exemplo:</p>
<pre name='code' class='sql'>
CREATE OR REPLACE FUNCTION testNestedFunction() RETURNS  REAL as
$$
<<global>>
DECLARE
v_test REAL;
r REAL;
BEGIN
   CREATE OR REPLACE FUNCTION addTest(a REAL,b REAL) RETURNS REAL AS
   $BODY_ADDTEST$
	DECLARE
		r REAL;
	BEGIN
		r := a + b;
	RETURN r;
   END;
   $BODY_ADDTEST$language plpgsql;

   r := addTest(1,1);
   RAISE NOTICE &#8216;addTest = %&#8217;,r;

   r := addTest(2,2);
   RAISE NOTICE &#8216;addTest = %&#8217;,r;

   RETURN r;
END global;
$$ LANGUAGE &#8216;plpgsql&#8217;;
</pre>
<p>Na função acima criei uma função aninhada chamada <strong>addTest(REAL,REAL)</strong> recebendo como parâmetro dois valores do tipo real, com os quais é efetuado uma soma e retornado o resultado. Executando a função temos o seguinte resultado:</p>
<pre name='code' class='sql'>
SELECT testNestedFunction();

NOTA:  addTest = 2
NOTA:  addTest = 4

Tempo total de execução da consulta: 18 ms.
1 registros recuperados.
</pre>
<p>Como pode ser visto foi realizado duas chamadas a função aninhada <strong>addTest()</strong> passando diferentes parâmetros.</p>
<p>O interessante é que o Postgresql cria duas funções: <strong>testNestedFunction()</strong> e <strong>addTest(REAL,REAL)</strong>. E não somente uma função aninhada, isso favorece aos bugs, vamos simular um então.</p>
<p>Vamos deletar a função <strong>addTest(REAL,REAL)</strong> e executar novamente.</p>
<pre name='code' class='sql'>
DROP FUNCTION addtest(real, real);
SELECT testNestedFunction();

ERRO:  cache lookup failed for function 1906343
CONTEXT:  PL/pgSQL function "testnestedfunction" line 16 at assignment

********** Erro **********

ERRO: cache lookup failed for function 1906343
SQL state: XX000
Contexto: PL/pgSQL function "testnestedfunction" line 16 at assignment
</pre>
<p>O comando <strong>DROP FUNCTION addTest(REAL,REAL)</strong> não verificou que a função <strong>testnestedfunction() </strong> é depende daquela para sua execução, procurei na documentação uma maneira de declarar a dependência mas não encontrei. Outro detalhe interessante é que a função <strong>addTest()</strong> não existe até a primeira execução, ou seja, quando o comando é executado <strong>SELECT testnestedfunction()</strong> pela primeira vez a função <strong>addTest() </strong>é criada. Então quando deletamos a função <strong>addTest()</strong> e executamos novamente o comando <strong>SELECT testnestedfunction()</strong>, a função <strong>addTest()</strong> não é criada novamente. </p>
<p>Funções aninhadas são interessantes para melhorar a leitura do código e prover reutilização de código. O problema é se por acidente algum DBA deletar a função aninhada como mostrado acima. Irá causar um bug difícil de resolver. Pois, a resposta do erro é pouco intuitiva não informando claramente a função que não foi encontrada.</p>
<p>Criar funções separadas é uma outra solução invés de criar uma função aninhada. Mas, o problema que dificulta a leitura e entendimento do código.</p>
<p>Carpe Diem!</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=PL%2FPGSQL+Fun%C3%A7%C3%B5es+Aninhadas&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F10%2F29%2Fplpgsql-funcoes-aninhadas%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=400HxE"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=400HxE" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/10/29/plpgsql-funcoes-aninhadas/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/10/29/plpgsql-funcoes-aninhadas/</feedburner:origLink></item>
		<item>
		<title>PL/PGSQL blocos de código</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/436203966/</link>
		<comments>http://petryx.blogrs.com.br/2008/10/29/plpgsql-blocos-de-codigo/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 20:08:07 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Tutoriais]]></category>

		<category><![CDATA[pl/pgsql]]></category>

		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=118</guid>
		<description><![CDATA[A linguagem PL/PGSQL permite a criação de blocos de código. Com essa característica é possível definir o escopo das variáveis. Sendo um recurso interessante para deixar o código mais legível, auxiliando também na depuração do código.
As variáveis existem no momento da declaração do bloco até o final do bloco onde a variável é declarada.
Rótulos podem [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "PL/PGSQL blocos de código", url: "http://petryx.blogrs.com.br/2008/10/29/plpgsql-blocos-de-codigo/" });</script>]]></description>
			<content:encoded><![CDATA[<p>A linguagem PL/PGSQL permite a criação de blocos de código. Com essa característica é possível definir o escopo das variáveis. Sendo um recurso interessante para deixar o código mais legível, auxiliando também na depuração do código.<br />
As variáveis existem no momento da declaração do bloco até o final do bloco onde a variável é declarada.<br />
Rótulos podem ser adicionados aos blocos para melhorar a leitura e também para qualificar as variáveis que existem dentro do bloco. Os blocos de código são definidos da seguinte forma: </p>
<pre name="code" class="sql">
<<label>>
DECLARE
        declarations
BEGIN
       statements
END;
</pre>
<p>Como exemplo vamos criar uma função onde teremos dois blocos global e local, com uma variável declarada no bloco global com o nome v_test do tipo real e outra variável também declarada com o nome v_test dentro do bloco local. Veja o exemplo:</p>
<pre name="code" class="sql">
CREATE OR REPLACE FUNCTION test() RETURNS VOID as
$$
<<global>>
DECLARE
v_test REAL;
BEGIN
        v_test := 1;
        <<local>>
        DECLARE
             v_test REAL;
        BEGIN
	      v_test :=2;
	      RAISE NOTICE &#8216;global.v_test = %, v_test = %&#8217;,global.v_test,v_test;
        END local;

 RAISE NOTICE &#8216;Global v_test = %&#8217;,v_test;

END global;
$$ LANGUAGE &#8216;plpgsql&#8217;;
</pre>
<p>Resultado da execução:</p>
<pre name="code" class="sql">
select test();
NOTA:  global.v_test = 1, v_test = 2
NOTA:  Global v_test = 1
Tempo total de execução da consulta: 6 ms.
1 registros recuperados.
</pre>
<p>Essa função demonstra claramente o escopo da variáveis e também demonstra que podemos ter sub blocos de código dentro de uma função.<br />
É importante notar que BEGIN/END é utilizado para agrupar as declarações da linguagem PL/PGSQL e também como comandos de controle de transações. Mas, um detalhe interessante é que funções e triggers não podem iniciar ou encerrar transações e o Postgresql não suporta transações aninhadas.</p>
<p>Carpe Diem.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=PL%2FPGSQL+blocos+de+c%C3%B3digo&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F10%2F29%2Fplpgsql-blocos-de-codigo%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=TqExx8"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=TqExx8" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/10/29/plpgsql-blocos-de-codigo/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/10/29/plpgsql-blocos-de-codigo/</feedburner:origLink></item>
		<item>
		<title>Desligando o computador após download</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/425003244/</link>
		<comments>http://petryx.blogrs.com.br/2008/10/18/desligando-o-computador-apos-download/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 00:02:56 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[Sem categoria]]></category>

		<category><![CDATA[developer]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=116</guid>
		<description><![CDATA[Ontem foi a gota d&#8217;água!! Começei um download as 22:00H, já era 00:30H e nada do download terminar, faltava 40% para o download terminar, e estava louco de sono. Então me inspirei e desenvolvi um pequeno script em Python, para desligar o notebook após o download ser concluído.
Utilizei o firefox para realizar o download, o [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Desligando o computador após download", url: "http://petryx.blogrs.com.br/2008/10/18/desligando-o-computador-apos-download/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Ontem foi a gota d&#8217;água!! Começei um download as 22:00H, já era 00:30H e nada do download terminar, faltava 40% para o download terminar, e estava louco de sono. Então me inspirei e desenvolvi um pequeno script em Python, para desligar o notebook após o download ser concluído.</p>
<p>Utilizei o firefox para realizar o download, o qual possui a característica de adicionar ao nome do download a extensão <strong>.part</strong>. Através desse princípio desenvolvi o script, o qual verifica a existência do arquivo <strong>*.part</strong>, existindo o arquivo o script dorme por um minuto, quando o arquivo deixar de existir o computador será desligado.</p>
<pre name='code' class='python'>
import os.path
from time import sleep
import commands

while 1:

        if os.path.exists('/home/marlon/downloads/teste.rar.part'):
                print 'espera 1 minuto'
                sleep(60)
        else:
                os.system("poweroff")
</pre>
<p>Hoje pela manhã, o computador estava desligado!</p>
<p>A linguagem Python é muito versátil e elegante, excelente para desenvolvimento rápido. Este script pode ser modificado para tomar a decisão através do tamanho do arquivo, que com Python pode ser descoberto através do método <strong>os.path.getsize(&#8217;file&#8217;)</strong>.</p>
<p>Forte abraço.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=Desligando+o+computador+ap%C3%B3s+download&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F10%2F18%2Fdesligando-o-computador-apos-download%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=GODZIH"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=GODZIH" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/10/18/desligando-o-computador-apos-download/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/10/18/desligando-o-computador-apos-download/</feedburner:origLink></item>
		<item>
		<title>HD perdeu a tabela de partições</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/414299824/</link>
		<comments>http://petryx.blogrs.com.br/2008/10/07/hd-perdeu-a-tabela-de-particoes/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 00:25:06 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Dicas Linux]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=115</guid>
		<description><![CDATA[Quem já passou por isso ?
A uns dias atrás fui ligar meu notebook e recebi a seguinte mensagem: Operation System not found. Corri na prateleira para pegar o cd de boot do Kurumin, inicializou sem problemas, o hd foi encontrado na inicialização. Mas, sem nenhuma partição. Depois de alguns minutos tentando contabilizar tudo que tinha [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "HD perdeu a tabela de partições", url: "http://petryx.blogrs.com.br/2008/10/07/hd-perdeu-a-tabela-de-particoes/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Quem já passou por isso ?<br />
A uns dias atrás fui ligar meu notebook e recebi a seguinte mensagem: <strong>Operation System not found</strong>. Corri na prateleira para pegar o cd de boot do Kurumin, inicializou sem problemas, o hd foi encontrado na inicialização. Mas, sem nenhuma partição. Depois de alguns minutos tentando contabilizar tudo que tinha perdido, algo em torno de 90GB de informação, como por exemplo, códigos fontes, livros, trabalhos da faculdade, artigos, monografia. Claro que tudo tinha backup, mas desatualizado no mínimo 3 meses.<br />
Então começou a saga para tentar resolver o problema. Encontrei dois utilitários <a href="http://www.stud.uni-hannover.de/user/76201/gpart/">gpart</a> e <a href="www.cgsecurity.org/wiki/TestDisk">testdisk</a>, estes programas escaneiam o HD em busca do início e do final das partições, a diferença entre eles é o algoritmo de busca.<br />
Comecei utilizando o gpart conforme o comando abaixo. O qual escaneou o HD e não encontrou nenhuma partição, sendo que para escanear o HD levou umas boas horas.<br />
<strong>./gpart.linux /dev/hda</strong></p>
<p>Dando seguimento a saga para recuperar algo, tentei o testdisk. Já esse encontrou algumas partições primárias e outras estendidas. Fiquei loco de faceiro, pensei! solucionei o problema. Reiniciei a máquina quando fui montar as partições, somente obtive erros.</p>
<p>Ainda não desiste estou tentando novamente o gpart com alguns parâmetros diferentes. Para encontrar a tabela certinha é necessário que a geometria do disco esteja correta, ou seja, os parâmetros: número de cilindros(cylinders), cabeças(heads) e setores (sectors) estejam corretos. Esse valores podem ser descobertos com o seguinte comando:</p>
<p><strong>#/dmesg | grep CHS</strong> </p>
<p>Ajustei os parâmetros no gpart.</p>
<p><strong>gpart -C C,H,S /dev/hda </strong></p>
<p>Onde C é número de cilindros, H heads ,&#8230;.</p>
<p>Neste momento estou executando novamente o gpart. Desta vez já estou com os dedos cruzados.</p>
<p>Uma dica fácil e muito útil faça um backup da sua tabela de partição com o comando abaixo, será muito útil.</p>
<p>Backup da tabela de partições<br />
<strong><br />
dd if=/dev/hda of=hda.mbr bs=512 count=1<br />
</strong></p>
<p>Fomato legível</p>
<p><strong>fdisk -l > partitions.txt</strong></p>
<p>Restaurar</p>
<p><strong>dd if=hda.mbr of=/dev/hda bs=512 count=1<br />
</strong></p>
<p>Ahh!!!. Se eu tivesse feito isso antes.</p>
<p>Grande abraço a todos.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=HD+perdeu+a+tabela+de+parti%C3%A7%C3%B5es&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F10%2F07%2Fhd-perdeu-a-tabela-de-particoes%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=TyqbuY"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=TyqbuY" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/10/07/hd-perdeu-a-tabela-de-particoes/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/10/07/hd-perdeu-a-tabela-de-particoes/</feedburner:origLink></item>
		<item>
		<title>Rastreando Laptop Roubado</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/402310577/</link>
		<comments>http://petryx.blogrs.com.br/2008/09/24/rastreando-laptop-roubado/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 01:10:13 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Segurança]]></category>

		<category><![CDATA[Novidades]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=113</guid>
		<description><![CDATA[Hoje em dia a venda de laptops superou os desktops. Mas, cada vez mais tem sido alvo de desejo dos ladrões.
Este post tem a intenção de mostrar o aplicativo Adeona que tem a função de rastrear o uso do laptop e aumentar as chances de ser recuperado pela polícia.
O Adeona é software livre disponível para [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Rastreando Laptop Roubado", url: "http://petryx.blogrs.com.br/2008/09/24/rastreando-laptop-roubado/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Hoje em dia a venda de laptops superou os desktops. Mas, cada vez mais tem sido alvo de desejo dos ladrões.<br />
Este post tem a intenção de mostrar o aplicativo <a href="http://adeona.cs.washington.edu/index.html">Adeona</a> que tem a função de rastrear o uso do laptop e aumentar as chances de ser recuperado pela polícia.<br />
O Adeona é software livre disponível para Windows, Linux, Mac OS. O aplicativo é executado em background sileciosamente, coletando informação sobre o IP interno, IP externo através de sites como <a href="http://www.meuip.com.br">www.meuip.com.br</a>, informação dos roteadores através do traceroute, o nome da rede que está conectado e se disponível uma foto através da câmera acoplada do laptop. Os dados são criptografados e armazenados em um cache local. Um upload com os dados é feito para uma rede decentralizada como <a href="http://www.opendht.org/">OpenDHT</a>.</p>
<p>Claro que um ladrão com acesso físico ao laptop pode formatar o disco antes de usar o computador, usá-lo desconectado da internet ou simplesmente desabilitar o serviço. Nesse caso não existe nenhuma ferramenta que possa ajudar nem as comerciais.</p>
<p>Mas todos nós sabemos que alguns ladrões, mal sabem usar um laptop e irão conectar na internet, procurar por arquivos que lhe interessem. Então a ferramenta entra em uso.</p>
<p>Detalhes sobre como instalar podem ser encontrados na <a href="http://adeona.cs.washington.edu/documents.html">documentação do projeto</a>.</p>
<p>O projeto  Adeona é desenvolvido na Universidade de Washington. Se tiver interesse de saber mais detalhes sobre o projeto os criadores escreveram um <a href="http://adeona.cs.washington.edu/adeona-usenixsecurity08.pdf">artigo</a> descrevendo o funcionamento detalhadamente.</p>
<p>Tomará que muitos de nós tenham sorte de nunca ter um laptop perdido ou roubado..</p>
<p>Referência:</p>
<p><a href="http://www.linux.com/feature/148197">http://www.linux.com/feature/148197</a><br />
<a href="http://adeona.cs.washington.edu/index.html">http://adeona.cs.washington.edu/index.html</a></p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=Rastreando+Laptop+Roubado&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F09%2F24%2Frastreando-laptop-roubado%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=zIxD9a"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=zIxD9a" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/09/24/rastreando-laptop-roubado/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/09/24/rastreando-laptop-roubado/</feedburner:origLink></item>
		<item>
		<title>Cscope entendendo o código</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/402280221/</link>
		<comments>http://petryx.blogrs.com.br/2008/09/24/cscope-entendendo-o-codigo/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 00:10:42 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Dicas Linux]]></category>

		<category><![CDATA[developer]]></category>

		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=111</guid>
		<description><![CDATA[Cscope é uma ferramenta que auxilia a analisar o código fonte de um projeto. Com ele podemos entender a estrutura do projeto ou o significado de uma função específica, estruturas e variáveis. Descobrir aonde funções específicas são utilizadas, determinar qual função chama uma função específica. Sendo estes alguns recursos do cscope.
A ferramenta foi desenvolvida para [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Cscope entendendo o código", url: "http://petryx.blogrs.com.br/2008/09/24/cscope-entendendo-o-codigo/" });</script>]]></description>
			<content:encoded><![CDATA[<p>Cscope é uma ferramenta que auxilia a analisar o código fonte de um projeto. Com ele podemos entender a estrutura do projeto ou o significado de uma função específica, estruturas e variáveis. Descobrir aonde funções específicas são utilizadas, determinar qual função chama uma função específica. Sendo estes alguns recursos do cscope.</p>
<p>A ferramenta foi desenvolvida para a linguagem C, utilizando-a podemos economizar um bom tempo na analise de um projeto.</p>
<p>Utilizando o cscope</p>
<p>Cscope analisa os fontes encontrados no diretório atual, mas podemos usar a opção -r para varrer recursivamente os diretórios do projeto. </p>
<p>Na página do projeto tem um excelente <a href="http://cscope.sourceforge.net/large_projects.html">tutorial</a>. O tutorial tem como objetivo utilizar o cscope para analisar o código fonte do kernel.</p>
<p>Segui o tutorial, é muito legal facilita bastante o entendimento do código fonte.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=Cscope+entendendo+o+c%C3%B3digo&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F09%2F24%2Fcscope-entendendo-o-codigo%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=qr6THS"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=qr6THS" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/09/24/cscope-entendendo-o-codigo/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/09/24/cscope-entendendo-o-codigo/</feedburner:origLink></item>
		<item>
		<title>Sniffing com Tcpdump utilizando filtros</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/391591310/</link>
		<comments>http://petryx.blogrs.com.br/2008/09/13/sniffing-com-tcpdump-utilizando-filtros/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 14:56:39 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Dicas Linux]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=112</guid>
		<description><![CDATA[TCPDUMP é um sniffer de rede por linha de comando, sendo uma alternativa ao wireshark ou quando é necessário fazer um script para capturar algum tráfego de rede. Enfim uma ferramenta muito útil para administrar uma rede sendo possível descobrir erros de configuração através da analise do tráfego, conhecer o tráfego existente e tomar medidas [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Sniffing com Tcpdump utilizando filtros", url: "http://petryx.blogrs.com.br/2008/09/13/sniffing-com-tcpdump-utilizando-filtros/" });</script>]]></description>
			<content:encoded><![CDATA[<p>TCPDUMP é um sniffer de rede por linha de comando, sendo uma alternativa ao wireshark ou quando é necessário fazer um script para capturar algum tráfego de rede. Enfim uma ferramenta muito útil para administrar uma rede sendo possível descobrir erros de configuração através da analise do tráfego, conhecer o tráfego existente e tomar medidas administrativas para melhorar a performance da rede.<br />
Executando o <strong>tcpdump</strong> sem nenhuma opção,  será capturado todo o tráfego de rede,  dificultando a  analise do conteúdo, por isso é interessante o uso de expressões.<br />
Com Tcpdump podemos usar expressões para filtrar o tráfego que desejamos capturar, os filtros podem ser aplicados por tipo, direção, protocolo, usando operadores, &#8230;</p>
<p>Alguns exemplos:</p>
<p>Mostra somente o tráfego da rede 192.168 que estiver passando na interface eth0</p>
<p><strong>localhost ~/# tcpdump -i eth0 -p net 192.168</strong></p>
<p>Mostra todo o tráfego da rede 192.168 com destino a porta 80</p>
<p><strong>localhost ~/# tcpdump -i eth0 -p net 192.168 and dst port 80</strong></p>
<p>Mostra somente os pacotes icmp na rede</p>
<p><strong>localhost ~/# tcpdump -i eth0 -p icmp</strong></p>
<p>Mostra o tráfego na rede 192.168 com exceção da porta 80</p>
<p><strong>localhost ~/# tcpdump -i eth0 -p  net 192.168 and not port 80</strong></p>
<p>Os exemplos acima demonstram algumas combinações, sendo possível fazer muito mais. Para obter mais informações veja o documento <a href="http://www.cs.ucr.edu/~marios/ethereal-tcpdump.pdf">TCPDUMP filters</a>.</p>
<p>Se o artigo foi útil para você, deixe um comentário. Será de grande estimulo para manter o blog.</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=Sniffing+com+Tcpdump+utilizando+filtros&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F09%2F13%2Fsniffing-com-tcpdump-utilizando-filtros%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=CdPS6h"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=CdPS6h" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/09/13/sniffing-com-tcpdump-utilizando-filtros/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/09/13/sniffing-com-tcpdump-utilizando-filtros/</feedburner:origLink></item>
		<item>
		<title>Como funciona o traceroute ?</title>
		<link>http://feeds.feedburner.com/~r/petryxfeed/~3/380026397/</link>
		<comments>http://petryx.blogrs.com.br/2008/08/31/como-funciona-traceroute/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 00:23:49 +0000</pubDate>
		<dc:creator>Marlon Petry</dc:creator>
		
		<category><![CDATA[Dicas Linux]]></category>

		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://petryx.blogrs.com.br/?p=106</guid>
		<description><![CDATA[Traceroute é um algoritmo definido pela rfc1393. Contudo antes de sabermos como funciona o traceroute é necessário entendermos o que é TTL (Time To Live).  TTL significa o tempo de vida de um pacote na rede, cada vez que um pacote passa por um roteador o TTL é decrementado em uma unidade. Pode ocorrer [...]<script type="text/javascript">SHARETHIS.addEntry({ title: "Como funciona o traceroute ?", url: "http://petryx.blogrs.com.br/2008/08/31/como-funciona-traceroute/" });</script>]]></description>
			<content:encoded><![CDATA[<p><strong>Traceroute</strong> é um algoritmo definido pela <a href="http://www.ietf.org/rfc/rfc1393.txt">rfc1393</a>. Contudo antes de sabermos como funciona o traceroute é necessário entendermos o que é TTL (Time To Live).  TTL significa o tempo de vida de um pacote na rede, cada vez que um pacote passa por um roteador o TTL é decrementado em uma unidade. Pode ocorrer de uma rede entrar em loop por erro de configuração no roteador ou defeito, então esse pacote fica eternamente circulando na rede. Para que isso não ocorra  o TTL é fundamental pois quando chegar a zero o roteador descarta o pacote. Outro uso do TTL é descobrir quantos roteadores têm até um determinado host, sendo essa a função do traceroute.</p>
<p><strong>Como funciona o traceroute</strong></p>
<p>O traceroute envia 3 pacotes com o TTL igual a 1. O primeiro hop responde que o pacote não pode ser transmitido porque TTL expirou com a mensagem ICMP Time-to-Live Exceeded (Type 11). Então o pacote é reenviado com TTL igual a 2 e o segundo roteador responde que o TTL expirou. Este processo continua até o destino ser encontrado.<br />
Com o traceroute conseguimos somente o caminho de ida até o destino, não sendo possível obter o caminho de retorno que pode ser diferente.</p>
<p><strong>Testando o traceroute</strong></p>
<pre name='code' class="sh">% traceroute www.terra.com.br
traceroute to www.terra.com.br (200.176.3.142), 30 hops max, 40 byte packets
 1   (192.168.254.254)  5.108 ms  6.458 ms  7.921 ms
 2  BrT-L10-smace701.dsl.brasiltelecom.net.br (201.14.223.254)  54.958 ms  56.458 ms  57.833 ms
 3  BrT-G5-0-0-710-smace300.brasiltelecom.net.br (201.10.227.133)  67.548 ms  73.977 ms  76.842 ms
 4  * * *
 5  BrT-G6-0-0-paebvcore01.brasiltelecom.net.br (201.10.255.162)  95.781 ms  102.036 ms  100.632 ms
 6  * * *
 7   (200.176.0.250)  55.624 ms  57.064 ms  59.931 ms
 8  bsw5-poa-vlan201.tc.terra.com.br (200.176.2.28)  61.487 ms  79.703 ms  81.222 ms
</pre>
<p>A resposta do traceroute mostra três tempos, isso é porque quando um roteador é encontrado o mesmo é testado três vezes. Já quando aparece como resposta  * * * significa que esse roteador não respondeu que o TTL expirou.<br />
Existem muitas opções que podem ser usadas com o <strong>traceroute</strong>, como por exemplo, usar o protocolo tcp em vez de icmp. Para saber mais sobre as opções consulte <strong>man traceroute</strong>.</p>
<p>Se você é programador C e quiser ver como o traceroute é implementado, vale a pena baixar os <a href="ftp://ftp.ee.lbl.gov/traceroute.tar.gz" target="_blank">fontes</a> e analisar o código. É uma experiência e tanto!</p>
<p>Existe um programa chamado <a href="http://www.visualroute.com/support/index.html">VisualRoute</a>. Esse programa traça a rota sobre o mapa mundi informando o país onde está cada roteador até o destino.</p>
<p>Por hoje era isso. Ah, pessoal estamos com uma super promoção essa semana, assinem os feeds gratuitamente. Mas somente essa semana!</p>
<p><a href="http://sharethis.com/item?&wp=2.5.1&amp;publisher=502315c2-aca5-4c25-999b-9feb17fc0772&amp;title=Como+funciona+o+traceroute+%3F&amp;url=http%3A%2F%2Fpetryx.blogrs.com.br%2F2008%2F08%2F31%2Fcomo-funciona-traceroute%2F">Compartilhe</a></p>
<p><a href="http://feeds.feedburner.com/~a/petryxfeed?a=FW0MCl"><img src="http://feeds.feedburner.com/~a/petryxfeed?i=FW0MCl" border="0"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://petryx.blogrs.com.br/2008/08/31/como-funciona-traceroute/feed/</wfw:commentRss>
		<feedburner:origLink>http://petryx.blogrs.com.br/2008/08/31/como-funciona-traceroute/</feedburner:origLink></item>
	</channel>
</rss>
