sexta-feira, 29 de agosto de 2008

Bash Script: Lendo linha a linha de um arquivo

Certo dia precisei fazer um script em bash que analisava um arquivo texto (na ocasião era o arquivo de log do vsftpd) e processava linha a linha. A terefa me parecia simples, bastava usar um for. Por isso fiz:

#!/bin/sh
LOG=’cat /var/log/vsftpd’
for LINHA in $LOG; do
echo $LINHA;
done


Infelizmente a solução acabou não sendo tão simples assim. Ao executar tal script eu acabava por receber cada palavra contida no arquivo em uma linha diferente.

Cheguei a fazer alguns testes tentando ler o arquivo de uma maneira diferente, e todos foram sem sucessos. Depois de coçar a cabeça um pouco mais eu finalmente encontrei a resposta, a mais simples possível: Inter Field Separator.

Inter Field Separator, ou IFS, é a variável padrão do sistema que define a divisão entre os campos de uma determinada string. Esse valor, que fica salvo na variável de mesmo nome, que é utilizado pelo for.

Por isso, tudo que precisei fazer para que meu script funcionasse foi alterar o valor de IFS de modo que o separador de campos do sistema deixasse de ser o espaço (padrão) e passasse a ser a quebra de linha. Dessa maneira, o meu script acabou ficando assim:

#!/bin/sh
IFS=´
´
lOG=’cat /var/log/vsftpd’
for LINHA in $LOG; do
echo $LINHA;
done

quinta-feira, 28 de agosto de 2008

Criando um arquivo de log para o PROFTPD dentro do SYSLOG-NG

Para se configurar um arquivo de log independente para o proftpd dentro do syslog-ng, basta se abrir o arquivo /etc/syslog-ng/syslog-ng.conf e inserir a seguinte linha dentro da seção Filter Definition:

filter f_proftpd { match('^proftpd'); };

Em seguinte insira as seguintes linhas no final do arquivo:

# FTP (proftpd) messages in one file:
#
destination proftpd { file("/var/log/ftp"); };
log { source(src); filter(f_proftpd); destination(proftpd); };
Basta então reiniciar o serviço do syslog-ng, isso pode ser feito verificando o PID do syslog-ng com o comando:

ps -A | grep syslog-ng


Em seguinda basta enviar um kill -HUP para o PID retornado. Feito isso, basta se realizar uma conexão via ftp com o servidor para que o arquivo de log
/var/log/ftp seja criado e atualizado.

Servidores de SMTP, IMAP, Pop

Boa noite pessoal! O post de hoje é sobre e-mail, ou correio eletrônico. Nele eu pretendo esclarecer alguns pontos sobre como funciona essa modalidade de comunicação.

O serviço de correio eletrônico, ou e-mail, é um dos mais antigos e que ainda hoje se mantém mais em voga na internet. O serviço de e-mail é tão antigo, tão importante, que praticamente o serviço de Domain Name Server, o popular DNS, trás configurações específicas para servidores de e-mail.

A troca de e-mails entre usuários na internet ocorre através do protocolo SMTP, ou Simple Mail Transfer Protocol, organizado pelo IETF, ou Internet Engineering Task Force, uma instituição dedicada a padronização de procotolos. A primeira versão do SMTP era baseada no RFC, uma documentação da IETF, 821. Atualmente utiliza-se a versão mais recente que é a RFC 2821.

O funcionamento do protocolo, como seu próprio nome diz, é bem simples. Um exemplo, o usuário 1 (user1@server1.com) deseja enviar uma mensagem ao usuário 2 (user2@server2.org). O usuário 1 digita a sua mensagem em seu programa de e-mail e manda enviar. Através de uma facilidade chamada relay, o programa de e-mail entrega a mensagem ao servidor de smtp do usuário.

O próximo passo consiste na conexão entre o servidor smtp do usuário 1 e servidor de smtp do usuário 2. O servidor de smtp do usuário 1, server1.com, consulta o servidor de DNS para descobrir o servidor de DNS responsável pelo domínio server2.org. Ao encontrá-lo, o servidor 1 verifica qual o servidor que consta na cláusula MX daquele domínio.

Dentro da configuração do BIND, o servidor de nomes padrão do mundo linux, existe uma entrada chamada MX, onde é possível configurar diferentes servidores de smtp com diferentes prioridades, como uma forma de redundância.

Enfim, verificado qual o IP do servidor que responde pelo serviço de smtp daquele domínio, o servidor de usuário 1 realizará a seguinte comunicação para com o servidor:

EHLO root@server1.com
Aqui é feito uma apresentação do servidor1 que tenta contato com o server2. Caso o contato seja bem sucedido o servidor 2 retorna uma lista de comandos válidos disponíveis.

MAIL FROM: user1@server1.com
Aqui é feita a identificação do usuário que tenta enviar a mensagem. Caso o endereço seja válido o servidor 2 retornará ok.

RCPT TO: user2@server2.org
Aqui é feita a identificação da conta que irá receber a mensagem. Nesse momento não é feita uma checagem sobre a conta ser válida ou não, e sim do endereço apresentado ser válido ou não. Novamente deve ser retornado um ok.

DATA
Aqui sim é iniciado o envio da mensagem, incluindo seus anexos e outros arquivos associados.

.
O último comando enviado pelo servidor de SMTP é um ponto. Ele indica o fim da mensagem assim como a desconexão com o servidor.


É possível verificar tais comandos utilizando um simples programa de telnet. Para isso, basta se conectar na porta 22 (porta default do serviço de SMTP) e entrar manualmente com os comandos acima.

O mundo do software livre possui algumas opções bem interessantes de servidores de e-mail SMTP. O mais antigo e popular deles é o Sendmail. Um mais recente que vem tomando o lugar deste nas distribuições é o Postfix, desenvolvido por Vietse Vena. No mundo das distribuições baseadas no Debian temos o Exim, desenvolvido pela própria equipe da distribuição. Esses três são distribuídos em GPL. Uma quarta opção, livre, porém não em GPL é o Qmail, bem popular devido a seu foco na segurança.

Voltando ao nosso exemplo, após entregue a mensagem do usuário 1 ao servidor de smtp do usuário 2, falta que este acesse ao servidor e busque as mensagens. Este passo pode ser feito através de 2 protocolos diferentes: POP ou IMAP.

O protocolo POP é o mais antigo e mais simples. Através dele, o cliente de e-mail do usuário 2 acessa ao servidor de smtp e lá ele se torna capaz de ou baixar as mensagens e deixar uma cópia no servidor ou baixar e depois apagar as mensagens. Sua porta padrão é a 110 e o programa servidor mais utilizado é o pop3d.

Outro protocolo pelo qual o usuário 2 pode vi a buscar as suas mensagens é através do IMAP, mais atual e completo, pois permite a existência de cópia sincronizadas de mensagens entre cliente e servidor, criação de diretórios, agrupamento de mensages e etc. Sua porta de operação é a 143 e o programa servidor mais utilizado é o dovecot.

O protocolo POP é regulamentado pela normal RFC 1939 e e o IMAP pela normal RFC 3501.

Uma curiosidade, a sigla RFC significa Request For Comming, ou requisita-se comentários. Essa sigla deriva da necessidade do IETF de gerar tais normas em decorrência da grande confusão entre os protocolos no passado e de após gerar tais documentos aguardar por um retorno dos usuários e desenvolvedores.

É isso pessoal, espero com esse post ter esclarecido alguns pontos sobre como funciona a comunicação via e-mail. Um abraço e até o próximo post!

RFC 821 - SMTP
RFC 2821 - SMTP atual
RFC 3501 - IMAP
RFC 1939 - POP

terça-feira, 26 de agosto de 2008

Revista Fedora Brasil

O Projeto Fedora Brasil elabora mensalmente uma revista, disponibilizada gratuitamente pela internet. Nela você encontra estudos de casos, dicas, notícias e muito mais. Vale a visita!

quinta-feira, 21 de agosto de 2008

PyConBrasil no Rio de Janeiro

Está confirmado para os dias 18, 19 e 20 de setembro, no campus da Universidade Veiga de Almeida, o PyConBrasil. Organizado pela Associação Python Brasil, pela PythOnRio e a própria universidade, o evento trará um sem cursos e palestras sobre a linguagem, aplicações e etc. A entrada custará R$ 45,00 e as inscrições já podem ser feitas no sítio do evento.