


<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>DeServ - Info &#187; OpenSource</title>
	<atom:link href="http://blog.deserv.info/tag/opensource/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deserv.info</link>
	<description>Seu Caderno de Anotações de Informática</description>
	<lastBuildDate>Wed, 25 Jan 2012 17:47:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<copyright>Copyright &#xA9; DeServ - Info 2011 </copyright>
	<managingEditor>flavio.aparecido@gmail.com (DeServ - Info)</managingEditor>
	<webMaster>flavio.aparecido@gmail.com (DeServ - Info)</webMaster>
	<image>
		<url>http://blog.deserv.info/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>DeServ - Info</title>
		<link>http://blog.deserv.info</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>Seu Caderno de Anotações de Informática</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>DeServ - Info</itunes:author>
	<itunes:owner>
		<itunes:name>DeServ - Info</itunes:name>
		<itunes:email>flavio.aparecido@gmail.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://blog.deserv.info/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>O que esperar do Linux em 2012</title>
		<link>http://blog.deserv.info/2012/01/25/o-que-esperar-do-linux-em-2012/</link>
		<comments>http://blog.deserv.info/2012/01/25/o-que-esperar-do-linux-em-2012/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 17:47:08 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Barnes & Noble]]></category>
		<category><![CDATA[Btrfs]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Kindle Fire]]></category>
		<category><![CDATA[Nook]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[OpenStack]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[plataforma ARM]]></category>
		<category><![CDATA[Rackspace]]></category>
		<category><![CDATA[Roku]]></category>
		<category><![CDATA[sistemas embarcados]]></category>
		<category><![CDATA[spanning]]></category>
		<category><![CDATA[SUSE Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=648</guid>
		<description><![CDATA[Na falta de um roadmap formal, apontamos quatro incrementos que você pode esperar ver no sistema este ano, já em discussão na comunidade de desenvolvedores. O último ano foi muito emocionante para o Linux. O que começou como passatempo, na Finlândia, completou 20 anos e dominou quase tudo, desde dispositivos móveis a supercomputadores.  E tudo [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2012%252F01%252F25%252Fo-que-esperar-do-linux-em-2012%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22O%20que%20esperar%20do%20Linux%20em%202012%22%20%7D);"></div>
<p><span style="font-size: small;"><span style="line-height: normal;">Na falta de um roadmap formal, apontamos quatro incrementos que você pode esperar ver no sistema este ano, já em discussão na comunidade de desenvolvedores.</span></span></p>
<p><img class="alignleft" src="http://www.deserv.com.br/site/imagens/noticias/linux-distribuicoes.png" alt="" width="400" height="300" />O último ano foi muito emocionante para o Linux. O que começou como passatempo, na Finlândia, completou 20 anos e dominou quase tudo, desde dispositivos móveis a supercomputadores.  <span id="more-648"></span>E tudo leva a crer que 2012 ainda será um ano interessante para o sistema operacional.</p>
<p>O Linux não chega a ter um roadmap. O desenvolvimento é resultado da colaboração entre centenas de desenvolvedores de muitas empresas. Não existe ninguém elaborando uma lista de recursos a serem adicionados e direcionando desenvolvedores a trabalharem nela, ou em melhorias no kernel. Mas se você prestar atenção nas discussões da comunidade Linux, poderá ter uma ideia razoavelmente boa do que vai acontecer no futuro próximo.</p>
<p>Aqui estão algumas coisas que você pode esperar ver no Linux em 2012.</p>
<p><strong>1 &#8211; Melhorias no Btrfs</strong></p>
<p>Uma das grandes contribuições da Oracle para o kernel do Linux é o Btrfs, o sistema de arquivos que adiciona muitas características que as empresas gostariam de ver no OS. Por exemplo, o Btrfs suporta uma série de recursos e benefícios ausentes em outros sistemas para Linux, como pooling, instantâneos de estado do disco, soma de verificação, spanning integral de múltiplos dispositivos, uma maior integridade dos dados através da soma de verificação, instantâneos do sistema inteiro de arquivos antes de qualquer grande mudança, melhor gerenciamento de volume e RAID.</p>
<p>No entanto, faltam ao Btrfs algumas características- principalmente, a ferramenta fsck &#8211; que muita gente gostaria de ver implementada antes de colocá-lo em produção. A previsão era a de qu a ferramenta fsck estivesse diponível no fim de 2011. É provável que esteja pronta ainda no início de 2012, o que deve acelerar a adoção do Btrfs por algumas das distribuições Linux muito rapidamente.</p>
<p>Se eu tivesse que fazer uma previsão, diria que o Btrfs acabará por suplantar o Ext4 como sistema de arquivos padrão para a maioria das principais distribuições Linux. Mas não espere ver uso generalizado em ambientes de produção antes de meados de 2013.</p>
<p><strong>2 &#8211; Android, alinhamento com plataforma ARM e foco nos sistemas embarcados</strong></p>
<p>O Linux em sistemas embarcados vai continuar a ser um dos principais focos em 2012. Isso inclui tudo, desde set-top boxes, o Roku para telefones Android e tablets, e até sistemas para impressoras e qualquer outra coisa que você possa pensar.</p>
<p>Há muito barulho na imprensa especializada em TI sobre o fato do Android ser uma &#8220;ramificação&#8221; do Linux. Aqui está algo sobre o qual você não deve ter ouvido falar muito a respeito: o pessoal do kernel Linux e o do Android tem trabalhado duro para sincronizar o kernel principal e o kernel do Android.</p>
<p>Com o kernel 3.3, a maioria das funcionalidades do Android deve estar presente no kernel principal. Não tudo, mas progressos estão sendo feitos muito rapidamente. Se tudo correr bem, os usuários devem ser capazes de executar Android em cima de um vanilla kernel (kernel reduzido) até o fim do ano.</p>
<p>Note que este tipo de inclusão assíncrona não é incomum, e não há nenhuma razão para pânico. O Xen esteve fora do kernel padrão durante anos, enquanto sua equipe aprendia a trabalhar com a comunidade responsável pelo kernel (e vice-versa). A Red Hat e outras distribuições de Linux têm incluído patches para recursos ou dispositivos constantemente. É algom comum à plataforma.</p>
<p>Ao mesmo tempo, o pessoal do kernel continua a tentar domar o &#8220;oeste selvagem&#8221; da arquitetura ARM. Em um dado momento, havia cerca de 70 sub-arquiteturas ARM na árvore do kernel. Compare isso com outras arquiteturas, e você verá um problema aí. A boa notícia é que você também verá um esforço maior este ano para a resolução do problema.</p>
<p>Parte dele é o suporte a longo prazo da árvore do kernel para os fornecedores de eletrônicos de consumo. A Long Term Stable Kernel Initiative (LTSI) é focada na produção de um kernel estável, que estará disponível por aproximadamente a mesma quantidade de tempo de vida da maioria dos dispositivos eletrônicos de consumo (2 a 3 anos). O fato de muitos fornecedores estarem trabalhando juntos em um único núcleo deve fornecer uma série de benefícios.</p>
<p>A Canonical também anunciou na CES que está trabalhando em um Linux para set top boxes e DVRs. Será interessante ver a receptividade dos principais fabricantes desses dispositivos. Sou cético sobre suas chances de sucesso, a menos que consigam emplacar em algum dispositivo de uma grande marca, que o torne atraente para os usuários.</p>
<p><strong>3 &#8211; Melhor ajuste e provisionamento</strong></p>
<p>O cgroups é um recurso do Kernel do Linux, desde a versão 2.6.24, que tem como finalidade limitar, contabilizar e isolar o uso de recursos. Continua a evoluir e permitir um controle mais refinado do sistema. Por exemplo, no Linux 3.2 (lançado em 04 de janeiro) temos um novo recurso chamado CPU bandwidth control que permite que os administradores definam quanto tempo de CPU um grupo de processos pode usar.</p>
<p>A versão 3.2 acrescentou também ajustes finos de provisionamento ao Linux Device Mapper, que permite que administradores possam controlar o excesso de oferta de cotas de armazenamento para cada usuário. Isso pode parecer duvidoso, mas se você tiver algumas centenas de usuários em um sistema, será necessário definir um limite superior para a quantidade de armazenamento que poderão usar. Claro que, se configurado corretamente, a maioria dos usuários não se aproximará desse valor. Então você provavelmente não precisará de armazenamento suficiente para dar a cada usuário sua quota máxima.</p>
<p>Você pode esperar ver a melhoria contínua do cgroups e de outras áreas no kernel para permitir que os administradores de TI possam definir limites de recursos e outras formas de afinar seus sistemas ainda mais. As melhorias podem deixar de estar presentes em futuras versões do Linux por alguns ciclos, mas estão a caminho. Suspeito que o SUSE Enterprise Linux será lançado com um kernel 3.0 em 2013.</p>
<p><strong>4 -Crescimento do OpenStack</strong></p>
<p>Finalmente, esperamos ver o OpenStack sendo implantado até o fim de 2012 ou início de 2013. O projeto foi anunciado em 2010 e já atraiu mais de 140 empresas e organizações. É também a pilha de IaaS para o SUSE Linux e o Ubuntu. A partir das minhas conversas com membros da comunidade OpenStack, SUSE e Rackspace, digo, sem medo de errar, que o OpenStack terá um grande impulso em meados do ano.</p>
<p>Basicamente, o Linux vai continuar a melhorar para uso nas empresas e nas plataforma móveis. Com o Kindle Fire e o Nook, da Barnes &amp; Noble, acho que veremos mais e mais tablets Android ganhando mercado. E, a não ser que algo drástico aconteça, o Android continuará a manter uma liderança firme no mercado de telefonia. O único lugar em que o Linux continuará a definhar será no desktop. Mas não se pode ter tudo, certo?</p>
<p>Fonte:</p>
<h5>Joe Brockmeier, CIO/EUA</h5>
<h4>Publicada em 13 de janeiro de 2012</h4>
<p><a href="http://cio.uol.com.br/" target="_blank">http://cio.uol.com.br/</a></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2012/01/25/o-que-esperar-do-linux-em-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup Automático em Servidores Linux</title>
		<link>http://blog.deserv.info/2012/01/21/backup-automatico-em-servidores-linux/</link>
		<comments>http://blog.deserv.info/2012/01/21/backup-automatico-em-servidores-linux/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 22:03:48 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Gerenciamento de Arquivos]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Backup Automático em Servidores Linux]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Servidores LInux]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Shell Scripts]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=642</guid>
		<description><![CDATA[Hoje em um servidor, seja ele web, de arquivos, ou qualquer outro serviço essencial para o dia-a-dia a ele denominado é primordial que um administrador possua alguma rotina de backup imposta sobre o mesmo. É fato que esse trabalho é crítico pois no mundo da informação o que não queremos é perde-la, pois se isto [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2012%252F01%252F21%252Fbackup-automatico-em-servidores-linux%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FxhodoV%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Backup%20Autom%C3%A1tico%20em%20Servidores%20Linux%22%20%7D);"></div>
<p><a href="http://www.nacaolivre.com.br/wp-content/uploads/2010/02/backup-database.jpg"><img class="alignleft" title="backup-database" src="http://www.nacaolivre.com.br/wp-content/uploads/2010/02/backup-database-150x150.jpg" alt="" width="150" height="150" /></a>Hoje em um servidor, seja ele web, de arquivos, ou qualquer outro serviço essencial para o dia-a-dia a ele denominado é primordial que um administrador possua alguma rotina de backup imposta sobre o mesmo.</p>
<p>É fato que esse trabalho é crítico pois no mundo da informação o que não queremos é perde-la, pois se isto acontecer poderá colocar os seus negócios no fio da navalha e certamente cabeças irão rolar. <span id="more-642"></span></p>
<p>É complexo colocar nesta postagem um backup que resolva tudo, mas vou colocar e explicar como executar em um servidor web um backup das contas de usuários de sites hospedados e seus respectivos bancos de dados, ainda duplicando o backup efetuado como segurança para outro servidor. É claro que o conteúdo aqui proposto pode ser adaptado por você para executar rotinas de backup expecíficas.</p>
<p>O arquivo em shell script pode ser obtido neste link: <a class="downloadlink" href="http://blog.deserv.info/wallpaper4" title=" downloaded 3 times" >backup-shell.sh (3)</a></p>
<p>Você pode fazer o download e colocar na “crontab” do seu sistema para que o mesmo efetue o backup na hora que melhor lhe convir.</p>
<h2><strong>Funcionamento</strong></h2>
<p>No início do arquivo shell script do link citado acima, teremos declarações de variaveis de controle do fluxo do programa.</p>
<div>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td>
<blockquote>
<div>#!/bin/sh<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
#   backup.sh &#8211; Executa backup das pastas &#8220;public_html&#8221; de cada<br />
#                      usuário da pasta home do sistema.<br />
#<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
administrator=&#8221;root&#8221;<br />
mysql_user=&#8221;root&#8221;<br />
mysql_password=&#8221;senha_do_mysql&#8221;<br />
dir_backup=&#8221;backup&#8221;<br />
dir_sites=&#8221;sites&#8221;<br />
dir_backup_local=$(hostname)<br />
dir_home=&#8221;home&#8221;<br />
dir_sql=&#8221;sql&#8221;<br />
dir_web=&#8221;public_html&#8221;<br />
exclude_list=&#8221;ftp user admin lixo&#8221;<br />
server_list=&#8221;server1.devel server2.devel&#8221;<br />
mail_list=&#8221;admin@admin.com.br&#8221;</div>
</blockquote>
</td>
</tr>
</tbody>
</table>
</div>
<p>O que vemos acima são variaveis de controle, como nome de usuário e senha do mysql, nomes de pastas para o armazenamento dos arquivos e diretórios capturados da origem, lista de exclusão de diretórios que não queremos que seja efetuado o backup e lista de servidores que queremos duplicar o backup ocorrido, ainda temos uma lista de e-mail para informar os responsáveis da ação efetuada pelo nosso backup.</p>
<div>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td>
<blockquote>
<div>#<br />
# Lista os Bancos disponiveis<br />
#<br />
sql_database=$(mysql -u$mysql_user -hlocalhost -p$mysql_password -Bse<br />
&#8216;SHOW DATABASES WHERE `database`<br />
!= &#8220;information_schema&#8221; AND `database`<br />
!= &#8220;mysql&#8221;&#8216;)for db in ${sql_database}; do<br />
mysqldump &#8211;databases $db -hlocalhost -u$mysql_user -p$mysql_password &#8211;hex-blob &gt; /$dir_home/$dir_sql/$dir_web/sql-$db.sql<br />
done</div>
</blockquote>
</td>
</tr>
</tbody>
</table>
</div>
<p>Neste trecho é gerado uma lista de todos os bancos de dados existentes no Servidor MySQL excluindo as bases de dados da instalação básica do servidor como “information_schema” e “mysql” utilizando o comando “mysql” para efetuar o login e executar a ação.</p>
<p>Com o comando “mysqldump” efetuamos o backup das bases de dados existentes na lista capturada no comando anterior e salvamos a saida do resultado para um arquivo em disco contendo as informaçãoes como criação da base de dados, tabela e inserções de registros.</p>
<div>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td>
<blockquote>
<div>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
# Inicia o backup<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
for user in ${users}; do<br />
if [ ! -d "/$dir_backup/$dir_sites/$dir_backup_local/$user" ]; then<br />
CreateDir &#8221;/$dir_backup/$dir_sites/$dir_backup_local/$user&#8221;<br />
firsync -avz &#8211;exclude &#8217;wp-cache&#8217; &#8211;exclude \<br />
&#8216;cache&#8217; &#8221;/$dir_home/$user/$dir_web/&#8221; \<br />
&#8220;/$dir_backup/$dir_sites/$dir_backup_local/$user/&#8221;<br />
done</div>
</blockquote>
</td>
</tr>
</tbody>
</table>
</div>
<p>Aqui é executado o backup da pasta public_html de cada usuário existente, repare ainda que na sincronia podemos excluir diretórios utilizando a opção –exclude do comando rsync.</p>
<div>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td>
<blockquote>
<div>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</div>
<div># Sincroniza o backup com os servidores da listagem</div>
<div>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</div>
<div>for server in ${server_list}; do</div>
<div>rret=`ssh $administrator@$server \</div>
<div>&#8220;mkdir -p /$dir_backup&#8221;`</div>
<div>rret=`ssh $administrator@$server \</div>
<div>&#8220;mkdir -p /$dir_backup/$dir_sites/&#8221;`</div>
<div>rret=`ssh $administrator@$server \</div>
<div>&#8220;mkdir -p /$dir_backup/$dir_sites/$dir_backup_local&#8221;`log=$(rsync -avz &#8221;/$dir_backup/$dir_sites/$dir_backup_local/&#8221; \<br />
&#8220;$administrator@$server:</div>
<div>/$dir_backup/$dir_sites/$dir_backup_local/&#8221;)</div>
<div>#done</div>
<div></div>
</blockquote>
</td>
</tr>
</tbody>
</table>
</div>
<p>Com a lista de servidor(es) efetuamos um loop e sincronizamos os dados do diretório de backup efetuado com o comando anterior.</p>
<div>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td>
<div>
<blockquote><p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
# Envia para a lista de e-mail informações sobre o backup efetuado.<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
cat &lt;&lt; EOF &gt; /tmp/backup-mail.out<br />
Backup e sincronismo entre servidors efetuado as $(date) com sucesso em &lt;$dir_backup_local&gt;\<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Lista de servidores:$server_list\<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Lista de sites/usuarios:</p>
<p>$users</p>
<p>\<br />
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Logs de Sincronismo (rsync)</p>
<p>$log</p>
<p>EOF</p>
<p>#mail -v -s &#8220;Backup e Sincronismo de Servidores&#8221; $mail_list &amp;lt; /tmp/backup-mail.out</p></blockquote>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<p>E por fim geramos um arquivo de log com as informações obtidas de cada comando efetuado no backup e enviamos para a lista de e-mail.</p>
<p>Claro que este backup pode ser melhorado e adaptado para outras situações que fogem do escopo desta postagem. A Idéia aqui é dar uma luz para aqueles que não a possui, espero que tenha ajudado.</p>
<p>Fonte:  <a href="http://www.nacaolivre.com.br/" target="_blank">http://www.nacaolivre.com.br</a></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2012/01/21/backup-automatico-em-servidores-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gerenciando Acesso a Portas</title>
		<link>http://blog.deserv.info/2012/01/10/gerenciando-acesso-a-portas-de-acesso/</link>
		<comments>http://blog.deserv.info/2012/01/10/gerenciando-acesso-a-portas-de-acesso/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 19:07:11 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Acesso Remoto]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[gerenciamento de portas]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[portas de acesso]]></category>
		<category><![CDATA[regras de firewall]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=637</guid>
		<description><![CDATA[Você que tem IP Dinamico e não sabe como fazer para bloquear o acesso ao seu servidor, vai uma dica de regra de IPTables, onde você manipula a liberação de seu acesso com telnet. Com a grande facilidade de se ter um servidor Cloud, Decidado ou outros, e o mesmo ficar aberto para a internet [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2012%252F01%252F10%252Fgerenciando-acesso-a-portas-de-acesso%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Gerenciando%20Acesso%20a%20Portas%22%20%7D);"></div>
<p>Você que tem IP Dinamico e não sabe como fazer para bloquear o acesso ao seu servidor, vai uma dica de regra de IPTables, onde você manipula a liberação de seu acesso com telnet.</p>
<p>Com a grande facilidade de se ter um servidor Cloud, Decidado ou outros, e o mesmo ficar aberto para a internet as portas de acesso como portas de SSH (22), FTP (21), Banco de Dados (mysql=3306); (postgres=5432) entre outros serviços, muitas vezes somos obrigados a mudar as portas para ter um pouco mais de segurança, com uma simples regra de firewall irei exemplificar uma forma de mudar isto<span id="more-637"></span>, vamos a ela.</p>
<p><strong>1- Crie um arquivo /etc/init.d/firewall ;</strong></p>
<p><strong></strong><strong>2- Setar permissão de execução chmod +x /etc/init.d/firewall ;</strong></p>
<p><strong></strong><strong>3- Adicionar o conteúdo abaixo neste arquivo (/etc/init.d/firewall);</strong></p>
<p>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p>
<p>#!/bin/bash</p>
<p># chkconfig: &#8211; 55 45<br />
# description: Firewall IPTables<br />
# Autor: Flávio Silva<br />
# E-mail: contato@flaviosilva.net.br<br />
# Site: http://www.deserv.com.br / http://blog.deserv.info<br />
# probe: false</p>
<p># Define o caminho do comando iptables<br />
IPTABLES=`which iptables`<br />
function OK() {<br />
echo -e &#8220;\\033[1;39m [ \\033[1;32mOK\\033[1;39m ]\\033[1;0m"<br />
}</p>
<p>function FALHOU() {<br />
echo -e "\\033[1;39m [ \\033[1;31mFALHOU\\033[1;39m ]\\033[1;0m&#8221;<br />
}</p>
<p>function STOP(){</p>
<p>###############################################################<br />
# Flushing filter #<br />
###############################################################<br />
$IPTABLES -F<br />
$IPTABLES -P INPUT ACCEPT<br />
$IPTABLES -P OUTPUT ACCEPT<br />
$IPTABLES -X<br />
OK<br />
}</p>
<p>function START(){<br />
###############################################################<br />
# Default Policies #<br />
###############################################################<br />
$IPTABLES -P INPUT DROP<br />
$IPTABLES -P OUTPUT ACCEPT</p>
<p>###################<br />
# Stateful Input #<br />
###################<br />
$IPTABLES -A INPUT -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT</p>
<p>#######################################<br />
# REGRA DE ACESSO DINAMICO SSH #<br />
#######################################</p>
<p>HOST_IP=&#8221;0.0.0.0/0.0.0.0&#8243;</p>
<p>$IPTABLES -A INPUT -p tcp &#8211;dport 12345 -m recent &#8211;set &#8211;name SSH-ACCESS<br />
$IPTABLES -A INPUT -p tcp -s $HOST_IP &#8211;dport 22 -m recent &#8211;rcheck &#8211;seconds 3600 &#8211;name SSH-ACCESS -j ACCEPT<br />
$IPTABLES -A INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 123456 -m recent &#8211;name SSH-ACCESS &#8211;remove</p>
<p>####################<br />
# Loopback traffic #<br />
####################<br />
$IPTABLES -A INPUT -s 127.0.0.1 -i lo -j ACCEPT</p>
<p>##########################<br />
# ICMP Filtering #<br />
# and TRACEROUTE INPUT #<br />
##########################<br />
$IPTABLES -A INPUT -p icmp -j ACCEPT<br />
$IPTABLES -A INPUT -p udp &#8211;dport 33434:33523 -j ACCEPT</p>
<p>#######################<br />
# Drop stealth scans #<br />
#######################<br />
$IPTABLES -I INPUT -p tcp -m tcp &#8211;tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP<br />
$IPTABLES -I INPUT -p tcp -m tcp &#8211;tcp-flags FIN,SYN FIN,SYN -j DROP<br />
$IPTABLES -I INPUT -p tcp -m tcp &#8211;tcp-flags SYN,RST SYN,RST -j DROP<br />
$IPTABLES -I INPUT -p tcp -m tcp &#8211;tcp-flags FIN,RST FIN,RST -j DROP<br />
$IPTABLES -I INPUT -p tcp -m tcp &#8211;tcp-flags FIN,ACK FIN -j DROP<br />
$IPTABLES -I INPUT -p tcp -m tcp &#8211;tcp-flags ACK,URG URG -j DROP<br />
$IPTABLES -I INPUT -p tcp -m tcp &#8211;tcp-flags PSH,ACK PSH -j DROP</p>
<p>#################################<br />
# Regras de Gerenciamento INPUT #<br />
#################################</p>
<p>$IPTABLES -A INPUT -s XXX.XXX.XXX.XX -j ACCEPT #CASO TENHA ALGUM IP FIXO LIBERE ELE AQUI, SE NAO COMENTE ESTA LINHA COM &#8220;#&#8221;</p>
<p>#################################<br />
# Fechando conexoes SSH OUTPUT #<br />
#################################<br />
$IPTABLES -A OUTPUT -p tcp &#8211;dport 22 -j DROP</p>
<p>#################################<br />
# Regras de Clientes INPUT #<br />
#################################<br />
$IPTABLES -A INPUT -p tcp &#8211;dport 80 -j ACCEPT # HTTP<br />
$IPTABLES -A INPUT -p tcp &#8211;dport 443 -j ACCEPT # HTTPS<br />
$IPTABLES -A INPUT -p tcp &#8211;dport 3306 -j ACCEPT # MYSQL<br />
$IPTABLES -A INPUT -p tcp &#8211;dport 21 -j ACCEPT # FTP</p>
<p>OK<br />
}<br />
#FW options</p>
<p>case $1 in<br />
start)<br />
echo &#8220;Carregando Modulo de firewall&#8230;&#8221;<br />
START<br />
;;</p>
<p>stop)<br />
echo &#8220;Parando Modulo de firewall&#8230;&#8221;<br />
STOP<br />
;;</p>
<p>restart)<br />
echo &#8220;Restartando Modulo de firewall&#8230;&#8221;<br />
STOP<br />
START<br />
;;</p>
<p>*)</p>
<p>echo -e &#8220;Tente $0 {start|stop|restart}&#8221;<br />
;;<br />
Esac</p>
<p>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p>
<p>OBS: Veja que a porta &#8220;12345&#8243; indicada no bloco de &#8220;REGRAS DE ACESSO DINAMICO SSH&#8221;, foi configurada para efetuar a liberação da porta 22 neste exemplo, e a porta &#8220;123456&#8243;, para o bloqueio do acesso, abaixo efetuaremos os devidos testes.</p>
<p><strong>4- Adicionar os modulos de Firewall a serem carregados</strong></p>
<blockquote><p>touch /etc/rc.modules<br />
chmod 755 /etc/rc.modules</p>
<p>Conteudo do arquivo /etc/rc.modules</p>
<p>/sbin/modprobe ip_conntrack</p>
<p>source /etc/rc.modules &lt;- Carrega o conteudo do arquivo</p></blockquote>
<p><strong>5- Execute o Arquivo de Firewall</strong></p>
<p>OBS.: ANTES DE EXECUTAR O FIREWALL TENHA ALGUMA FORMA ALTERNATIVA DE ACESSO AO SERVIDOR PARA PODER EFETUAR OS DEVIDOS TESTES, POIS AO SUBIR O FIREWALL VOCÊ PODERÁ PERDER O ACESSO AO SERVIDOR</p>
<blockquote><p>/etc/init.d/firewall start/stop/restart</p></blockquote>
<p><strong>6- Efetuando teste de acesso:</strong><br />
Com o Firewall habilitado, efetue o telnet na porta que você definiu para a abertura do SSH, no nosso exemplo a porta 12345:</p>
<blockquote><p>telnet xxx.xxx.xxx.xxx 12345</p></blockquote>
<p>Feito o telnet, seu IP será liberado no arquivo &#8220;/proc/net/ipt_recent/SSH-ACCESS&#8221; e o acesso é liberado para acessar o servidor diretamente na porta 22</p>
<p>O arquivo lhe mostrará o IP da seguinte forma: &#8220;src=xxx.xxx.xxx.xxx ttl: 61 last_seen: 523542876 oldest_pkt: 2 523539875, 523542876&#8243;</p>
<p>Para bloquear o acesso a porta 22 novamente, basta efetuar o telnet na porta de fechamento, no nosso caso a porta 123456.</p>
<blockquote><p>telnet xxx.xxx.xxx.xxx 123456</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2012/01/10/gerenciando-acesso-a-portas-de-acesso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando um cliente NFS</title>
		<link>http://blog.deserv.info/2011/12/13/configurando-um-cliente-nfs/</link>
		<comments>http://blog.deserv.info/2011/12/13/configurando-um-cliente-nfs/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 22:17:07 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Infra-Estrutura]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[NFS]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=632</guid>
		<description><![CDATA[Configurando um cliente NFS Inicialmente é necessário ter um kernel com o suporte a sistemas de arquivo NFS compilado ou como um módulo. Isso deve ser configurado antes da compilação do kernel. Caso não se tenha feito isto, por favor verifique o Como Fazer &#8211; Kernel para instruções sobre como proceder. Caso se esteja utilizando [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2011%252F12%252F13%252Fconfigurando-um-cliente-nfs%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fs840Pp%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Configurando%20um%20cliente%20NFS%22%20%7D);"></div>
<p><strong>Configurando um cliente NFS</strong><strong></strong></p>
<p>Inicialmente é necessário ter um kernel com o suporte a sistemas de arquivo NFS compilado ou como um módulo. Isso deve ser configurado antes da compilação do kernel. Caso não se tenha feito isto, por favor verifique o Como Fazer &#8211; Kernel para instruções sobre como proceder. Caso se esteja utilizando uma distribuição muito boa (como o Conectiva Linux) e nunca se tenha lidado com o kernel ou módulos, nfs está magicamente à sua disposição. <span id="more-632"></span></p>
<p>Pode-se agora, na linha de comandos do superusuário, informar o comando de montagem apropriado e o sistema de arquivos estará disponível. Continuando com nosso exemplo anterior, desejamos montar /mn/parolin/local a partir de parolin. Isso deve ser feito através do seguinte comando:</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>mount -o rsize=1024,wsize=1024 parolin:/mn/parolin/local /mnt</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>(Retornaremos posteriormente às opções rsize e wsize). O sistema de arquivos está agora disponível sob /mnt e pode-se acessá-lo através do comando cd, assim como verificar o seu conteúdo através do comando ls, e observar os arquivo individualmente. Pode-se perceber que ele não é tão rápido quando um sistema local, mas muito mais amigável que o uso do ftp. Se, ao invés de montar um sistema de arquivos, o comando mount apresente uma mensagem de erro comomount:parolin:/mn/parolin/local falhou, razão fornecida pelo servidor: Permissão negada, então o arquivo exports contém algum erro. Caso ele informe mount clntudp_create: RPC: Programa não registrado isso significa que os programas nfsd ou mountd não estão sendo executados no servidor.</p>
<p>Para desmontar o sistema de arquivos basta comandar:</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>umount /mnt</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>Para que um sistema de arquivos nfs seja montado na inicialização do sistema operacional, deve-se editar o arquivo /etc/fstab da forma usual. No caso de nosso exemplo, deve-se adicioar a seguinte linha:</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p># dispositivo  pto.montagem tipo_sist_arqs  opções           dump ordem verif.</p>
<p>&#8230;</p>
<p>parolin:/mn/parolin/local  /mnt    nfs  rsize=1024,wsize=1024 0    0</p>
<p>&#8230;</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>Bem, parece tudo. Quase. Continue a leitura por favor.</p>
<p><strong>Opções de Montagem</strong><strong></strong></p>
<p>Há algumas opções que devem ser consideradas. Eles definem a forma como o cliente NFS lida com uma queda do servidor ou da rede. Um dos aspectos mais interessantes sobre NFS é que ele lida com estas situações com elegância, desde que o cliente esteja corretamente configurado. Há dois tipos distintos de parâmetros de tratamento de falhas:</p>
<p><strong>soft</strong></p>
<p>O cliente NFS reporta um erro ao processar o acesso a um arquivo localizado em um sistema de arquivos montado via NFS. Alguns programas podem lidar com isto com compostura, outros não. Esta opção não é recomendada.</p>
<p><strong>hard</strong></p>
<p>O programa que acessa um arquivo em um sistema de arquivos montado via NFS irá travar sempre que o servidor não responder. O processo não pode ser interrompido ou finalizado a menos que se tenha especificado intr. Quando o servidor NFS esteja novamente ativo, o programa irá continuar a partir do ponto onde tenha parado. Isso é provavelmente o que se deseje. Recomendamos o uso do parâmetro hard,intr em todos os sistemas de arquivos montados via NFS.</p>
<p>A partir do exemplo anterior, esta seria a entrada no arquivo fstab:</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p># dispositivo  pto.montagem tipo_sist_arqs  opções           dump ordem verif.</p>
<p>&#8230;</p>
<p>parolin:/mn/parolin/local  /mnt    nfs  rsize=1024,wsize=1024,hard,intr 0 0</p>
<p>&#8230;</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p><strong>Otimizando o NFS</strong><strong></strong></p>
<p>Normalmente, caso as opções rsize e wsize seja especificados, o NFS irá ler e gravar blocos de 4096 e 8172 bytes. Algumas combinações de kernel do Linux e placas de rede não podem lidar com blocos grandes e não podem ser otimizados. Então vamos tentar descobrir como encontrar os parâmetros rsize e wsize que funcionem da maneira mais otimizada possível. É possível testar a velocidade das opções com um simples comando. Dado o comando mount conforme descrito acima, logo temos acesso de gravação ao disco, podendo executar um teste de performance de gravação seqüencial:</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>Este comando criará um arquivo de 64 Mb de bytes zerados (que deve ser grande o suficiente para que o cache não altere significativamente a performance. Pode ser usado um arquivo maior caso o sistema local tenha muita memória). Isso pode ser feito algumas vezes (5-10?), para que se possa ter uma média bem fundamentada. Neste casos, o importante é medir o tempo de &#8220;relógio&#8221; e o tempo efetivamente gasto na conexão. Após, pode-se testar a performance da leitura ao se ler o arquivo de volta:</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>time dd if=/mnt/testfile of=/dev/null bs=16k</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>Isso pode ser feito algumas vezes. Após deve-se executar o comando mount e umount novamente com tamanhos maiores em rsize e wsize. Eles devem ser provavelmente múltiplos de 1024, e não maior que 16384 visto que este é o tamanho máximo do NFS versão 2. Exatamente após a montagem de um tamanho maior, acesse o sistema de arquivos montado através do comando cd e explore-o através do comando ls, para estar seguro que ele está funcionando perfeitamente. Caso os parâmetros rsize/wsize sejam muito grandes, os sintomas não são <em>muito</em> óbvios. Um típico sintoma é uma lista incompleta dos arquivos produzida pelo comando ls e nenhuma mensagem de erro. Ou ao se ler um arquivo ele falha misteriosamente, sem mensagens de erro. Após definir que os parâmetros rsize/wsize funcionam perfeitamente deve-se executar os testes de performance. SunOS e Solaris tem a reputação de funcionar muito melhor com blocos de 4096 bytes.</p>
<p>kernels mais recentes do Linux (desde o 1.3) executam a leitura antecipada para rsizes maiores ou iguais ao tamanho de página da máquina. Em máquinas Intel o tamanho de página é de 4.096 bytes. A leitura adiantada aumenta <em>significativamente</em> a performance de leitura do NFS. Ou seja, sempre que possível deve-se usar o rsize de 4.096 bytes em máquinas Intel.</p>
<p>Lembre-se de editar o arquivo /etc/fstab com os valores de rsize/wsize encontrados.</p>
<p>Uma sugestão para incrementar a performance de gravação do NFS é desabilitar o sincronismo de gravação do servidor. A especificação NFS indica que a gravação NFS solicitada não pode ser considerada finalizadas antes dos dados serem gravados em um meio não volátil (normalmente o disco rígido). Isso restringe a performance de gravação de alguma forma, enquanto que gravações assíncronas irão aumentar a velocidade do NFS. O servidor Linux nfsd nunca faz gravações síncronas uma que a própria implementação do sistema de arquivos não o faz, mas em servidores em sistemas operacionais diferentes isso pode aumentar a performance através do seguinte parâmetro no arquivo exports:</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>/dir    -async,access=linuxbox</p>
<div align="center">
<hr align="center" noshade="noshade" size="2" width="100%" />
</div>
<p>ou algo similar. Por favor verifique a página de manual online da máquina em questão. Cabe salientar que esta opção aumenta o risco de perda de dados no caso de algum problema ocorrer antes da efetiva gravação dos dados.</p>
<p>Fonte: <a href="http://www.magnux.org/">http://www.magnux.org</a></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2011/12/13/configurando-um-cliente-nfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando SED</title>
		<link>http://blog.deserv.info/2011/11/25/utilizando-sed/</link>
		<comments>http://blog.deserv.info/2011/11/25/utilizando-sed/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 13:12:20 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Sed]]></category>
		<category><![CDATA[Utilizando SED]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=627</guid>
		<description><![CDATA[PREENCHIMENTO DE ARQUIVOS: # duplicar o tamanho de um arquivo sed G # duplicar o tamanho de um arquivo que jah contém linhas em branco. # O arquivo de saída deve conter não mais que uma linha branca # entre linhas de texto sed '/^$/d;G' # triplicar o tamanho de um arquivo sed 'G;G' # [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2011%252F11%252F25%252Futilizando-sed%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Utilizando%20SED%22%20%7D);"></div>
<pre>PREENCHIMENTO DE ARQUIVOS:

 # duplicar o tamanho de um arquivo
 sed G

 # duplicar o tamanho de um arquivo que jah contém linhas em branco.
 # O arquivo de saída deve conter não mais que uma linha branca
 # entre linhas de texto
 sed '/^$/d;G'</pre>
<p><span id="more-627"></span></p>
<pre>

 # triplicar o tamanho de um arquivo
 sed 'G;G'

 # desfazer a duplicação de tamanho (assume que as linhas de numeração par
 # estejam em branco)
 sed 'n;d'

 # insere uma linha em branco acima de cada linha que contem "regex"
 sed '/regex/{x;p;x;}'

 # insere uma linha em branco abaixo de cada linha que contem "regex"
 sed '/regex/G'

 # insere uma linha em branco acima e abaixo de cada linha que contem "regex"
 sed '/regex/{x;p;x;G;}'

NUMERACÃO:

 # numera cada linha de um arquivo (com alinhamento simples a esquerda). Usar
 # uma tabulação em vez do espaço vai preservar as margens. (veja a observação
 # sobre o '\t' no final desse arquivo)
 sed = arquivo | sed 'N;s/\n/\t/'

 # numera cada linha de um arquivo (números a esquerda, alinhados a direita)
 sed = arquivo | sed 'N; s/^/     /; s/ *\(.\{6,\}\)\n/\1  /'

 # numera cada linha de um arquivo, mas só imprime os números se a linha não
 # estiver em branco
 sed '/./=' arquivo | sed '/./N; s/\n/ /'

 # conta as linhas (emula o "wc -l")
 sed -n '$='

CONVERSÃO DE TEXTO E SUBSTITUIÇÃO:

 # EM AMBIENTE UNIX: converte o caractere de linha nova do DOS (CR/LF) para o
 # formato Unix
 sed 's/.$//'            # assume que todas as linhas terminam com CR/LF
 sed 's/^M$//'           # no bash/tcsh, pressione Ctrl-V depois Ctrl-M
 sed 's/\x0D$//'         # gsed 3.02.80, mas os scripts acima sao mais simples

 # EM AMBIENTE UNIX: converte o caractere de linha nova do Unix (LF) para
 # o formato DOS
 sed "s/$/`echo -e \\\r`/"            # comando usado com o ksh
 sed 's/$'"/`echo \\\r`/"             # comando usado com o bash
 sed "s/$/`echo \\\r`/"               # comando usado com o zsh
 sed 's/$/\r/'                        # gsed 3.02.80

 # EM AMBIENTE DOS: converte o caractere de linha nova do Unix (LF) para
 # o formato DOS
 sed "s/$//"                          # método 1
 sed -n p                             # método 2

 # EM AMBIENTE DOS: converte o caractere de linha nova do DOS (CR/LF) para
 # o formato Unix. Só pode ser feito com o sed UnxUtils, versão 4.0.7
 # ou maior. A versão do UnxUtils pode ser identificada pelo parâmetro padrão
 # "--text" que aparece quando o "--help" é usado. De outra forma, mudar
 # os caracteres de linha nova do DOS para o formato Unix não pode ser
 # feito em um ambiente DOS. Use o "tr" para isso.
 sed "s/\r//" arquivo_entrada &gt;arquivo_saida         # sed UnxUtils versão v4.0.7 ou maior
 tr -d \r &lt;arquivo_entrada &gt;arquivo_saida            # tr GNU versão 1.22 ou maior

 # apaga o espaço em branco inicial (espaços, tabulações) do começo
 # de cada linha, puxando o texto para a esquerda
 sed 's/^[ \t]*//'                    # veja a nota sobre o '\t' no final
                                      # deste arquivo

 # apaga o espaço em branco final (espaços, tabulações) do final de cada linha
 sed 's/[ \t]*$//'                    # veja a nota sobre o '\t' no final
                                      # deste arquivo

 # deleta AMBOS os espaços em branco final e inicial de cada linha
 sed 's/^[ \t]*//;s/[ \t]*$//'

 # insere 5 espaços em branco no ínicio de cada linha (faz o <em>offset</em> da página)
 sed 's/^/     /'

 # alinha tudo a direita, numa coluna de 79 caracteres de largura
 sed -e :a -e 's/^.\{1,78\}$/ &amp;/;ta'  # definido como 78 mais 1 espaço

 # centraliza todo o texto no meio de uma coluna de 79 caracteres de
 # largura. No método 1, os espaços no começo da linha são significativos,
 # e espaços em branco são anexados ao final de cada linha. No método 2,
 # os espaços no início de cada linha são descartados ao centralizar
 # a linha e não é adicionado nenhum espaço no final de cada linha.
 sed  -e :a -e 's/^.\{1,77\}$/ &amp; /;ta'                     # método 1
 sed  -e :a -e 's/^.\{1,77\}$/ &amp;/;ta' -e 's/\( *\)\1/\1/'  # método 2

 # substituir (achar e trocar) "foo" por "bar" em cada linha
 sed 's/foo/bar/'             # troca somente a 1a instância de uma linha
 sed 's/foo/bar/4'            # troca somente a 4a instância de uma linha
 sed 's/foo/bar/g'            # troca TODAS as instâncias de uma linha
 sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # troca o 'próximo-para-último'
 sed 's/\(.*\)foo/\1bar/'     # troca somente a última occorrência

 # substitui "foo" por "bar" SOMENTE nas linhas que contem "baz"
 sed '/baz/s/foo/bar/g'

 # substitui "foo" por "bar" EXCETO nas linhas que contem "baz"
 sed '/baz/!s/foo/bar/g'

 # troca "scarlet" ou "ruby" ou "pucy" para "red"
 sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'   # na maioria dos seds
 gsed 's/scarlet\|ruby\|puce/red/g'                # somente no GNU sed 

 # reverter a ordem das linhas (emula o "tac")
 # um bug/função do HHsed v1.5 fazia com que as linhas em branco fossem deletadas
 sed '1!G;h;$!d'              # método 1
 sed -n '1!G;h;$p'            # método 2

 # reverte cada caractere em cada linha (emula o "rev")
 sed '/\n/!G;s/\(.\)\(.*\n\)/&amp;\2\1/;//D;s/.//'

 # une pares de linhas lado a lado (como o "paste")
 sed '$!N;s/\n/ /'

 # se uma linha termina com uma barra invertida, a próxima linha é
 # anexada a ela
 sed -e :a -e '/\\$/N; s/\\\n//; ta'

 # se uma linha termina com um sinal de igual, ela é anexada a linha
 # anterior e o sinal de "=" é substituído por um espaco simples.
 sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

 # adiciona vírgulas a strings numéricos, mudando "1234567" para "1,234,567"
 gsed ':a;s/\B[0-9]\{3\}\&gt;/,&amp;/;ta'                     # GNU sed
 sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'  # outros seds

 # adiciona vírgulas em números com pontos decimais e sinais de negativo (GNU sed)
 gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'

 # adiciona uma linha em branco a cada 5 linhas (após as linhas 5, 10, 15, 20, etc.)
 gsed '0~5G'                  # somente no GNU sed
 sed 'n;n;n;n;G;'             # outros seds

IMPRESSÃO SELETIVA DE CERTAS LINHAS:

 # imprime as primeiras 10 linhas de um arquivo (emula o comportamento do "head")
 sed 10q

 # imprime a primeira linha de um arquivo (emula o "head -1")
 sed q

 # imprime as últimas 10 linhas de um arquivo (emula o "tail")
 sed -e :a -e '$q;N;11,$D;ba'

 # imprime as 2 últimas linhas de um arquivo (emula o "tail -2")
 sed '$!N;$!D'

 # imprime somente a última linha de um arquivo (emula o "tail -1")
 sed '$!d'                    # método 1
 sed -n '$p'                  # método 2

 # imprime somente as linhas que se encaixam na expressão regular
 # (emula o "grep")
 sed -n '/regexp/p'           # método 1
 sed '/regexp/!d'             # método 2

 # imprime somente as linhas que NÃO se encaixam na regexp (emula o "grep -v")
 sed -n '/regexp/!p'          # método 1, corresponde ao descrito acima
 sed '/regexp/d'              # método 2, sintaxe mais simples

 # imprime a linha imediatamente anterior a expressão regular, mas
 # não a linha contendo a expressão
 sed -n '/regexp/{g;1!p;};h'

 # imprime a linha imediatamente posterior a expressão regular, mas
 # não a linha contendo a expressão
 sed -n '/regexp/{n;p;}'

 # imprime uma linha de contexto antes e depois da expressão regular,
 # com o número da linha indicando onde a expressão regular
 # aparece (similar ao "grep -A1 -B1")
 sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h

 # procura e imprime por AAA e BBB e CCC (em qualquer ordem)
 sed '/AAA/!d; /BBB/!d; /CCC/!d'

 # procura e imprime por AAA e BBB e CCC (nessa ordem)
 sed '/AAA.*BBB.*CCC/!d'

 # procura e imprime por AAA ou BBB ou CCC (emula o "egrep")
 sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d    # maioria dos seds
 gsed '/AAA\|BBB\|CCC/!d'                        # somente com o sed GNU

 # imprime um parágrafo se ele possuir AAA (linhas vazias separam os parágrafos).
 # Com o HHsed v1.5 deve ser inserido o 'G;' apos o 'x;', nos 3 scripts abaixo
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

 # imprime um parágrafo se ele possuir AAA e BBB e CCC (em qualquer ordem)
 sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

 # imprime o parágrafo inteiro se ele possuir AAA ou BBB ou CCC
 sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
 gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d'         # somente com o GNU sed

 # imprime somente as linhas com 65 caracteres ou mais
 sed -n '/^.\{65\}/p'

 # imprime somente as linhas com menos que 65 caracteres
 sed -n '/^.\{65\}/!p'        # método 1, corresponde ao descrito acima
 sed '/^.\{65\}/d'            # método 2, sintaxe mais simples

 # imprime uma parte do arquivo que vai da expressão regular até
 # o final do mesmo
 sed -n '/regexp/,$p'

 # imprime uma parte do arquivo baseada nos números das linhas (linhas 8-12,
 # inclusive)
 sed -n '8,12p'               # método 1
 sed '8,12!d'                 # método 2

 # imprime a linha de número 52
 sed -n '52p'                 # método 1
 sed '52!d'                   # método 2
 sed '52q;d'                  # método 3, eficiente com arquivos grandes

 # começando na linha 3, imprime cada sétima linha
 gsed -n '3~7p'               # somente o GNU sed
 sed -n '3,${p;n;n;n;n;n;n;}' # outros seds

 # imprime um pedaço de arquivo que está entre as duas
 # expressões regulares (inclusive)
 sed -n '/Iowa/,/Montana/p'             # é <em>case sensitive</em>

DELEÇÃO SELETIVA DE CERTAS LINHAS:

 # imprime todo o arquivo EXCETO a parte entre 2 expressões regulares
 sed '/Iowa/,/Montana/d'

 # deleta linhas duplicadas consecutivas de um arquivo (emula o "uniq"). A primeira
 # linha de um conjunto de linhas duplicadas é mantida, o resto é deletada
 sed '$!N; /^\(.*\)\n\1$/!P; D'

 # deleta linhas duplicadas não consecutivas. Tome cuidado para nao estourar
 # o tamanho do <em>buffer</em> do espaco de reserva (<em>hold space</em>), ou então use o sed GNU.
 sed -n 'G; s/\n/&amp;&amp;/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

 # deleta todas as linhas exceto as linhas duplicadas (emula o "uniq -d").
 sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'

 # deleta as 10 primeiras linhas de um arquivo
 sed '1,10d'

 # deleta a última linha de um arquivo
 sed'$d'

 # deleta as 2 últimas linhas de um arquivo
 sed 'N;$!P;$!D;$d'

 # deleta as 10 últimas linhas de um arquivo
 sed -e :a -e '$d;N;2,10ba' -e 'P;D'   # método 1
 sed -n -e :a -e '1,10!{P;N;D;};N;ba'  # método 2

 # deleta cada oitava linha
 gsed '0~8d'                           # somente no GNU sed
 sed 'n;n;n;n;n;n;n;d;'                # outros seds

 # deleta as linhas que combinarem com padrão
 sed '/padrao/d'

 # deleta TODAS as linhas em branco de um arquivo (o mesmo que "grep '.' ")
 sed '/^$/d'                           # método 1
 sed '/./!d'                           # método 2

 # deleta todas as linhas brancas CONSECUTIVAS de um arquivo exceto a primeira;
 # ainda deleta todas as linhas em branco do início e fim do arquivo (emula o
 # "cat -s")
 sed '/./,/^$/!d'          # método 1, permite 0 brancos no topo, 1 no
                           # final do arquivo
 sed '/^$/N;/\n$/D'        # método 2, permite 1 branco no top, 0 no
                           # final do arquivo

 # deleta todas as linhas em branco CONSECUTIVAS do arquivo, exceto as 2 primeiras:
 sed '/^$/N;/\n$/N;//D'

 # deleta todas as linhas em branco iniciais, no início do arquivo
 sed '/./,$!d'

 # deleta todas as linhas em branco finais, no final do arquivo
 sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'  # funciona com todos os sed
 sed -e :a -e '/^\n*$/N;/\n$/ba'        # o mesmo, exceto gsed 3.02*

 # deleta a última linha de cada parágrafo
 sed -n '/^$/{p;h;};/./{x;/./p;}'

APLICAÇÕES ESPECIAIS:

 # remove <em>overstrikes nroff</em> (caracter, backspace) das man pages. O comando
 # 'echo' pode precisar da opção -e se você usar Unix System V ou uma
 # shell bash
 sed "s/.`echo \\\b`//g"    # as aspas duplas são necessárias em ambiente Unix
 sed 's/.^H//g'             # no bash/tcsh, pressione Ctrl-V e depois Ctrl-H
 sed 's/.\x08//g'           # expressão hexadecimal para o sed v1.5

 # mostra as mensagens de cabeçalho de um Usenet/e-mail
 sed '/^$/q'                # deleta tudo após a primeira linha em branco

 # mostra o corpo da mensagem de um Usenet/e-mail
 sed '1,/^$/d'              # deleta tudo até a primeira linha em branco

 # mostra o cabeçalho <em>Subject</em>, mas remove a porção inicial "Subject :"
 sed '/^Subject: */!d; s///;q'

 # pega o cabeçalho de endereço de resposta
 sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

 # verifica o endereço de maneira correta. Pega o endereço de e-mail
 # através da 1a linha do cabeçalho de endereço de retorno (veja
 # o script acima)
 sed 's/ *(.*)//; s/&gt;.*//; s/.*[:&lt;] *//'

 # adiciona um sinal de maior com um espaço a cada linha (citação de uma
 # mensagem)
 sed 's/^/&gt; /'

 # deleta o sinal de maior e o espaço de cada linha (remove a
 # citação de uma mensagem)
 sed 's/^&gt; //'

 # remove a maioria das <em>tags</em> HTML (acomoda <em>tags</em> de múltiplas linhas)
 sed -e :a -e 's/&lt;[^&gt;]*&gt;//g;/&lt;/N;//ba'

 # extrai binários <em>uuencoded</em> com múltiplos pedaços, removendo informações
 # estranhas/extras, fazendo com que só a parte <em>uuencoded</em> permaneça. Os
 # arquivos devem ser passados ao sed na ordem correta. A versão 1 pode
 # ser executada a partir da linha de comando; a versão 2 pode ser
 # executada a partir de um shell script Unix. (Modificado de um
 # script criado por Rahul Dhesi.)
 sed '/^end/,/^begin/d' arquivo1 arquivo2 ... arquivoX | uudecode   # vers. 1
 sed '/^end/,/^begin/d' $* | uudecode                      # vers. 2

 # Ordena parágrafos de arquivos alfabeticamente. Parágrafos são separados
 # por linhas em branco. O GNU sed usa o \v como tabulação vertical, ou qualquer
 # caracter único serve.
 sed '/./{H;d;};x;s/\n/={NL}=/g' file | sort | sed '1s/={NL}=//;s/={NL}=/\n/g'
 gsed '/./{H;d};x;y/\n/\v/' file | sort | sed '1s/\v//;y/\v/\n/'

 # zipa cada arquivo .TXT individualmente, deletando o arquivo fonte
 # e definindo o nome de cada .ZIP para o nome base do arquivo .TXT.
 # (no DOS: o comando "dir /b" retorna nomes de arquivo reduzidos e em caixa alta).
 echo @echo off &gt;zipup.bat
 dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" &gt;&gt;zipup.bat

USO TÍPICO: O sed pega um ou mais comandos de edição e aplica todos eles,
em sequência, a cada linha de entrada. Após todos os comandos terem sido
aplicados a primeira linha de entrada, ela é jogada para a saída e a
segunda linha de entrada começa a ser processada, recomeçando o ciclo.
Os exemplos acima assumem que a entrada venha do dispositivo padrão  (por exemplo,
o console, onde  normalmente a entrada é via pipe). Um ou mais nomes de
arquivo podem ser passados na linha de comando se a entrada não vier da
entrada padrão. A saída é mandada para a saída padrão (a tela). Assim:

 cat arquivo | sed '10q'        # usa a entrada via pipe
 sed '10q' arquivo              # tem o mesmo efeito, mas evita o uso do "cat"
 sed '10q' arquivo &gt; novo-arquivo    # redireciona a saída para o disco

Para instruções de sintaxe adicionais, incluindo a maneira de aplicar
comandos de edição a partir de um arquivo no disco, ao invés da linha
de comando, consulte "sed &amp; awk, 2nd Edition," por Dale Dougherty e
Arnold Robbins (O'Reilly, 1997; <a href="http://www.ora.com/">http://www.ora.com</a>), "UNIX Text
Processing," por Dale Dougherty e Tim O'Reilly (Hayden Books, 1987)
ou os tutoriais do Mike Arst distribuídos como U-SEDIT2.ZIP (em vários
sites). Para explorar totalmente o poder do sed, deve-se entender
as "expressões regulares". Para isso, veja "Mastering Regular Expressions"
de Jeffrey Friedl (O'Reilly, 1997). As páginas de manual ("man pages")
dos sistemas Unix podem ser úteis (tente "man sed", "man regexp", ou
a subseção sobre expressões regulares no "man ed"), mas as páginas
de manual são notadamente mais difíceis de se compreender. Elas
não são escritas para ensinar o uso do sed ou das expressões
regulares para usuários iniciantes, mas como texto de referência
para aqueles que já tem certa experiência com as duas ferramentas.

SINTAXE DAS ASPAS: Os exemplos acima utilizam as aspas simples ('...')
ao invés das aspas duplas ("...") para agrupar comandos de edição,
visto que o sed é comumente utilizado em plataformas Unix. As
aspas simples impedem que a shell Unix interprete o cifrão ($)
e a crase (`...`), os quais seriam expandidos pela shell se estivessem
dentro das aspas duplas. Usuários da shell "csh" e derivadas
ainda precisarão utilizar a barra invertida (\) antes do sinal de
exclamação (por exemplo \!) para conseguir rodar os exemplos acima, mesmo
usando as aspas simples. Versões do sed escritas para o DOS
invariavelmente necessitam das aspas duplas ("...") ao invés das
aspas simples para agrupar os comandos de edição.

USO DO '\t' NOS SCRIPTS SED: Para maior clareza na documentação, nós
utilizamos a expressão '\t' para indicar o caractere de tabulação
(0x09) nos scripts sed. Porém, a maioria das versões do sed não reconhece
a abreviação '\t', logo, quando for executar estes scripts via linha
de comando, você deve apertar a tecla TAB. A abreviação '\t' só
é reconhecida como um metacaractere nas expressões regulares no
awk, perl, HHsed, sedmod, e o GNU sed v3.02.80.

VERSÕES DO SED: As versões do sed diferem entre si, logo, algumas
variações na sintaxe são esperadas. Em particular, a maioria
não suporta o uso de rótulos (:nome) ou instruções ramificadas
(b,t) na edição dos comandos, exceto no final dos mesmos. Nós utilizamos
uma sintaxe que seria portável para a maioria dos usuários do sed,
mesmo sabendo que a popular versão GNU do sed permite uma sintaxe
mais sucinta. Quando o leitor vê um comando comprido como esse:

   sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

é importante que ele saiba que o GNU sed permite uma redução, como:

   sed '/AAA/b;/BBB/b;/CCC/b;d'		# ou mesmo
   sed '/AAA\|BBB\|CCC/b;d'

Lembre-se ainda que, apesar de muitas versões do sed aceitarem comandos
como "/one/ s/RE1/RE2/", algumas não permitem o uso de "/one/! s/RE1/RE2/",
a qual contém um espaço antes do 's'. Omita o espaço quando for digitar
o comando.

OTIMIZANDO PARA MAIOR VELOCIDADE: Se a velocidade de execução precisa
aumentar (em virtude de grandes arquivos de entrada ou de processadores
e discos rígidos lentos), a substituição será executada mais rapidamente
se a expressão de "procura" é especificada antes da instrução
"s/.../.../". Assim:

   sed 's/foo/bar/g' arquivo         # comando de substituição padrão
   sed '/foo/ s/foo/bar/g' arquivo   # executa de forma mais rápida
   sed '/foo/ s//bar/g' arquivo      # sintaxe mais sucinta

Na seleção ou remoção de linhas nas quais você somente precisa
ver uma primeira parte de um arquivo, o comando "quit" (q) no script
irá reduzir drasticamente o tempo de processamento para arquivos
grandes. Assim:

   sed -n '45,50p' arquivo           # imprime as linhas 45-50
   sed -n '51q;45,50p' arquivo       # mesma coisa, mas faz muito mais
                                     # rapidamente</pre>
<pre></pre>
<pre>Fonte: <a href="http://sed.sourceforge.net/">http://sed.sourceforge.net/</a></pre>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2011/11/25/utilizando-sed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Port knocking para SSH rápido e fácil com iptables</title>
		<link>http://blog.deserv.info/2011/11/15/port-knocking-para-ssh-rapido-e-facil-com-iptables/</link>
		<comments>http://blog.deserv.info/2011/11/15/port-knocking-para-ssh-rapido-e-facil-com-iptables/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 17:46:28 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Acesso Remoto]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Iptables]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Port knocking]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=618</guid>
		<description><![CDATA[Port knocking funciona como um cadeado de segredo para ter acesso ao servidor, onde o usuário ou invasor terá que &#8220;bater&#8221; em um determinado número de portas com um limite de tempo também determinado para fazer a sequência para só assim liberar o ip que ele estiver usando também por um determinado tempo. O acesso [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2011%252F11%252F15%252Fport-knocking-para-ssh-rapido-e-facil-com-iptables%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Port%20knocking%20para%20SSH%20r%C3%A1pido%20e%20f%C3%A1cil%20com%20iptables%22%20%7D);"></div>
<p><em>Port knocking</em> funciona como um cadeado de segredo para ter acesso ao servidor, onde o usuário ou invasor terá que &#8220;bater&#8221; em um determinado número de portas com um limite de tempo também determinado para fazer a sequência para só assim liberar o ip que ele estiver usando também por um determinado tempo. O acesso a porta que queremos aqui no caso é a 22 (ssh).  <span id="more-618"></span></p>
<p>Vamos construir um cenário onde você queira primeiro liberar o acesso direto a alguns IPs sem precisar passar pelo segredo das portas, depois liberaremos todos os IPs (ou alguma rede específica) somente se acertarem a sequência das portas e por último bloquearemos todo o resto.</p>
<p>A configuração a seguir pode ser adicionada a seu script de firewall.</p>
<p>Como este é o primeiro tutorial que escrevo, tentarei ser o mais claro possível (espero que me perdoem se não conseguir):</p>
<div>####### Libera ssh para um determinado ip sem precisar passar pelo segredo ##############<br />
####### xxx.xxx.xxx.xxx = IP que deseja liberar#######################</div>
<div>iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx &#8211;dport ssh -j ACCEPT<br />
iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx &#8211;dport ssh -j ACCEPT<br />
iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx &#8211;dport ssh -j ACCEPT</div>
<div>
<p>####### A rede que você quer que tenha acesso ao segredo (aqui no caso está para qualquer uma)</p>
<p>HOST_IP=&#8221;0.0.0.0/0.0.0.0&#8243;</p>
<p>####### Fases do Segredo ##################################<br />
/sbin/iptables -N INTO-FASE2<br />
/sbin/iptables -A INTO-FASE2 -m recent &#8211;name FASE1 &#8211;remove<br />
/sbin/iptables -A INTO-FASE2 -m recent &#8211;name FASE2 &#8211;set<br />
/sbin/iptables -A INTO-FASE2 -j LOG &#8211;log-prefix &#8220;INTO FASE2: &#8221;</p>
<p>/sbin/iptables -N INTO-FASE3<br />
/sbin/iptables -A INTO-FASE3 -m recent &#8211;name FASE2 &#8211;remove<br />
/sbin/iptables -A INTO-FASE3 -m recent &#8211;name FASE3 &#8211;set<br />
/sbin/iptables -A INTO-FASE3 -j LOG &#8211;log-prefix &#8220;INTO FASE3: &#8221;</p>
<p>/sbin/iptables -N INTO-FASE4<br />
/sbin/iptables -A INTO-FASE4 -m recent &#8211;name FASE3 &#8211;remove<br />
/sbin/iptables -A INTO-FASE4 -m recent &#8211;name FASE4 &#8211;set<br />
/sbin/iptables -A INTO-FASE4 -j LOG &#8211;log-prefix &#8220;INTO FASE4: &#8221;</p>
<p>/sbin/iptables -A INPUT -m recent &#8211;update &#8211;name FASE1</p>
<p>####### Aqui você determina o número das portas e o tempo que o ip ficará em cada uma das fazes aguardando a próxima porta ser digitada. Por ex.: Você terá 15 segundos para passar de cada fase, se o tempo se expirar na fase 3 terá que começar da fase1 novamente. ###########<br />
####### Dica: não é aconselhável utilizar portas em sequências crescentes ou decrescentes como neste exemplo (100, 200, 300, 400) e sim intercalando os valores uma mais alta e uma mais baixa para evitar que algum scan consiga adivinhar a sequência. #######</p>
<p>/sbin/iptables -A INPUT -p tcp &#8211;dport 100 -m recent &#8211;set &#8211;name FASE1<br />
/sbin/iptables -A INPUT -p tcp &#8211;dport 200 -m recent &#8211;rcheck &#8211;seconds 15 &#8211;name FASE1 -j INTO-FASE2<br />
/sbin/iptables -A INPUT -p tcp &#8211;dport 300 -m recent &#8211;rcheck &#8211;seconds 15 &#8211;name FASE2 -j INTO-FASE3<br />
/sbin/iptables -A INPUT -p tcp &#8211;dport 400 -m recent &#8211;rcheck &#8211;seconds 15 &#8211;name FASE3 -j INTO-FASE4</p>
<p>####### Aqui chegamos a FASE4, que é a última deste exemplo, onde será liberada a conexão com a porta 22 (ssh). O tempo aqui está setado para 3600 segundos (1 hora). Depois disso será fechada novamente para o ip em questão, lembrando que se ele ainda estiver logado não fará diferença, será fechada mesmo assim. Então aumente o tempo conforme desejado.####</p>
<p>/sbin/iptables -A INPUT -p tcp -s $HOST_IP &#8211;dport 22 -m recent &#8211;rcheck &#8211;seconds 3600 &#8211;name FASE4 -j ACCEPT</p>
<p>####### Por último fechamos todos acessos a porta 22 ########</p>
<p>/sbin/iptables -A INPUT -p tcp &#8211;dport 22 -j DROP</p>
</div>
<p>Testando:</p>
<p>A forma mais fácil que eu acho para testar é utilizando o telnet. Por ex.:</p>
<p><strong>$ telnet IP_SERVIDOR 100<br />
$ telnet IP_SERVIDOR 200<br />
$ telnet IP_SERVIDOR 300<br />
$ telnet IP_SERVIDOR 400</strong></p>
<p>e agora é só entrar com ssh normalmente.</p>
<p>Por: Leandro Lanini<br />
Fonte: http://www.vivaolinux.com.br</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2011/11/15/port-knocking-para-ssh-rapido-e-facil-com-iptables/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adicionando rotas estáticas permanentes</title>
		<link>http://blog.deserv.info/2011/06/13/adicionando-rotas-estaticas-permanentes/</link>
		<comments>http://blog.deserv.info/2011/06/13/adicionando-rotas-estaticas-permanentes/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 14:00:02 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Infra-Estrutura]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[rede]]></category>
		<category><![CDATA[rotas]]></category>
		<category><![CDATA[route]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=558</guid>
		<description><![CDATA[Roteadores ou equipamentos que interligam duas ou mais redes são chamados de Gateways. A necessidade de configurarmos rotas estáticas surge à medida que possuímos mais de um gateway na rede, sendo assim, configuramos as máquinas da rede 1, por exemplo, de forma que: quando quiser acessar a rede 2 saia pelo gateway A e quando [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2011%252F06%252F13%252Fadicionando-rotas-estaticas-permanentes%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fj1wMZV%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Adicionando%20rotas%20est%C3%A1ticas%20permanentes%22%20%7D);"></div>
<p>Roteadores ou equipamentos que interligam duas ou mais redes são chamados de Gateways. A necessidade de configurarmos rotas estáticas surge à medida que possuímos mais de um gateway na rede, sendo assim, configuramos as máquinas da rede 1, por exemplo, de forma que: quando quiser <a rel="nofollow" href="http://www.dicas-l.com.br/arquivo/adicionando_rotas_estaticas_permanentes.php#">acessar</a> a rede 2 saia pelo gateway A e quando for acessar as redes 3,4,5&#8230; saia pelo gateway B. <span id="more-558"></span></p>
<p>Traduzindo isso para o TCP/IP ficaria:</p>
<blockquote><p>Suponha que</p>
<pre>  rede 1 = 192.168.1.0 / 255.255.255.0
  rede 2 = 192.168.0.0 / 255.255.0.0
  rede 3 = 10.100.1.0 / 255.255.255.0
  rede 4 = 10.100.2.0 / 255.255.255.0
  rede 5 = 10.100.3.0 / 255.255.255.0
  ....
  ubuntu#&gt; route add -net 192.168.0.0/16 gw 192.168.10.1
  ubuntu#&gt; route add -net 10.100.0.0/16 gw 192.168.10.10
</pre>
</blockquote>
<p>Com isso a tabela de roteamento da máquina que estamos configurando ficaria assim:</p>
<blockquote>
<pre>  ubuntu#&gt; route
  Tabela de Roteamento IP do Kernel
  Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
  192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
  192.168.0.0     192.168.10.1    255.255.0.0     UG    0      0        0 eth0
  10.100.0.0      192.168.10.10   255.255.0.0     UG    0      0        0 eth0
</pre>
</blockquote>
<p>Note que a primeira linha foi adicionada automaticamente quando configuramos o endereço IP da própria máquina.</p>
<p>Uma maneira de melhorarmos isso é <a rel="nofollow" href="http://www.dicas-l.com.br/arquivo/adicionando_rotas_estaticas_permanentes.php#">trabalhando</a> com default gateway, ou seja, ao adicionarmos um gateway default, ele será adicionado na última linha da tabela de roteamento, de forma que todo IP com destino a uma rede que não se encaixa nas definições iniciais da tabela de roteamento serão mandadas para o default gateway (que por isso está na última linha).</p>
<p>Mas o escopo dessa <a rel="nofollow" href="http://www.dicas-l.com.br/arquivo/adicionando_rotas_estaticas_permanentes.php#">dica</a> é como transformar as rotas estáticas, que até aqui foram adicionadas manualmente, em configurações adicionadas automaticamente sempre que ligamos a máquina.</p>
<p>Já vi várias formas de adicionarmos estas rotas, desde comandos adicionados no script de inicialização do usuário, o /etc/init.d/rc.local até scripts executados ao iniciar o ambiente gráfico (arghhhh!!!), porém o mais adequado é utilizarmos os recursos que o <a rel="nofollow" href="http://www.dicas-l.com.br/arquivo/adicionando_rotas_estaticas_permanentes.php#">sistema</a> oferece para isso que são:</p>
<p>No Ubuntu (debian em geral): basta adicionarmos no arquivo <code>/etc/network/interfaces</code> as seguintes linhas:</p>
<blockquote>
<pre>  post-up route add -net 192.168.0.0/16 gw 192.168.10.1
  post-up route add -net 10.100.0.0/16 gw 192.168.10.10
</pre>
</blockquote>
<p>Já em sistemas como o RedHat devemos criar o arquivo <code>/etc/sysconfig/network-scripts/route-eth0</code> contendo:</p>
<blockquote>
<pre>  GATEWAY0=192.168.10.1
  NETMASK0=255.255.0.0
  ADDRESS0=192.168.0.0

  GATEWAY1=10.100.0.0
  NETMASK1=255.255.0.0
  ADDRESS1=192.168.10.10
</pre>
</blockquote>
<p>Sendo assim toda vez que o serviço de rede subir estas rotas estáticas serão adicionadas automaticamente na tabela de roteamento de sua máquina.</p>
<p>&nbsp;</p>
<p>Fonte: http://www.dicas-l.com.br</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2011/06/13/adicionando-rotas-estaticas-permanentes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3. Mais por vir</title>
		<link>http://blog.deserv.info/2011/03/15/3-mais-por-vir/</link>
		<comments>http://blog.deserv.info/2011/03/15/3-mais-por-vir/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 00:39:01 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Guia de Administração do Sistema]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Red Hat Enterprise Linux]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[Software Livre]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=535</guid>
		<description><![CDATA[O Guia de Administração do Sistema do Red Hat Enterprise Linux é parte do compromisso crescente da Red Hat em oferecer suporte útil e oportuno para usuários do Red Hat Enterprise Linux. De acordo com o lançamento de novas ferramentas e aplicações, este manual será expandido para incluí-las. 3.1. Envie-nos Seu Retorno Se você encontrar [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2011%252F03%252F15%252F3-mais-por-vir%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%223.%20Mais%20por%20vir%22%20%7D);"></div>
<p>O <em>Guia de  Administração do Sistema do Red Hat Enterprise Linux</em> é parte do  compromisso crescente da Red Hat em oferecer suporte útil e oportuno  para usuários do Red Hat Enterprise Linux. De acordo com o lançamento de  novas ferramentas e aplicações, este manual será expandido para  incluí-las. <span id="more-535"></span></p>
<div>
<h2><a name="S2-INTRO-FEEDBACK"></a>3.1. Envie-nos Seu Retorno</h2>
<p>Se você  encontrar um erro de digitação no <em>Guia de  Administração do Sistema do Red Hat Enterprise Linux</em> ou se pensar  numa maneira de melhorar este manual, nos adoraríamos saber! Por favor  submeta um relatório no Bugzilla (<a href="http://bugzilla.redhat.com/bugzilla/" target="_top">http://bugzilla.redhat.com/bugzilla/</a>)  sobre o componente <tt>rhel-sag</tt>.</p>
<p>Certifique-se de mencionar o identificador deste manual:</p>
<table width="100%" bgcolor="#dcdcdc">
<tbody>
<tr>
<td>
<pre>rhel-sag(PT_BR)-3-HTML-RHI (2003-07-25T17:10)</pre>
</td>
</tr>
</tbody>
</table>
<p>Ao fazê-lo, nós saberemos exatamente qual versão do guia você possui.</p>
<p>Se você tem alguma sugestão para melhorar a documentação, tente ser o  mais específico possível. Se encontrou um erro, por favor inclua o  número da seção e alguns trechos do texto próximo ao erro para que  possamos encontrá-lo facilmente.</p>
</div>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2011/03/15/3-mais-por-vir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integração Apache =&gt; Tomcat</title>
		<link>http://blog.deserv.info/2010/08/12/integracao-apache-tomcat/</link>
		<comments>http://blog.deserv.info/2010/08/12/integracao-apache-tomcat/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 20:45:02 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Instalação e Compilação de SW]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[TomCat]]></category>
		<category><![CDATA[Apache2]]></category>
		<category><![CDATA[JRE]]></category>
		<category><![CDATA[Mod_jk]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=415</guid>
		<description><![CDATA[Integrando o Apache com o TOMCAT para que as páginas estáticas sejam executadas pelo Apache e as em JSP pelo contêiner TOMCAT, além do direcionamento das aplicações via APACHE, sendo o WebServer de acesso para as aplicações que estão no TOMCAT. Conceito Integração APACHE/TOMCAT vou dividir em duas partes e abordar a primeira delas aqui. [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F08%252F12%252Fintegracao-apache-tomcat%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9TKIJU%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Integra%C3%A7%C3%A3o%20Apache%20%3D%3E%20Tomcat%22%20%7D);"></div>
<p>Integrando o Apache com o TOMCAT para que as páginas estáticas sejam  executadas pelo Apache e as em JSP pelo contêiner TOMCAT, além do  direcionamento das aplicações via APACHE, sendo o WebServer de acesso  para as aplicações que estão no TOMCAT. <span id="more-415"></span></p>
<div>
<h1>Conceito</h1>
<div>
<p>Integração <em>APACHE</em>/<em>TOMCAT</em> vou dividir em duas partes e  abordar a primeira delas aqui. São elas a integração com apenas  &#8220;simples&#8221;, a qual as páginas ESTÁTICAS serão executadas pelo APACHE  (ganho de performance) e as páginas dinâmicas (JSP) executadas pelo  contêiner TOMCAT.</p>
<p>Além dessa funcionalidade, nessa primeira integração conseguimos  &#8220;esconder&#8221; as portas do TOMCAT, já que sua aplicação será chamada por  uma URL na porta 80 e o APACHE sim, irá pegar sua aplicação no TOMCAT e  mostrar ela.</p>
<p>Temos também a segunda integração do APACHE/TOMCAT, que consiste nas  vantagens da primeira acrescidas da possibilidade de se realizar  LOADBALANCER entre dois TOMCATs usando o APACHE como o WebServer que irá  gerenciar essa carga e dividirá ela, porém esse assunto não será  abortado aqui.</p>
<h1>Pré-requisitos</h1>
<p>Iremos instalar os seguintes serviços em um servidor LINUX/UNIX:</p>
<ul>
<li> OPENSSL</li>
<li> APACHE</li>
<li> TOMCAT</li>
<li> TOMCAT CONECTOR(MOD_JK)</li>
<li> JDK+JRE(JAVA)</li>
</ul>
</div>
<div>
<h1>Instalando OpenSSL, Apache, Tomcat e Java</h1>
<h1>OpenSSL</h1>
<p>Baixar última versão do SOURCE em <a href="http://www.openssl.org/">www.openssl.org</a>.</p>
<p>Consideremos que estamos usando a versão 0.98e do OPENSSL, que está em  um diretório de instalação de nosso servidor, vamos descompactar e  instalar o mesmo:</p>
<p><strong># tar -xvf openssl-0.9.8e.tar.tar<br />
# cd openssl-0.9.8e<br />
# ./configure &#8211;prefix=/usr/local/ssl<br />
# make<br />
# make install</strong></p>
<h1>Apache</h1>
<p>Baixar o último SOURCE em  <a href="http://www.apache.org/">www.apache.org</a>.</p>
<p>Consideremos que estamos usando a versão 2.2.6 do APACHE, que está em um  diretório de instalação de nosso servidor, vamos descompactar e  instalar o mesmo:</p>
<p><strong># tar -xvf httpd-2.2.6.tar.gz<br />
# cd httpd-2.2.6<br />
# ./configure &#8211;prefix=/usr/local/apache2 &#8211;enable-ssl=/usr/local/ssl<br />
# make<br />
# make install<br />
# /usr/local/apache2/bin/apachectl start</strong></p>
<p>Pronto, o Apache está instalado com suporte a SSL no diretório padrão que definimos: /usr/local/apache2.</p>
<h1>Tomcat e Java</h1>
<p>Baixar o último SOURCE em <a href="http://tomcat.apache.org/">tomcat.apache.org/</a>.</p>
<p>Consideremos que estamos usando a versão 6.0.14 do TOMCAT, que está em  um diretório de instalação que iremos usar ele, pois o TOMCAT só  precisamos descompactar e não compilar, como os demais.</p>
<p>Usei como padrão o diretório /usr/local para instalação do TOMCAT, por  convenção, deixo o nome do diretório com a versão e crio um LINK para  ele com o nome &#8220;apache-tomcat&#8221;, o que me permite mudar de versão sem ter  que alterar demais arquivos de configurações do mesmo ou de terceiros.</p>
<p><strong># cd /usr/local<br />
# tar -xvf apache-tomcat-6.0.14.tar.gz<br />
#  ln -s apache-tomcat apache-tomcat-6.0.14/<br />
# vi /etc/profile</strong></p>
<p>Adicionar as seguintes linhas no final do arquivo:</p>
<div>
<p><span style="color: #004080;">#Tomcat</span></p>
<p>CATALINA_HOME=/usr/local/apache-tomcat<br />
TOMCAT_HOME=/usr/local/apache-tomcat<br />
export CATALINA_HOME TOMCAT_HOME CLASSPATH</p>
</div>
<p>Agora iremos instalar o JAVA, baixe a última versão do BIN JDK no site  da SUN e coloque do diretório que iremos instalar ele, no caso  /usr/local. Como ele será instalado com o &#8220;nome-versão&#8221;, também iremos  criar um LINK com o nome JAVA apontando para ele, o que também nos  permite trocar de versão sem maiores problemas.</p>
<p><strong># chmod +x jdk-1_5_0_12-linux-i586.bin<br />
# ./ jdk-1_5_0_12-linux-i586.bin </strong><br />
(seguir orientações da instalação &#8211; padrão, só YES e ENTER)</p>
<p><strong># ln -s java jdk1.5.0_12/<br />
# vi /etc/profile</strong></p>
<p>Adicionar as seguintes linhas no final do arquivo:</p>
<div>
<p><span style="color: #004080;">#Java</span></p>
<p>JAVA_HOME=&#8221;/usr/local/java&#8221;<br />
JRE_HOME=&#8221;/usr/local/java/jre&#8221;<br />
CLASSPATH=&#8221;$JAVA_HOME:$JAVA_HOME/lib:$JRE_HOME/lib:.&#8221;<br />
MANPATH=&#8221;$MANPATH:$JAVA_HOME/man&#8221;<br />
JAVA_DOC=&#8221;$JAVA_HOME/docs&#8221;<br />
PATH=&#8221;$PATH:$JAVA_HOME/bin:$JRE_HOME/bin&#8221;<br />
export JAVA_HOME JRE_HOME CLASSPATH MANPATH JAVA_DOC PATH</p>
</div>
<p><strong># /usr/local/apache-tomcat/bin/catalina.sh start</strong></p>
<p>Pronto, o TOMCAT foi instalado configurado e iniciado juntamente com o suporte ao JAVA.</p>
</div>
<div>
<h1>Tomcat conector &#8211; MOD_JK</h1>
<p>Consideremos que estamos usando a versão 1.2.25 do Tomcat-Conector, que  está em um diretório de instalação de nosso servidor, vamos descompactar  e instalar o mesmo:</p>
<p><strong># tar -xvf  tomcat-connectors-1.2.25-src.tar.gz<br />
# cd  tomcat-connectors-1.2.25-src<br />
# cd native/<br />
# ./configure  &#8211;with-apxs=/usr/local/apache2/bin/apxs<br />
# make<br />
# make install<br />
# vi /usr/local/apache2/conf/httpd.conf</strong></p>
<p>Acrescentar a linha abaixo:</p>
<div>LoadModule jk_module modules/mod_jk.so</div>
<p><strong># /usr/local/apache2/bin/apachectl restart</strong></p>
<p>Pronto, o MOD_JK foi instalado e configurado para que o APACHE o  carregue em sua inicialização. O MOD_JK será o responsável pela  comunicação entre o APACHE e o TOMCAT via o protocolo EJB3 do TOMCAT.</p>
<p>Pronto, agora iremos configurar um linha em nosso TOMCAT e dois arquivos  de configurações que iremos criar no CONF do APACHE e nossa integração  ficou pronta.</p>
</div>
<div>
<h1>Configuração no TOMCAT</h1>
<p>Iremos mudar apenas o arquivo <em>server.xml</em> dentro de  /usr/local/apache-tomcat/conf/. Iremos definir um NOME para o TOMCAT,  esse nome será buscado pelo MOD_JK e servirá para passadas de  parâmetros.</p>
<p><strong># vi /usr/local/apache-tomcat/conf/server.xml</strong></p>
<p>Procurar por:</p>
<p>&lt;!&#8211; You should set jvmRoute to support load-balancing via AJP ie :<br />
&lt;Engine name=&#8221;Standalone&#8221; defaultHost=&#8221;localhost&#8221; jvmRoute=&#8221;jvm1&#8243;&gt;<br />
&#8211;&gt;<br />
&lt;Engine name=&#8221;Catalina&#8221; defaultHost=&#8221;localhost&#8221;&gt;</p>
<p>Iremos adicionar a propriedade &#8220;jvmRoute=&#8221;tomcat1&#8243;&#8221; e ficará assim:</p>
<div>&lt;!&#8211; You should set jvmRoute to support load-balancing via AJP ie :<br />
&lt;Engine name=&#8221;Standalone&#8221; defaultHost=&#8221;localhost&#8221; jvmRoute=&#8221;jvm1&#8243;&gt;<br />
&#8211;&gt;<br />
&lt;Engine  <strong>jvmRoute=&#8221;tomcat1&#8243;</strong> name=&#8221;Catalina&#8221; defaultHost=&#8221;localhost&#8221;&gt;</div>
<p>Reiniciar o TOMCAT:</p>
<p><strong># /usr/local/apache-tomcat/bin/catalina.sh</strong></p>
</div>
<div>
<h1>Configuração no Apache</h1>
<p>Vamos criar dois arquivos, um para configurarmos a comunicação com o  TOMCAT e outro para configurações básicas do MOD_JK e definição de quais  serão os &#8220;CONTEX&#8221; do TOMCAT que serão executados pelo APACHE.</p>
<p>Arquivo <em>workers.properties</em>:</p>
<p><strong># vi workers.properties</strong></p>
<p>Adicionar o seguinte conteúdo ao arquivo criado:</p>
<div><span style="color: #004080;">#</span><br />
<span style="color: #004080;"># workers.properties</span><br />
<span style="color: #004080;">#</span></p>
<p><span style="color: #004080;"># In Unix, we use forward slashes:</span><br />
ps=/</p>
<p><span style="color: #004080;"># list the workers by name</span></p>
<p>worker.list=tomcat1(nome configurado no arquivo server.xml do TOMCAT)</p>
<p><span style="color: #004080;"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span><br />
<span style="color: #004080;"># First tomcat server</span><br />
<span style="color: #004080;"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span><br />
worker.tomcat1.type=ajp13<br />
worker.tomcat1.host=localhost(nome do servidor onde temos o tomcat)<br />
worker.tomcat1.port=8009<br />
worker.tomcat1.lbfactor=50<br />
worker.tomcat1.cachesize=10<br />
worker.tomcat1.cache_timeout=500<br />
worker.tomcat1.socket_keepalive=1<br />
worker.tomcat1.socket_timeout=300</p>
<p><span style="color: #004080;"># Specify the size of the open connection cache.</span><br />
<span style="color: #004080;">#worker.tomcat1.cachesize</span></p>
<p><span style="color: #004080;">#</span><br />
<span style="color: #004080;"># Specifies the load balance factor when used with</span><br />
<span style="color: #004080;"># a load balancing worker.</span><br />
<span style="color: #004080;"># Note:</span><br />
<span style="color: #004080;">#  &#8212;-&gt; lbfactor must be &gt; 0</span><br />
<span style="color: #004080;">#  &#8212;-&gt; Low lbfactor means less work done by the worker.</span><br />
worker.tomcat1.lbfactor=100 //Definindo que toda a carga será usada apenas para um TOMCAT, é o nosso caso.</p>
<p><span style="color: #004080;">#</span><br />
<span style="color: #004080;"># END workers.properties</span></p>
</div>
<p>É um arquivo bem simples onde definimos o &#8220;nome&#8221; do TOMCAT para  integração via MOD_JK, &#8220;worker.list=tomcat1&#8243; e demais parâmetros para  configuração de conexão, onde devemos alterar de acordo com nosso  ambiente.</p>
<p>Arquivo <em>tomcat.conf</em>:</p>
<p>Adicionar o seguinte conteúdo ao arquivo criado:</p>
<div>
<p>JkWorkersFile /usr/local/apache2/conf/workers.properties</p>
<p>JkLogFile /usr/local/apache2/logs/mod_jk.log</p>
<p>JkLogLevel info</p>
<p>JkLogStampFormat &#8220;[%a %b %d %H:%M:%S %Y] &#8221;</p>
<p>JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories</p>
<p>JkRequestLogFormat &#8220;%w %V %T&#8221;</p>
<p>JkMount /examples/servlet/* tomcat1<br />
JkMount /examples/* tomcat1<br />
JkMount /examples/jsp/* tomcat1<br />
JkMount /*.jsp tomcat1<br />
JkMount /aplicacao1/* tomcat1</p>
</div>
<p>O que destaco são apenas as linhas com &#8220;JKMount&#8221;, que é o diretório  (CONTEX ROOT) do TOMCAT, é o nome do DIR que você acessa sua aplicação.</p>
<p>Vamos adicionar nosso arquivo &#8220;tomcat.conf&#8221; no &#8220;httpd.conf&#8221; do Apache:</p>
<p><strong># vi /usr/local/apache2/conf/httpd.conf </strong></p>
<p>Adicionar a seguinte linha no arquivo:</p>
<div>Include conf/tomcat.conf</div>
<p>Vamos reiniciar o APACHE:</p>
<p><strong># /usr/local/apache2/bin/apachectl restart</strong></p>
<h1>Testando integração</h1>
<p>Agora ao invés de acessarmos o endereço do TOMCAT, Ex.:</p>
<p>http://localhost:8080/aplicacao1</p>
<p>Iremos acessar:</p>
<p>http://localhost/aplicacao1</p>
<p>Ele irá mostrar a aplicação que está no TOMCAT e aplicará suas melhorias.</p>
<p>Obs.: Para os diretórios que não estiverem no TOMCAT.CONF, ele irá procurar no DOCUMENT ROOT de nosso APACHE.</p>
</div>
<div><strong>Por:</strong> Bruno Lima Queiroz</div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/08/12/integracao-apache-tomcat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando o Slax</title>
		<link>http://blog.deserv.info/2010/08/04/instalando-o-slax/</link>
		<comments>http://blog.deserv.info/2010/08/04/instalando-o-slax/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 17:56:09 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Instalação]]></category>
		<category><![CDATA[Live-CD]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Slax]]></category>
		<category><![CDATA[Slax Live-CD]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=409</guid>
		<description><![CDATA[O Slax é um live-CD baseado no Slackware, uma boa forma de conhecer a distribuição sem precisar passar pela etapa inicial de configuração e configuração do sistema. O Slax roda diretamente a partir do CD-ROM e inclui um conjunto de scripts que automatizam a configuração do sistema, detectando o vídeo, som e outros periféricos. O [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F08%252F04%252Finstalando-o-slax%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Instalando%20o%20Slax%22%20%7D);"></div>
<div>O Slax é um live-CD baseado no Slackware, uma  boa forma de conhecer a distribuição sem precisar passar pela etapa inicial de configuração e configuração do sistema. O Slax roda diretamente a partir do CD-ROM e inclui um conjunto de scripts que automatizam a configuração do sistema, detectando o vídeo, som e outros periféricos. <span id="more-409"></span></div>
<p>O sistema de autodetecção do Slax não é tão desenvolvido quanto o de  distribuições como o Ubuntu, Knoppix ou Mandriva, mas ajuda bastante.</p>
<p>Você pode baixar a última versão no: <a href="http://slax.linux-live.org/">http://slax.linux-live.org/</a>.</p>
<p>Além do &#8220;Slax Standard Edition&#8221;, que é a versão principal, que abordo aqui, estão disponíveis algumas versões específicas, como o KillBill (que vem com o wine pré-instalado) e o PopCorn (uma versão reduzida, que pode ser instalado num pendrive de 128 MB).</p>
<p>O Slax configura o vídeo durante o boot, mas não abre o modo gráfico automaticamente. Na tela de login, você deve se logar como root, senha toor e rodar o comando &#8220;startx&#8221; para abrir o KDE. Você pode também usar a opção &#8220;slax gui&#8221; na tela de boot, para que ele abra o KDE automaticamente, como no Kurumin.</p>
<p>Embora seja raro, existem casos em que o sistema trava na hora do boot por causa de problemas com a detecção de algum periférico. Nestes casos, você pode experimentar as opções &#8220;slax noagp&#8221;, &#8220;slax nopcmcia&#8221;, &#8220;slax nodma&#8221; ou &#8220;slax acpi=off&#8221;.</p>
<p>Ao abrir o modo gráfico, você verá uma versão personalizada do KDE, com um visual simpático e um menu limpo, com poucos programas instalados por padrão. Devido à simplicidade, o tempo de boot também é perceptivelmente mais baixo.</p>
<p style="text-align: center;"><a href="http://blog.deserv.info/wp-content/uploads/2010/08/img-938c2356.png"><img class="size-full wp-image-411 aligncenter" title="img-938c2356" src="http://blog.deserv.info/wp-content/uploads/2010/08/img-938c2356.png" alt="" width="640" height="482" /></a></p>
<p>Para configurar o som, use o comando &#8220;alsaconf&#8221;, e para configurar a rede, use o &#8220;netconfig&#8221; (o mesmo script usado no Slackware). Se você acessa via ADSL com autenticação (PPPoE), use o comando &#8220;adsl-setup&#8221; para configurar a conexão e depois o &#8220;adsl-start&#8221; para conectar. Estes dois comandos podem ser encontrados também no Mandriva, Fedora e em outras distribuições derivadas do Red Hat.</p>
<p>{mospagebreak}</p>
<p>O Slax não inclui suporte a nenhum softmodem, mas se por acaso você utilizar um hardmodem, pode conectar usando o Kppp, como em outras distribuições.</p>
<p>O suporte a placas wireless também não conta com todos os drivers disponíveis mas ele já vem com o Ndiswrapper pré-instalado, que permite configurar muitas placas usando os drivers do Windows. Você pode ver dicas de como configurar sua placa usando o Ndiswrapper no Guia Modems e placas wireless no Linux: <a href="http://www.guiadohardware.net/guias/05/">http://www.guiadohardware.net/guias/05/</a></p>
<p>Em resumo, você primeiro carrega o arquivo .inf do driver do Windows XP, com o comando &#8220;ndiswrapper -i&#8221;, como em:</p>
<p><em># ndiswrapper -i neti2220.inf</em></p>
<p>&#8230; e, em seguida, ativa o Ndiswrapper usando o comando:</p>
<p><em># modprobe ndiswrapper</em></p>
<p>Com a placa ativa, você pode configurar os parâmetros da rede wireless e monitorar a conexão através do Kwifimanager, que está dentro do menu internet.</p>
<p>O Slax não oferece nenhuma opção de alterar o particionamento durante a instalação. Você precisa criar as partições previamente, usando o cfdisk e formatá-las através do comando &#8220;mkreiserfs&#8221;, como em &#8220;mkreiserfs /dev/hda2&#8243;. Outra opção, é particionar usando um CD do Kurumin, ou o CD de instalação do Mandriva e voltar ao Slax para instalar. Mesmo ao particionar a partir do próprio Slax, usando o cfdisk, é sempre necessário reiniciar, para que o instalador detecte as alterações.</p>
<p>O instalador está disponível no &#8220;Iniciar &gt; System &gt; Slax Installer&#8221;. Ele é provavelmente o instalador mais simples de todas as distribuições que já vi. Você precisa apenas indicar a partição onde o sistema será instalado e no MBR de qual drive o lilo será gravado (caso tenha mais de um). Não existe a opção de instalar o lilo na partição, caso você esteja instalando-o em dual boot com o Windows ou outra distribuição. Ele sempre se gravará na MBR e você precisará configurar o &#8220;/etc/lilo.conf&#8221; para que ele lhe dê a opção de inicializar os outros sistemas instalados.</p>
<p>{mospagebreak}</p>
<p>Existem duas formas de instalação. A opção &#8220;Live&#8221; simplesmente copia o conteúdo do CD para a partição, ocupando apenas 200 MB. Esta opção é mais uma opção para poder dar boot sem usar o CD-ROM do que uma instalação propriamente dita, algo similar a usar a opção &#8220;tohd&#8221; no Kurumin. A opção &#8220;Real&#8221; ocupa quase o triplo de espaço, pois nela os arquivos são realmente descompactados, criando uma instalação real do sistema, onde você pode instalar novos programas e fazer qualquer tipo de alteração.</p>
<p style="text-align: center;"><a href="http://blog.deserv.info/wp-content/uploads/2010/08/img-5220c6e6.png"><img class="aligncenter size-full wp-image-412" title="img-5220c6e6" src="http://blog.deserv.info/wp-content/uploads/2010/08/img-5220c6e6.png" alt="" width="537" height="528" /></a></p>
<p>Mesmo depois de instalado, o Slax continua usando o root como usuário padrão. Enquanto você estiver brincando e explorando o sistema isto é até interessante, pois permite que você mexa onde quiser, sem ser perturbado por problemas com as permissões. Se alguma coisa der errado, basta reinstalar e começar de novo.</p>
<p>Mas, a partir do momento em que você resolver navegar na web ou fazer qualquer trabalho mais sério, o uso do root torna-se um grave problema de segurança por dois motivos: como root você tem permissão para fazer tudo, então acaba sendo muito fácil destruir o sistema e, ao mesmo tempo, abrindo todos os programas como root, fica muito mais fácil explorar brechas de seguranças nos programas para obter acesso à sua máquina remotamente. Esta segunda possibilidade não é tão grande assim, mas vale a pena evitar.</p>
<p>{mospagebreak}</p>
<p>Você pode criar um novo usuário usando o comando adduser, como em:</p>
<p><em># adduser tux</em></p>
<p>São feitas muitas perguntas, que permitem incluir informações diversas no cadastro do usuário (que seriam úteis numa grande rede), mas, no caso de um humilde desktop, as únicas que realmente interessam são o nome em si (login) e a senha.</p>
<p>Depois de instalado, o Slax nada mais é do que uma versão customizada do Slackware. O que você aprender a fazer no Slax pode ser feito também no Slackware e vice-versa.</p>
<p>Um dos grandes atrativos do Slax é ser um sistema bem simples e limpo, com poucos programas instalados por padrão. Isto é uma faca de dois gumes, pois também significa que ao usar o sistema por mais tempo, você acabará precisando investir mais tempo baixando e instalando programas adicionais.</p>
<p>O Slax é compatível com os pacotes da versão correspondente do Slackware. O Slax 5.06, por exemplo, usa os pacotes do Slackware 10.2. Normalmente, a última versão do Slax usa os pacotes da última versão do Slackware.</p>
<p>Você pode instalar programas adicionais a partir dos CDs de instalação (do Slackware) ou ir baixando individualmente os programas desejados a partir de um dos mirrors listados no <a href="http://www.slackware.com/getslack/">http://www.slackware.com/getslack/</a>.</p>
<p>Para instalar o suporte a português do Brasil no KDE, por exemplo, baixe o pacote kde-i18n-pt_BR, que está disponível na pasta &#8220;slackware/kdei/&#8221; do CD ou mirror. Os pacotes do Slackware usam a extensão &#8220;.tgz&#8221;. Junto com cada pacote, existe sempre um arquivo &#8220;.txt&#8221;, com uma descrição curta e um arquivo &#8220;.asc&#8221;, usado pelo instalador para verificar a integridade do pacote principal.</p>
<p>Para instalar o pacote baixado, use o comando &#8220;installpkg&#8221;, seguido pelo nome do pacote, como em:</p>
<p><em># installpkg kde-i18n-pt_BR-3.4.2-noarch-1.tgz</em></p>
<p>Use a tecla TAB para completar o nome do arquivo depois de digitar as primeiras letras. O installpkg é uma ferramenta simples de instalação, que funciona de uma forma similar ao &#8220;dpkg -i&#8221; do Debian. Ele permite instalar pacotes que você já baixou, mas não é capaz de baixar os pacotes por si só, como o apt-get. O installpkg também não checa dependências ao instalar os pacotes: mesmo que exista algum problema, você só saberá depois de tentar abri-lo.</p>
<p>Esta forma simplificada de instalar programas é a principal característica do Slackware. A vantagem é que você literalmente pode fazer o que quiser, sem que ele te perturbe com mensagens de erro e dependências desencontradas. A desvantagem é que ele não faz nada sozinho; a única maneira de descobrir que o pacote x precisa do pacote y para funcionar é pesquisando.</p>
<p>Depois de instalado o pacote, acesse o Painel de Controle do KDE, Regional  &amp; Accessibility &gt; Contry, Region &amp; Language e, dentro dela marque a opção Add Language &gt; Brazil Portuguese. Clique no &#8220;Apply&#8221; e reinicie o KDE para que os aplicativos passem a usar nossa língua.</p>
<p>{mospagebreak}</p>
<p>Para instalar o Gimp, baixe o pacote &#8220;gimp&#8221;, que está na pasta &#8220;slackware/xap&#8221;; para instalar o Firefox, baixe o pacote &#8220;mozilla-firefox&#8221; que está na mesma pasta; e assim por diante. O Slax já vem com o plugin do Flash pré-instalado; experimente instalar também o Java e Real Player, seguindo as instruções do capítulo 5 depois de instalar o Firefox.</p>
<p>Para instalar o OpenOffice 2.0, baixe o pacote para o Slackware, disponível no: <a href="http://www.openoffice.org.br/">http://www.openoffice.org.br/</a> e instale-o usando o comando:</p>
<p><em># installpkg openoffice.org.br-2.0-i586-4.tgz</em></p>
<p>Depois de instalado, você pode completar a instalação do corretor ortográfico e usar as otimizações que vimos no capítulo 5.</p>
<p>O Slackware utiliza uma estrutura de scripts diferente da das outras distribuições. No Debian e na maioria das outras distribuições, você usaria o comando &#8220;/etc/init.d/ssh start&#8221; para inicializar o servidor SSH e permitir que sua máquina possa ser acessada a partir de outros micros da rede local. No Slackware, isso funciona de forma similar, mas os scripts mudam de lugar, vão na pasta &#8220;/etc/rc.d/&#8221;.</p>
<p>Para instalar o servidor SSH no Slax, por exemplo, instale o pacote &#8220;openssh-4.2p1-i486-1.tgz&#8221; que está dentro da pasta &#8220;slackware/n/&#8221; do CD ou mirror de instalação do Slackware. Ao instalar o pacote, será criado o arquivo &#8220;/etc/rc.d/rc.sshd&#8221;, o script que permite inicializá-lo. Para usá-lo, você precisa primeiro transformá-lo num executável, usando o comando:</p>
<p><em># chmod +x /etc/rc.d/rc.sshd</em></p>
<p>E, em seguida, inicializar o servidor SSH, usando o comando:</p>
<p><em># /etc/rc.d/rc.sshd</em></p>
<p>O fato de ser uma distribuição minimalista, com tamanho reduzido e rápida de instalar, faz com que o Slax seja uma forma muito prática de se familiarizar com o Slackware, já que você pode testar a instalação de vários programas, testar várias configurações e reinstalar o sistema rapidamente sempre que alguma coisa der errada.</p>
<p>Fonte: GuiadoHardware.net</p>
<p>Autor: <strong>Carlos  E. Morimoto</strong></p>
<p><strong><br />
</strong></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/08/04/instalando-o-slax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando um servidor Jabber (Jive) para comunicação Instatânea</title>
		<link>http://blog.deserv.info/2010/08/04/instalando-um-servidor-jabber-jive-para-comunicacao-instatanea/</link>
		<comments>http://blog.deserv.info/2010/08/04/instalando-um-servidor-jabber-jive-para-comunicacao-instatanea/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 13:50:36 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Softwares Adicionais]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Comunicação Instantânea]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Jabber]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JRE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=407</guid>
		<description><![CDATA[Neste tutorial eu irei ensinar como instalar um servidor de comunicação instatânea baseada no protocolo Jabber utilizando o mysql para autenticação, para ser usado dentro de empresas, grupos e etc.

A instalação é bem simples e se for bem seguida, você não terá problemas.

Então deixemos de conversa e vamos logo ao que interessa.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F08%252F04%252Finstalando-um-servidor-jabber-jive-para-comunicacao-instatanea%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Instalando%20um%20servidor%20Jabber%20%28Jive%29%20para%20comunica%C3%A7%C3%A3o%20Instat%C3%A2nea%22%20%7D);"></div>
<h2>Introdução</h2>
<p>Neste tutorial eu irei ensinar como instalar um servidor de comunicação  instatânea baseada no protocolo Jabber utilizando o mysql para  autenticação, para ser usado dentro de empresas, grupos e etc.</p>
<p>A instalação é bem simples e se for bem seguida, você não terá  problemas.</p>
<p>Então deixemos de conversa e vamos logo ao que interessa.<span id="more-407"></span></p>
<p><a id="Sistema_Operacional_Utilizado" name="Sistema_Operacional_Utilizado"></a></p>
<h2>Sistema  Operacional Utilizado</h2>
<ul>
<li>Debian Linux Versão 3.1</li>
</ul>
<p><a id="Softwares_necess.C3.A1rios" name="Softwares_necess.C3.A1rios"></a></p>
<h2>Softwares necessários</h2>
<ul>
<li>Jive Messenger versão 2.1.5 ou superior.</li>
<li>Mysql 3.4 ou superior. Recomendado usar &gt;= 4.1</li>
<li>JRE 1.5 ou superior para linux. Pode ser adquirido no site da  sun.</li>
</ul>
<p><a id="Instala.C3.A7.C3.A3o_e_Configura.C3.A7.C3.A3o" name="Instala.C3.A7.C3.A3o_e_Configura.C3.A7.C3.A3o"></a></p>
<h2>Instalação e Configuração</h2>
<p><a id="Mysql" name="Mysql"></a></p>
<h3>Mysql</h3>
<p>Usando o apt-get ou através de mecanismos da sua distro faça o download e  instalação do mysql. (Não irei ensinar a configurar e instalar o mysql,  para isso existem vários tutoriais na net).</p>
<p><a id="Crie_um_database_chamado_jabber." name="Crie_um_database_chamado_jabber."></a></p>
<h4>Crie  um database chamado jabber.</h4>
<p>Crie uma conta de usuário no mysql ou use a conta do root. Recomendado  não usar o root. Esse usuário deverá ter permissões para se conectar de  qualquer lugar, ou seja, &#8220;%&#8221;.</p>
<p>O motivo: durante a configuração do jabber o mesmo ira acusar erros caso  o usuário que você especificar não estiver conforme eu descrevi.</p>
<p>Você pode tentar limitar o acesso desse usuário permitindo logon somente  local após a instalação. Comigo não funcionou.</p>
<p><a id="JRE_1.5" name="JRE_1.5"></a></p>
<h3>JRE  1.5</h3>
<p>No site da Sun<a title="http://www.sun.com" rel="nofollow" href="http://www.sun.com/">[1]</a>, baixe o  arquivo .BIN do JRE-1.5 no diretório /usr/local. Aqui utilizei a  jre-1_5_0_04-linux-i586.bin</p>
<p>Deixe o arquivo ser executavel.</p>
<pre># chmod +x jre-1_5_0_04-linux-i586.bin
</pre>
<p>Execute o arquivo digitando:</p>
<pre># ./jre-1_5_0_04-linux-i586.bin
</pre>
<p>Após concordar com os termos de licença, irá surgir uma pasta chamada  jre1.5.0_04 no diretório corrente.</p>
<p><a id="Servidor_Jabber" name="Servidor_Jabber"></a></p>
<h3>Servidor Jabber</h3>
<p>Nesta instalação vamos usar o Jive versão 2.1.5.</p>
<p>Faça o download do jive no site <a title="http://www.jivemessenger.com" rel="nofollow" href="http://www.jivemessenger.com/">http://www.jivemessenger.com</a></p>
<p>Descompacte-o arquivo no diretório /usr/local</p>
<pre># tar -zxvf jive_messenger_2_1_5.tar.gz
</pre>
<p>Feito isso é hora de criar uma variavel de ambiente utilizada pelo jive  para identificar a localização da máquina virtual java.</p>
<pre># export INSTALL4J_JAVA_HOME=/usr/local/jre1.5.0_04/
</pre>
<p>Chegada a hora de iniciarmos o servidor. Digite:</p>
<pre># /usr/local/jive_messenger/bin/messenger start
</pre>
<p>Se tudo estiver correto o servidor estará funcional.</p>
<p>Abra um browser qualquer e aponte para o ip do servidor na porta 9090</p>
<p>Se tudo der certo você estará na área administrativa começando a  configurar o servidor.</p>
<p>Preencha os campos que o sistema requer e vá avançando.</p>
<p>Após concluir a configuração, você deve alterar as permissões do usuário  mysql que o jive usa, limitando elas.</p>
<p>A configuração do Jive é muito fácil e lembra os wizards do windows.</p>
<p>Após completar a configuração do servidor, é chegada a hora de baixar o  client e testar. Recomendo o uso do Pandion e NeosMt (Meu preferido).</p>
<p>Instale o client do NeosMt<a title="http://www.neosmt.com/eng/index.php" rel="nofollow" href="http://www.neosmt.com/eng/index.php">[2]</a></p>
<p>Vá em criar nova conta. E onde ele pedir o servidor, você deverá colocar  ip ou nome do servidor em que foi feita a instalação.</p>
<p>Criado a conta agora é só logar com o usuário@servidor e senha.</p>
<p><a id="Conclus.C3.A3o" name="Conclus.C3.A3o"></a></p>
<h2>Conclusão</h2>
<p>Pronto temos um servidor Jabber de comunicação Instantânea.</p>
<p>Até mais e abraços.</p>
<p><a id="Autor" name="Autor"></a></p>
<h2>Autor</h2>
<ul>
<li><strong><a title="Usuário:Iceman" href="http://under-linux.org/wiki/Usu%C3%A1rio:Iceman">&#8217;1c3_m4n</a></strong> (iceman@underlinux.com.br)</li>
</ul>
<p>Fonte: http://under-linux.org</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/08/04/instalando-um-servidor-jabber-jive-para-comunicacao-instatanea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando Apache para Performance Maxima</title>
		<link>http://blog.deserv.info/2010/05/25/configurando-apache-para-performance-maxima/</link>
		<comments>http://blog.deserv.info/2010/05/25/configurando-apache-para-performance-maxima/#comments</comments>
		<pubDate>Tue, 25 May 2010 03:44:09 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Configurando]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[NetCraft]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Perfomance]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=389</guid>
		<description><![CDATA[Introdução Apache é a implementação open source de um servidor HTTP. Ele é o webserver mais popular na Internet. Uma pesquisa realizada em 2005 pela NetCraft mostra que cerca de 70% dos sites na Internet rodam sobre o Apache. Opções de Configuração em tempo de Compilação Carrege apenas os módulos necessários O servidor Apache é [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F05%252F25%252Fconfigurando-apache-para-performance-maxima%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FbDGDjf%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Configurando%20Apache%20para%20Performance%20Maxima%22%20%7D);"></div>
<h2>Introdução</h2>
<p>Apache é a implementação open source de um servidor HTTP. Ele é o webserver mais popular na Internet. Uma pesquisa realizada em 2005 pela NetCraft mostra que cerca de 70% dos sites na Internet rodam sobre o Apache.</p>
<p><span id="more-389"></span><a id="Op.C3.A7.C3.B5es_de_Configura.C3.A7.C3.A3o_em_tempo_de_Compila.C3.A7.C3.A3o" name="Op.C3.A7.C3.B5es_de_Configura.C3.A7.C3.A3o_em_tempo_de_Compila.C3.A7.C3.A3o"></a></p>
<h2>Opções de Configuração em tempo de Compilação</h2>
<p><a id="Carrege_apenas_os_m.C3.B3dulos_necess.C3.A1rios" name="Carrege_apenas_os_m.C3.B3dulos_necess.C3.A1rios"></a></p>
<h3>Carrege apenas os módulos necessários</h3>
<p>O servidor Apache é um programa modular onde o administrador pode escolher entre as funcinalidade que deseja incluir no servidor selecionando um pacote de módukis. Os módulos podem ser compilados estaticamente no binário httpd ou dinamicamente como DSOs(Dynamic Shared Objects). Módulos DSO podem ser compilados quando o servidor for compilado ou poem ser compilados utilizando o apxs para adicioná-los mais tarde. O modulo mod_so deve ser compilado estaticamente no Apache para que o suporte a DSO seja ativo.</p>
<p>Execute o apache apenas com os módulos necessários. Isto reduz o consumo de memória aumenta a performance do servidor. Compilar os módulos estaticamente irá reduzir o consumo de RAM que é utilizado para suportar módulos compilados dinamicamente, mas será necessário recompilar o apache toda vez que um módulo for adicionado ou removido. È aqui que o DSO se torna útil. Uma vez que o modulo mod_so seja compilado estaticamente, qualquer outro módulo pode ser inserido ou removido utilizando o comando LoadModule no arquivo httpd.conf &#8211; , mas você terá que compilar os módulos utilizando apxs se ele não foi compilado quando o servidor foi feito.</p>
<p><a id="Escolha_o_MPM_apropriado" name="Escolha_o_MPM_apropriado"></a></p>
<h3>Escolha o MPM apropriado</h3>
<p>O apache vem com uma selação de Módulos Multi-Processadores (MPMs) que são responsáveis por abrir as portas de rede na máquina, aceitando requisições, e despachando processos para cuidar das requisições. Apenas um MPM pode ser carregado por vez.</p>
<p>Escolher o MPM depende de vários fatores, por exemplo se o SO suporta threads, quanta memória está disponível, escalabilidade versus estabilidade, modulos externos,etc .. Sistemas Linux podem escolher entr utilizar um MPM com suporte (worker) a threads ou um prefork sem threads:</p>
<p>O MPM Worker utiliza múltiplos processos. Ele é multi-threaded com cada processo e cada thread cuidando de uma única conexão. Esté é mais rápido e mais escalável e a memória consumida e relativamente baixa. Funciona bem com múltiplos processadores. Porém, o worker é menos tolerante a módulos defeituosos, e threads defeituosas podem afetar todas as outras threads de um processo.</p>
<p>O MPM Prefork utiliza múltiplos processos filhos, cada filho cuidad de apenas uma conexão por vez. Prefork é muito bem gerenciada por processadores simples ou múlitplos, a velocidade é comparável ao worker e é mais tolerante a falhas em modulos e processos que terminam inesperadamente. Mas o consumo de memória é alto, mais tráfego leva a mais consumo de memória.</p>
<p><a id="Op.C3.A7.C3.B5es_de_Configura.C3.A7.C3.A3o_em_Tempo_de_Execu.C3.A7.C3.A3o" name="Op.C3.A7.C3.B5es_de_Configura.C3.A7.C3.A3o_em_Tempo_de_Execu.C3.A7.C3.A3o"></a></p>
<h2>Opções de Configuração em Tempo de Execução</h2>
<p><a id="DNS_lookup" name="DNS_lookup"></a></p>
<h3>DNS lookup</h3>
<p>A diretiva HostnameLookips habilita a consulta de DNS, então os hostnames podem ser logados ao invés de endereços IP. Isto adiciona latência em cada requisição desde que a consulta do DNS tem que ser completada antes que a requisição seja terminada. Esta opção é desabilitada por padrão no Apache 1.3 e superiores. Deixe isto inativo e utilize programas pós-processamento como o logresolve para determinar os IPs dos logs. Logresolve vem com Apache.</p>
<p>Quando utilizar as diretivas Allow from ou Deny from, utilize endereços IP ao invés de nomes de domínios. Caso contrário uma consulta dupla ao DNS será executada para ter certeza de que o domínio ou host não está sendo spoofado.</p>
<p><a id="AllowOverride" name="AllowOverride"></a></p>
<h3>AllowOverride</h3>
<p>Se o AllowOverride está setado para &#8216;None&#8217;, então o Apache irá tentar abrir o arquivo .htaccess (especificada pela diretiva AccessFileName) em cada diretório que for acessado. Por exemplo:</p>
<pre>DocumentRoot /var/www/html
&lt;Directory /&gt;
AllowOverride all
&lt;/Directory&gt;

Se uma requisição for feita para acessar /index.html, o Apache irá tentar abrir /.htaccess, /var/.htaccess, /var/www/.htaccess, and /var/www/html/.htaccess. Estas tentativas aumentam a latência. Se o arquivo .htaccess for necessário para um diretório, habilite apenas para este diretório.
<a id="FollowSymLinks_e_SymLinksIfOwnerMatch" name="FollowSymLinks_e_SymLinksIfOwnerMatch"></a>
<h3> FollowSymLinks e SymLinksIfOwnerMatch</h3>

Se a opção FollowSymLinks estiver setada, então o servidor permitirá que links simbólicos possam ser seguidos neste diretório. Se a opção SymLinksIfOwnerMatch estiver setada, então o servidor permitirá acessar o link apenas se o destino dele bater com o dono do link.

Se a opção SymLinksIfOwnerMatch estiver setada, então o Apache terá que realizar consultas adicionais ao sistema para verificar se os donos coincidem. Chamadas adicionais também são necessárias quando a opção FollowSymLinks NÃO está setada. Por exemplo:
<pre>DocumentRoot /vaw/www/html
&lt;Directory /&gt;
Options SymLinksIfOwnerMatch
&lt;/Directory&gt;
Para uma requisição feita para /index.html, o Apache irá executar lstat() em /var, /var/www, /var/www/html, and /var/www/html/index.html. Estas requisições adicionais também irão aumentar a lantência. Os resultados do lstat não são cacheados, então as consultas irão ocorrer em cada requisição.

Para uma máxima performance, sete FollowSymLinks em cada lugar e nunca sete SymLinksIfOwnerMatch. Ou então, se SymLinksIfOwnerMatch for necessário para um diretório, sete ele para apenas este diretório.
<a id="Content_Negotiation" name="Content_Negotiation"></a>
<h3> Content Negotiation</h3>

Evite utilizar content negotiation para respostas mais rápidas. Se content negotiation é necessário para o site, utilize arquivos type-map ao invés da diretiva Options MultiViews. Com MultiViews, Apache precisa scanear o diretório em busca de arquivos, o que adiciona latência.
<a id="MaxClients" name="MaxClients"></a>
<h3> MaxClients</h3>

O MaxClients seta o número máximo de clientes simultâneos que pode ser suportada por cada servidor. Nenhum processo além do que está definido será aberto. Ele não deve conter um número muito baixo já que as requisições serão colacadas em fila, o que eventualmente irá dar time-out e os recursos do servidor continuarão não utilizados. Setar este valor muito alto irá causar o início de swap e o tempo de resposta irá cair drasticamente. O valor apropriado para MaxClientes pode ser calculado por: MaxClientes = Total RAM / Tamanho Máximo de Processos . O tamanho dos processos para arquivos estáticos é de mais ou menos 2-3MB. Para dinâmicos como PHP, deve ser por volta de 15MB. A coluna RSS de:
<pre># ps -ylC httpd --sort:rss
Mostra a memória física non-swapped utilizada pelos processos do Apache em kilo Bytes.

Se existem mais usuários concorrentes do que MaxClients, as requisições serão colocadas em fila até o número baseado na diretiva ListenBacklog. Aumente o ServerLimit para setar o MaxClients acima de 256.
<a id="MinSpareServers.2C_MaxSpareServers.2C_e_StartServers" name="MinSpareServers.2C_MaxSpareServers.2C_e_StartServers"></a>
<h3> MinSpareServers, MaxSpareServers, e StartServers</h3>

MaxSpareServers e MinSpareServers determina quantos processos filhos devem ser mantidos rodando. Se MinSpareServers for muito baixo e muitas requisições forem iniciadas, então o Apache terá que abrir processos adicionais para atender as requisições. Criar processos filhos é relativamente caro. Se o servidor estiver ocupado criando processos, ele não estará disponível para servir as requisições imediatamente. MaxSpareServers não deve ser muito alto, ele pode causar problemas de recursos desde que cada processo consome os recursos da máquina.

Sete MinSpareServers e MaxSpareServers para um valor com que o Apache não precise frequentemente abrir mais de 4 processos por segundo. (O Apache pode abrir o máximo de 32 processos por segundo). Quando mais de 4 processos por segundo forem abertos, uma mensagem será logada no ErrorLog.

A diretiva StartServers define o número de processos criados na inicialização do Apache. O Apache irá continuar abrir os processos até que alcance o número de MinSpareServers. Não afeta muito a performance já que o servidor não é reiniciado frequentemente. Se existem muitas requisições e o Apache é reiniciado frequentemente, sete este valor para um número alto.
<a id="MaxRequestsPerChild" name="MaxRequestsPerChild"></a>
<h3> MaxRequestsPerChild</h3>

A diretiva MaxRequestsPerChild definie o número de requisições que um processo do servidor irá gerenciar. Depois as requisições MaxRequestsPerChild irão morrer. É definido para 0 por padrão, o que significa que o processo não irá expirar nunca. É apropriado setar este valor para alguns milhares. Isto pode ajudar a previnir vazamento de memória desde que o processo morre depois de servir um número de requisições. Não sete este valor muito baixo, já que criar novos processos causa overhead.
<a id="KeepAlive_and_KeepAliveTimeout" name="KeepAlive_and_KeepAliveTimeout"></a>
<h3> KeepAlive and KeepAliveTimeout</h3>

A diretiva KeepAilve permite que múltiplas requisições possam ser enviadas pela mesma conexão TCP. Isto é útil para páginas com muitas imagens. Se o KeepAlive estiver Off, então para cada imagem, uma nova conexão TCP precisa ser aberta.

KeepAliveTimeout determinada quanto tempo deve esperar até a próxima requisição. Sete para um valor baixo, por volta de 2 a 5 segundos. Se for setado para um valor muito alto, os processos ficam amarrados esperando pelo cliente quando eles poderiam ser utilizados para servir novos clientes.
<a id="Compress.C3.A3o_HTTP_.26_Caching" name="Compress.C3.A3o_HTTP_.26_Caching"></a>
<h2> Compressão HTTP &amp; Caching</h2>

O servidor utiliza os métodos gzip ou deflate para as respostas payload antes que ele seja enviado para os clientes. Então o cliente descompacta o payload. Não existe necessidade de instalar softwares adicionais no lado do cliente desde que a maioria dos navegadores suporta isto. Utilizar compressão irá economizar banda e irá aumentar o tempo de resposta, estudos mostram que em média o ganho da compressão é de 75%. A compressão pode ser habilitada utilizando módulo mod_deflate. O Payload é compactado apenas se o navegador requisitar a compactação, ou então o conteúdo descompactado será enviado. Um navegador capaz de utilizar o conteúdo compactado envia o seguinte cabeçalho na requisição: "Accept-Encoding: gzip,deflate". Então o servidor irá enviar o payload compactado e o cabeçalho da reposta é "Content-Encoding: gzip"

O exemplo a seguir utiliza o telnet para verificar os cabeçalhos de requisição e de resposta:
<pre>bash-3.00$ telnet www.webperformance.org 80
Trying 24.60.234.27...
Connected to www.webperformance.org (24.60.234.27).
Escape character is '^]'.
HEAD / HTTP/1.1
Host: www.webperformance.org
Accept-Encoding: gzip,deflate

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 02:29:22 GMT
Server: Apache/2.0
X-Powered-By: PHP/5.1.1
Cache-Control: max-age=0
Expires: Sat, 31 Dec 2005 02:29:22 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Content-Type: text/html; charset=ISO-8859-1 

O module mod_cache pode ser utilizado no lado do servidor, está em produção estável na versão 2.2 do Apache.
<h2> Servidor separado para conteúdo estático e dinâmico</h2>

Processos do apache para conteúdo dinâmico consome cerca de 3-20MB de RAM. E cresce para acomodar o conteúdo e nunca diminui até que o processo termine. Digamos que um processo cresca até os 20MB para servir um conteúdo dinâmico. Depois de completar a requisição, ele está libre para servir outra requisição. Se vier uma requisição para uma imagem, então esses 20MB de processos está servindo um conteúdo estático que poderia ser executado por um processo de 1MB. A memória é utilizada ineficientemente.

Utilize uma pequena compilação do Apache (com o mínimo de módulos compilados estaticamente) como sendo o servidor front-end para servir conteúdos estáticos. As requisições para conteúdos dinâmicos serão encaminhadas para um apache robusto (compilado com todos os módulos necessários). Utilizar um servidor front-end leve tem a vantagem de que os conteúdos estáticos são enviados rapidamente sem o consumo alto de memória e apenas o conteúdo dinâmico é passado para o servidor robusto.

Encaminhamento de requisições pode ser implementado utilizando os módulos mod_proxy e mod_rewrite. Suponha que exista um servidor apache leve rodando na porta 80 e o robusto na porta 8088. Então a configuração a seguir pode ser utilizada no apache leve para encaminhar todas as requisições de conteúdo dinâmico para o servidor robusto.
<pre>ProxyPassReverse / http://%{HTTP_HOST}:8088/
RewriteEngine on
RewriteCond   %{REQUEST_URI} !.*\.(gif|png|jpg)$
RewriteRule ^/(.*) http://%{HTTP_HOST}:8088/$1 [P]
Todas as requisições, exceto as imagens serão encaminhadas para o apache robusto. As respostas são recebidas pelo servidor front-end que as encaminha para o cliente. Todas as respostas aparentam vir de um único servidor. <a id="Conclus.C3.A3o" name="Conclus.C3.A3o"></a>
<h2> Conclusão</h2>

Configurar o Apache para obter o máximo de performance pode ser traiçoeiro, não existem regras rápidas. Entenda as necessidades do servidor web e experimente com várias opções. Utiliza ferramentas como ab e httperf para medir a performance do servidor. Servidores leves como tux, thttpd também podem ser utilizados como servidores front-end. Se um servidor de banco de dados é utilizado, tenha certeza de que ele está otimizado para que ele não crie nenhum gargalo. No caso do MySQL, mtop pode ser utilizado para monitorar querys lentas. Performance de scripts PHP pode ser melhorada utilizando produtos de cache como o Turck MMCache. Ele elimina o overhead da compilação realizando cache dos scripts em seu estado compilado. <a id="Bibliografia" name="Bibliografia"></a>
<h2> Bibliografia</h2>

<a title="http://news.netcraft.com/archives/web_server_survey.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_news_netcraft_com_archives_web_server_survey_html', 1]);" rel="nofollow" href="http://news.netcraft.com/archives/web_server_survey.html">http://news.netcraft.com/archives/web_server_survey.html</a>
<a title="http://httpd.apache.org/docs/2.2/dso.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_httpd_apache_org_docs_2_2_dso_html', 1]);" rel="nofollow" href="http://httpd.apache.org/docs/2.2/dso.html">http://httpd.apache.org/docs/2.2/dso.html</a>
<a title="http://httpd.apache.org/docs/2.2/mpm.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_httpd_apache_org_docs_2_2_mpm_html', 1]);" rel="nofollow" href="http://httpd.apache.org/docs/2.2/mpm.html">http://httpd.apache.org/docs/2.2/mpm.html</a>
<a title="http://modperlbook.org/html/ch11_01.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_modperlbook_org_html_ch11_01_html', 1]);" rel="nofollow" href="http://modperlbook.org/html/ch11_01.html">http://modperlbook.org/html/ch11_01.html</a>
<a title="http://www.speedupyoursite.com/18/18-2t.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_www_speedupyoursite_com_18_18_2t_html', 1]);" rel="nofollow" href="http://www.speedupyoursite.com/18/18-2t.html">http://www.speedupyoursite.com/18/18-2t.html</a>
<a title="http://www.xs4all.nl/~thomas/apachecon/PerformanceTuning.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_www_xs4all_nl_thomas_apachecon_PerformanceTuning_html', 1]);" rel="nofollow" href="http://www.xs4all.nl/%7Ethomas/apachecon/PerformanceTuning.html">http://www.xs4all.nl/~thomas/apachecon/PerformanceTuning.html</a>
<a title="http://www.onlamp.com/pub/a/onlamp/2004/02/05/lamp_tuning.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_www_onlamp_com_pub_a_onlamp_2004_02_05_lamp_tuning_html', 1]);" rel="nofollow" href="http://www.onlamp.com/pub/a/onlamp/2004/02/05/lamp_tuning.html">http://www.onlamp.com/pub/a/onlamp/2004/02/05/lamp_tuning.html</a>
<a title="http://httpd.apache.org/docs/2.2/misc/perf-tuning.html" onclick="_gaq.push(['_trackEvent', '/outgoing/http_httpd_apache_org_docs_2_2_misc_perf_tuning_html', 1]);" rel="nofollow" href="http://httpd.apache.org/docs/2.2/misc/perf-tuning.html">http://httpd.apache.org/docs/2.2/misc/perf-tuning.html</a>
Linux Server Hacks by Rob Flickenger <a id="Fonte" name="Fonte"></a>
<h2> Fonte</h2>
<ul>
<li><a title="http://www.howtoforge.net/configuring_apache_for_maximum_performance" onclick="_gaq.push(['_trackEvent', '/outgoing/http_www_howtoforge_net_configuring_apache_for_maximum_performance', 1]);" rel="nofollow" href="http://www.howtoforge.net/configuring_apache_for_maximum_performance">http://www.howtoforge.net/configuring_apache_for_maximum_performance</a></li>
<li>http://under-linux.org/wiki/</li>
</ul>
</pre>
</pre>
</pre>
</pre>
</pre>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/05/25/configurando-apache-para-performance-maxima/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comandos Console</title>
		<link>http://blog.deserv.info/2010/05/16/comandos-console/</link>
		<comments>http://blog.deserv.info/2010/05/16/comandos-console/#comments</comments>
		<pubDate>Mon, 17 May 2010 01:55:34 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Atributos e Nomes de Arquivos]]></category>
		<category><![CDATA[Comandos Console]]></category>
		<category><![CDATA[Comunicação Serial e Paralela]]></category>
		<category><![CDATA[Configuração do TCP/IP]]></category>
		<category><![CDATA[Configurando o terminal]]></category>
		<category><![CDATA[Diretórios Principais do Sistema]]></category>
		<category><![CDATA[Disparo do Xwindows e das suas aplicações]]></category>
		<category><![CDATA[Intercambiando Disquetes com o MS-DOS]]></category>
		<category><![CDATA[Manipulando processos]]></category>
		<category><![CDATA[O Kernel]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Procedimentos de boot e o init]]></category>
		<category><![CDATA[Redirecionamento da Entrada e da Saída; Pipes]]></category>
		<category><![CDATA[Serviços TCP/IP]]></category>
		<category><![CDATA[Shell Scripts]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Uso de Expressões Regulares]]></category>
		<category><![CDATA[Uso de Metacaracteres]]></category>
		<category><![CDATA[Variáveis de Environment]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=371</guid>
		<description><![CDATA[Ligando e Desligando a Máquina Salvo orientação específica do hardware em uso, ligar uma máquina Unix não costuma envolver maiores detalhes do que o acionamento de um botão liga/desliga no console da máquina e uma eventual intervenção humana logo em seguida, solicitando o boot efetivo do sistema a partir de um menu de opções. O [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F05%252F16%252Fcomandos-console%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FaGO3lK%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Comandos%20Console%22%20%7D);"></div>
<p><a name="onoff"> </a></p>
<h2><a name="onoff"> Ligando e Desligando a Máquina </a></h2>
<p><a name="onoff">Salvo orientação específica do hardware em uso, ligar uma máquina <strong>Unix</strong> não costuma envolver maiores detalhes do que o acionamento de um botão liga/desliga no console da máquina e uma eventual intervenção humana logo em seguida, solicitando o <em>boot</em> efetivo do sistema a partir de um menu de opções. </a></p>
<p><a name="onoff"> O <em>boot</em> costuma gerar uma razoável quantidade de mensagens que aparecem no console da máquina. Normalmente elas referem-se aos diferentes estágios do reconhecimento e inicialização do hardware. É interessante conhecê-las, não obstante, salvo contingências, podem ser ignoradas até que surja o prompt ou a janela de login. </a></p>
<p><a name="onoff"> <span id="more-371"></span> O desligamento é um processo mais delicado. O <strong>Unix</strong> utiliza parte da memória principal como <em>cache</em> de disco, a fim de acelerar as operações de leitura e gravação de arquivos. Antes de se desligar a máquina, é necessário assegurar que os discos estejam <em>sincronizados</em> com o cache, o que é feito pelo comando <strong>sync</strong>, que deve ser precedido do encerramento de todos os processos, a fim de que não ocorra uma dessincronização em seguida. Todos esses passos são tomados pelo comando <strong>shutdown</strong>: </a></p>
<pre><a name="onoff"><strong>$ shutdown</strong> -y -g 1 -i 5 (Solaris)
<strong>$ shutdown</strong> -h now (Linux)
</a></pre>
<p><a name="onoff">Em sistemas baseados em <strong>PC</strong>, o <strong>shutdown</strong> por vezes é acionável através do <strong>ctrl-alt-del</strong>. </a><a name="files"> </a></p>
<h2><a name="files"> Manipulando arquivos e diretórios </a></h2>
<p><a name="files">O <em>shell</em> é o programa que lê e executa os comandos que você passa a digitar logo após logar no sistema, como <strong>cd</strong> ou <strong>ls</strong>. Via de regra você estará usando o <em>Bourne shell</em> (<strong>sh</strong>), ou o <em>C shell</em> (<strong>csh</strong>), ou aperfeiçoamentos desses, como o <em>Korn shell</em> (<strong>ksh</strong>) ou o <em>Bourne again shell</em> (<strong>bash</strong>). Via de regra você poderá descobrir qual deles está usando ao executar um <strong>ps</strong> ou um <strong>finger</strong> com o seu <em>username</em> com argumento. </a></p>
<p><a name="files">Obsoleta ou não, a interface de linha de comandos possui características ainda não suficientemente reproduzidas nas interfaces gráficas, como a possibilidade de uso remoto com baixa banda, e a programabilidade. No caso do Unix, há ainda a vantagem dela estar melhor estandardizada que as interfaces gráficas. Em boa parte dessas notas estaremos nos referindo à interface de linha de comandos, mas abordaremos também a interface gráfica ao final. Vejamos alguns típicos comandos dos sistemas Unix-like: </a></p>
<ul>
<li>
<pre><a name="files"><strong>cat</strong> [-r] arquivo1 arquivo2 ... </a></pre>
<p><a name="files"> Concatena os vários arquivos, na ordem especificada, copiando o resultado para a saída padrão. Se não houver argumentos, copia a entrada padrão para a saída padrão. </a></li>
<li>
<pre><a name="files"><strong>cd</strong> diretório</a></pre>
<p><a name="files"> Troca o diretório corrente para o diretório especificado, ou para o diretório <em>home</em>, se não houver argumento. </a></li>
<li>
<pre><a name="files"><strong>cp</strong> [-r] argumento1 argumento2 ... </a></pre>
<p><a name="files"> Copia um ou mais arquivos, trocando seu nome ou criando a cópia num outro diretório, conforme a quantidade e o tipo dos argumentos. Se o primeiro argumento for um diretório, faz uma cópia recursiva de toda a subárvore iniciada nele, desde que a opção <strong>-r</strong> (<em>recursive</em>) tiver sido especificada. </a></li>
<li>
<pre><a name="files"><strong>chmod</strong> nnn argumento1 argumento2 ... </a></pre>
<p><a name="files"> Troca os atributos do(s) argumento(s) para <strong>nnn</strong> (veja <em>atributos de arquivos</em>). Ao invés de <strong>nnn</strong>, a alteração pode ser especificada por exemplo como <strong>a+r</strong> ou <strong>g-w</strong> (<strong>a</strong>, <strong>g</strong> e <strong>o</strong> significam <em>all</em>, <em>group</em> e <em>owner</em>; <strong>+</strong> significa <em>adicionar</em> e <strong>-</strong> <em>remover</em>; <strong>r</strong>,<strong>w</strong>,           <strong>x</strong> e <strong>s</strong> indicam respectivamente atributos de leitura, escrita, execução e setuid). </a></li>
<li>
<pre><a name="files"><strong>ls</strong> [-la] diretório1 diretório2 ... </a></pre>
<p><a name="files"> Lista o conteúdo do(s) diretório(s) especificado(s), ou do diretório corrente se não houver argumento. Opções principais:<br />
<strong>-a</strong> Inclui arquivos com nome iniciado por &#8220;.&#8221; (tais arquivos normalmente armazenam configurações de aplicativos).<br />
<strong>-l</strong> Formato longo (veja <em>atributos de arquivos</em>).<br />
</a></li>
<li>
<pre><a name="files"><strong>ln -s</strong> argumento1 argumento2 </a></pre>
<p><a name="files"> Cria um <em>link simbólico</em> cujo nome é o primeiro argumento, apontando para o segundo argumento. A opção <strong>-s</strong> não pode ser omitida, ou o link criado será um <em>hard link</em>, ao invés de simbólico. </a></li>
<li>
<pre><a name="files"><strong>man</strong> [-k] nome </a></pre>
<p><a name="files"> Invoca a <em>man-page</em> associada ao nome, ou exibe uma lista das man pages associadas ao nome, no caso da opção <strong>-k</strong> (de <em>key</em>) ter sido especificada. </a></p>
<p><a name="files"> As man pages <strong>Unix</strong> são referências técnicas sumárias por vezes difíceis de compreender. Elas são exibidas através do <strong>more</strong> ou de algum outro paginador semelhante, por isso os comandos do <strong>more</strong> indicados mais adiante valem para a leitura de man pages, e são úteis para ajudar a localizar informações dentro de uma man page. </a></p>
<p><a name="files">As man pages são divididas em seções, que tradicionalmente são referidas através de parênteses. Por exemplo, a man page <strong>shutdown(2)</strong> é a man page do system call chamado shutdown, ao passo que a man page <strong>shutdown(8)</strong> é a man page do comando administrativo <strong>shutdown</strong>. Além dessas, a seção 1 contém manuais de comandos comuns, a 3 contém manuais de serviços de bibliotecas, a 4 descreve device special files, a 5 descreve formatos de arquivos de configuração, a 6 os jogos eventualmente instalados, e a 7 contém tudo o mais que não couber nas anteriores. </a></li>
<li>
<pre><a name="files"><strong>mkdir</strong> diretório1 diretório2 ... </a></pre>
<p><a name="files"> Cria os diretório(s) especificado(s). </a></li>
<li>
<pre><a name="files"><strong>more</strong> arquivo </a></pre>
<p><a name="files"> Exibe de forma paginada o arquivo especificado, ou a entrada padrão no caso de não haver argumento. Aceita vários comandos, entre eles<br />
</a></p>
<table width="100%">
<tbody>
<tr>
<td width="20%"><strong>ESPAÇO</strong>,                 <strong>C-b</strong><br />
<strong>/</strong><br />
<strong>?</strong></td>
<td width="80%">Avança/recua uma página.<br />
Busca.<br />
Exibe relação de comandos.</td>
</tr>
</tbody>
</table>
</li>
<li>
<pre><a name="files"><strong>mv</strong> argumento1 argumento2</a></pre>
<p><a name="files">Renomeia o primeiro argumento, que pode ser um arquivo ou um diretório, para o nome dado como segundo argumento. Se ao tentar executar esse comando a mensagem de erro <em>cannot move across filesystems</em> for exibida, é porque a origem e o destino estão em filesystems diferentes. Nesse caso deve-se copiar a origem para o destino usando <strong>cp</strong>, e depois remover a origem com <strong>rm</strong>. </a></li>
<li>
<pre><a name="files"><strong>rm</strong> [-r] argumento1 argumento2 ... </a></pre>
<p><a name="files">Remove os arquivo(s) especificado(s). Se um argumento for um diretório, remove toda a subárvore iniciada nele, desde que a opção <strong>-r</strong> (<em>recursive</em>) tenha sido especificada. Via de regra não há modo em sistemas Unix-like de recuperar (<em>undelete</em>) um arquivo removido. </a></li>
<li>
<pre><a name="files"><strong>rmdir</strong> diretório1 diretório2 ... </a></pre>
<p><a name="files">Remove os diretório(s) especificado(s), desde que estejam vazios. </a></li>
<li>
<pre><a name="files"><strong>vi</strong> arquivo </a></pre>
<p><a name="files">O <strong>vi</strong> é uma ferramenta obsoleta, mas está está presente em virtualmente qualquerr plataforma Unix-like, e constitui por vezes a única alternativa para edição de arquivos, por isso convém conhecê-lo ao menos de forma minimal. No uso quotidiano, entretanto, normalmente preferir-se-á outras ferramentas, como o <strong>emacs</strong> ou o <strong>pico</strong> ou outras. </a></p>
<table width="100%">
<tbody>
<tr>
<td width="10%"><strong>h</strong>, <strong>j</strong>,                 <strong>k</strong>, <strong>l</strong><br />
<strong>C-f</strong>,<strong>C-b</strong><br />
<strong>x</strong>,<strong>X</strong><br />
[n]<strong>dd</strong><br />
<strong>i</strong>,<strong>ESC</strong><br />
<strong>a</strong>,<strong>A</strong><br />
<strong>J</strong><br />
<strong>:</strong></td>
<td width="90%">cursor para esquerda/baixo/cima/direita.<br />
Página seguinte/anterior.<br />
Remove caracter atual/anterior.<br />
Remove n linhas (default 1).<br />
Entra/sai do modo inserção.<br />
Insere após caracter atual/final da linha.<br />
Concatena linha seguinte à atual.<br />
entra comando, entre eles <strong>w</strong> (salva), <strong>q</strong> (sair) e <strong>/</strong> (busca).</td>
</tr>
</tbody>
</table>
</li>
<li>
<pre><a name="files"><strong>wc</strong> arquivo1 arquivo2 ... </a></pre>
<p><a name="files">Obtém o total de linhas, palavras e caracteres de cada um dos arquivos estipulados, ou da entrada padrão no caso de não haver argumentos. </a></li>
</ul>
<hr /><a name="scripts"> </a></p>
<h2><a name="scripts"> Shell Scripts </a></h2>
<p><a name="scripts">Seqüências de comandos que se necessita repetir com grande frqüência podem ser colocados num arquivo que, ao ser &#8220;executado&#8221;, ocasiona o disparo de cada um dos comandos da seqüência, na ordem indicada. Um arquivo desses é um <em>shell script</em>, cujo equivalente no <strong>MS-DOS</strong> são os arquivos &#8220;<strong>.BAT</strong>&#8221;. </a></p>
<p><a name="scripts"> Mesmo que nunca se escreva nenhum, com certa freqüência é necessário analisar shell scripts a fim de elucidar o modo de uso de determinados comandos, ou de realizar diagnósticos. Suponhamos por exemplo que você não se lembre como usar um comando chamado <strong>xpatgen</strong>, mas esteja com um shell num diretório que contém scripts, que usam entre outros o <strong>xpatgen</strong>. Basta então buscar ocorrências dele nos scripts: </a></p>
<pre><a name="scripts"><strong>$ grep</strong> xpatgen *
patgen: xpatgen -cal_bl
</a></pre>
<p><a name="scripts"> Com isso sabemos que o script <strong>patgen</strong> executa o <strong>xpatgen</strong>, e relembramos o modo de executar esse comando, o que talvez já seja suficiente para a necessidade do momento. </a></p>
<p><a name="scripts"> Shell scripts utilizam com freqüência de variáveis de environment e de parâmetros de linha de comando. Assim, se ao analisar um script você se deparar com algo como <strong>$HOST</strong>, lembre-se de que nesse ponto será substituído o valor da variável <strong>HOST</strong>, e que <strong>$1</strong> significa o <em>primeiro parâmetro da linha de comandos</em>, <strong>$2</strong> o segundo, e assim por diante. </a></p>
<hr /><a name="envir"> </a></p>
<h2><a name="envir"> Variáveis de Environment </a></h2>
<p><a name="envir"> Além dos parâmetros de linha de comandos como <strong>-l</strong> ou outros, pode-se também passar parâmetros a um programa através do uso de <em>variáveis de environment</em>. As mais comuns são: </a></p>
<ul>
<li><a name="envir"> <strong>PATH</strong> &#8211; Lista os diretórios (separados por &#8220;:&#8221;) onde os executáveis serão procurados, tipicamente           <strong>/bin</strong>, <strong>/usr/bin</strong> e <strong>/usr/X11/bin</strong>, entre outros. </a></li>
<li><a name="envir"> <strong>TERM</strong> &#8211; Tipo do terminal, por exemplo <strong>xterm</strong> ou <strong>vt100</strong> (veja <em>Configurando o Terminal</em>). </a></li>
<li><a name="envir"> <strong>DISPLAY</strong> &#8211; Display default para as aplicações Xwindows. </a></li>
</ul>
<p><a name="envir"> Para exibir o valor de uma delas pode-se usar <strong>echo</strong>, antepondo o operador <strong>$</strong> ao nome da variável, por exemplo: </a></p>
<pre><a name="envir"><strong>$</strong> echo $TERM</a></pre>
<p><a name="envir">Existem dois estilos de atribuição de valores a variáveis de environment, o do <em>Bourne shell</em>, usado pelo <strong>sh</strong>,       <strong>ksh</strong> e <strong>bash</strong>: </a></p>
<pre><a name="envir"><strong>$</strong> TERM=vt100; <strong>export</strong> TERM</a></pre>
<p><a name="envir">e o do <em>C shell</em>, usado pelo <strong>csh</strong> e pelo <strong>tcsh</strong>: </a></p>
<pre><a name="envir"><strong>%</strong> <strong>setenv</strong> TERM vt100</a></pre>
<hr /><a name="metacs"> </a></p>
<h2><a name="metacs"> Uso de Metacaracteres </a></h2>
<p><a name="metacs"> O metacaracter mais utilizado provavelmente é o &#8220;*&#8221;. Por exemplo, </a></p>
<pre><a name="metacs"><strong>$</strong> <strong>rm *</strong></a></pre>
<p><a name="metacs"> irá remover todos os arquivos do diretório corrente. É necessário prestar atenção a dois detalhes quando se usa metacaracteres: </a></p>
<ol><a name="metacs"> </a></p>
<li><a name="metacs"> O caracter &#8220;.&#8221; não tem o significado de separador entre nome e sufixo que possui no <strong>MS-DOS</strong>, por isso <strong>&#8220;*.*&#8221;</strong> significa <em>todos os arquivos em cujo nome ocorre ao menos um ponto</em>.
<p></a></li>
<p><a name="metacs"> </a></p>
<li><a name="metacs"> A expansão do metacaracter é feita pelo shell, e não pela aplicação, por isso o comando
<pre><strong>$ mv *.txt *.bak</strong></pre>
<p>não irá surtir o efeito esperado de renomear todos os arquivos que terminam com &#8220;.txt&#8221; para &#8220;.bak&#8221; (para essa operação deve-se usar o comando <strong>for</strong>).</p>
<p></a></li>
<p><a name="metacs"> </a></ol>
<p><a name="metacs">Os shells <strong>Unix</strong> aceitam também o metacaracter &#8220;<strong>?</strong>&#8221;, que significa <em>qualquer caracter</em> e tambem <em>intervalos</em>, como <strong>[0-9]</strong> (<em>qualquer dígito decimal</em>), entre outros. </a></p>
<hr /><a name="eregs"> </a></p>
<h2><a name="eregs"> Uso de Expressões Regulares </a></h2>
<p><a name="eregs">Aplicativos <strong>Unix</strong> via de regra aceitam expressões regulares como argumentos de busca. Os usos mais freqüentes delas são bem ilustrados através do aplicativo <strong>grep</strong>. Nos casos abaixo ele será utilizado para buscar uma dada expressão em todos os arquivos do diretório corrente: </a></p>
<ol>
<li><a name="eregs"> Busca de ocorrências de algum dos anos da década de 80: </a>
<pre><a name="eregs"><strong>$ grep</strong> "198[0-9]" * </a></pre>
</li>
<li><a name="eregs"> Busca de uma ocorrência da palavra &#8220;yellow&#8221; seguida de uma ocorrência da palavra &#8220;page&#8221;, separadas por zero ou mais caracteres quaisquer: </a>
<pre><a name="eregs"><strong>$ grep</strong> -i "yellow.*page" * </a></pre>
</li>
<li><a name="eregs"> Busca de uma das palavras &#8220;roget&#8221; ou &#8220;thesaurus&#8221;: </a>
<pre><a name="eregs"><strong>$ grep</strong> -i "roget\|thesaurus" * </a></pre>
</li>
</ol>
<p><a name="eregs"> A sintaxe das expressões regulares pode variar um pouco, dependendo da plataforma e da ferramenta. Via de regra as diferenças consistem em proteger-se ou não alguns caracteres especiais, e nas extensões que algumas ferramentas introduzem. Note por exemplo, o uso do <strong>egrep</strong>, em comparação com o uso do <strong>grep</strong> acima: </a></p>
<pre><a name="eregs"><strong>$ egrep</strong> -i "roget|thesaurus" * </a></pre>
<p><a name="eregs"> Via de regra todas as ferramentas <strong>Unix</strong> que lidam com texto, como o <strong>more</strong>, o <strong>sed</strong>, e o <strong>vi</strong>, entre outros, aceitam expressões regulares como argumento de buscas. </a></p>
<hr /><a name="procs"> </a></p>
<h2><a name="procs"> Manipulando processos </a></h2>
<p><a name="procs"> Um processo é um programa em execução. Num computador que possui apenas uma cpu, na verdade apenas um processo pode estar sendo executado em cada instante. O que se faz é executar um processo durante uma fração fixa de segundo, congelá-lo e passar a executar um outro, e assim por diante, criando a ilusão de simultaneidade. </a></p>
<p><a name="procs"> Através do comando ps pode-se examinar os processos correntes. Por exemplo: </a></p>
<pre><a name="procs">$ <strong>ps</strong>
PID TTY STAT TIME COMMAND
45 v02 S 0:00 -bash
105 v02 R 0:00 ps
</a></pre>
<p><a name="procs"> O <strong>ps</strong> em geral omite muitos processos a fim de exibir uma saída limpa. Através das opções <strong>a</strong> e <strong>x</strong> (ou <strong>e</strong> no <strong>Solaris</strong>), pode-se exibir todos os processos correntes. O número de um processo é usado, por exemplo quando é necessário interromper prematuramente a sua execução, através do comando <strong>kill</strong>. </a></p>
<p><a name="procs">A finalidade primária do comando <strong>kill</strong> não é matar um processo, mas enviar um sinal para ele. O Unix possui diversos sinais predefinidos, como SIGHUP, SIGPIPE, SIGTERM, etc. O atendimento a um sinal entretanto é responsabilidade do processo, ou do programador que fez o programa, e por isso a forma com que cada processo reagirá a cada sinal poderá variar. A fim de se interromper a execução de um processo, deve-se enviar para ele o sinal SIGKILL: </a></p>
<pre><a name="procs">$ <strong>kill</strong> -SIGKILL 45
$ <strong>kill</strong> -9 45
</a></pre>
<p><a name="procs">As duas formas acima em geral são equivalentes (o número associado a cada sinal pode variar com a plataforma). </a></p>
<p><a name="procs"> O caracter &#8220;<strong>&amp;</strong>&#8221; colocado ao final da linha de comandos instrui o shell para disparar o comando em <em>background</em>, a fim de que se possa continuar usando o shell mesmo antes desse comando encerrar a sua execução. </a></p>
<p><a name="procs"> O comando <strong>nice</strong> faz com que um processo seja disparado com <em>baixa prioridade</em>. </a></p>
<pre><a name="procs"> $ <strong>nice gzip -9 *</strong></a></pre>
<p><a name="procs"> O comando <strong>nohup</strong> faz com que o processo sendo disparado se torne imune ao sinal <strong>SIGHUP</strong>. Em combinação com o <strong>&amp;</strong>, ele permite o disparo de programas que permanecerão em execução mesmo após o <em>logout</em> do usuário. Exemplos: </a></p>
<pre><a name="procs"> $ <strong>nohup gzip -9 * &amp;</strong></a></pre>
<p><a name="procs"> Através do comando <strong>at</strong> pode-se programar a execução de um comando para um horário determinado. Por exemplo: </a></p>
<pre><a name="procs">$ <strong>at now + 1 minute</strong>
ls
<em>ctrl-d</em>
</a></pre>
<p><a name="procs">O comando <strong>ls</strong> será dessa forma executado daqui a um minuto. Note que na linha seguinte do comando <strong>at</strong> o que se escreve é na verdade um shell script, terminado com control-d. Ao invés de digitá-lo, poder-se-ia lê-lo de um arquivo através do redirecionamento da entrada: </a></p>
<pre><a name="procs">$ <strong>at now + 1 minute &lt;meuscript </strong>
</a></pre>
<p><a name="procs">A execução periódica de um comando se faz através do <strong>cron</strong>, que é disparado no boot do sistema e monitora as tabelas de execução periódica de comandos de todos os usuários (a cada usuário corresponde uma tabela). Uma tal tabela é chamada <strong>crontab</strong>. Através dela pode-se especificar que um comando seja executado a cada hora, ou diariamente, ou semanalmente, etc. A edição, inspeção e remoção da <strong>crontab</strong> de um usuário é feita através do comando <strong>crontab</strong>, e opções <strong>-e</strong>, <strong>-l</strong> e <strong>-d</strong>. Cada linha da crontab indica um comando e a periodicidade com que ele deve ser executado (minutos, horas, dias do mês, meses e dias da semana). Por exemplo: </a></p>
<pre><a name="procs">$ crontab -l
40 07 * * * updatedb
0 22 5 * * pagamento
0 6,12,15,18 * * * fetch
0 0 * * 6 backup
</a></pre>
<p><a name="procs">No caso a crontab contém três comandos. O <strong>updatedb</strong> deverá ser executado todos os dias às 7:40. O comando <strong>pagamento</strong> deverá ser executado às 22:00 do dia 5 de cada mês, e o <strong>backup</strong> será executado à zero hora de cada sábado. </a></p>
<p><a name="procs">Note que a <strong>crontab</strong> é um arquivo texto simples, e quando se executa o comando <strong>crontab</strong> com a opção <strong>-e</strong>, entra-se num editor de textos para editá-la. O editor de textos utilizado normalmente será o <strong>vi</strong>, ou aquele especificado na variável de environment <strong>EDITOR</strong>. </a></p>
<hr /><a name="term"> </a></p>
<h2><a name="term"> Configurando o terminal </a></h2>
<p><a name="term"> O <em>terminal</em> pode ser um terminal no sentido estrito do termo, conectado ao computador por uma linha serial, ou então o próprio console da máquina, ou uma aplicação como o <strong>xterm</strong> emulando um terminal dentro do <strong>Xwindows</strong>, </a></p>
<p><a name="term"> A configuração do terminal é necessária para executar aplicativos como editores de texto visuais, ou para os comandos de teclado como <em>backspace</em> serem corretamente reconhecidos. Essa configuração envolve a <em>configuração do driver do sistema</em>, feita através do comando <strong>stty</strong> e o <em>informe da aplicação</em>, normalmente feito através da variável <strong>TERM</strong>. Vejamos exemplos de situações onde uma delas ou ambas são necessárias, e como realizá-la: </a></p>
<ol>
<li><a name="term"> Ao pressionar a tecla <em>backspace</em>, ao invés de ser apagado o caracter anterior, surge na tela os caracteres &#8220;^H&#8221;. Solução: </a>
<pre><a name="term"><strong>$ stty erase ^H</strong></a></pre>
</li>
<li><a name="term"> Ao executar o <strong>more</strong> ou o <strong>vi</strong>, algumas linhas permanecem escondidas, ou o <em>scroll</em> comporta-se de forma errática. Solução: cheque quantas linhas (vamos supor: 24) e quantas colunas (vamos supor: 80) o seu terminal/emulador possui e execute </a><a name="term"> </a>
<pre><a name="term">$ <strong>stty</strong> rows 24 cols 80</a></pre>
</li>
<li><a name="term"> Após o uso de alguma aplicação, os caracteres aparecem trocados ou o <em>eco</em> deixou de funcionar, ou quando pressiono <em>enter</em> o cursor permanece na mesma linha. Tentativa de solução: </a><a name="term"> </a>
<pre><a name="term"><strong>$ stty sane</strong></a></pre>
</li>
<li><a name="term"> Ao tentar executar uma aplicação, a mensagem de erro <em>terminal capability cm required</em>, ou <em>Terminal type is not defined</em>, ou <em>Terminal type is not powerful enough</em>, ou outra semelhante foi exibida. Solução: cheque o tipo de terminal que você está usando ou emulando (dificilmente será algo diferente de <strong>xterm</strong> ou <strong>vt100</strong>) e atribua para a variável de environment <strong>TERM</strong> esse valor. </a></li>
</ol>
<hr /><a name="dirs"> </a></p>
<h2><a name="dirs"> Diretórios Principais do Sistema </a></h2>
<p><a name="dirs">No <strong>Unix</strong> não há o conceito de nomes de <em>drives</em>, como <strong>C:</strong>, mas todos os <em>paths</em> partem de uma raiz comum, o <em>root directory</em> &#8220;<strong>/</strong>&#8221;. Quando a máquina possui vários discos diferentes (ou ao menos várias partições diferentes de um mesmo disco), cada uma delas em geral corresponderá a uma subárvore do filesystem, como <strong>/usr</strong>, <strong>/var</strong> ou ainda nomes não standard como <strong>/disco2</strong>, que são chamados de seus <em>pontos de montagem</em>. O comando <strong>mount</strong> executado sem parâmetros listará os diferentes dispositivos físicos <em>montados</em> (discos locais e remotos e suas partições) e a subárvore correspondente a cada um deles. A tabela que indica todas essas montagens é o arquivo <strong>/etc/fstab</strong>. Apesar de algumas pequenas diferenças de plataforma para plataforma, os diretórios principais do sistema são: </a></p>
<table width="100%">
<tbody>
<tr>
<td width="10%"><strong>/bin</strong><br />
<strong>/sbin</strong><br />
<strong>/etc</strong><br />
<strong>/home</strong><br />
<strong>/lib</strong><br />
<strong>/proc</strong><br />
<strong>/tmp</strong><br />
<strong>/usr</strong></td>
<td width="90%">Binários básicos, como <strong>sh</strong> e <strong>ls</strong>.<br />
Binários básicos de administração do sistema.<br />
Arquivos de configuração do sistema e scripts de boot.<br />
Os diretórios dos usuários residem aqui.<br />
Bibliotecas básicas.<br />
Estado corrente do sistema e dos processos.<br />
Arquivos temporários.<br />
Demais binários e bibliotecas.</td>
</tr>
</tbody>
</table>
<p><a name="dirs"> O termo <em>básico</em> aplicado acima aos diretórios <strong>/bin</strong> e <strong>/lib</strong> quer significar principalmente <em>essenciais para o boot e operação mínima do sistema</em>. A separação desses elementos básicos, em contraposição aos que são deixados no <strong>/usr</strong>, deve-se a razões práticas, principalmente para facilitar a organização de redes de máquinas compartilhando subárvores de diretório. De fato, é comum que o diretório <strong>/usr</strong> ao invés de estar replicado em todas as máquina da rede esteja residindo fisicamente num único disco, e sendo compartilhado por todas as máquinas. </a></p>
<hr /><a name="atribs"> </a></p>
<h2><a name="atribs"> Atributos e Nomes de Arquivos </a></h2>
<p><a name="atribs"> No <strong>Unix</strong> cada arquivo (inclusive diretórios, que são casos particulares de arquivos), conta com um conjunto de <em>atributos</em> de leitura, escrita e execução, que são setáveis através do comando <strong>chmod</strong>, e podem ser exibidos pelo comando <strong>ls -l</strong>: </a></p>
<pre><a name="atribs"><strong>$ ls -l</strong> /bin/cat
-rwxr-xr-x 1 root root 16584 Dec 16 20:09 /bin/cat
</a></pre>
<p><a name="atribs"> A <em>string</em> <strong>-rwxr-xr-x</strong> representa os atributos do arquivo <strong>/bin/cat</strong>. O primeiro caracter (<strong>-</strong>) significa que se trata de um arquivo regular, em contraposição aos diretórios (<strong>d</strong>), <em>device special files</em> (<strong>c</strong>) e <em>links</em> simbólicos (<strong>l</strong>). Os 9 caracteres restantes informam as permissões de <em>leitura</em>, <em>escrita</em> e <em>execução</em> desse arquivo relativas ao seu proprietário, ao seu grupo, e a todos os demais. O proprietário e o grupo são informados logo à direita, e no caso são o <em>usuário       <strong>root</strong> e o <em>grupo</em> <strong>root</strong>. </em></a></p>
<p><a name="atribs"><em>Note que no <strong>Unix</strong> não existem os atributos de arquivo <em>oculto</em> (&#8220;hidden&#8221;) e <em>do sistema</em> (&#8220;system&#8221;), suportados no <strong>MS-DOS</strong>. Não obstante, arquivos cujo primeiro caractere é ponto (&#8220;.&#8221;) normalmente são omitidos pelo <strong>ls</strong>, a não ser que se utilize a opção <strong>-a</strong> (de &#8220;all&#8221;), conforme comentamos no início. </em></a></p>
<p><a name="atribs"><em>Um atributo importantíssimo existente no <strong>Unix</strong> é o chamado <strong>setuid</strong>, através do qual um processo adquire ao ser executado os privilégios do owner do arquivo. Isso é frequentemente utilizado por programas que são disparados por usuários não privilegiados mas que por algum motivo necessitam dos privilégios do superusuário, por exemplo: </em></a></p>
<pre><a name="atribs"><em>$ ls -l /usr/sbin/pppd
-rwsr-xr-x 1 root bin 104876 Apr 27 1998 /usr/sbin/pppd
</em></a></pre>
<p><a name="atribs"><em>Sem os privilégios de superusuário, um usuário comum não conseguiria configurar a interface ppp e nem alterar a tabela de rotas do sistema, no momento em que se conecta ao provedor Internet. Assim, o <strong>pppd</strong>, ao ser executado, requisitará os privilégios do owner do arquivo, que no caso é o superusuário, e dessa forma ele poderá realizar essas operações. </em></a></p>
<p><a name="atribs"><em> No <strong>Unix</strong> via de regra são suportados nomes &#8220;longos&#8221; (até 64 ou às vezes até 256 caracteres), e o &#8220;.&#8221; não é um separador entre o nome do arquivo e sua extensão, mas um caracter como os outros. Não obstante, a noção de &#8220;sufixo&#8221; é utilizada informalmente para facilitar a identificação de alguns formatos de arquivos, por exemplo: </em></a></p>
<table width="100%">
<tbody>
<tr>
<td width="10%"><strong>.tar</strong><br />
<strong>.zip</strong><br />
<strong>.Z</strong><br />
<strong>.gz</strong></td>
<td width="90%"><em>Archive</em> produzido com <strong>tar</strong><br />
<em>Archive</em> comprimido produzido com <strong>zip</strong><br />
Arquivo comprimido com <strong>compress</strong><br />
Arquivo comprimido com <strong>gzip</strong></td>
</tr>
</tbody>
</table>
<p><a name="atribs"><em> <em>Archives</em> (o termo não tem correspondente em português) são concatenações de vários arquivos ou de subárvores inteiras num único arquivo. Em <strong>Unix</strong>, tipicamente são produzidos com <strong>tar: </strong></em></a></p>
<pre><a name="atribs"><em><strong><strong>$ tar cvf</strong> /tmp/etc.tar /etc
<strong>$ tar tvf</strong> /tmp/etc.tar /etc
<strong>$ cd </strong> /tmp; tar xvf</strong> etc.tar
</em></a></pre>
<p><a name="atribs"><em> O primeiro comando irá criar o <em>archive</em> /tmp/etc.tar, composto por toda a subárvore /etc. O segundo exibirá o conteúdo desse <em>archive</em>. O terceiro irá extrair todo o seu conteúdo dentro do diretório /tmp, ou seja, recriará aquela mesma subárvore como uma subárvore do diretório /tmp. </em></a></p>
<hr /><a name="disq"> </a></p>
<h2><em><a name="disq"> Intercambiando Disquetes com o <strong>MS-DOS</strong> </a></em></h2>
<p><em><a name="disq">Via de regra as plataformas Unix-like oferecem ferramentas para lidar com disquetes &#8220;formatados&#8221; no <strong>MS-DOS</strong> (ou, mais precisamente, disquetes que usam <strong>FAT</strong>). Um <em>set</em> de ferramentas bastante popular é o <strong>mtools</strong>, que oferece clones das ferramentas do <strong>MS-DOS</strong>. Exemplos de uso: </a></em></p>
<pre><em><a name="disq">$ <strong>mformat</strong> a:
$ <strong>mcopy</strong> a:relat.txt .
$ <strong>mdir</strong> a:
</a></em></pre>
<p><em><a name="disq">Versões recentes dessas ferramentas lidam também com o <strong>VFAT</strong> do <strong>Windows 95</strong>, que permite nomes de arquivos &#8220;longos&#8221;. </a></em></p>
<p><em><a name="disq"> O intercâmbio de arquivos texto entre <strong>Unix</strong> e <strong>MS-DOS</strong> deve ser feito com cuidado. Por herança das antigas impressoras, o <em>fim-de-linha</em> no <strong>MS_DOS</strong> é codificado através de dois caracteres (<strong>CR</strong> e <strong>LF</strong>), enquanto no <strong>Unix</strong> há apenas um (o <strong>LF</strong>), além do que o final do arquivo é sinalizado no <strong>MS-DOS</strong> por um <strong>CTRL-Z</strong>. O <strong>mcopy</strong> possui a opção <strong>-t</strong> para realizar essas conversões quando copia de ou para disquetes. </a></em></p>
<hr /><em><a name="kernel"> </a></em></p>
<h2><em><a name="kernel">O Kernel</a></em></h2>
<p><em><a name="kernel">O <strong>Kernel</strong> do Unix (e de virtualmente qualquer outro sistema operacional) possui um papel de que convém ter noções, a fim de se poder compreender melhor o funcionamento do sistema, realizar diagnósticos e procedimentos administrativos como adição de componentes de hardware. Algum conhecimento do papel do kernel é importante também para se ter uma noção mais clara do uso de arquivos especiais e do diretório <strong>/proc</strong>. </a></em></p>
<p><em><a name="kernel">O Kernel ordinariamente reside no filesystem como um outro arquivo qualquer. No Linux, ele é em geral o arquivo <strong>/vmlinuz</strong> ou <strong>/boot/vmlinuz</strong>, ou ainda <strong>/boot/vmlinuz-2.0.36</strong>. Ele é um programa, ainda que um pouco diferente dos programas de aplicação como o       <strong>/bin/ls</strong>. O kernel é carregado e posto em execução no boot da máquina, e a sua execução somente se encerra com o <strong>shutdown</strong>. </a></em></p>
<p><em><a name="kernel">De forma simplificada, o seu papel é num primeiro momento reconhecer o hardware e inicializar os respectivos drivers. Em seguida ele entra num estado administrativo onde funciona como intermediário entre as aplicações e o hardware. Por exemplo, quando uma aplicação necessita alocar mais memória, ela solicita isso ao kernel. É o kernel que distribui o tempo de CPU aos vários processos ativos. É ele que habitualmente realiza a entrada e saída de dados nas diferentes portas de comunicação. </a></em></p>
<p><em><a name="kernel">É por isso que a adição de hardware novo a uma máquina pode requerer a substituição ou ao menos a reconfiguração do kernel. Os kernels mais recentes do Linux oferecem vários mecanismos de configuração que os tornam sobremaneira flexíveis, a ponto de ser rara a necessidade de substituição do kernel. Os dois mecanismos fundamentais de se configurar a operação do kernel são a passagem de parâmetros no momento do boot (realizada pelo LILO) e a carga de módulos, feita manualmente ou por mecanismos automáticos como o <strong>kerneld</strong>. </a></em></p>
<p><em><a name="kernel">O diálogo entre as aplicações e o kernel realiza-se fundamentalmente através dos <em>system calls</em>, que são serviços que o kernel oferece, como por exemplo <strong>read(2)</strong>. Os <em>device special files</em> são maneiras de se referir ao kernel os dispositivos físicos ou lógicos com que se pretende operar, por exemplo a primeira porta serial ou a segunda unidade de fita, ou o disco principal do sistema. Neles, o importante não é o nome, mas sim os números de dispositivo, ou mais precisamente o major e o minor device numbers. Device special files são criados através do comando <strong>mknod</strong>, ou através de interfaces mais amigáveis, como o comando <strong>MAKEDEV</strong>. </a></em></p>
<p><em><a name="kernel">Os sistemas Unix-like mais recentes oferecem um outro mecanismo de comunicação com o kernel, que é o filesystem <strong>/proc</strong>. As entradas desse filesystem são pseudo-arquivos cujo conteúdo reflete o estado atual de inúmeras estruturas de dados internas do kernel. Assim, um programa de aplicação passa a poder comunicar-se com o kernel através dos mecanismos ordinários de leitura e escrita de arquivos. </a></em></p>
<p><em><a name="kernel">Em muitos casos a comunicação entre as aplicações e o kernel é intermediada por bibliotecas, principalmente a <strong>libc</strong>. Elas oferecem serviços de mais alto nível que os system calls do kernel, tornando mais simples o trabalho de programação. </a><a name="pipe"> </a></em></p>
<h2><em><a name="pipe"> Redirecionamento da Entrada e da Saída; Pipes </a></em></h2>
<p><em><a name="pipe"> Processos num sistema <strong>Unix</strong> habitualmente possuem três dispositivos de I/O &#8220;padrões&#8221;, a &#8220;saída padrão&#8221;, a &#8220;entrada padrão&#8221; e a &#8220;saída de erros&#8221;. O <strong>Unix</strong> permite que esses dispositivos (e outros) sejam definidos no momento da execução, podendo escolher o console, um &#8220;pipe&#8221;, a impressora, um circuito virtual de rede conectando duas máquinas, uma linha física serial ou outras coisas. </a></em></p>
<p><em><a name="pipe"> Usuários de <strong>MS-DOS</strong> talvez já tenham feito coisas como </a></em></p>
<pre><em><a name="pipe"><strong>C&gt;</strong> DIR &gt;PRN:</a></em></pre>
<p><em><a name="pipe"> para imprimir a saída de um comando. Essa sintaxe foi herdada do <strong>Unix</strong> daí a semelhança: </a></em></p>
<pre><em><a name="pipe"><strong>$ ls -l &gt;</strong>/dev/lp1</a></em></pre>
<p><em><a name="pipe"> Naturalmente tanto no <strong>MS-DOS</strong> quanto no <strong>Unix</strong> existem formas mais apropriadas para se imprimir algo, mas no momento esse exemplo convém. Shells do estilo &#8220;Bourne&#8221; (<strong>sh</strong>, <strong>ksh</strong>, <strong>bash</strong>) permitem redirecionamento da saída de erros através da seguinte sintaxe: </a></em></p>
<pre><em><a name="pipe"><strong>$ rm /bin/ls 2&gt;</strong>/tmp/error</a></em></pre>
<p><em><a name="pipe">O &#8220;<strong>2</strong>&#8221; deve-se a que, internamente, a saída de erros corresponde ao <em>descritor 2</em> (o <strong>0</strong> é a entrada padrão e o <strong>1</strong> é a saída padrão). </a></em></p>
<p><em><a name="pipe">A entrada pode ser redirecionada de forma semelhante: </a></em></p>
<pre><em><a name="pipe"><strong>$ wc &lt;</strong>/tmp/error </a></em></pre>
<p><em><a name="pipe">Os shells <strong>Unix</strong> oferecem um recurso para a ligação da saída padrão de um processo com a entrada padrão de outro, chamado <em>pipe</em>: </a></em></p>
<pre><em><a name="pipe"><strong>$</strong> ls<strong>|</strong>wc</a></em></pre>
<p><em><a name="pipe"> No exemplo a saída do ls está sendo usada como entrada do wc. Note que o shell dispara os dois processos ao mesmo tempo. Se o primeiro estiver produzindo saída numa taxa superior à que o segundo lê, o sistema operacional paralizará o primeiro sempre que o buffer que armazena o tráfego estiver cheio. Isso significa, por exemplo, que um pipe pode ser usado mesmo quando o volume total da saída do primeiro processo é extraordinariamente grande, por exemplo quando se tenta localizar informações de arquivos deletados através de um dump de todos os setores do disco. </a></em></p>
<p><em><a name="pipe"> </a></em></p>
<hr /><em><a name="comms"> </a></em></p>
<h2><em><a name="comms">Comunicação Serial e Paralela </a></em></h2>
<p><em><a name="comms">O <strong>Unix</strong> apresenta as portas de comunicação seriais e paralelas na forma de <em>arquivos especiais. Já vimos um exemplo do seu uso no ítem <em>Redirecionamento da Entrada e da Saída</em>, em que fizemos a impressão da saída de um comando. </em></a></em></p>
<p><em><a name="comms"><em> Na comunicação entre dois computadores, utiliza-se freqüentemente portas seriais, e às vezes também as paralelas. Em muitos casos, quando a distância entre os dois é grande, haverá uso de modems, e eventualmente também de uma linha telefônica. Através de três exemplos práticos pode-se ter um bom panorama do uso de comunicação serial no <strong>Unix</strong>. Como os procedimentos variam um pouco dependendo das plataformas em uso, só é possível indicá-los de forma genérica: </em></a></em></p>
<p><em><a name="comms"><em><strong>a) Adição de um terminal</strong> </em></a></em></p>
<ol>
<li><em><a name="comms"><em> Conectar a serial do terminal com a da máquina <strong>Unix</strong>. </em></a></em></li>
<li><em><a name="comms"><em> Disparar no <strong>Unix</strong> a variante do <strong>getty</strong> disponível. </em></a></em></li>
<li><em><a name="comms"><em> Logar no terminal. </em></a></em></li>
<li><em><a name="comms"><em>Transferir arquivos se o terminal oferecer esse recurso. </em></a></em></li>
</ol>
<p><em><a name="comms"><em><strong>b) Conexão a um sistema remoto</strong> </em></a></em></p>
<ol>
<li><em><a name="comms"><em> Disparar algum emulador de terminal disponível. </em></a></em></li>
<li><em><a name="comms"><em>Selecionar a serial em que o modem está conectado. </em></a></em></li>
<li><em><a name="comms"><em>Configurar o modo de operação da serial (velocidade, bits). </em></a></em></li>
<li><em><a name="comms"><em>Configurar o modem através de comandos <strong>AT</strong>, se necessário. </em></a></em></li>
<li><em><a name="comms"><em> Instruir o modem para discar, com <strong>ATD</strong> </em></a></em></li>
<li><em><a name="comms"><em> Aguardar a negociação. </em></a></em></li>
<li><em><a name="comms"><em> Logar. </em></a></em></li>
</ol>
<p><em><a name="comms"><em><strong>c) Estabelecimento de um <em>link ppp</em></strong> </em></a></em></p>
<ol>
<li><em><a name="comms"><em> Executar a conexão ao sistema remoto como indicada acima. </em></a></em></li>
<li><em><a name="comms"><em> Iniciar o ppp no sistema remoto. </em></a></em></li>
<li><em><a name="comms"><em> Disparar o pppd localmente. </em></a></em></li>
</ol>
<p><em><a name="comms"><em> Em <strong>PCs</strong>, os conectores externos das portas seriais são conectores <strong>DB-9</strong> ou <strong>DB-25</strong> macho, e os das paralelas são <strong>DB-25</strong> fêmea. </em></a></em></p>
<hr /><em><a name="tcpcf"> </a></em></p>
<h2><em><em><a name="tcpcf">Configuração do TCP/IP </a></em></em></h2>
<p><em><em><a name="tcpcf"> Numa rede TCP/IP, a cada máquina está associado um <em>número IP</em>, que é um inteiro de 32 bits, normalmente escrito na forma de <em>octetos</em>, como <strong>192.168.0.5</strong>. A cada máquina está associado um <em>nome</em>, como por exemplo <strong>marte</strong> ou <strong>pimenta</strong>. </a></em></em></p>
<p><em><em><a name="tcpcf"> A <em>atribuição</em> tanto do número quanto do nome é feita durante o processo de boot, a partir da <em>especificação</em> deles feita através da edição manual de arquivos de configuração e/ou do uso de aplicativos de gerenciamento do sistema específicos de cada plataforma. </a></em></em></p>
<p><em><em><a name="tcpcf"> Na verdade, o número IP não está associado à <em>máquina</em>, mas a uma determinada <em>interface</em> dela. Via de regra, a interface envolvida é a <em>ethernet</em>. Tanto para exibir quanto para setar manualmente o número IP de uma interface usa-se o comando <strong>ifconfig</strong>. Por exemplo, o comando: </a></em></em></p>
<pre><em><em><a name="tcpcf"><strong>$</strong> <strong>ifconfig -a</strong></a></em></em></pre>
<p><em><em><a name="tcpcf">irá listar todas as interfaces com informações de cada uma. A interface ethernet costuma chamar-se <strong>le0</strong> (Solaris) ou <strong>eth0</strong> (Linux). Além do ethernet, é comum usar-se portas seriais para criar interfaces <strong>TCP/IP</strong>, principalmente para criar links com linhas telefônicas. As placas ethernet costuma oferecer dois ou mais tipos de conectores. Ela pode ou não descobrir automaticamente qual está em uso. Em caso negativo, você deverá informá-la, o que habitualmente é feito através de um software de configuração que acompanha a placa. </a></em></em></p>
<p><em><em><a name="tcpcf"> O passo seguinte é a configuração das <em>rotas</em>. Através delas a máquina sabe por onde enviar datagramas a fim de que eles cheguem em seus destinos. Equivale de certa forma à sinalização do tráfego urbano, com placas indicativas da direção a tomar para atingir cada destino (<em>Ponte do Limão à esquerda</em>, ou <em>Avenida Bandeirantes em frente</em>, etc). </a></em></em></p>
<p><em><em><a name="tcpcf"> Cada rota envolve um <em>destino</em>, uma <em>máscara</em>, um <em>gateway</em> e uma <em>interface</em>. Pode-se exibir todas elas através do comando <strong>netstat</strong>: </a></em></em></p>
<pre><em><em><a name="tcpcf"><strong>$ netstat -r</strong>
Destination Gateway Genmask Iface
192.168.1.0 * 255.255.255.0 eth0
127.0.0.0 * 255.0.0.0 lo
default 192.168.1.1 0.0.0.0 eth0
</a></em></em></pre>
<p><em><em><a name="tcpcf"> Suponha que você deseja atingir a máquina <strong>192.168.1.7</strong>. A aplicação da tabela de rotas indica, através de uma operação <strong>e</strong> bit-a-bit entre <strong>192.168.1.7</strong> e a máscara <strong>255.255.255.0</strong>, que deve ser usada a primeira rota. Como não há gateway, a comunicação será feita diretamente através do ethernet. </a></em></em></p>
<p><em><em><a name="tcpcf"> Se o destino agora for <strong>200.136.35.65</strong>, as duas primeiras rotas não nos servirão (experimente aplicar o <strong>e</strong> como no caso anterior). Portanto será usada a rota default, e como ela especifica um gateway, a comunicação terá que ser feita <em>através</em> dele. Assim, toda vez que se pretender enviar alguma informação para o <strong>200.136.35.65</strong>, esta será enviada antes para o gateway <strong>192.168.1.1</strong>, <em>na esperança</em> de que este consiga roteá-la para o seu destino. </a></em></em></p>
<hr /><em><em><a name="tcps"> </a></em></em></p>
<h2><em><em><a name="tcps">Serviços TCP/IP </a></em></em></h2>
<p><em><em><a name="tcps"> Atualmente é comum as pessoas confundirem Internet com a teia mundial <strong>WWW</strong>, entretanto muito antes de surgir a teia, a Internet já usava um sem-número de serviços construídos a partir dos protocolos de transporte <strong>TCP</strong> e <strong>UDP</strong>. </a></em></em></p>
<p><em><em><a name="tcps"> Um <em>circuito TCP</em> entre duas máquinas equivale a um <em>pipe</em> duplo entre dois processos, cada um rodando em uma das máquinas. O <em>telnet</em> é um típico serviço que se utiliza desse recurso, a fim de criar sessões remotas. Pode-se exibir todas os circuitos <strong>TCP</strong> ativos através do comando <strong>netstat</strong>: </a></em></em></p>
<pre><em><em><a name="tcps"><strong>$</strong> <strong>netstat -t</strong></a></em></em></pre>
<p><em><em><a name="tcps"> O <em>FTP</em>, por sua vez, cria <em>dois</em> circuitos, utilizando um para envio de comandos e outro de dados. Através do uso de alguns comandos simples, permite transferir arquivos de ou para uma máquina remota. Os principais comandos do <strong>FTP</strong> são: </a></em></em></p>
<table width="100%">
<tbody>
<tr>
<td width="10%"><strong>asc,bin</strong><br />
<strong>hash</strong><br />
<strong>get,put</strong><br />
<strong>mget,mput</strong><br />
<strong>prompt</strong></td>
<td width="90%">modo de transferência texto/binário<br />
faz o display de um &#8220;#&#8221;a cada 1kb transferido<br />
transfere de/para a máquina remota o arquivo especificado<br />
idem, múltiplos arquivos<br />
liga/desliga o modo interativo</td>
</tr>
</tbody>
</table>
<hr /><em><em><a name="X"> </a></em></em></p>
<h2><em><em><a name="X"> Disparo do Xwindows e das suas aplicações </a></em></em></h2>
<p><em><em><a name="X"> O disparo do       <strong>X</strong> é desnecessário quando o sistema opera num <em>runmode</em> em que o <strong>X</strong> está permanentemente ativo. Nesse caso, o próprio login é feito numa janela, ao invés de no console no modo texto. </a></em></em></p>
<p><em><em><a name="X"> Quando for necessário disparar o <strong>X</strong> manualmente, via de regra haverá dois ou três scripts já preparados para isso, como o <strong>startx</strong> ou o <strong>openwin</strong>. O que eles fazem basicamente é definir uma série de parâmetros e executar o <strong>xinit</strong>, que por sua vez dispara o <em>Xserver</em> e o <em>Window Manager</em>. </a></em></em></p>
<p><em><em><a name="X">Convém não perder de vista que o <strong>Xwindows</strong> é um sistema cliente-servidor. O <em>Xserver</em> é o programa que conhece o hardware gráfico, é capaz de colocar o display no modo desejado, e desenhar nele. As aplicações <em>conectam</em> o Xserver através de um circuito <strong>TCP</strong> (por exemplo) e enviam a ele comandos através dos quais desenham as suas janelas e o conteúdo delas. O <em>Window Manager</em> é responsável por desenhar as molduras das janelas, criar menus de aplicações, e controlar o foco. </a></em></em></p>
<p><em><em><a name="X"> Assim, é natural que no disparo de cada aplicação seja necessário especificar qual é o server a ser utilizado. Isso normalmente se faz através da opção de linha de comando <strong>-display</strong>, ou através da variável de environment <strong>DISPLAY</strong>. </a></em></em></p>
<pre><em><em><a name="X"><strong>$</strong> xterm <strong>-display</strong> 192.168.0.1:0.0
<strong>$ DISPLAY=</strong>192.168.0.1:0.0; export <strong>DISPLAY</strong>; xterm
</a></em></em></pre>
<p><em><em><a name="X"> Quando o Xserver está rodando numa máquina <strong>Unix</strong>, a permissão para um cliente usá-lo é dada através do comando <strong>xhost</strong>: </a></em></em></p>
<pre><em><em><a name="X"><strong>$ xhost</strong> +192.168.1.5 (autoriza o cliente 192.168.1.5)
<strong>$ xhost</strong> -192.168.1.5 (desautoriza o cliente 192.168.1.5)
<strong>$ xhost</strong> (lista os clientes autorizados)
</a></em></em></pre>
<p><em><em><a name="X"> Pode-se autorizar permanentemente um cliente a usar um determinado Xserver adicionando-o ao arquivo <strong>/etc/X0.hosts</strong> (um cliente por linha). </a></em></em></p>
<p><em><em><a name="X">Ao longo dos anos foram sendo criados inúmeros Window Managers diferentes para o Xwindows. Algumas vezes além do window manager foram criadas também complexas bibliotecas oferecendo serviços de alto nível que além de simplificar o trabalho de programação tamém permitem estandardizar o aspecto visual e os recursos das janelas das aplicações. Um dos produtos mais conhecidos dessa linha é o Motif. O advento do Free Software criou outras opções, sendo as mais em voga atualmente o <strong>GTK</strong> e o <strong>QT</strong>, que são utilizados respectivamente pelo <strong>GNOME</strong> e pelo <strong>KDE</strong>. </a></em></em></p>
<hr /><em><em><a name="init"> </a></em></em></p>
<h2><em><em><a name="init">Procedimentos de boot e o init </a></em></em></h2>
<p><em><em><a name="init"> O boot do       <strong>Unix</strong> consiste inicialmente na carga e execução do <em>kernel</em>. Em seguida, é disparado o processo <strong>init</strong>, que segue as instruções do arquivo <strong>/etc/inittab</strong>, que portanto é o ponto de partida para tudo o que se pretenda configurar a nível de disparo de processos ao longo do boot. </a></em></em></p>
<p><em><em><a name="init"> O <strong>inittab</strong> não é um script como o <strong>AUTOEXEC.BAT</strong>, mas uma lista de ações, algumas delas de valor permanente para todo o curso da operação do sistema. Cada linha válida representa um processo que o <strong>init</strong> deve disparar. O termo <strong>respawn</strong> significa que, além de disparar, o <strong>init</strong> deverá monitorar o processo e, se porventura ao longo da operação do sistema ele for encerrado, o <strong>init</strong> deverá redispará-lo. </a></em></em></p>
<p><em><em><a name="init"> Via de regra as linhas do <strong>inittab</strong> referem-se ou à chamada de scripts de configuração inicial do sistema, que são executados apenas uma vez, ou aos processos de controle de login no sistema, que são redisparados sempre que ocorre um logout. O <strong>inittab</strong> inclui ainda o conceito de <em>runlevel</em>, o que cria a flexibilidade de se poder inicializar a máquina em um de vários possíveis modos de operação. Na prática, costuma haver três modos principais, o <em>single-user</em>, utilizado para manutenção, um <em>gráfico</em> e um <em>não gráfico</em>. </a></em></em></p>
<p><em><em><a name="init">Quanto aos scripts de configuração (normalmente são os arquivos e/ou diretórios <strong>/etc/rc.*</strong>, dependendo da plataforma a mecânica de disparo deles pode ser bastante complexa. Note que cada runlevel pode disparar ou deixar de disparar alguns scripts, a fim de estabelecer o modo de operação desejado. Em quase todas as versões mais recentes do Linux essa mecânica segue o padrão dos diretórios <strong>/etc/rc.d/rcN.d</strong>, onde <strong>N</strong> é cada um dos runlevels. O conteúdo desses diretórios são links para cada um dos scripts de ativação ou desativação de serviços básicos (interfaces de rede, servidor de email, etc), com números embutidos nos nomes dos links, a fim de definir a ordem em que devem ser processados. </a></em></em></p>
<hr /><em><em><a name="refs"> </a></em></em></p>
<h2><em><em><a name="refs">Referências </a></em></em></h2>
<p><em><em><a name="refs">Virtualmente qualquer informação técnica sobre sistemas Unix-like pode ser obtida na Teia Mundial. Estou colocando aqui apenas um referência clássica (o Livro do Bach), e um link para uma lista de pontos de entrada de documentação sobre Linux. </a></em></em></p>
<p><em><em><a name="refs">[1] Bach, M. J. The Design of the Unix Operating System, Prentice-Hall, 1986. </a></em></em></p>
<p><em><em><a name="refs">[2] Alguns links de Linux, inclusive para materiais em português, estão disponíveis em </a><a href="http://www.ime.usp.br/%7Eueda/ldoc/links.html"> http://www.ime.usp.br/~ueda/ldoc/links.html </a>. </em></em></p>
<p style="text-align: right;"><em><em>Fonte: </em></em>http://www.ufrgs.br</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/05/16/comandos-console/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A história do Linux</title>
		<link>http://blog.deserv.info/2010/04/30/a-historia-do-linux/</link>
		<comments>http://blog.deserv.info/2010/04/30/a-historia-do-linux/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 18:23:51 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Earl Chews]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Kernel Linux]]></category>
		<category><![CDATA[Linus Torvalds na Usenet]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Root Linux]]></category>
		<category><![CDATA[Sistema Operacional]]></category>
		<category><![CDATA[Unuix]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=356</guid>
		<description><![CDATA[O nome Linux surgiu da mistura de Linus + Unix. Linus é o nome do criador do Linux, Linus Torvalds. E Unix, é o nome de um sistema operacional de grande porte, no qual contaremos sua história agora, para que você entenda melhor a do Linux.

A origem do Unix tem ligação com o sistema operacional Multics, projetado na década de 1960. Esse projeto era realizado pelo Massachusets Institute of Technology (MIT), pela General Eletric (GE) e pelos laboratórios Bell (Bell Labs) e American Telephone na Telegraph (AT&#038;T). A intenção era de que o Multics tivesse características de tempo compartilhado (vários usuários compartilhando os recursos de um único computador), sendo assim o sistema mais arrojado da época. Em 1969, já existia uma versão do Multics rodando num computador GE645.  ,]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F04%252F30%252Fa-historia-do-linux%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FcPMzRd%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22A%20hist%C3%B3ria%20do%20Linux%22%20%7D);"></div>
<p>O nome Linux surgiu da mistura de Linus + Unix. Linus é o nome do criador          do Linux, Linus Torvalds. E Unix, é o nome de um sistema operacional          de grande porte, no qual contaremos sua história agora, para que          você entenda melhor a do Linux.</p>
<p>A origem do Unix tem ligação com o sistema operacional          Multics, projetado na década de 1960. Esse projeto era realizado          pelo Massachusets Institute of Technology (MIT), pela General Eletric          (GE) e pelos laboratórios Bell (Bell Labs) e American Telephone          na Telegraph (AT&amp;T). A intenção era de que o Multics          tivesse características de tempo compartilhado (vários usuários          compartilhando os recursos de um único computador), sendo assim          o sistema mais arrojado da época. Em 1969, já existia uma          versão do Multics rodando num computador GE645.  <span id="more-356"></span></p>
<p>Ken Thompsom era um pesquisador do Multics e trabalhava na Bell Labs.          No entanto, a empresa se retirou do projeto tempos depois, mas ele continuou          seus estudos no sistema. Desde então, sua idéia não          era continuar no Multics original e sim criar algo menor, mas que conservasse          as idéias básicas do sistema. A partir daí, começa          a saga do sistema Unix. Brian Kernighan, também pesquisador da          Bell Labs, foi quem deu esse nome.</p>
<p>Em 1973, outro pesquisador da Bell Labs, Dennis Ritchie, rescreveu todo          o sistema Unix numa linguagem de alto nível, chamada C, desenvolvida          por ele mesmo. Por causa disso, o sistema passou a ter grande aceitação          por usuários externos à Bell Labs.</p>
<p>Entre 1977 e 1981, a AT&amp;T, alterou o Unix, fazendo algumas mudanças          particulares e lançou o System III. Em 1983, após mais uma          série de modificações, foi lançado o conhecido          Unix System IV, que passou a ser vendido. Até hoje esse sistema          é usado no mercado, tornando-se o padrão internacional do          Unix. Esse sistema é comercializado por  empresas como IBM, HP,          Sun, etc. O Unix, é um sistema operacional muito caro e é          usado em computadores poderosos (como mainframes) por diversas multinacionais.</p>
<p><strong>Qual a relação entre o Unix e o Linux, ou melhor, entre          o Unix e Linus Torvalds?</strong></p>
<p>Para responder essa pergunta, é necessário falar de outro          sistema operacional, o Minix. O Minix é uma versão do Unix,          porém, gratuita e com o código fonte disponível.          Isso significa que qualquer programador experiente pode fazer alterações          nele. Ele foi criado originalmente para uso educacional, para quem quisesse          estudar o Unix &#8220;em casa&#8221;. No entanto, vale citar que ele foi          escrito do &#8220;zero&#8221; e apesar de ser uma versão do Unix,          não contém nenhum código da AT&amp;T e por isso pode          ser distribuído gratuitamente.</p>
<p>A partir daí, &#8220;entra em cena&#8221; Linus Torvalds. Ele era          um estudante de Ciências da Computação da Universidade          de Helsinki, na Filândia e em 1991, por hobby, Linus decidiu desenvolver          um sistema mais poderoso que o Minix. Para divulgar sua idéia,          ele enviou uma mensagem a um grupo pela Usenet (uma espécie de          antecessor da  Internet). A mensagem pode ser vista no final deste artigo.          No mesmo ano, ele disponibilizou a versão do kernel (núcleo          dos sistemas operacionais) 0.02 e continuou trabalhando até que          em 1994 disponibilizou a versão 1.0. Até o momento em que          este artigo estava sendo escrito, a versão atual era a 2.6.</p>
<p>O Linux é um sistema operacional livre e é uma re-implementação          das especificações POSIX (padronização da          IEEE, Instituto de Engenharia Elétrica e Eletrônica) para          sistemas com extensões System V e BSD. Isso signfica que o Linux          é bem parecido com Unix, mas não vem do mesmo lugar e foi          escrito de outra forma.</p>
<p><strong>Mas por que o Linux é gratuito?</strong></p>
<p>Linus Torvalds, quando desenvolveu o Linux, não tinha a inteção          de ganhar dinheiro e sim fazer um sistema para seu  uso pessoal, que atendesse          suas necessidades. O estilo de desenvolvimento que foi adotado foi o de          ajuda coletiva. Ou seja, ele coordena os esforços coletivos de          um grupo para a melhoria do sistema que criou. Milhares de pessoas contribuem          gratuitamente com o desenvolvimento do Linux, simplesmente pelo prazer          de fazer um sistema operacional melhor.</p>
<p><strong>Licença GPL</strong></p>
<p>O Linux está sob a licença GPL, permite que qualquer um          possa usar os programas que estão sob ela, com o compromisso de          não tornar os programas fechados e comercializados. Ou seja, você          pode alterar qualquer parte do Linux, modificá-lo e até          comercialiazá-lo, mas você não pode fechá-lo          (não permitir que outros usuários o modifiquem) e vendê-lo.</p>
<p><strong>GNU</strong></p>
<p>A história do Linux não termina aqui. É necessário          saber também o que é GNU. GNU é um projeto que começou          em 1984 com o objetivo de desenvolver um sistema operacional compatível          com os de padrão Unix. O Linux em si, é só um kernel.          Linus Torvalds, na mesma época que escrevia o código-fonte          do kernel, começou a usar programas da GNU para fazer seu sistema.          Gostando da idéia, resolveu deixar seu kernel dentro da mesma licença.</p>
<p>Mas, o kernel por si só, não é usável. O          kernel é a parte mais importante, pois é o núcleo e          serve de comunicador entre o usuário e o computador. Por isso,          com o uso de variantes dos sistemas GNU junto com o kernel, o Linux se          tornou um sistema operacional.</p>
<p>Mas você pode ter ficado confuso agora. O que é o Linux          então? O que é GNU? Simplesmente, várias pessoas          uma versões modificadas dos sistemas GNU, pensando que é          o Linux em si. Os programadores que trabalham com ele, sabem que o Linux,          é basicamente o kernel, conforme já foi dito, mas todos,          chamam esse conjunto de Linux (há quem defenda o uso de GNU/Linux).</p>
<p>Finalizando, o projeto GNU é um dos responsáveis pelo  <a href="http://www.infowester.com/linux5.php#">sucesso</a> do Linux, pois graças à �mistura� de seus programas com          o kernel desenvolvido por Linus Torvalds, o Linux vem mostrando porque          é um sistema operacional digno de habilidades insuperáveis          por qualquer outro sistema.</p>
<p><strong>Mensagem de Linus Torvalds na Usenet</strong></p>
<p>Abaixo segue a mensagem publicada por Linus Torvalds via Usenet na divulgação         de seu projeto. A tradução para português foi disponibilizada         logo abaixo da mensagem em inglês. Ambas as mensagens foram retiradas         deste link: http://www.rootlinux.com.br/documentos/downloads/Historia_do_Linux.txt.</p>
<p><em>De:Linus Benedict Torvalds         (torvalds@klaava.Helsinki.FI)<br />
Assunto:[comp.os.minix] Free minix-like kernel sources for 386-AT<br />
Newsgroups:comp.archives<br />
Data:1991-10-05 09:24:25 PST<br />
</em></p>
<p><em>Archive-name: auto/comp.os.minix/Free-minix-like-kernel-sources-for-386-AT</em></p>
<p><em>Do you pine for the nice days of minix-1.1, when men were men and         wrote<br />
their own device drivers? Are you without a nice project and just dying<br />
to cut your teeth on a OS you can try to modify for your needs? Are you<br />
finding it frustrating when everything works on minix? No more all-<br />
nighters to get a nifty program working? Then this post might be just<br />
for you <img src='http://blog.deserv.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </em></p>
<p><em>As I mentioned a month(?) ago, I&#8217;m working on a free version of a<br />
minix-lookalike for AT-386 computers. It has finally reached the stage<br />
where it&#8217;s even usable (though may not be depending on what you want),<br />
and I am willing to put out the sources for wider distribution. It is<br />
just version 0.02 (+1 (very small) patch already), but I&#8217;ve successfully<br />
run bash/gcc/gnu-make/gnu-sed/compress etc under it. </em></p>
<p><em>Sources for this pet project of mine can be found at nic.funet.fi<br />
(128.214.6.100) in the directory /pub/OS/Linux. The directory also<br />
contains some README-file and a couple of binaries to work under linux<br />
(bash, update and gcc, what more can you ask for <img src='http://blog.deserv.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Full kernel<br />
source is provided, as no minix code has been used. Library sources are<br />
only partially free, so that cannot be distributed currently. The<br />
system is able to compile &#8220;as-is&#8221; and has been known to work.         Heh.<br />
Sources to the binaries (bash and gcc) can be found at the same place         in<br />
/pub/gnu. </em></p>
<p><em>ALERT! WARNING! NOTE! These sources still need minix-386 to be compiled<br />
(and gcc-1.40, possibly 1.37.1, haven&#8217;t tested), and you need minix to<br />
set it up if you want to run it, so it is not yet a standalone system<br />
for those of you without minix. I&#8217;m working on it. You also need to be<br />
something of a hacker to set it up (?), so for those hoping for an<br />
alternative to minix-386, please ignore me. It is currently meant for<br />
hackers interested in operating systems and 386&#8242;s with access to minix.</em></p>
<p><em>The system needs an AT-compatible harddisk (IDE is fine) and EGA/VGA.         If<br />
you are still interested, please ftp the README/RELNOTES, and/or mail         me<br />
for additional info.</em></p>
<p><em>I can (well, almost) hear you asking yourselves &#8220;why?&#8221;.         Hurd will be<br />
out in a year (or two, or next month, who knows), and I&#8217;ve already got<br />
minix. This is a program for hackers by a hacker. I&#8217;ve enjouyed doing<br />
it, and somebody might enjoy looking at it and even modifying it for<br />
their own needs. It is still small enough to understand, use and<br />
modify, and I&#8217;m looking forward to any comments you might have. </em></p>
<p><em>I&#8217;m also interested in hearing from anybody who has written any of         the<br />
utilities/library functions for minix. If your efforts are freely<br />
distributable (under copyright or even public domain), I&#8217;d like to hear<br />
from you, so I can add them to the system. I&#8217;m using Earl Chews estdio<br />
right now (thanks for a nice and working system Earl), and similar works<br />
will be very wellcome. Your (C)&#8217;s will of course be left intact. Drop         me<br />
a line if you are willing to let me use your code.<br />
</em></p>
<p><strong>Tradução para o português:</strong></p>
<p><em>Você sente falta dos dias do Minix/1.1 quando homens eram homens         e escre-<br />
viam seus próprios drivers? Você está sem nenhum projeto         legal e está<br />
ansioso para mexer num sistema operacional que você possa modificar<br />
para atender às suas necessidades? Você está achando         chato quando tudo<br />
funciona no minix? Não ficar mais a noite inteira tentando arrumar<br />
um programa legal? Então esta mensagem pode ser para você.</em></p>
<p><em>Como eu disse há um mês (?) atrás, eu estou trabalhando         numa versão<br />
grátis dum similar para o Minix, para computadores AT-386. Ela<br />
finalmente atingiu o estágio onde já é usável         (apesar de talvez<br />
não ser, dependendo do que você quer), e eu estou a fim de         colocar<br />
(online) o código fonte para uma distribuição melhor.         É apenas a ver-<br />
são 0.02 (com mais um patch) mas eu já rodei bash/gcc/gnu-make/gnu-sed/<br />
compress dentro dela.</em></p>
<p><em>Códigos fontes para este hobby meu podem ser encontradas em         nic.funet.fi<br />
(128.214.6.100) no diretório /pub/OS/Linux. O diretório         também contem<br />
alguns arquivos README e um conjunto de arquivos para permitir<br />
trabalho no Linux (bash, update e GCC, o que mais você queria? <img src='http://blog.deserv.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .<br />
O código-fonte do kernel está disponível por inteiro,         porque nenhum<br />
do código do Minix foi usado. Os códigos-fontes das bibliotecas         são<br />
apenas parcialmente abertos, portanto não podem ser distribuidos.         O<br />
sistema pode compilar &#8220;como está&#8221; e é provado         que funciona. (hehehe)<br />
Código-fonte dos programas (bash e gcc) podem ser encontrados no         mesmo FTP<br />
em /pub/gnu.</em></p>
<p><em>PERIGO! AVISO! NOTA! Este código fonte ainda precisa do Minix/386         para<br />
compilar (e o gcc-1.4.0, ou o 1.3.7, não testei) e você precisa         do Minix<br />
para configurá-lo, então ele ainda não é um         sistema por si só para vocês<br />
que não tem o Minix. Eu já estou trabalhando nisto. Você         também precisa<br />
ter um jeito hacker (?) para configurá-lo, então para aqueles         torcendo<br />
por uma alternativa ao Minix/386, me esqueçam. Ele é atualmente         para<br />
hackers com interesse no 386 e no Minix.</em></p>
<p><em>O sistema precisa de um monitor EGA/VGA e um disco rígido compatível         (IDE<br />
serve). Se você ainda está interessado, pegue no FTP o readme/relnotes<br />
e/ou me mande um e-mail para saber mais.</em></p>
<p><em>Eu posso (bem, quase) ouvir vocês perguntando para si mesmos:         porquê? O Hurd<br />
vai sair em um ano (ou dois, ou em um mês, quem sabe), e eu já         tenho o Minix.<br />
Este é um programa feito por e para hackers. Eu gostei de fazer         ele, e alguém<br />
pode começar a olhá-lo e até mesmo modificá-lo         às suas necessidades. Ele ainda é<br />
pequeno para entender, usar e modificar, e eu estou otimista em relação         a algum<br />
comentário que vocês tenham a fazer. </em></p>
<p><em>Eu também estou interessado em alguém que tenha escrito          alguns dos utilitários/<br />
bibliotecas para o Minix. Se o seu trabalho pode ser distribuído          publicamente<br />
(registrado ou mesmo domínio público), eu gostaria de ouvir          comentários de vocês,<br />
e para que eu possa adicioná-los ao sistema. Eu estou usando o          Earl Chews estdio<br />
agora mesmo (obrigado, Earl, por um sistema que funciona), e trabalhos          similares<br />
seriam bem-vindos. Seus (C)&#8217;s obviamente serão mantidos. Me deixe          uma mensagem<br />
se você quer deixar que a gente use seu código.</em></p>
<p><em>Escrito por Emerson Alecrim</em></p>
<p style="text-align: right;"><em>Fonte: </em>http://www.infowester.com</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/04/30/a-historia-do-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O kernel do Linux</title>
		<link>http://blog.deserv.info/2010/04/30/o-kernel-do-linux/</link>
		<comments>http://blog.deserv.info/2010/04/30/o-kernel-do-linux/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 13:20:42 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Andy Tannenbaum]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Kernel do Linux]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Linus Torvalds]]></category>
		<category><![CDATA[Openso]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=354</guid>
		<description><![CDATA[Independente de qual seja, todo sistema operacional possui um kernel. Trata-se de um item fundamental, que antes do Linux era conhecido apenas por estudantes de computação de grandes universidades ou por desenvolvedores da área. Após o surgimento do Linux, o termo kernel ficou mais conhecido e qualquer um que já tenha se aventurado no Linux provavelmente sabe de sua existência. Porém, os conceitos que envolvem o kernel não são claros a muita gente e, por isso, poucas pessoas sabem exatamente o que é kernel. O objetivo deste artigo é dar explicações sobre isso, mas com ênfase no kernel do Linux.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F04%252F30%252Fo-kernel-do-linux%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9IJ1we%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22O%20kernel%20do%20Linux%22%20%7D);"></div>
<p><strong>Introdução</strong><br />
Independente de qual seja, todo sistema operacional possui um kernel.          Trata-se de um item fundamental, que antes do Linux era conhecido apenas          por estudantes de  computação de grandes universidades ou          por desenvolvedores da área. Após o surgimento do Linux,          o termo <em>kernel</em> ficou mais conhecido e qualquer um que já          tenha se aventurado no Linux provavelmente sabe de sua existência.          Porém, os conceitos que envolvem o kernel não são          claros a muita gente e, por isso, poucas pessoas sabem exatamente o que          é kernel. O objetivo deste artigo é dar explicações          sobre isso, mas com ênfase no kernel do Linux.<span id="more-354"></span></p>
<p><strong>O que é kernel</strong></p>
<p>Kernel pode ser entendido com uma série de arquivos escritos em          linguagem C e em linguagem Assembly que constituem o núcleo do          sistema operacional. É o kernel que controla todo o hardware do          computador. Ele pode ser visto como uma interface entre os programas e          todo o hardware. Cabe ao kernel as tarefas de permitir que todos os processos          sejam executados pela CPU e permitir que estes consigam compartilhar a          memória do computador.</p>
<p><strong>O kernel do Linux</strong></p>
<p><img src="http://www.infowester.com/img_art/linus_torvalds.jpg" alt="Linus Torvalds" width="151" height="168" align="left" />Para          entender melhor tudo o que envolve o kernel do Linux é interessante          ver um pouco da história do sistema (para conhecer a história          completa, <a href="http://blog.deserv.info/2010/04/30/a-historia-do-linux/" target="_blank">clique aqui</a>). O kernel          do Linux foi idealizado pelo finlandês Linus Torvalds, em 1991.          Torvalds era um estudante de ciência da computação          que, em seus estudos, teve a necessidade de criar uma nova versão          do Minix, um sistema operacional baseado no Unix e desenvolvido por Andy          Tannenbaum.</p>
<p>Linus começou a trabalhar nesse projeto e, quando desenvolveu          algo concreto, enviou uma mensagem para um grupo de usuários do          Minix na Usenet (a antecessora da  internet). Na mensagem, Torvalds notificou          sobre sua criação e avisou que disponibilizaria o código-fonte          do que tinha desenvolvido a todos os interessados.</p>
<p>O que Linus Torvalds tinha criado, na verdade, era a primeira versão         do kernel do Linux. Assim, falando grossamente, bastava juntar uma série         de aplicativos com o kernel para que um sistema operacional fosse criado.</p>
<p>Linus Torvalds tinha vontade de ter um sistema operacional no qual fosse          possível alterar conforme a necessidade. Ao criar a &#8220;nova          versão&#8221; do Minix, Torvalds tinha desenvolvido um meio de usar          o hardware de um computador por software e, portanto, restava agora a          cada interessado adicionar os aplicativos e as funcionalidades desejadas,          para assim constituir um sistema operacional. Em outras palavras, o &#8220;chassis&#8221;          do sistema estava criado, bastava adicionar a &#8220;carroceria&#8221;.</p>
<p>O nome Linux é uma mistura de Linus com Unix. E como Linux é,          na verdade, o nome de um kernel, talvez o InfoWester devesse dar o nome          de &#8220;<strong>O kernel Linux</strong>&#8221; ao título deste artigo. Devido          a essa questão &#8211; sobre o que de fato o nome Linux representa &#8211;          o correto é dar o nome GNU/Linux a todas as distribuições          desse sistema, uma vez que essas são constituídas pelo kernel          &#8211; o Linux &#8211; mais uma coleção de programas e aplicativos,          sendo que a quase totalidade desses softwares são baseados nos          conceitos da GNU. No          entanto, por questões de comodidade, convencionou-se a utilizar          o nome Linux para toda e qualquer distribuição.</p>
<p><strong>As versões do kernel</strong></p>
<p>Periodicamente, novas versões do kernel do Linux são lançadas.          Isso ocorre para prover melhorias em uma determinada função          da versão anterior, para corrigir vulnerabilidades e para adicionar          recursos ao kernel, principalmente compatibilidade com novos hardwares.</p>
<p>Cada versão do kernel é representada por 3 números          distintos separados por pontos, sendo que um quarto número pode          ser aplicado (você já saberá o porquê), por          exemplo: <strong>2<span style="color: #0000ff;">.</span>6<span style="color: #0000ff;">.</span>21<span style="color: #0000ff;">.</span><span style="color: #666666;">3</span></strong>.          O primeiro número indica a versão do kernel. Note que esse          número muda raramente: a última alteração          (até o fechamento deste artigo) ocorreu em 1996, quando o kernel          passou da versão 1 para a versão 2. O segundo número          indica a última revisão feita até o momento naquela          versão do kernel. O terceiro número, por sua vez, indica          uma revisão menor, como se fosse uma &#8220;revisão da última          revisão&#8221; do kernel. Note que o terceiro número pode          ser acompanhado de pequenas siglas. Uma que costuma aparecer com freqüência          é a sigla &#8220;rc&#8221; (<em>release candidate</em>), que indica          a disponibilização de uma versão ainda não          oficial, por exemplo: 2.6.22-rc1. Há siglas que apontam uma versão          trabalhada por um desenvolvedor em específico, como a &#8220;mm&#8221;,          que indica as alterações feitas por Andrew Morton.</p>
<p>Como já dito, um quarto número pode ser usado. Ele é          aplicado quando uma falha grave no kernel foi descoberta, sendo, portanto,          necessário atualizá-lo. Porém, não faz sentido          lançar uma revisão completa apenas por causa de algumas          correções, razão esta que levou à utilização          de um quarto número.</p>
<p>É importante frisar que antes da série 2.6.x, o esquema          de numeração do kernel tinha o seguinte esquema: se o segundo          número da representação fosse ímpar, significava          que aquela série ainda estava em desenvolvimento, ou seja, era          uma versão instável e em fase de testes e aperfeiçoamentos.          Se o número fosse par, significava que aquela série já          tinha estabilidade para ser disponibilizada para uso.</p>
<p>Mais uma nota importante: você não precisa usar sempre a          última versão do kernel. Só é recomendável          fazer uma atualização em caso de necessidade de compatibilidade          com novo hardware ou em casos de melhorias de recursos. Em alguns casos,          principalmente com  computadores antigos, o desempenho é melhor          se usado um kernel antigo. Em situações simples, talvez          seja melhor apenas aplicar um patch (uma correção para um          problema) do que adicionar um kernel novo.</p>
<p><strong>Compatibilidade</strong></p>
<p>O kernel do Linux permite que o sistema operacional seja compatível          com uma série de plataformas, desde palmtops até mainframes.          Até mesmo nos computadores da Apple é possível instalar          o Linux. As principais plataformas compatíveis são: Apple,          Sun, Sparc, Alpha, PowerPC, i386 ( Intel), ARM, entre outras. A foto abaixo          mostra o Linux rodando no videogame Nintendo DS:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.infowester.com/img_art/lin_ds.jpg" alt="Linux rodando no Nintendo DS" width="553" height="300" /></p>
<p>Também existe compatibilidade com sistemas de arquivos. Acredite,          apesar de não ser recomendável por questões de desempenho,          é possível instalar o Linux até mesmo em partições          FAT32. As principais compatibilidades neste aspecto são com os          seguintes sistemas de arquivos: FAT, FAT32, ext2, ext3,          ReiserFS, JFS, XFS, NTFS,          entre outros.</p>
<p><strong>Atuação do kernel</strong></p>
<p>Obviamente, o kernel &#8220;começa a trabalhar&#8221; no processo          de inicialização (boot) do sistema, a partir das instruções          que são lidas na MBR (<strong>M</strong>aster <strong>B</strong>oot <strong>R</strong>ecord),          um recurso responsável por indicar ao BIOS do computador como e          onde carregar o sistema operacional. Quando isso ocorre, o kernel começa          a detectar os dispositivos de hardware essenciais do computador, como          a placa de vídeo, por exemplo. Se até aí tudo ocorrer          sem problemas, toda a imagem do kernel passa a ser carregada. Findo esse          processo, o kernel checa a memória e a prepara para o uso através          de uma função de paginação. As interrupções          (IRQs), os discos, memória-cache, entre outros, são acionados          em seguida.</p>
<p>Após realizar todas essas etapas, o sistema operacional está         pronto para funcionar. O kernel carrega as funções responsáveis         por checar o que deve ser inicializado em nível de software e processos,         como, por exemplo, o conteúdo do arquivo /etc/init. Geralmente         o que é carregado é a tela de login do usuário.</p>
<p>Usuário logado, sistema operacional trabalhando&#8221; O kernel          agora executa suas funções, como a de controlar o uso da          memória pelos programas ou a de atender a chamada de uma interrupção          de hardware.</p>
<p>É interessante notar que as distribuições Linux          montam o kernel com recursos e drivers básicos para hardware, afinal          carregar o suporte a todo tipo de dispositivo é algo inviável.          O kernel ficaria extremamente grande e somente os drivers relacionados          ao hardware do computador em questão é que seriam usados.          Para lidar com esse tipo de problema, os drivers são carregados          como módulos após o kernel ser ativado. A questão          é que carregar recursos por módulo gera uma queda de desempenho          (pouco significativa em computadores rápidos) e, por isso, muitos          usuários preferem recompilar o kernel de seus sistemas para que          esse carregue os drivers junto com sua inicialização, ou          seja, sem usar módulos.</p>
<p><img src="http://www.infowester.com/img_art/kernel_loading.png" alt="Kernel carrregando" width="573" height="304" /><em><span style="font-size: xx-small;">Imagem          do kernel carregando</span></em></p>
<p><strong>Onde obter o kernel</strong></p>
<table border="0" width="179" align="right">
<tbody>
<tr>
<td bgcolor="#ffcc33">
<div><strong>.: Livros sugeridos :.</strong></div>
</td>
</tr>
<tr>
<td bgcolor="#ffffcc"><a rel="external nofollow" href="http://clicklog-af.shopping.uol.com.br/?urlRedir=http%3A%2F%2Fshopping.uol.com.br%2Fbusca.html%3Fsearch%3Dyes%26q%3Dlivro%20Desenvolvimento%20do%20Kernel%20do%20Linux&amp;urlReferer=www.infowester.com&amp;type=7&amp;idtURL=34010&amp;idtAd=19857&amp;caf=2884992fb5b04c4d8aa11189a7e3c25d&amp;idtLabel=12111" target="_blank"><strong>::</strong> Desenvolvimento do Kernel do Linux</a></td>
</tr>
<tr>
<td bgcolor="#ffffcc"><a rel="external nofollow" href="http://clicklog-af.shopping.uol.com.br/?urlRedir=http%3A%2F%2Fshopping.uol.com.br%2Fbusca.html%3Fsearch%3Dyes%26q%3Dlivro%20Understanding%20the%20Linux%20Kernel&amp;urlReferer=www.infowester.com&amp;type=7&amp;idtURL=34010&amp;idtAd=19857&amp;caf=2884992fb5b04c4d8aa11189a7e3c25d&amp;idtLabel=12111" target="_blank"><strong>::</strong> Understanding the Linux Kernel (inglês)</a></td>
</tr>
<tr>
<td bgcolor="#ffffcc"><a rel="external nofollow" href="http://clicklog-af.shopping.uol.com.br/?urlRedir=http%3A%2F%2Fshopping.uol.com.br%2Fbusca.html%3Fsearch%3Dyes%26q%3Dlivro%20sistemas%20operacionais%20modernos&amp;urlReferer=www.infowester.com&amp;type=7&amp;idtURL=34010&amp;idtAd=19857&amp;caf=2884992fb5b04c4d8aa11189a7e3c25d&amp;idtLabel=12111" target="_blank"><strong>::</strong> Sistemas Operacionais Modernos</a></td>
</tr>
<tr>
<td bgcolor="#ffcc33">
<div><span style="font-size: xx-small;">Via Shopping UOL</span></div>
</td>
</tr>
</tbody>
</table>
<p>Você pode baixar o código-fonte e o próprio kernel          do Linux a partir do site <a href="http://www.kernel.org/" target="_blank">www.kernel.org</a>.          Nesse endereço não só é possível baixar          a última versão como também versões um pouco          mais antigas. Por esse mesmo site também é possível          obter informações, reportar bugs e participar de listas          de discussão.</p>
<p><strong>Finalizando</strong></p>
<p>Aos que se interessam por esse tipo de estudo, entender o que é          o kernel de um sistema operacional e como ele funciona é algo realmente          fantástico. Talvez essa questão não seria tão          conhecida entre os adeptos da computação se o Linux não          fosse um sistema de código-fonte aberto. Graças a ele, qualquer          pessoa pode tirar proveito do sistema operacional, ou melhor, do kernel,          seja para estudar seu funcionamento, seja para usá-lo em seu cotidiano.          O kernel é o núcleo de um sistema operacional e assim, não          é errado dizer que o Linux é o coração das          distribuições GNU/Linux. Mas isso é pouco. O Linux,          mesmo que indiretamente, é um dos grandes responsáveis pela          divulgação das filosofias que regem a cultura do software          livre.</p>
<p><em>Escrito por Emerson Alecrim</em></p>
<p style="text-align: right;"><em>Fonte: </em>http://www.infowester.com</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/04/30/o-kernel-do-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Administração remota usando OpenVpn+NxServer</title>
		<link>http://blog.deserv.info/2010/04/28/administracao-remota-usando-openvpnnxserver/</link>
		<comments>http://blog.deserv.info/2010/04/28/administracao-remota-usando-openvpnnxserver/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 12:39:36 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Acesso Remoto]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[NxServer]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[OpenVPN]]></category>
		<category><![CDATA[PTPpoint-to-point-tunneling-protocol]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[TUN-TAP]]></category>
		<category><![CDATA[VNC]]></category>
		<category><![CDATA[XFree86]]></category>
		<category><![CDATA[Xorg]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=350</guid>
		<description><![CDATA[Durante algum tempo procurei uma forma segura para acessar meu desktop Linux do trabalho remotamente, a fim de facilitar na administração da rede. Ora ou outra, principalmente a noite e nos fim de semana, surgem problemas nos servidores ou no processamento que precisam ser resolvidos imediatamente. Para tal, precisava me locomover de casa até o trabalho, sendo que na maioria das vezes eram problemas simples, que poderiam ser resolvidos com poucos comandos ou configurações, e eu perdia um enorme tempo somente com a locomoção. Adicione a isso vários outros administradores (que na verdade são programadores e que utilizam Windows), necessitando acessar essa mesma rede para correções de erros ou configurações em programas quando eventual problema acontecia. ]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F04%252F28%252Fadministracao-remota-usando-openvpnnxserver%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FaBiQHO%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Administra%C3%A7%C3%A3o%20remota%20usando%20OpenVpn%2BNxServer%22%20%7D);"></div>
<p>Introdução</p>
<p>Durante algum tempo procurei uma forma segura para acessar meu desktop Linux do trabalho remotamente, a fim de facilitar na administração da rede. Ora ou outra, principalmente a noite e nos fim de semana, surgem problemas nos servidores ou no processamento que precisam ser resolvidos imediatamente. Para tal, precisava me locomover de casa até o trabalho, sendo que na maioria das vezes eram problemas simples, que poderiam ser resolvidos com poucos comandos ou configurações, e eu perdia um enorme tempo somente com a locomoção. Adicione a isso vários outros administradores (que na verdade são programadores e que utilizam Windows), necessitando acessar essa mesma rede para correções de erros ou configurações em programas quando eventual problema acontecia.  <span id="more-350"></span></p>
<p>Pensando numa forma de facilitar na administração da nossa rede, de forma remota, ou seja, a partir de qualquer lugar e independente da plataforma operacional usada para acessar (Linux ou Windows), é que resolvi pesquisar e me aprofundar no assunto.</p>
<p>Achei diversas &#8220;receitas de bolos&#8221; que mostravam como fazer, mas encontrei nenhuma que me satisfizesse por completo, não queria apenas um nível de segurança, como acesso direto por ssh, como também gostaria de acessar meu desktop, afinal o ambiente da empresa é misto, ou seja, temos servidores com Linux, AIX e Windows, e para administrar os serviços Windows necessito de acesso ao seu desktop.</p>
<p>Enfim, após muita pesquisa e quebra-cabeça, descobri uma solução com OpenVPN + NxServer, sendo seus serviços disponibilizados numa máquina com Linux no meu trabalho. Neste computador temos instalado:</p>
<ul>
<li> Ambiente desktop (KDE)</li>
</ul>
<p>Um pacote chamado rdesktop, que na verdade é uma implementação cliente- servidor do próprio protocolo rdesktop utilizado pela Microsoft para o serviço de Terminal Service (esse programa é que faz a ponte de conexão para os desktops Windows na nossa rede)</p>
<ul>
<li> O servidor de VPN: OpenVPN</li>
</ul>
<p>Um programa que compartilha o desktop desta máquina (NxServer) que permite a conexão remota a partir da minha casa, independente do SO utilizado para me conectar (Linux ou Windows), ao desktop deste computador no trabalho.</p>
<ul>
<li> Servidor SSH</li>
</ul>
<p>O OpenVPN é um dos vários pacotes para Linux desenvolvidos para a criação de VPN (Virtual Private Network), existem outros como OpenSwan e outras formas de fazer, como por exemplo usar Ipsec, que é uma implementação do protocolo IP com segurança ou criptografia, feita pelo próprio kernel do Linux. Utilizei o OpenVPN por ser fácil de configurar e pela extensa documentação que o acompanha.</p>
<p>O NxServer é um serviço de compartilha a área de trabalho de um computador com Linux, igual ao VNC, só que muito mais rápido e seguro, permitindo acesso a até dois usuários simultaneamente, cada um com uma sessão independente e onde todos os dados transmitidos são criptografados. Lembrando que o próprio protocolo X (XFree86 ou Xorg) oferece a possibilidade de acesso remoto seguro em cima do protocolo SSH, isto é exatamente o que o NxServer faz.</p>
<p>Desta forma, teremos dois níveis de segurança, sendo um criado pelo túnel VPN e o outro pela implementação de segurança do pacote Nx.</p>
<p>Exemplo do diagrama da VPN:</p>
<p style="text-align: center;"><a title="Diagrama-da-vpn.png" href="http://under-linux.org/wiki/Arquivo:Diagrama-da-vpn.png"><img class="aligncenter" src="http://under-linux.org/wiki/images/thumb/d/d8/Diagrama-da-vpn.png/500px-Diagrama-da-vpn.png" border="0" alt="" width="500" height="298" /></a></p>
<p>Baseando-se no diagrama acima, verifica-se que usando a internet a partir da minha casa, criamos um túnel seguro com OpenVPN para acessar um servidor na empresa, o qual tem seu desktop compartilhado pelo NxServer, e a partir deste, acessamos a área de trabalho de qualquer computador com Windows XP ou 2003 usando o protocolo rdesktop, que é nativo do Windows para aplicações de Terminal Server.</p>
<p><a id="Configurando_o_servidor" name="Configurando_o_servidor"></a></p>
<h2>Configurando o servidor</h2>
<p><a id="Pr.C3.A9-requisitos" name="Pr.C3.A9-requisitos"></a></p>
<h3>Pré-requisitos</h3>
<p>Todos os procedimentos de instalação foram feitos usando a distribuição Debian e kernel 2.6, sendo que suponho que você já tenha um ambiente gráfico instalado, no caso o KDE.</p>
<p><strong>Utilizei o OpenVPN baseado no protocolo PTPpoint-to-point-tunneling-protocol), sendo que para funcionar é necessário o módulo TUN/TAP ativo no kernel.</strong></p>
<ol>
<li> Verifique em <strong>/lib/modules/<em>versao-do-kernel</em>/kernel/drivers/net/</strong> se existe o arquivo <strong>tun.ko</strong>&lt;/p&gt;</li>
<li> Se não existir, é necessário compilar este módulo no kernel e não explicarei nesta documentação como realizar tal procedimento.</li>
<li>Instale os pacotes openvpn, openssl, ssh e rdesktop</li>
</ol>
<p>apt-get update<br />
apt-get install openvpn openssl ssh rdesktop</p>
<p>4. Baixe os fontes *.deb do Nx no site www.nomachine.com</p>
<p>Por questão de dependência, é necessário baixar e instalar o nxclient, nxnode e nxserver, nessa ordem respectivamente.</p>
<p>dpkg -i nxclient_2.1.0-11_i386.deb</p>
<p><a id="Configurando_o_OpenVpn" name="Configurando_o_OpenVpn"></a></p>
<h3>Configurando o OpenVpn</h3>
<p>Existem vários modos de operação no OpenVpn, como <strong>Point-toPoint</strong>, <strong>Secret</strong> e <strong>TLS</strong>, estou utilizando o modo TLS, porque é o mais seguro. Não irei detalhar como funciona os outros modos citados acima. No caso do TLS, para utilizá-lo é preciso criar uma autoridade certificadora (ca), um certificado (cert), a chave privada (key) e a chave Diffie Hellman (dh) que são responsáveisl por autenticar a chave pública usada no cliente. Junto com o pacote openvpn vem alguns scripts que auxiliam na criação desses arquivos.</p>
<p>Copie a pasta /usr/share/doc/openvpn/examples/easy-rsa para /etc/openvpn/, então acesse /etc/openvpn/easy-rsa/2.0/</p>
<p>Edite o arquivo vars com as informações de país, estado e etc, então execute os comando abaixo preenchendo as informações necessárias:</p>
<ul>
<li> source ./vars # para carregar as varÃ¡veis editadas nesse arquivo</li>
</ul>
<ul>
<li> ./clean-all # para limpar todos os certificados, se eles existirem</li>
</ul>
<ul>
<li> ./build-ca # cria a autoridade certificadora</li>
</ul>
<ul>
<li> ./build-key-server server # cria o certificado e chave privada do servidor com os nomes server.crt e server.key</li>
</ul>
<ul>
<li> ./build-dh # cria a chave Diffie Hellman de 1024 bits</li>
</ul>
<ul>
<li> ./build-key-pass cliente # cria a chave pública com senha que deverá ser utilizada pelo cliente, com os nomes cliente.crt e cliente.key.</li>
</ul>
<p><strong>Atenção</strong>: não esqueça essa senha, ela será usada para a conexão do cliente.</p>
<p>Todos as chaves e certificados criados serão gravados no diretório <strong>/etc/openvpn/easy-rsa/2.0/keys/</strong>. Se já não estiver, o faça, e permita que somente o root tenha acesso a esse diretório.</p>
<p>Copie esse diretório keys para /etc/openvpn/</p>
<p>Crie e edite o arquivo /etc/openvpn/openvpn.conf com o conteúdo abaixo:</p>
<p>#Arquivo de configuracao do servidor VP<br />
#Interface virtual de rede utilizada<br />
dev tun<br />
# Modo de utilizacao da VPN<br />
tls-server<br />
# Arquivo de log e seu nivel<br />
log /etc/openvpn/vpn.log<br />
verb 3<br />
# Faixa de rede que sera utilizada na VPN<br />
# 20.0.0.1 # IP virtual do Servidor<br />
# 20.0.0.2 # IP virtual do Cliente<br />
ifconfig 20.0.0.1 20.0.0.2<br />
# Certificados utilizados para autenticacao<br />
ca /etc/openvpn/keys/ca.crt<br />
cert /etc/openvpn/keys/server.crt<br />
key /etc/openvpn/keys/server.key<br />
dh /etc/openvpn/keys/dh1024.pem<br />
# Porta padrao<br />
port 1194<br />
# Definindo o user padrao para executar o<br />
# daemon &#8220;openvpn&#8221; para nobody<br />
user nobody<br />
group nobody<br />
# Restringe o processo do openvpn somente ao diretorio /tmp<br />
chroot /tmp<br />
# Utilizando LZO como biblioteca de compreensao<br />
comp-lzo<br />
# Parametros utilizados para testar se a conexao<br />
# continua &#8220;de pe&#8221; e para manter estabelecida em<br />
# caso de firewall statefull<br />
ping 15<br />
# Evita que a interface virtual tun seja reiniciada e<br />
# os arquivos de chaves relidos. Essencial quando<br />
# se utiliza user nobody para execuÃ§Ã£o do processo<br />
persist-tun<br />
persist-key</p>
<p>Reinicie o serviço openvpn: /etc/init.d/openvpn restart</p>
<p>Execute ifconfig e você verá que foi criada a interface virtual tun0 com IP 20.0.0.1, também será mostrado o IP original do computador (eth0). &lt;p style=&#8221;text-indent: 26px;&#8221; align=&#8221;justify&#8221;&gt; É interessante verificar também os logs do openvpn em <strong>/etc/openvpn/vpn.log</strong></p>
<p><a id="Configurando_o_NxServer" name="Configurando_o_NxServer"></a></p>
<h3>Configurando o NxServer</h3>
<p>Os arquivos de configuração do nx são extensos e a princípio não há alterações a serem feitas, portanto apenas reinicie o serviço nxserver: /etc/init.d/nxserver restart.</p>
<p>Para quem quer se aventurar estejam a vontade para fuçar os arquivos de configuração.</p>
<p>Pronto, até aqui seu servidor já está pronto para autenticar a VPN e também com o desktop compartilhado.</p>
<p><a id="Configurando_o_Firewall" name="Configurando_o_Firewall"></a></p>
<h3>Configurando o Firewall</h3>
<p>Antes de passar para a configuração do cliente da VPN, se você possui um firewall, devemos fazer as devidas atualizações nas suas regras.</p>
<p>Como estamos falando em acessar um computador a partir da internet, é necessário que o mesmo possua um endereço IP válido para rotear na internet.</p>
<p>Ex: 200.175.x.y, pois do contrário você não conseguirá acessa-lo. Todo mundo que está conectado a internet já tem um IP válido, procure saber qual é, porque não entrarei nos méritos dessa questão.</p>
<p>No meu caso, possuo um firewall como barreira inicial para e da internet e quase todas as implementações de firewalls são feitas para realizarem “mascaramento” de endereços que vêem da internet, com destino as máquinas da rede interna. Portanto, para que a VPN possa funcionar é necessário que <strong>não haja</strong> esse <strong>mascaramento</strong>, ou seja, haverá apenas um <em><strong>redirect</strong></em> do nosso endereço de internet (200.175.x.y ou etc) para o destino na rede local (192.168.10.1, suponha que esse seja o IP original do servidor da VPN), só que neste caso, esse servidor da VPN vai estar numa <strong>DMZ</strong>.</p>
<p>Para quem já conhece, são os mesmos procedimentos tomados para acesso a um servidor Web. Tudo isto deve ser feito para que você possa autenticar a VPN a partir da sua usando um link ADSL ou mesmo internet discada.</p>
<p>Libere acesso no firewall da internet para o servidor VPN (192.168.10.1) na porta <strong>1194</strong> protocolo <strong>UDP</strong>.</p>
<p>No meu firewall, somente essas configurações foram necessárias. De acordo com a sua segmentação de rede, podem haver mais configurações.</p>
<p><a id="Configurando_o_cliente" name="Configurando_o_cliente"></a></p>
<h3>Configurando o cliente</h3>
<p>Vamos agora configurar o computador que fará o acesso à nossa VPN, ou nosso cliente.</p>
<p>Baixe e instale o cliente OpenVPN para Windows do site www.openvpn.org. Siga as instruções de instalação normalmente e você verá em Conexões de Rede que foi criado uma interface de rede virtual de nome TUN/TAP32.</p>
<p>Nas propriedades desse dispositivo adicione o IP 20.0.0.2 e mÃ¡scara 255.0.0.0.</p>
<p>O arquivo de configuração dessa máquina cliente é quase idêntico ao do servidor, sendo adicionado somente a opção <strong>remote</strong>. Crie um arquivo em <strong>C:\Arquivos de programas\OpenVPN chamado cliente.ovpn</strong> com o conteúdo abaixo:</p>
<p># will be pulling certain config file directives<br />
# from the server.<br />
client<br />
# Use the same setting as you are using on<br />
# the server. On most systems, the VPN will<br />
# not function unless you partially or fully disable<br />
# the firewall for the TUN/TAP interface.<br />
dev tun<br />
# Are we connecting to a TCP or<br />
# UDP server? Use the same setting as<br />
# on the server.<br />
proto udp<br />
# The hostname/IP and port of the server.<br />
# You can have multiple remote entries<br />
# to load balance between the servers.<br />
Remote 200.175.x.y 1194 # esse serÃ¡ o IP e a porta usada pelo seu servidor VPN na internet.<br />
ifconfig 20.0.0.2 20.0.0.1<br />
# Keep trying indefinitely to resolve the<br />
# host name of the OpenVPN server. Very useful<br />
# on machines which are not permanently connected<br />
# to the internet such as laptops.<br />
resolv-retry infinite<br />
# Most clients don&#8217;t need to bind to<br />
# a specific local port number.<br />
nobind<br />
# Try to preserve some state across restarts.<br />
persist-key<br />
persist-tun<br />
# SSL/TLS parms.<br />
# See the server config file for more<br />
# description. It&#8217;s best to use<br />
# a separate .crt/.key file pair<br />
# for each client. A single ca<br />
# file can be used for all clients.<br />
ca ca.crt<br />
cert cliente.crt<br />
key cliente.key<br />
# Enable compression on the VPN link.<br />
# Don&#8217;t enable this unless it is also<br />
# enabled in the server config file.<br />
comp-lzo<br />
# Set log file verbosity.<br />
Verb 3</p>
<p>Copie de forma segura (disquete, pendrive, etc) as chaves do cliente e o certificado que foram criados no Linux, e cole em C:\Arquivos de programas\OpenVPN. São eles:</p>
<ul>
<li> ca.crt</li>
<li> cliente.crt</li>
<li> cliente.key (somente)</li>
</ul>
<p>Copie openvpn.exe e os dois arquivos *.dll que estão em C:\Arquivos de programas\OpenVPN\bin para C:\Arquivos de programas\OpenVPN\. &lt;p style=&#8221;text-indent: 26px;&#8221; align=&#8221;justify&#8221;&gt;Pronto, nossa VPN já pode ser levantada. Crie um arquivo vpn.bat com o conteúdo abaixo, ele iniciará o processo da VPN.</p>
<p>&#8220;C:\Arquivos de programas\OpenVPN\openvpn.exe&#8221; &#8211;config cliente.ovpn &#8211;tls-client</p>
<p>Confirme se o servidor OpenVPN está em execução na máquina com Linux. Execute vpn.bat. Será necessário fornecer a senha usada na criação da chave do cliente. Se tudo der certo você verá algumas informações repetidas de tentativa de adição de rotas (é normal, inclusive a mensagem de erro no final), deixe o prompt aberto, não o feche.</p>
<p>Abra outro prompt do DOS e tente pingar 20.0.0.1, se responder pronto, nossa VPN estÃ¡ funcionando.</p>
<p>Detalhe: o próprio Daemon do OpenVPN, tanto no Linux, como no Windows, já cria as rotas padrões para a conexão.</p>
<p>Baixe e instale o cliente NX para Windows do site www.nomachine.com</p>
<p>Abra esse cliente e crie uma nova sessão com um nome qualquer, host 20.0.0.1 porta 22 e escolha o método de acesso de acordo com sua conexão (Ex: ADSL).</p>
<p>Na próxima tela escolha Unix; KDE; a resolução que quer usar e o <strong>mais importante:</strong> habilite criptografia TLS para todo o tráfego. Assim, tudo que for transmitido para ambos os lados será criptografado. Perceba que teremos 2 níveis de segurança: um na VPN que já é criptografada e outro do próprio cliente NX, que também garante a segurança de todo o tráfego.</p>
<p>Crie um atalho no desktop e pronto.</p>
<p>Conecte-se com o cliente NX instalado e forneça usuário e senha. Esses são os mesmos que você utiliza para efetuar logon no Desktop KDE do Linux. Tudo certo, você verá no seu desktop Windows uma janela que mostra o desktop do servidor Linux, no caso o KDE.</p>
<p>Verifique os computadores com Windows XP ou servidores com 2000 ou 2003 (Terminal Server deve estar habilitado) os quais você irá querer fazer acesso remoto. No XP libere conexão ao Desktop a partir de Propriedades do Sistema. Pronto já podemos acessar o Windows. Preste atenção na ponte que será utilizada para esse acesso: Windows na minha casa <strong>→</strong> Servidor Linux no trabalho <strong>→</strong> Windows XP ou 2003 no trabalho.</p>
<p>Na tela do Linux (KDE) que você está vendo no seu Desktop Windows, abra um konsole e digite:</p>
<p><strong>rdesktop ip_ou_nome_do_computador_que_quer_acessar &amp;</strong></p>
<p>rdesktop 192.168.10.20 &amp;<br />
rdesktop computador20 &amp;</p>
<p>Pronto agora, de forma segura, você pode administrar qualquer computador da sua rede a partir da sua casa. Divirta-se!!!</p>
<p><a id="Autor" name="Autor"></a></p>
<h2>Autor</h2>
<ul>
<li> Bruno Roberto</li>
<li> brunaocomanda@gmail.com</li>
</ul>
<p style="text-align: right;">Fonte: http://under-linux.org/</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/04/28/administracao-remota-usando-openvpnnxserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalação do ClamAV com DazukoFS</title>
		<link>http://blog.deserv.info/2010/04/17/instalacao-do-clamav-com-dazukofs/</link>
		<comments>http://blog.deserv.info/2010/04/17/instalacao-do-clamav-com-dazukofs/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 20:05:53 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Arquivos de Configuração]]></category>
		<category><![CDATA[E-mails - Anti Virus]]></category>
		<category><![CDATA[Instalação e Compilação de SW]]></category>
		<category><![CDATA[Clamav]]></category>
		<category><![CDATA[Clamd]]></category>
		<category><![CDATA[DazukoFS]]></category>
		<category><![CDATA[E-mail]]></category>
		<category><![CDATA[Instalação de Anti-Virus em Linux]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=345</guid>
		<description><![CDATA[Introdução O ClamAV é um dos mais conhecidos antivírus desenvolvidos para Linux pelo fato de ele ser open source, apresentar tantas funcionalidades quanto os programas antivírus proprietários e ainda por cima ter sua base de dados de vírus atualizada com bastante frequência. Nesse tutorial vamos compilar, instalar e configurar o ClamAV. Além disso, vamos configurar [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F04%252F17%252Finstalacao-do-clamav-com-dazukofs%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FakkMZj%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Instala%C3%A7%C3%A3o%20do%20ClamAV%20com%20DazukoFS%22%20%7D);"></div>
<h1>Introdução</h1>
<div>
<p><script type="text/javascript">// <![CDATA[
 google_ad_client = "pub-3535276187000580"; /* 336x280 artigo direita verde */ google_ad_slot = "2913193654"; google_ad_width = 336; google_ad_height = 280;
// ]]&gt;</script></p>
<div id="HOTWordsTxt">
<div>O <em>ClamAV</em> é um dos mais conhecidos antivírus desenvolvidos para <a href="http://www.vivaolinux.com.br/linux/">Linux</a> pelo fato de ele ser open source, apresentar tantas funcionalidades quanto os programas antivírus proprietários e ainda por cima ter sua base de dados de vírus atualizada com bastante frequência. Nesse tutorial vamos compilar, instalar e configurar o ClamAV. Além disso, vamos configurar sua proteção residente para utilizar o <em>DazukoFS</em>.<br />
<span id="more-345"></span><br />
Antes de começar, gostaria de informar que o ClamAV ainda não oferece suporte ao DazukoFS, como você pode ver <a href="https://wwws.clamav.net/bugzilla/show_bug.cgi?id=1691">nesta página</a>, onde um programador relata o problema à equipe de desenvolvimento do ClamAV e sugere um patch (alteração) para o programa. Portanto, você vai precisar, além do <a href="http://sourceforge.net/projects/clamav/files/clamav/0.95.2/clamav-0.95.2.tar.gz/download">código-fonte do ClamAV</a>, do <a href="https://wwws.clamav.net/bugzilla/attachment.cgi?id=1083">patch</a> que adicionará a ele o suporte ao DazukoFS. Baixe os dois arquivos e coloque-os na mesma pasta.</p>
<p>É  <a onclick="hwClick0546396(undefined);return false;" onmouseover="hw0546396(event, this, 'undefined'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe('HOTWordsTitle'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://www.vivaolinux.com.br/artigo/Instalacao-do-ClamAV-com-DazukoFS/#">importante</a> observar também que esse patch foi desenvolvido para a versão 0.95.2 do ClamAV, por isso eu recomendo que você baixe o código-fonte dessa versão (basta clicar no link que eu forneci acima). A versão mais nova do ClamAV, no momento da elaboração desse tutorial, é a 0.95.3. Se você preferir instalar a versão mais nova, você também pode aplicar esse patch, fazendo as devidas alterações (eu, particularmente, ainda não disponho de conhecimento técnico suficiente para fazê-lo, por isso optei por instalar a versão para a qual o patch foi desenvolvido).</p>
<h1>Preparando o sistema</h1>
<p>Para compilar o ClamAV você precisa ter instalado em seu sistema os pacotes <em>zlib</em> e <em>zlib-devel</em>, além, claro, do compilador <em>gcc</em>. Se você utiliza o Debian ou uma distribuição Linux baseada nele, você pode resolver essas dependências com o comando:</p>
<p><strong># apt-get build-dep clamav</strong></p>
<p>Lembrando que para executá-lo você deve ter pelo menos um repositório de códigos-fonte adicionado no arquivo <em>/etc/apt/sources.list</em>. Se não tiver, você pode adicionar este:</p>
<div>deb-src http://ftp.br.debian.org/debian/ lenny main contrib non-free</div>
<p>Além disso, após adicionar o repositório, você deve executar o comando:</p>
<p><strong># apt-get update</strong></p>
<p>para obter a sua lista de pacotes.</p>
<p>Não entrarei em mais detalhes a respeito da instalação dessas dependências (até porque as instruções para fazer isso podem variar de distribuição para distribuição), assumindo que você já as possui instaladas em seu sistema.</p>
<p>Além disso, se você pretende que o ClamAV execute proteção residente, você deve instalar o DazukoFS. Apesar de você poder fazer isso depois da instalação do ClamAV, recomendo que o faça antes, para que ao terminar de executar esses passos você tenha uma instalação completamente funcional do ClamAV, sem nada mais a ser feito. Para saber como instalar o DazukoFS, leia o tutorial <a href="http://www.vivaolinux.com.br/artigo/Desmistificando-a-instalacao-do-Dazuko/">Desmistificando a instalação do Dazuko</a>, anteriormente publicado aqui no Viva o Linux.</p>
<p>A instalação do ClamAV requer que criemos um usuário e um grupo de usuários para ele. Isso pode ser feito através dos comandos:</p>
<p><strong># groupadd clamav</strong></p>
<p><strong># useradd -g clamav -s /bin/false -c &#8220;Clam AntiVirus&#8221; clamav</strong></p>
<p>Finalmente, vamos criar os diretórios que serão utilizados pelo ClamAV para armazenar seus arquivos:</p>
<p><strong># mkdir /var/lib/clamav<br />
# chown clamav /var/lib/clamav<br />
# mkdir /var/log/clamav<br />
# chown clamav /var/log/clamav<br />
# mkdir /var/run/clamav<br />
# chown clamav /var/run/clamav</strong></p>
</div>
</div>
<p>Autor:</p>
<p>Nome: <strong>Antônio Vinícius Menezes Medeiros</strong></p>
<table border="0">
<tbody>
<tr>
<td>Cidade:</td>
<td><strong>Aracaju/SE</strong></td>
</tr>
<tr>
<td>Nascimento:</td>
<td><strong>13/06/1992</strong></td>
</tr>
<tr>
<td>Distribuição:</td>
<td><strong>Kurumin</strong></td>
</tr>
<tr>
<td colspan="2">Distribuições secundárias: <strong>Debian, Slax, Ubuntu</strong></p>
<p><strong>Fonte: </strong>http://www.vivaolinux.com.br</td>
</tr>
</tbody>
</table>
</div>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/04/17/instalacao-do-clamav-com-dazukofs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como Montar um Servidor NTP</title>
		<link>http://blog.deserv.info/2010/04/09/como-montar-um-servidor-ntp/</link>
		<comments>http://blog.deserv.info/2010/04/09/como-montar-um-servidor-ntp/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 00:52:44 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[datahora]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[ntpd]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[sincronizando relógios]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=325</guid>
		<description><![CDATA[O que é? A grosso modo podemos dizer que o NTP é um protocolo que visa manter os relógios dos diversos equipamentos de rede sincronizados. http://pt.wikipedia.org/wiki/NTP Para que relógios sincronizados? Simples, em caso de ataques ou análise de logs é muito importante que todos os equipamentos estejam com os relógios acertados. Imagine que você precise [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F04%252F09%252Fcomo-montar-um-servidor-ntp%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fcv2ZpP%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Como%20Montar%20um%20Servidor%20NTP%22%20%7D);"></div>
<h2>O que é?</h2>
<p>A grosso modo podemos dizer que o <acronym title="Network Time  Protocol">NTP</acronym> é um protocolo que  visa manter os relógios dos  diversos equipamentos de rede sincronizados.<br />
<a href="http://pt.wikipedia.org/wiki/NTP" target="_blank">http://pt.wikipedia.org/wiki/NTP</a></p>
<h2>Para que relógios sincronizados?</h2>
<p>Simples, em caso de ataques ou análise de logs é muito  importante que todos os equipamentos estejam com os relógios acertados.</p>
<p>Imagine que você precise ver o que um usuário fez, primeiro você  olha o firewall, horário de entrada 09:03:42, depois olha o servidor  web, horário de acesso 09:02:07, depois o servidor de email, 09:15:48,  cada maquina com um horário diferente e que foram acessadas praticamente  ao mesmo tempo. <span id="more-325"></span></p>
<p>Ao verificar o relógio de cada maquina você vê uma diferença  absurda em cada relógio, você pode fazer isso ai nas suas maquinas para  constatar, nenhum terá o horário igual a outra, a diferença varias em  minutos e não em segundos.</p>
<p>Isso é muito prejudicial, e no horário de verão? Ajustar o  horário maquina por maquina?</p>
<p>Todos esse problemas podem ser resolvidos usando o <acronym title="Network Time Protocol">NTP</acronym>, por exemplo, para  sincronizar uma maquina basta utilizar o comando.</p>
<pre>ntpdate pcdsh05.on.br
13 Jun 11:16:45 ntpdate[1437]: adjust time server 200.20.186.75 offset -0.032176 sec
</pre>
<p>Com esse comando eu sincronizo o meu Linux com o servidor <acronym title="Network Time Protocol">NTP</acronym> <em>pcdsh05.on.br</em>,  esse servidor é do <a href="http://www.on.br/">Observatório Nacional</a></p>
<p>Essa solução é totalmente viável para apenas uma ou duas  maquinas mas se você quiser sincronizar todas as maquina da rede isso  fica um pouco complicado devido a trafego na Internet, o protocolo é bem  compacto, usa <em>UDP</em> e cada troca de informação são usados poucos  pacotes como podemos ver abaixo</p>
<pre>11:22:28.967672 IP 10.10.1.7.123 &gt; 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.967888 IP 10.10.1.1.123 &gt; 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.968853 IP 10.10.1.7.123 &gt; 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.969001 IP 10.10.1.1.123 &gt; 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.969550 IP 10.10.1.7.123 &gt; 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.969684 IP 10.10.1.1.123 &gt; 10.10.1.7.123: NTPv4, Server, length 48
11:22:28.970373 IP 10.10.1.7.123 &gt; 10.10.1.1.123: NTPv4, Client, length 48
11:22:28.970516 IP 10.10.1.1.123 &gt; 10.10.1.7.123: NTPv4, Server, length 48
</pre>
<p>Porem isso sendo feito por algunas centenas de maquina gera  bastante trafego no seu link, para contornar isso irei mostrar como  montar um servidor <acronym title="Network Time Protocol">NTP</acronym> em sua própria rede.</p>
<h2>Maquina usada nos testes</h2>
<pre>cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 7
model name      : Pentium III (Katmai)
stepping        : 3
cpu MHz         : 501.212
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
bogomips        : 1004.19
</pre>
<pre>free
             total       used       free     shared    buffers     cached
Mem:        254048     230196      23852          0      74748      63128
-/+ buffers/cache:      92320     161728
Swap:       522104         96     522008
</pre>
<pre>cat /etc/fedora-release
Fedora Core release 4 (Stentz)
</pre>
<h2>Softwares necessários</h2>
<p>Para instalar usando o Fedora Core basta digitar o comando</p>
<pre>yum install ntp</pre>
<p>Com isso será instalado tanto os softwares clientes como o  servidor.</p>
<p>Ou você pode baixar a ultima versão do site http://www.ntp.org/</p>
<h2>Configurando o servidor</h2>
<p>Para configurar o servidor basta editar apenas um arquivo <a href="http://www.dotsharp.com.br/download/ntp.conf">/etc/ntp.conf</a> essa é a copia do arquivo que estou usando atualmente.</p>
<p>Não vou me estender muito nas configuração que podem ser feitas  no arquivo, para isso você pode ler o arquivo que está disponível no  site da RPN em <a href="http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf">http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf</a> essa documentação é muito boa, nesse arquivos irei centralizar na  criação rápida e fácil de um servidor.</p>
<pre># Permite acesso ao servidor para sincronizar mas nao permite modificacoes no servico
restrict default nomodify notrap noquery

# Permite acesso complete para a interface local
restrict 127.0.0.1

# Libera acesso a minha rede local
restrict 10.10.1.0 mask 255.255.255.0 nomodify notrap
restrict 10.1.0.0 mask 255.255.0.0 nomodify notrap

# Servidor para sincronizar o relógio
# Será usado em ordem
# o pcdsh05.on.br e stratum 1 todos os outros são stratum 2
server pcdsh05.on.br
server ntp.cais.rnp.br
server ntp.puc-rio.br
server ntp1.pucpr.br
server ntp.pop-rs.rnp.br
</pre>
<p>Mais servidores podem ser vistos em <a href="http://www.rnp.br/ntp/ntp-stratum2.html" target="_blank">http://www.rnp.br/ntp/ntp-stratum2.html</a></p>
<p>para ver como estão as suas permições use o comando <em>ntpdc</em>.</p>
<pre>#  ntpdc -nc reslist
   address          mask            count        flags
=====================================================================
0.0.0.0         0.0.0.0             14147  noquery, nomodify, notrap
10.1.0.0        255.255.0.0          2199  nomodify, notrap
10.10.1.0       255.255.255.0       10519  nomodify, notrap
10.10.1.1       255.255.255.255         0  ntpport, interface, ignore
127.0.0.1       255.255.255.255         2  none
127.0.0.1       255.255.255.255         0  ntpport, interface, ignore
</pre>
<p>Outro comando util é o <em>ntpq</em> com ele é possivel ver como  status dos servidores.</p>
<p>Com ele podemos ver o nivel na hierarquia que o servidor se  encontra, o delay e outras informações.</p>
<pre># ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*pcdsh05.on.br   .IRIG.           1 u  292 1024  377   45.989  -12.245   5.186
-titan.cais.rnp. 3.111.157.113    2 u  159 1024  377  180.385  -73.748 106.281
+139.82.34.11    200.143.193.3    3 u  208 1024  377   30.473  -15.311   0.586
+ntp.pucpr.br    192.5.41.209     2 u  249 1024  377   44.354  -23.184   1.113
-delta.pop-rs.rn 192.5.41.41      2 u  704 1024  377   69.726  -29.118   2.322
 LOCAL(0)        LOCAL(0)        10 l   63   64  377    0.000    0.000   0.004
</pre>
<p>Pronto agora que já configurou o arquivo basta iniciar o serviço</p>
<pre>service ntpd start</pre>
<p>e configurar para que ele seja iniciado todo vez que reiniciar a  maquina</p>
<pre>chkconfig ntpd on</pre>
<p>Pronto seu servidor está configurado e funcionando, para isso vá  em um cliente Linux e digite o comando.</p>
<pre>ntpdate SERVIDOR</pre>
<p>se você receber uma mensagem do tipo</p>
<pre>13 Jun 12:13:51 ntpdate[6157]: no server suitable for synchronization found</pre>
<p>Quer dizer que o seu servidor não está funcionando ainda, para  saber o porque digite o comando</p>
<pre>ntpdate -d SERVIDOR</pre>
<p>para executar o ntpdate em modo debug</p>
<pre>Looking for host SERVIDOR and service ntp
host found : SERVIDOR
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
receive(10.10.1.7)
transmit(10.10.1.7)
10.10.1.7: Server dropped: strata too high
server 10.10.1.7, port 123
stratum 16, precision -18, leap 11, trust 000
refid [10.10.1.7], delay 0.02612, dispersion 0.00000
transmitted 4, in filter 4
reference time:    00000000.00000000  Thu, Feb  7 2036  4:28:16.000
originate timestamp: c83954b4.4aeed890  Tue, Jun 13 2006 12:13:56.292
transmit timestamp:  c83954b4.4c0b45ae  Tue, Jun 13 2006 12:13:56.297
filter delay:  0.02629  0.02620  0.02617  0.02612
         0.00000  0.00000  0.00000  0.00000
filter offset: -0.00467 -0.00466 -0.00466 -0.00467
         0.000000 0.000000 0.000000 0.000000
delay 0.02612, dispersion 0.00000
offset -0.004673

13 Jun 12:13:56 ntpdate[6158]: no server suitable for synchronization found
</pre>
<p>Com isso podemos encontrar o problema na linha <em>stratum 16,  precision -18, leap 11, trust 000</em> essa linha fala que o nosso  servidor está em stratum 16, esse é o stratum máximo de um servidor <acronym title="Network Time Protocol">NTP</acronym>, ou seja, ele está em um  nível muito baixo e que não é confiável para ser usado para atualização  de nossas maquinas.</p>
<p>Mas porque isso está acontecendo se tudo está configurado  corretamente?</p>
<p>Fácil de responder, basta olhar no log do seu servidor.</p>
<pre>tail /var/log/messages
Jun 13 12:13:16 SERVIDOR ntpd[1688]: ntpd 4.2.0a@1.1196-r Fri May 12 09:51:35 EDT 2006 (1)
Jun 13 12:13:17 SERVIDOR ntpd[1688]: precision = 3.000 usec
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface wildcard, 0.0.0.0#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface wildcard, ::#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface lo, 127.0.0.1#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: Listening on interface eth0, 10.10.1.7#123
Jun 13 12:13:17 SERVIDOR ntpd[1688]: kernel time sync status 0040
Jun 13 12:13:17 SERVIDOR ntpd[1688]: frequency initialized 0.000 PPM from /var/lib/ntp/drift
</pre>
<p>O servidor NTP foi iniciado só que ainda não fez nenhuma  sincronização, aguarde um pouco até aparecer algo como.</p>
<pre>Jun 13 12:16:33 SERVIDOR ntpd[1688]: synchronized to 200.20.186.75, stratum 1</pre>
<p>Pronto, pelo que você pode verificar demorou cerca de três  minutos para ele fazer a primeira sincronização, o seu pode demorar um  pouco mais, isso é feito de forma automática por um algoritimo interno  do servidor e não pode ser mudado, ele mesmo calcula quando deve buscar  uma sincronização com o servidor de stratum superior.</p>
<p>Pronto agora você pode executar o ntpdate no cliente.</p>
<pre>ntpdate SERVIDOR
13 Jun 12:22:23 ntpdate[6187]: adjust time server 10.10.1.7 offset -0.021264 sec
</pre>
<p>Pronto agora sim o nosso cliente foi sincronizado com sucesso,  uma diferença de -0.021264 segundos, essa diferença varia muito.</p>
<h2>Automatizando</h2>
<h3>Com ntpd</h3>
<p>Essa configuração <strong>é mais recomendada</strong> pois o <em>ntpd</em> utiliza um algoritimo interno para determinar a quantidade de vezes que  ele precisa sincronizar, diminuindo o trafego de pacotes ntpd em sua  rede.</p>
<p>Para fazer uma configuração mais redonda você pode configurar o  arquivo <em><a href="http://www.dotsharp.com.br/download/ntp-client.conf">/etc/ntp.conf</a></em> do cliente informando os seguintes parametros.</p>
<pre>restrict default nomodify notrap noquery
restrict 127.0.0.1
server 10.10.1.1
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay  0.008
keys            /etc/ntp/keys
</pre>
<p>Com esse simples arquivo de configuração o cliente irá manter o  relógio sincronizado, porém somente a própria maquina poderá acessar  a  interface aonde o NTP está rodando.</p>
<p>Para ativar o serviço basta executar os seguintes comandos</p>
<pre># chkconfig ntpd on
# service ntpd start
Starting ntpd:                                             [  OK  ]
</pre>
<h3>Com ntpdate</h3>
<p>Para  deixar as maquinas sincronizado a cada hora, basta criar  um script no diretório<em> /etc/cron.hourly/</em> chamado <em>timesync</em> com a seguinte linha.</p>
<pre>#vi /etc/cron.hourly/timesync
</pre>
<pre>#!/bin/sh
/usr/sbin/ntpdate -s 10.10.1.1
</pre>
<p>A opção -s server para ele não mostrar nada na saida padrão, o  retorno será enviado para o syslog coloco ele como executável.</p>
<pre>#chmod +x /etc/cron.hourly/timesync</pre>
<p>Pronto desta forma a minha maquina será sincronizada toda hora.</p>
<p>O NTPDate está sendo descontinuado <a href="http://ntp.isc.org/bin/view/Dev/DeprecatingNtpdate" target="_blank">http://ntp.isc.org/bin/view/Dev/DeprecatingNtpdate</a>,  porém eu ainda utilizo ele para fazer os testes iniciais de  funcionamento do servidor, essa informação foi passada pelo <em>Marcos  Vinicius Lazarini</em>.</p>
<h2>Horário de verão</h2>
<p>Para evitar problemas com o horário de verão eu configuro os  meus servidor para usarem o relógio de hardware em UTC, para fazer isso  no Fedora sigo os seguintes passos</p>
<p>Edito o arquivo <em>/etc/sysconfig/clock</em> e altero a linha <em>UTC=false</em> para <em>UTC=true</em>, executo o comando.</p>
<pre>hwclock --set --date="HH:MM" –utc</pre>
<p>Para poder ajustar o relógio do hardware para UTC, três horas a  menos que o nosso horário.</p>
<p>Como o NTP só configura relógio de software o relógio de  hardware ficará com uma referência que pode ser entendida  posteriormente.</p>
<p>Para verificar o horário de Greewich acesse <a href="http://www.timeanddate.com/worldclock/city.html?n=45" target="_blank">http://www.timeanddate.com/worldclock/city.html?n=45</a></p>
<h2>Cisco IOS</h2>
<p>Para configurar o roteador Cisco para utilizar o servidor NTP é  bem simples, acesso seu roteador e siga os comandos.</p>
<pre>Router&gt; enable
password: *********
Router# config t
Router(config)# ntp server 10.10.1.1
Router(config)# ntp server 10.10.1.2
Router(config)# exit
Router# wr mem
</pre>
<h2>Maquinas com Microsoft Windows</h2>
<h3>Windows XP</h3>
<p>Duplo clique o relógio na barra de tarefas<br />
Clicar na aba horário na Internet<br />
Marcar a opção sincronizar automaticamente e colocar o endereço do  seu servidor e clicar em atualizar agora.<br />
Pronto</p>
<p>É importante lembrar que o serviço <em>Horário do Windows</em> tem que estar iniciado</p>
<p>O Windows só atualiza o relógio a cada 10 dias e não funcionou  corretamente em meus testes.</p>
<h3>Windows 2000/2003</h3>
<p><em>Colaboração de Marcos Vinicius Lazarini</em></p>
<p>No  Windows 2000 em diante inclusive o Windows XP  existe um  serviço para sincronizar o relógio interno. para utiliza-lo você deve  abrir o Prompt de Comand.</p>
<p>Clique em Inciar -&gt; Executar.</p>
<p>Digite <em>cmd</em> e clique em OK.</p>
<p>No Prompt de Comando digite.</p>
<pre>net stop w32time
net time /setsntp:SERVIDOR
net start w32time
</pre>
<p>Lembrando que o serviço <em>Horário do Windows</em> deve estar  configurado como <em>automático</em>.</p>
<h3>Outras versões do Windows</h3>
<p>Você pode usar o programa <a href="http://www.dotsharp.com.br/programas/SP_TimeSync.html">SP_TimeSync</a>,   que eu uso, ou o <a href="http://www.dotsharp.com.br/programas/About_Time.html">About Time</a> ambos são gratuitos e funcionam bem melhor que o do Windows XP por dois  motivos, posso usar em outras versões do Windows e também posso  especificar em que período de tempo deverá ocorrer os sincronismos do  relógio.</p>
<h2>FAQ</h2>
<h3>Meu horário esta sendo atualizado com 3 horas a mais do que o  meu horário real</h3>
<p>Quando instalei o fedora, coloquei como São Paulo e marquei a  opção [X] UTC</p>
<p>Agora apenas entrei via setup e desmarquei esta opção UTC.</p>
<p>Agora quando executo o date, aparece BRT ao invés de UTC</p>
<p><em>Cristiano Borges Brasil</em></p>
<h3>the NTP socket is in use, exiting</h3>
<p>Esse problema que você está é porque o seu cliente Linux está  rodando o daemon do NTP.</p>
<p>Para resolver esse problema é bem facil, basta parar o serviço  do ntpd</p>
<pre>service ntpd stop</pre>
<p>Dai basta executar o ntpdate</p>
<h2>Referências</h2>
<ul>
<li><a href="http://www.ntp.org/" target="_blank">http://www.ntp.org/</a></li>
<li><a href="http://pt.wikipedia.org/wiki/NTP" target="_blank">http://pt.wikipedia.org/wiki/NTP</a></li>
<li><a href="http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf" target="_blank">http://www.rnp.br/_arquivo/cais/manual_ntp_v1b.pdf</a></li>
<li><a href="http://www.rnp.br/ntp/ntp-hierarquia.html" target="_blank">http://www.rnp.br/ntp/ntp-hierarquia.html</a></li>
<li><a href="http://www.on.br/" target="_blank">http://www.on.br/</a></li>
<li><a href="http://pcdsh01.on.br/" target="_blank">http://pcdsh01.on.br/</a></li>
<li><a href="http://www.rnp.br/ntp/ntp-stratum2.html" target="_blank">http://www.rnp.br/ntp/ntp-stratum2.html</a></li>
<li><a href="http://www.timeanddate.com/worldclock/city.html?n=45">http://www.timeanddate.com/worldclock/city.html?n=45</a></li>
<li><a href="http://www.arachnoid.com/abouttime/index.html">http://www.arachnoid.com/abouttime/index.html</a></li>
<li><a href="http://www.spdialer.com/timesync/">http://www.spdialer.com/timesync/</a></li>
</ul>
<h1>Autor</h1>
<p><a href="http://www.dotsharp.com.br/autores/Rodrigo_Luis_Silva.html">Rodrigo  Luis Silva</a> é especialista em sistemas GNU/Linux com ampla  experiência em diversas áreas, trabalha a mais de seis anos focado em  desvendar os diversos recursos existentes nesse sistema operacional.</p>
<p style="text-align: right;">Fonte: http://www.dotsharp.com.br</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/04/09/como-montar-um-servidor-ntp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1 milhão de Tux</title>
		<link>http://blog.deserv.info/2010/03/27/1-milhao-de-tux/</link>
		<comments>http://blog.deserv.info/2010/03/27/1-milhao-de-tux/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 01:29:40 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[1 milhão de linux]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Projeto Tux]]></category>
		<category><![CDATA[Tux]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=318</guid>
		<description><![CDATA[Estamos procurando 1‘000‘000 pessoas que conhecem o Linux como uma plataforma e que cairam de amor com ele. Você é um deles? Basta registar-se no nosso site! Esta página existe como uma apreciação para com o Linux e Open Source afim de torná-lo mais popular. É dificil compreender como o número de usuários Linux é [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F03%252F27%252F1-milhao-de-tux%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FbrN3nG%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%221%20milh%C3%A3o%20de%20Tux%22%20%7D);"></div>
<p><a href="http://blog.deserv.info/wp-content/uploads/2010/03/million2.jpg"><img class="alignleft size-full wp-image-319" title="million2" src="http://blog.deserv.info/wp-content/uploads/2010/03/million2.jpg" alt="" width="125" height="125" /></a>Estamos procurando 1‘000‘000 pessoas que conhecem o Linux como uma  plataforma e que cairam de amor com ele. Você é um deles? Basta  registar-se no nosso site!</p>
<p>Esta página existe como uma apreciação para com o Linux e Open Source  afim de torná-lo mais popular. É dificil compreender como o número de  usuários Linux é baixo, chega a ser assustador.  <span id="more-318"></span></p>
<p>Esta não é uma página de contagem, o que significa que não  estamos interessados em descobrir qual a melhor distribuição ou GUI. Nós  só queremos saber quantas pessoas realmente usam uma plataforma de  código aberto com toda a flexibilidade e que cairam de amor por ele.  Muitos usuários podem pensar que estamos a tentando competir diretamente  com o <a href="http://counter.li.org/" target="_blank">Linux Counter</a> , mas, nós gostamos de pensar em nós mesmos como um site dedicado a  todos os usuários no mundo que gostam e tem contribuído para tornar o  Linux e Open Source um lugar melhor!</p>
<p>Efetue seu cadastro no link: <a href="http://1-million-tux.linux-befehle.org/indexpt.php">http://1-million-tux.linux-befehle.org/indexpt.php</a></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/03/27/1-milhao-de-tux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proftpd</title>
		<link>http://blog.deserv.info/2010/01/28/proftpd/</link>
		<comments>http://blog.deserv.info/2010/01/28/proftpd/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 12:27:56 +0000</pubDate>
		<dc:creator>Flávio  Silva</dc:creator>
				<category><![CDATA[Instalação e Compilação de SW]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PROFTPD]]></category>
		<category><![CDATA[Servidor]]></category>

		<guid isPermaLink="false">http://blog.deserv.info/?p=278</guid>
		<description><![CDATA[Obtendo e Instalando Estive a algum tempo procurando e achei poucas coisas a respeito, achei apenas dois manuais que me ajudaram, porém não foram tão elucidativos. Este arquivo será util para a configuração básica das seguintes ações em um servidor FTP: * instalação * downloads e uploads ProFTPd É um software que provê serviço de [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.deserv.info%252F2010%252F01%252F28%252Fproftpd%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FcGpWCj%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Proftpd%22%20%7D);"></div>
<h2>Obtendo e Instalando</h2>
<p>Estive a algum tempo procurando e achei poucas coisas a respeito, achei apenas dois manuais que me ajudaram, porém não foram tão elucidativos.</p>
<p>Este arquivo será util para a configuração básica das seguintes ações em um servidor FTP:</p>
<pre>   * instalação
   * downloads e uploads
</pre>
<p><span id="more-278"></span></p>
<p><a id="ProFTPd" name="ProFTPd"></a></p>
<h2>ProFTPd</h2>
<p>É um software que provê serviço de FTP de forma bastante eficiente e tem como característica a segurança e flexibilidade.</p>
<p>Dentre as vantagens do ProFTPd podemos citar as principais:</p>
<pre>   * configuração fácil;
   * pode ser configurado em modo standalone ou através do inetd;
   * o PID é executado por um usuário desprivilegiado (nobody);
   * formato do arquivo de log extremamente configurável;
   * fácil administração do FTP, com relação a forma de restrição, acesso aos arquivos;
   * permite a configuração do número máximo de processos em execução, minimizando vulnerabilidades;
</pre>
<p>Onde Achar?</p>
<p>O download do ProFTPd poderá ser feito em:</p>
<pre>   * <a title="http://www.proftpd.org" rel="nofollow" href="http://www.proftpd.org/">http://www.proftpd.org</a>
   * <a title="http://rpmfind.net" rel="nofollow" href="http://rpmfind.net/">http://rpmfind.net</a>
</pre>
<p><a id="Pr.C3.A9-instala.C3.A7.C3.A3o" name="Pr.C3.A9-instala.C3.A7.C3.A3o"></a></p>
<h2>Pré-instalação</h2>
<p>Caso você já tenha o WU-FTPd instalado, siga os seguintes passos:</p>
<pre> # rpm -q wu*
 ou
 # rpm -qa | grep wu*
</pre>
<p>Se a resposta for:</p>
<p>o pacote wu* não está instalado</p>
<p>Então prossiga para a instalação, porém se a resposta for:</p>
<pre> wu-ftp-*****
</pre>
<p>Isso significa que o WU-FTPd está instalado no seu sistema. Para desinstalá-lo digite o seguinte comando:</p>
<pre> # rpm -e wu-ftp
</pre>
<p><a id="Instalando_o_ProFTPd" name="Instalando_o_ProFTPd"></a></p>
<h2>Instalando o ProFTPd</h2>
<p>Uma vez que o WU-FTPd foi desinstalado, vá até o diretório em que você salvou o pacote do ProFTPd e digite:</p>
<p>Se ele for *.rpm:</p>
<pre> # rpm -ivh proftp*.rpm
</pre>
<p>É possível que o inetd (ou o xinetd) esteja com algumas configurações do WU-FTPd. Ao editar /etc/inetd.conf podemos ter:</p>
<pre> ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
</pre>
<p>Para eliminarmos o seu efeito devemos comentar esta linha colocando uma cerquilha (#) na frente da linha. Para que a modificação tenha efeito devemos iniciar o inetd:</p>
<pre> # killall -HUP inetd
</pre>
<p>Iniciamos agora o ProFTPd utilizando o seu initscript:</p>
<pre> # /etc/rc.d/init.d/proftpd start
 ou
 # /usr/local/sbin/./proftpd
</pre>
<p>Para verificar se o ProFTPd está rodando:</p>
<pre> # ps auwx | grep proftpd
</pre>
<p>Se obtiver esta linha como resposta é porque ele esta rodando e aceitando conexões:</p>
<pre> nobody     813  0.0  0.4  2264  556 ?        S    Sep15   0:00 [proftpd]
</pre>
<p>Se ele for .tar.bz2:</p>
<pre> # tar -jxpvf proftp*
</pre>
<p>No diretório em quem os arquivos foram descarregados digite:</p>
<pre> # ./configure --prefix=/usr/local/proftpd &amp;&amp; make &amp;&amp; make install
</pre>
<p>O uso do &#8211;prefix não é obrigatório, mas quem quiser está aí a configuração. Esse comando fará com que uma pasta com o nome de proftpd seja criada em /usr/local e dentro deverá conter os seguintes diretórios:</p>
<pre> /usr/local/proftpd/etc
 /usr/local/proftpd/bin
 /usr/local/proftpd/sbin
 /usr/local/proftpd/var
 /usr/local/proftpd/man
</pre>
<p>Para quem não usou o &#8211;prefix:</p>
<pre> /usr/local/etc
 /usr/local/bin
 /usr/local/sbin
 /usr/local/var
 /usr/local/man
</pre>
<p>Caso contenha a sua instalação foi feita com sucesso.</p>
<p>OBS: verificar se o sistema criou o usuário FTP, pois os arquivos ficarão no /home/ftp.</p>
<p>Entendendo a configuração do ProFTPd Como todo daemon, o ProFTPd é configurado através de um arquivo texto /etc/proftpd.conf. O ProFTPd lê o arquivo cada vez que é iniciado, portanto cada alteração feita neste arquivo só entrará em vigor após reiniciar o daemon.</p>
<p>No arquivo de configuração do ProFTPd é utilizado o conceito de contextos em sua configuração e em cada contexto temos as diretivas. Resumindo os contextos são opções globais de um comportamento e a diretiva seria um sub-comportamento.</p>
<p><a id="Contextos" name="Contextos"></a></p>
<h2>Contextos</h2>
<p>Os contextos são divididos em cinco categorias:</p>
<pre>   * contexto principal: contém as configurações default utilizadas por outros contextos;
   * contexto &lt;Directory DIR&gt;: determina o comportamento do ProFTPd no diretório.
   * contexto &lt;Anonymous DIR&gt;: determina o comportamento do ProFTPd quando o usuário anonymous se loga a partir de qual diretório(DIR) ele será servido;
   * contexto &lt;Limit AÇÃO&gt;: determina as ações no ProFTPd que são:
</pre>
<pre>     * LOGIN - usuário válido se logando. * READ - downloads de arquivos. * WRITE - uploads de arquivos. * STOR - upload de arquivos sem possibilidade de criação e deleção de diretórios.
</pre>
<pre>   * contexto &lt;VirtualHost IP&gt;: define a criação de ftp's virtuais;
</pre>
<p><a id="Exemplo_de_Configura.C3.A7.C3.A3o" name="Exemplo_de_Configura.C3.A7.C3.A3o"></a></p>
<h2>Exemplo de Configuração</h2>
<p>Este FTP eu montei e está rodando em um Red Hat 9.0. O pacote usado foi proftpd-1.2.9rc1.tar.bz2.</p>
<p>Nessa configuração você poderá realizar o download de arquivos na pasta PUB e o upload na pasta incoming. A pasta incoming deverá ser criada.</p>
<p>Para a configuração do webmin para quem gosta do padrão Windows seguem os caminhos:</p>
<pre>   * config file: /usr/local/"proftpd/"etc/proftpd.conf
   * executable: /usr/local/"proftpd/"sbin/proftpd
   * PID file: /usr/local/"proftpd/"var/proftpd.pid
   * ftpusers file: usr/local/"proftpd/"etc/ftpusers
</pre>
<p>&#8220;/&#8221;proftpd/&#8221; &#8211; é para quem usou o prefix la em cima na instalação.</p>
<p><a id="proftpd.conf" name="proftpd.conf"></a></p>
<h2>proftpd.conf</h2>
<pre> # This is a basic ProFTPD configuration file.
 # It establishes a single server and a single anonymous login.
 # It assumes that you have a user/group "nobody" and "ftp"
 # for normal/anonymous operation.

 ServerName                      "Nome do seu Servidor"
 ServerType                      standalone
 ServerAdmin                     seuemail@dominio.com.br
 ServerIdent                     off
 DefaultServer                   on
 RequireValidShell               off
 DefaultRoot                     ~
 AllowLogSymlinks                on
 IdentLookups                    off
 UseReverseDNS                   off

 # Port 21 is the standard FTP port.
 Port                            21
 # Umask 022 is a good standard umask to prevent new dirs and files
 # from being group and world writable.
 Umask                           022

 # To prevent DoS attacks, set the maximum number of child processes
 # to 30.  If you need to allow more than 30 concurrent connections
 # at once, simply increase this value.  Note that this ONLY works
 # in standalone mode, in inetd mode you should use an inetd server
 # that allows you to limit maximum number of processes per service
 # (such as xinetd)
 MaxInstances                    60

 # Set the user and group that the server normally runs at.
 User                            nobody
 Group                           nogroup

 # This next option is required for NIS or NIS+ to work properly:
 #PersistentPasswd off

 SystemLog                       /var/log/proftpd.log
 TransferLog                     /var/log/xferlog

 # Normally, we want files to be overwriteable.
 &lt;Directory /*&gt;
   AllowOverwrite                on
 &lt;/Directory&gt;

 # A basic anonymous FTP server configuration.
 # To enable this, remove the user ftp from /etc/ftpusers.
 &lt;Anonymous ~ftp&gt;
 RequireValidShell             off
 User                          ftp
 Group                         ftp
 # We want clients to be able to login with "anonymous" as well as "ftp"
 UserAlias                     anonymous ftp

 # Limit the maximum number of anonymous logins
 MaxClients                    50

 # We want 'welcome.msg' displayed at login, and '.message' displayed
 # in each newly chdired directory.
 DisplayLogin                  welcome.msg
 DisplayFirstChdir             .message

 # Limit WRITE everywhere in the anonymous chroot
 &lt;Limit WRITE&gt;
   DenyAll
 &lt;/Limit&gt;

 &lt;/Anonymous&gt;

 &lt;IfModule mod_tls.c&gt;
       TLSEngine off
       TLSLog /var/log/proftpd-tls.log
       TLSProtocol TLSv1

       # Are clients required to use FTP over TLS when talking to this server?
       TLSRequired on

       # Server's certificate
       TLSRSACertificateFile /etc/ssl/server.crt
       TLSRSACertificateKeyFile /etc/ssl/server.key.unsecure

       # CA the server trusts
       TLSCACertificateFile /etc/ssl/ca.crt

       # Authenticate clients that want to use FTP over TLS?
       TLSVerifyClient off
 &lt;/IfModule&gt;
</pre>
<p><a id="Instalando_um_servidor_FTP" name="Instalando_um_servidor_FTP"></a></p>
<h2>Instalando um servidor FTP</h2>
<p>O servidor de FTP mais usado no Linux é o Proftpd, disponível em quase todas as distribuições. O funcionamento do FTP é bem mais simples que o do Samba ou SSH, por isso ele é usado como uma forma simples de disponibilizar arquivos na internet ou mesmo dentro da rede local, sem muita segurança.</p>
<p>A principal limitação do protocolo FTP é que todas as informações são transmitidas de forma não encriptada, como texto puro, incluindo os logins e senhas. Ou seja, alguém capaz de sniffar a conexão, usando um programa como o Ethereal, veria tudo que está sendo transmitido. Para aplicações onde é necessário ter segurança na transmissão dos arquivos, é recomendável usar o SFTP, o módulo do SSH que permite transferir arquivos de forma encriptada. Apesar disso, se você quiser apenas criar um repositório com alguns arquivos para download ou manter um servidor público como o Ibiblio.org, então o FTP é mais interessante, por ser mais simples de usar.</p>
<p>O servidor aceita conexões remotas usando os logins dos usuários cadastrados na máquina. Lembre-se de que, para adicionar novos usuários, você pode usar o comando adduser ou algum utilitário de administração incluído na distribuição, como o system-config-users, o users-admin ou o kuser.</p>
<p>Não é difícil instalar o Proftpd, basta procurar pelo pacote &#8220;proftpd&#8221; na distribuição usada, como em:</p>
<pre> # apt-get install proftpd
 # yum install proftpd
 ou:
 # urpmi proftpd
</pre>
<p>No Debian, durante a instalação do pacote do Proftpd, geralmente são feitas algumas perguntas. A primeira é se você deseja deixar o servidor FTP ativo em modo standalone ou em modo inetd.</p>
<p>O standalone é mais seguro e mais rápido, enquanto o inetd faz com que ele fique ativo apenas quando acessado, economizando cerca de 400 KB de memória RAM (que fazem pouca diferença hoje em dia). O modo standalone é a opção recomendada.</p>
<p>Você terá também a opção de ativar o acesso anônimo, que permite acessos anônimos (somente leitura) na pasta &#8220;/home/ftp&#8221;, onde você pode disponibilizar alguns arquivos para acesso público. Nesse caso, os usuários fazem login no servidor usando a conta &#8220;anonymous&#8221; e um endereço de e-mail como senha. Caso prefira desativar o acesso anônimo, apenas usuários com login válido na máquina poderão acessar o FTP.</p>
<p>Depois de concluída a instalação, o servidor fica ativo por default, é inicializado automaticamente durante o boot e pode ser controlado manualmente através do serviço &#8220;proftpd&#8221;, como em &#8220;/etc/init.d/proftpd start&#8221;.</p>
<p>Você pode acessar outras máquinas da rede com servidores FTP ativos usando o GFTP, o Konqueror ou o próprio navegador. O FTP pode ser usado também como opção para transferência de arquivos na rede local. Uma das vantagens do FTP é que existem clientes para todas as plataformas, você pode baixar o Filezilla, um servidor e cliente de FTP for Windows, no <a title="http://filezilla.sourceforge.net/" rel="nofollow" href="http://filezilla.sourceforge.net/">http://filezilla.sourceforge.net/</a>.</p>
<p>A configuração manual do servidor FTP é feita através do arquivo &#8220;/etc/proftpd/proftpd.conf&#8221;. Um arquivo configurado no CentOS pode ser usado no Mandriva (por exemplo), ou vice-versa; afinal, independentemente de estar usando o Debian, Fedora ou o Mandriva, o proftpd será sempre o mesmo.</p>
<p>Sempre que fizer alterações no arquivo, reinicie o servidor para que elas entrem em vigor. Para isso, use o comando &#8220;/etc/init.d/proftpd restart&#8221;.</p>
<p>No caso do Debian Etch e do Ubuntu 6.10 em diante, o servidor é configurado para utilizar endereços IPV6 por padrão, o que faz com que ele exiba uma mensagem de erro e aborte a inicialização caso você não tenha configurado a rede IPV6.</p>
<p>Para solucionar o problema, abra o arquivo &#8220;/etc/proftpd.conf&#8221; e substitua a linha:</p>
<p>UseIPv6 on</p>
<p>por:</p>
<p>UseIPv6 off</p>
<p>Uma das primeiras opções do arquivo é a opção Port, que permite alterar a porta usada pelo FTP. O padrão é usar a porta 21, mas muitos serviços de banda larga bloqueiam as portas 21 e 80 para que os usuários não rodem servidores. Nesse caso, você pode mudar para a porta 2121, por exemplo:</p>
<pre> # Port 21 is the standard FTP port.
 Port 2121
</pre>
<p>Ao mudar a porta padrão do servidor, os usuários precisarão indicar manualmente a porta no cliente de ftp ou navegador, como em: <a title="ftp://200.234.213.23:2121" rel="nofollow" href="ftp://200.234.213.23:2121/">ftp://200.234.213.23:2121</a>.</p>
<p>Em seguida, vem a opção MaxClients, que limita o número de conexões simultâneas ao servidor FTP. Esta opção trabalha em conjunto com a limitação de banda (veja a seguir). Você pode limitar os downloads de cada usuário a um máximo de 10 KB/s e limitar o servidor a 3 usuários simultâneos, por exemplo. Assim, o FTP consumirá um máximo de 30 KB/s do link do servidor.</p>
<pre> MaxClients 30
</pre>
<p>Se você quiser limitar o acesso dos usuários, prendendo-os em seus respectivos diretórios home, adicione a linha &#8220;DefaultRoot ~&#8221; no final do arquivo. Lembre-se de que no Linux o &#8220;~&#8221; é um curinga, que é automaticamente substituído pela pasta home do usuário que está logado:</p>
<pre> DefaultRoot ~
</pre>
<p>Para ativar a limitação de banda, adicione a linha &#8220;TransferRate RETR 8:10&#8243;, onde o &#8220;8&#8243; pode ser substituído pela taxa desejada, em KB/s, por usuário:</p>
<pre> TransferRate RETR 8:10
</pre>
<p>A princípio, apenas os usuários que tiverem logins válidos no servidor poderão acessar o FTP. Caso você queira abrir um FTP público, adicione estas linhas no arquivo de configuração. Elas ficam comentadas no arquivo original:</p>
<pre> &lt;Anonymous ~ftp&gt;
 User ftp
 Group nogroup
 UserAlias anonymous ftp
 DirFakeUser on ftp
 DirFakeGroup on ftp
 RequireValidShell off
 MaxClients 20
 DisplayLogin welcome.msg
 DisplayFirstChdir .message
 &lt;Directory *&gt;
 &lt;Limit WRITE&gt;
 DenyAll
 &lt;/Limit&gt;
 &lt;/Directory&gt;
</pre>
<pre> &lt;Directory incoming&gt;
 Umask 022 022
 &lt;Limit READ WRITE&gt;
 DenyAll
 &lt;/Limit&gt;
</pre>
<pre> &lt;Limit STOR&gt;
 AllowAll
 &lt;/Limit&gt;
 &lt;/Directory&gt;
 &lt;/Anonymous&gt;
</pre>
<p>A linha &#8220;MaxClients&#8221; determina o número máximo de usuários anônimos que poderão se logar simultaneamente no servidor. Essa opção é separada da MaxClients principal, que limita o número de usuários com login válido. Você pode permitir 30 usuários válidos e mais 20 anônimos, por exemplo.</p>
<p>A opção &#8220;DisplayLogin welcome.msg&#8221; indica a mensagem de boas-vindas que é mostrada quando os usuários fazem login no FTP. Por padrão, é exibido o conteúdo do arquivo &#8220;/home/ftp/welcome.msg&#8221;.</p>
<p>Os usuários anônimos têm acesso apenas aos arquivos dentro da pasta &#8220;/home/ftp&#8221;, que é visto pelo cliente FTP como o diretório raiz do servidor. Graças a isso, eles não têm como ver, muito menos alterar outros arquivos do sistema.</p>
<p>A seção &#8220;Directory incoming&#8221; mais abaixo cria uma pasta de upload (por padrão a &#8220;/home/ftp/incoming&#8221;), onde os anônimos poderão dar upload de arquivos. A idéia é que você veja periodicamente o conteúdo da pasta e mova o que for útil para a pasta &#8220;/home/ftp&#8221;, para que o arquivo fique disponível para download.</p>
<p>Por padrão, os anônimos não podem ver o conteúdo da pasta incoming, podem apenas dar upload. Se necessário, crie a pasta incoming usando os comandos:</p>
<pre> # mkdir /home/ftp/incoming
 # chown nobody:nogroup /home/ftp/incoming
</pre>
<p>Para acessar o seu servidor, os clientes devem usar o login &#8220;anonymous&#8221; ou &#8220;ftp&#8221;, usando um endereço de e-mail qualquer como senha.</p>
<p>Uma medida comum ao ativar o upload para os usuários anônimos é usar uma partição separada para o FTP, para evitar que algum engraçadinho fique dando upload durante a madrugada até lotar o HD do servidor. Nesse caso, você precisa apenas adicionar uma linha no arquivo &#8220;/etc/fstab&#8221; para que a partição desejada seja montada durante o boot. Esta linha de exemplo montaria a partição /dev/hda3, formatada em ReiserFS na pasta /home/ftp:</p>
<pre> /dev/hda3 /home/ftp reiserfs defaults 0 2
</pre>
<p><a id="Criando_usu.C3.A1rios_e_ajustando_as_permiss.C3.B5es_de_acesso" name="Criando_usu.C3.A1rios_e_ajustando_as_permiss.C3.B5es_de_acesso"></a></p>
<h2>Criando usuários e ajustando as permissões de acesso</h2>
<p>Imagine agora que você quer uma configuração um pouco mais complexa, com vários usuários, cada um tendo acesso a apenas uma pasta específica. Esta configuração pode ser usada em conjunto com os virtual hosts do Apache (permitindo que os responsáveis possam atualizar os arquivos do site), ou em situações em que seu servidor hospeda arquivos de diversos usuários ou projetos diferentes.</p>
<p>O responsável pelo projeto1 pode dar upload para a pasta &#8220;/home/ftp/projeto1&#8243; (por exemplo), mas não deve ter acesso a outras pastas nem a outros arquivos do sistema. Os usuários anônimos terão acesso às pastas de todos os projetos, mas, naturalmente, apenas para leitura.</p>
<p>A forma mais simples de fazer isso é criar os usuários que terão acesso ao FTP, colocando a pasta a que terão acesso como seu diretório home e bloqueando o uso do shell, para que eles não possam acessar o servidor remotamente através de outros meios (via ssh, por exemplo).</p>
<p>Vamos começar adicionando no arquivo a opção que prende os usuários nos seus diretórios home. Abra o arquivo &#8220;/etc/proftpd.conf&#8221; e adicione (no final do arquivo) a linha:</p>
<pre> DefaultRoot ~
</pre>
<p>Você vai precisar adicionar também a seção para liberar o acesso anônimo ao ftp, que vimos acima. Como queremos apenas que os mantenedores dos projetos possam dar upload de arquivos, remova a seção &#8220;&lt;Directory incoming&gt;&#8221;. A seção vai ficar:</p>
<pre> &lt;Anonymous ~ftp&gt;
 User ftp
 Group nogroup
 UserAlias anonymous ftp
 DirFakeUser on ftp
 DirFakeGroup on ftp
 RequireValidShell off
 MaxClients 20
 DisplayLogin welcome.msg
 DisplayFirstChdir .message
 &lt;Directory *&gt;
 &lt;Limit WRITE&gt;
 DenyAll
 &lt;/Limit&gt;
 &lt;/Directory&gt;
 &lt;/Anonymous&gt;
</pre>
<p>O diretório padrão do FTP, onde os usuários anônimos terão acesso aos arquivos, é a &#8220;/home/ftp&#8221;. Em outras distribuições pode ser usada a pasta &#8220;/var/ftp&#8221;; dê uma olhada em como o arquivo vem configurado por padrão.</p>
<p>De volta à configuração, vamos começar criando subpastas para cada projeto:</p>
<pre> # mkdir /home/ftp/projeto1
 # mkdir /home/ftp/projeto2
 # mkdir /home/ftp/projeto3
 etc...
</pre>
<p>O próximo passo é ir adicionando os usuários no sistema, tendo o cuidado de fazer as alterações no diretório home e no shell padrão, para que eles tenham acesso somente via FTP e apenas à pasta desejada.</p>
<p>Para adicionar os usuários, use o comando &#8220;adduser&#8221;, como se estivesse criando uma conta normal:</p>
<pre> # adduser projeto1
</pre>
<pre> Acrescentando usuário projeto1...
 Acrescentando novo grupo projeto1 (1005).
 Acrescentando novo usuário projeto1 (1005) com grupo projeto1.
 Criando diretório pessoal /home/projeto1.
 Copiando arquivos de /etc/skel

 Enter new UNIX password:
 Retype new UNIX password:
 passwd: password updated successfully
</pre>
<p>Veja que por padrão ele cria a pasta &#8220;/home/projeto1&#8243;, que passa a ser o diretório home do usuário criado. Entretanto, neste caso queremos que o home seja a pasta &#8220;/home/ftp/projeto1&#8243;, onde ele dará upload dos arquivos.</p>
<p>Para alterar isso, abra o arquivo &#8220;/etc/passwd&#8221;, onde ficam guardadas as informações dos usuários. Na última linha do arquivo você verá:</p>
<pre> projeto1:x:1005:1005:,,,:/home/projeto1:/bin/bash
</pre>
<p>Vamos alterar o &#8220;/home/projeto1&#8243; para &#8220;/home/ftp/projeto1&#8243; (para trocar o home) e o &#8220;/bin/bash&#8221; para &#8220;/bin/false&#8221;, de forma a impedir que usuário tenha acesso ao shell do servidor e possa executar comandos (fazendo o que não deve no servidor). Se você preferir que, além do acesso via ftp, os usuários tenham acesso via ssh, então mantenha o &#8220;/bin/bash&#8221;. Depois das alterações, a linha ficará:</p>
<pre> projeto1:x:1005:1005:,,,:/home/ftp/projeto1:/bin/false
</pre>
<p>Você pode aproveitar para remover a pasta /home/projeto1, já que não precisaremos mais dela:</p>
<pre> # rm -rf /home/projeto1/
</pre>
<p>Na verdade, esse processo serve para que você entenda melhor o procedimento de criação destes usuários &#8220;falsos&#8221; no Linux. Estas alterações podem ser especificadas ao criar o usuário. Não é preciso sair editando todos os arquivos manualmente. O comando para criar o usuário &#8220;projeto1&#8243;, usando a pasta &#8220;/home/ftp/projeto1&#8243; como home e o &#8220;/bin/false&#8221; como shell, seria:</p>
<pre> # adduser --home /home/ftp/projeto1 --shell /bin/false --no-create-home projeto1
</pre>
<p>Não esqueça de acertar as permissões da pasta /home/ftp/projeto1:</p>
<pre> # chown -R projeto1:projeto1 /home/ftp/projeto1/
</pre>
<p>Depois de concluir a configuração, falta só reiniciar o servidor FTP para que as configurações entrem em vigor:</p>
<pre> # /etc/init.d/proftpd restart
</pre>
<p>Em distribuições derivadas do Debian, você vai precisar adicionar a linha &#8220;/bin/false&#8221; no final do arquivo /etc/shells para que ele possa ser usado:</p>
<pre> # echo "/bin/false" &gt;&gt; /etc/shells
</pre>
<p>Feito isso, você já conseguirá se logar no servidor usando o login criado. O usuário não enxerga nada fora da pasta &#8220;/home/ftp/projeto1&#8243; e todos os arquivos que ele der upload vão para lá.</p>
<p>A senha de acesso ao FTP é a mesma definida na hora de criar o usuário. O Proftpd simplesmente aproveita o sistema de autenticação do sistema. Se você precisar alterar a senha do usuário, use o comando &#8220;passwd projeto1&#8243;.</p>
<p>Para usar o Proftpd em conjunto com os virtual hosts do Apache, a configuração é a mesma, com exceção de que você não precisaria habilitar o acesso anônimo, já que o FTP seria usado apenas pelos webmasters dos sites hospedados.</p>
<p>Nesse caso, ao criar os usuários, use a pasta com os arquivos do site como home, como em:</p>
<pre> # adduser --home /var/www/joao --shell /bin/false --no-create-home joao
</pre>
<p>A opção &#8220;&#8211;no-create-home&#8221; evita que o sistema copie os arquivos do diretório &#8220;/etc/skel&#8221; (como os arquivos .bashrc, .bash_history e outros) para dentro da pasta de arquivos, &#8220;sujando&#8221; o diretório. Ao terminar, não se esqueça de alterar as permissões da pasta, de forma que o usuário tenha permissão de escrita:</p>
<pre> # chown -R joao:joao /var/www/joao
</pre>
<p>Graças ao uso da opção &#8220;DefaultRoot ~&#8221;, os usuários terão acesso apenas à pasta com os arquivos do site, sem acesso às pastas dos outros usuários ou às demais pastas do sistema. Esta é justamente a configuração usada na maioria dos serviços de shared hosting onde o acesso é feito via FTP. O sistema não é nada seguro e de vez em quando algumas das senhas são roubadas, mas, como ele é fácil de implementar e poucos usuários tem dificuldades em acessar as contas, a tradição continua.</p>
<p><a id="FTP_.2B_TLS" name="FTP_.2B_TLS"></a></p>
<h2>FTP + TLS</h2>
<p>É possível adicionar uma camada de segurança ao protocolo FTP ativando a encriptação via TLS. Nem todos os clientes de FTP suportam encriptação, de forma que a mudança criará dificuldades aos usuários menos técnicos, mas, por outro lado, elimina o grande risco do FTP, evitando que as senhas possam ser capturadas durante as conexões.</p>
<p>Presumindo que você já tenha instalado o pacote do Proftpd e feito a configuração básica, o próximo passo é instalar o pacote &#8220;openssl&#8221;. Ele é usado por diversos outros serviços, por isso é provável que já esteja instalado:</p>
<pre># apt-get install openssl
</pre>
<p>Em seguida, crie um diretório dentro da pasta &#8220;/etc/proftpd&#8221; para armazenar os certificados, como em:</p>
<pre># mkdir /etc/proftpd/cert
</pre>
<p>O próximo passo é gerar os certificados usando o comando &#8220;openssl&#8221;, como em:</p>
<pre># openssl req -new -x509 -days 3650 -nodes -out \
/etc/proftpd/cert/proftpd.cert.pem -keyout /etc/proftpd/cert/proftpd.key.pem
</pre>
<p>A opção &#8220;-days&#8221; especifica o tempo de validade do certificado. Nesse caso, estou gerando um certificado válido por 10 anos para evitar que os clientes passem a receber erros relacionados ao certificado caso ele expire antes que tenha tempo de atualizá-lo. Entretanto, do ponto de vista da segurança, o ideal é gerar certificados válidos por apenas um ano ou dois e substituí-los mais regularmente.</p>
<p>Depois de responder às perguntas feitas durante a geração do certificado (país, estado, cidade, nome da empresa, etc.), serão gerados os arquivos &#8220;proftpd.cert.pem&#8221; e &#8220;proftpd.key.pem&#8221; dentro da pasta &#8220;/etc/proftpd/cert&#8221;, que correspondem ao certificado.</p>
<p>O próximo passo é alterar a configuração do Proftpd de forma que ele ative o uso da encriptação. Abra o arquivo &#8220;/etc/proftpd/proftpd.conf&#8221; e procure pelas linhas:</p>
<pre>&lt;IfModule mod_tls.c&gt;
TLSEngine off
&lt;/IfModule&gt;
</pre>
<p>Para ativar o uso do TLS, você deve substituí-las por:</p>
<pre>&lt;IfModule mod_tls.c&gt;
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSOptions NoCertRequest
TLSRSACertificateFile /etc/proftpd/cert/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/cert/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
&lt;/IfModule&gt;
</pre>
<p>Note que as opções &#8220;TLSRSACertificateFile&#8221; e &#8220;TLSRSACertificateKeyFile&#8221; indicam a localização dos dois arquivos com o certificado. Se você estiver usando uma pasta diferente da &#8220;/etc/proftpd/cert&#8221; para armazená-los, não esqueça de indicar a localização correta. Outra opção importante é a &#8220;TLSRequired&#8221;, que determina se o uso da encriptação será obrigatório ou não. Ao usar &#8220;TLSRequired on&#8221;, como no exemplo, apenas os clientes que tiverem ativado o uso do SSL poderão se conectar ao servidor, enquanto que ao usar &#8220;TLSRequired off&#8221; a encriptação passa a ser opcional.</p>
<p>Depois de salvar a configuração, reinicie o serviço:</p>
<pre># /etc/init.d/proftpd restart
</pre>
<p>Para ativar a encriptação no cliente, é necessário usar o protocolo &#8220;FTP over SSL&#8221;, em vez do protocolo FTP regular. No Filezilla, por exemplo, a opção aparece dentro do Site Manager, ao visualizar as propriedades da conexão:</p>
<p>Ao conectar a partir do cliente, você verá entradas similares a essas no arquivo &#8220;/var/log/proftpd/tls.log&#8221; (no servidor), sinal de que a encriptação está sendo usada:</p>
<p>Jun 30 12:54:46 mod_tls/2.1.1[2326]: TLSv1/SSLv3 connection accepted, using cipher DHE-RSA-AES256-SHA (256 bits) Jun 30 12:54:47 mod_tls/2.1.1[2326]: Protection set to Private Jun 30 12:54:47 mod_tls/2.1.1[2326]: starting TLS negotiation on data connection Jun 30 12:54:47 mod_tls/2.1.1[2326]: TLSv1/SSLv3 data connection accepted, using cipher DHE-RSA-AES256-SHA (256 bits) Jun 30 12:54:47 mod_tls/2.1.1[2325]: starting TLS negotiation on data connection</p>
<p>O grande problema é que o FTP over SSL não é suportado por todos os clientes de FTP, o que dificulta seu uso. Em geral, é mais fácil conseguir que os usuários migrem para o SFTP (veja detalhes sobre ele no capítulo sobre o SSH), que é suportado por um número maior de clientes de FTP do que conseguir fazer uma migração completa para o TLS.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.deserv.info/2010/01/28/proftpd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

