http://www.freesoftware.org.

br

QMAIL + OPENLDAP

Marcio Garcia Marcenari & Ralf Braga Sermatheu mgarcia@freesoftware.org.br ralf@freesoftware.org.br

Versão 0.01

1

Nota de Copyright
Copyleft © 2004 - Marcio Garcia Marcenari e Ralf Braga Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; A copy of the license is included in the section entitled "GNU Free Documentation License"

2

Do Autor
Marcio Garcia Marcenari, Bem comecei a mexer com Linux ainda na TurboLinux como o único representante no Brasil, em seguida atuei na empresa 4Linux como profissional da Área Técnica Comercial, também Consultor Técnico e Instrutor da mesma. Atualmente sou consultor da empresa The Source, atuando também como instrutor de Software Livre na Sucesu São Paulo e outros centros de treinamento focando os diversos tópicos, dentre eles: Qmail, Linux, Ldap, Segurança, Samba, VPN, Apache), etc...

3

Introdução
Gostaria de agradecer alguns amigos que trabalharam comigo porém nunca tive a oportunidade de documentar ou relatar isso formalmente, apenas comentários. Sem os mesmos eu jamais teria chegado nessa velocidade onde cheguei, são eles: Alessandro Kenji Urakawa e Renato Tambelini. Também quero agradecer como Co-Autor Ralf Braga. A idéia com o tempo é formalizar um grupo de discussão sobre o Qmail, que na minha opinião é um dos melhores servidores de correio que já conheci. A idéia de criação do site e grupo é iniciar as traduções de manuais do qmail para a Língua Portuguesa pt_BR e aprimorar o material, fazendo assim com que o conhecimento brasileiro em qmail cresça, fomentando também a comunidade de Software Livre. E assim deixar documentado, todas as dificuldades encontradas no meio do percurso e incentivar com que outras pessoas façam o mesmo e comecemos todos a ajudar uns aos outros. Em breve esperamos poder contar também com você para poder contribuir para a comunidade Qmail_BR.

4

Índice
O Sistema Operacional.........................................................................................10 O Linux.................................................................................................................10 Algumas Características do Linux.........................................................................11 Distribuições do Linux...........................................................................................13 Software Livre.......................................................................................................17 Instalação do GNU/Debian Linux 3.0 r2................................................................20 Menu de Instalação – Selecionando a Imagem de Instalação............................20 Menu de Instalação – Seleção de Ídioma...........................................................21 Menu de Instalação – Seleção de Ídioma e Teclado...........................................22 Menu de Instalação – Notas de Lançamento.....................................................23 Menu de Instalação – Configuração do Teclado.................................................24 Menu de Instalação – Selecionar Teclado..........................................................25 Menu de Instalação – Particionar Disco Rígido..................................................26 Menu de Instalação – Selecionar Unidade de Disco...........................................27 Menu de Instalação – Limitações do LILO..........................................................28 Menu de Instalação – Informações Adicionais sobre ReiserFS...........................29 Menu de Instalação – Particionar Disco Rígido..................................................30 Menu de Instalação – Particionar Disco Rígido..................................................31 Menu de Instalação – Configuração da Partição Swap.......................................32 Menu de Instalação – Checar Blocos Defeituosos..............................................33 Menu de Instalação – Formatar Dispositivo Selecionado...................................34 Menu de Instalação – Inicializar Dispositivo do Sistema....................................35 Menu de Instalação – Tipo de Sistema de Arquivos...........................................36 Menu de Instalação – Selecionar Dispositivo.....................................................37 Menu de Instalação – Checar Blocos Defeituosos..............................................38 Menu de Instalação – Formatar Dispositivo Selecionado...................................39 Menu de Instalação – Gerando Sistema de Arquivos.........................................40 Menu de Instalação – Montar Dispositivo Selecionado.......................................41 Menu de Instalação – Inicializar Dispositivo do Sistema....................................42 Menu de Instalação – Selecionar Dispositivo.....................................................43 Menu de Instalação – Checar Blocos Defeituosos..............................................44 Menu de Instalação – Formatar Dispositivo Selecionado...................................45 Menu de Instalação – Gerando Sistema de Arquivos.........................................46 Menu de Instalação – Montar Dispositivo Selecionado.......................................47 Menu de Instalação – Instalar Kernel e Módulos................................................48 Menu de Instalação – CDROM............................................................................49 Menu de Instalação – Configuração de Dispositivos..........................................50 Menu de Instalação – Configuração de Dispositivos..........................................51 Menu de Instalação – Configuração de Dispositivos..........................................52 Menu de Instalação – Configuração de Rede.....................................................53 Menu de Instalação – Nome no Servidor...........................................................54
5

Menu de Instalação – Ativar Rede DHCP ou STATIC...........................................55 Menu de Instalação – Configuração do IP do Servidor.......................................56 Menu de Instalação – Configuração da Mascará de Rede..................................57 Menu de Instalação – Configuração do Gateway...............................................58 Menu de Instalação – Configuração do Domínio do Servidor.............................59 Menu de Instalação – Configuração do Resolvedor de Nomes...........................60 Menu de Instalação – Instalação do Sistema GNU/Debian Linux........................61 Menu de Instalação – Instalação do Sistema GNU/Debian Linux........................62 Menu de Instalação – Configuração do Gerenciador de Boot.............................63 Menu de Instalação – Configuração do Gerenciador de Boot.............................64 Menu de Instalação – Configuração do Gerenciador de Boot.............................65 Menu de Instalação – Reiniciar o Sistema.........................................................66 Menu de Instalação – Reiniciar o Sistema.........................................................67 Gerenciador de pacotes do Debian.......................................................................68 dpkg..................................................................................................................68 APT...................................................................................................................69 Redes...................................................................................................................72 Configuração do ambiente Debian........................................................................74 Instalação e Configuração DNS (Domain Name Server)........................................77 Introdução.........................................................................................................77 A História do Domain Name Server...................................................................78 A História do BIND.............................................................................................79 Instalação do BIND............................................................................................80 Configuração do BIND.......................................................................................80 Iniciando o Serviço do BIND..............................................................................82 Testando o BIND...............................................................................................82 daemontools.........................................................................................................83 O que é ?..........................................................................................................83 O programa svscanboot....................................................................................83 Interface........................................................................................................83 O programa svscan...........................................................................................83 Interface........................................................................................................84 O programa supervise.......................................................................................84 Interface........................................................................................................84 O programa svc.................................................................................................85 Interface........................................................................................................85 Opções..........................................................................................................85 O programa svok...............................................................................................85 Interface........................................................................................................85 O programa svstat............................................................................................86 Interface........................................................................................................86 O programa readproctitle..................................................................................86 Interface........................................................................................................86 O programa multilog.........................................................................................87 Interface........................................................................................................87 Timestamping...............................................................................................87
6

Rotate logs automaticamente.......................................................................87 O programa setuidgid.......................................................................................88 Interface........................................................................................................88 O programa softlimit.........................................................................................89 Interface........................................................................................................89 Opções..........................................................................................................89 ucspi-tcp...............................................................................................................90 O que é ?..........................................................................................................90 Outras ferramentas TCP de comandos de linha................................................90 O programa tcpserver.......................................................................................90 Interface........................................................................................................90 Opções..........................................................................................................91 O programa tcprules.........................................................................................92 Interface........................................................................................................92 Formato das regras...........................................................................................93 Endereços.....................................................................................................93 Range de endereços......................................................................................94 Instruções......................................................................................................94 O programa tcpclient........................................................................................94 Interface........................................................................................................94 Opções..........................................................................................................95 Variáveis de ambiente TCP...............................................................................95 Qmail....................................................................................................................97 Releases do Qmail............................................................................................97 Por que usar o Qmail.........................................................................................97 Algumas comparações do Qmail.......................................................................98 Pacotes.............................................................................................................98 Download dos pacotes......................................................................................98 Como instalar o daemontools............................................................................99 Como instalar o ucspi-tcp..................................................................................99 Como instalar o Qmail.....................................................................................100 Criando os alias do Qmail............................................................................101 Configurando o script “/var/qmail/rc”..........................................................102 Iniciando o Qmail somente local..................................................................104 Verificando os processos do Qmail..............................................................104 Testando o servidor de correio Qmail..........................................................105 Parando o servidor de correio Qmail...........................................................105 Configurando o binário “sendmail”..............................................................106 Configurando o SEND do Qmail...................................................................106 Configurando o SMTP do Qmail...................................................................107 Configurando o POP3D do Qmail.................................................................107 Criando os diretórios de logs do Qmail........................................................108 Criando os links dos scripts do Qmail..........................................................108 Configurando a tabela de relay...................................................................109 Habilitando a checagem de domínio...........................................................109 Script de rotinas do Qmail...........................................................................110
7

Arquivos de controle do Qmail........................................................................111 Variáveis de ambiente do Qmail.....................................................................112 Arquitetura......................................................................................................114 Estrutura de Diretórios....................................................................................115 Estrutura do Queue.........................................................................................115 Tentativas de Entrega das Mensagens............................................................115 Vpopmail............................................................................................................118 Vantagens.......................................................................................................118 Pacotes...........................................................................................................118 Download........................................................................................................118 Como instalar o vpopmail...............................................................................118 Courier-Imap.......................................................................................................120 Pacotes...........................................................................................................120 Download........................................................................................................120 Dependências.................................................................................................120 Como instalar o courier-imap..........................................................................120 Qmailadmin........................................................................................................121 Outros recursos do qmailadmin......................................................................122 Pacote.............................................................................................................122 Download........................................................................................................122 Pré-requisitos..................................................................................................122 Como instalar o qmailadmin...........................................................................123 Como acessar o qmailadmin...........................................................................124 Squirrelmail........................................................................................................124 Pacote.............................................................................................................124 Download........................................................................................................124 Como instalar o squirrelmail...........................................................................124 Como acessar o squirrelmail...........................................................................124 Como deixar o webmail mais seguro..................................................................125 OPENLDAP2........................................................................................................126 Instalação do OpenLdap2 através do APT...........................................................126 Arquivos de configuração do OPENLDAP.........................................................128 Instalando o pacote migrationtools.....................................................................131 Migrando a Base de Objetos...........................................................................132 Ferramenta de administração web para o OpenLDAP.........................................133 Download........................................................................................................133 Pré-requisitos..................................................................................................134 Como instalar o davedap................................................................................134 Como acessar o davedap................................................................................139 Instalação do OpenLdap2 através do código fonte.............................................139 Pré-requisitos..................................................................................................139 Pacotes...........................................................................................................139 Download........................................................................................................139 Como instalar o BerkeleyDB............................................................................140 Como instalar o Cyrus - SASL..........................................................................140 Como instalar o OpenLDAP.............................................................................141
8

Configuração do OpenLdap.............................................................................142 Carregando o serviço do OpenLDAP................................................................143 Configurando as entradas no OpenLDAP.........................................................143 Modificando as entradas na base LDAP...........................................................146 Removendo as entradas na base LDAP...........................................................146 Consultando as entradas na base LDAP..........................................................146 Como fazer a indexão da base LDAP...............................................................146 Criptografando senhas do OpenLDAP..............................................................146 Instando o Qmail com suporte a LDAP................................................................148 Pré-requisitos..................................................................................................148 Download do Qmail.........................................................................................148 Download do Patch do LDAP para o Qmail......................................................148 Instalação do Qmail........................................................................................148 Descompactando o Qmail...............................................................................148 Aplicando o patch do LDAP no Qmail..............................................................148 Editando o Makefile do Qmail..........................................................................149 Configurando o LDAP com suporte ao Qmail...................................................149 Criando usuário para interagir com o LDAP.....................................................151 Criando os alias do Qmail................................................................................151 Criando os arquivos de controle do Qmail.......................................................152 Configurando o usuário e grupo que irá interagir com o LDAP....................152 Configurando o usuário “administrador” que irá controlar a Base LDAP......152 Configurando a senha do “Manager” no Qmail............................................152 Configurando a base do LDAP no Qmail......................................................152 Configurando o endereço do servidor LDAP.................................................152 Configurando o objectclass para usuário poder interagir com o LDAP.........153 Configurando arquivos de controle para o Qmail consultar o LDAP.............153 Configurando mensagem de quota..............................................................153 Configurando o arquivo para criação da conta do usuário no Qmail............153 Criando o script para criação automática da caixa postal do usuário..........153 Configurando tabela de relay do SMTP........................................................154 Configurando os scripts do Qmail....................................................................154 Configurando o SEND..................................................................................155 Configurando o SMTPD................................................................................155 Configurando o POP3D................................................................................156 Criando os links dos serviços do Qmail...........................................................157 Referências.........................................................................................................158 GNU Free Documentation License......................................................................159

9

O Sistema Operacional
O Sistema Operacional é o conjunto de programas que fazem a interface do usuário e seus programas com o computador. Ele é responsável pelo gerenciamento de recursos e periféricos (como memória, discos, arquivos, impressoras, CD-ROMs, etc.), interpretação de mensagens e a execução de programas. No Linux o Kernel mais o conjunto de ferramentas GNU compõem o Sistema Operacional. O kernel (que é a base principal de um sistema operacional), poderá ser construído de acordo com a configuração do seu computador e dos periféricos que possui.

O Linux
O Linux é um sistema operacional criado em 1991 por Linus Torvalds na universidade de Helsinki na Finlândia. É um sistema Operacional de código aberto distribuído gratuitamente pela Internet. Seu código fonte é liberado como Free Software (software livre) o aviso de copyright do kernel feito por Linus descreve detalhadamente isto e mesmo ele está proibido de fazer a comercialização do sistema. Isto quer dizer que você não precisa pagar nada para usar o Linux, e não é crime fazer cópias para instalar em outros computadores, nós inclusive incentivamos você a fazer isto. Ser um sistema de código aberto pode explicar a performance, estabilidade e velocidade em que novos recursos são adicionados ao sistema. Para rodar o Linux você precisa, no mínimo, de um computador 386 SX com 2 MB de memória e 40MB disponíveis em seu disco rígido para uma instalação básica e funcional. O sistema segue o padrão POSIX que é o mesmo usado por sistemas UNIX e suas variantes. Assim, aprendendo o Linux você não encontrará muita dificuldade em operar um sistema do tipo UNIX, FreeBSD, HPUX, SunOS, etc., bastando apenas aprender alguns detalhes encontrados em cada sistema. O código fonte aberto permite que qualquer pessoa veja como o sistema funciona (útil para aprendizado), corrija alguma problema ou faça alguma sugestão sobre sua melhoria, esse é um dos motivos de seu rápido crescimento, do aumento da compatibilidade de periféricos (como novas placas sendo suportadas logo após seu lançamento) e de sua estabilidade. Outro ponto em que ele se destaca é o suporte que oferece a placas, CDRoms e outros tipos de dispositivos de última geração e mais antigos (a maioria deles já ultrapassados e sendo completamente suportados pelo sistema operacional). Este é um ponto forte para empresas que desejam manter seus
10

micros em funcionamento e pretendem investir em avanços tecnológicos com as máquinas que possui. Hoje o Linux é desenvolvido por milhares de pessoas espalhadas pelo mundo, cada uma fazendo sua contribuição ou mantendo alguma parte do kernel gratuitamente. Linus Torvalds ainda trabalha em seu desenvolvimento e também ajuda na coordenação entre os desenvolvedores. O suporte ao sistema também se destaca como sendo o mais eficiente e rápido do que qualquer programa comercial disponível no mercado. Existem centenas de consultores especializados espalhados ao redor do mundo. Você pode se inscrever em uma lista de discussão e relatar sua dúvida ou alguma falha, e sua mensagem será vista por centenas de usuários na Internet e algum irá te ajudar ou avisará as pessoas responsáveis sobre a falha encontrada para devida correção.

Algumas Características do Linux

É livre e desenvolvido voluntariamente por programadores experientes, hackers, e contribuidores espalhados ao redor do mundo que tem como objetivo a contribuição para a melhoria e crescimento deste sistema operacional. Muitos deles estavam cansados do excesso de propaganda (Marketing) e baixa qualidade de sistemas comerciais existentes. Convivem sem nenhum tipo de conflito com outros sistemas operacionais (com o DOS, Windows, OS/2) no mesmo computador. Multitarefa real. Multiusuário. Suporte a nomes extensos de arquivos e diretórios (255 caracteres). Conectividade com outros tipos de plataformas como Apple, Sun, Macintosh, Sparc, Alpha, PowerPc, ARM, Unix, Windows, DOS, etc. Proteção entre processos executados na memória RAM. Suporte a mais de 63 terminais virtuais (consoles). Modularização - O GNU/Linux somente carrega para a memória o que é usado durante o processamento, liberando totalmente a memória assim que o programa/dispositivo é finalizado. Devido a modularização, os drivers dos periféricos e recursos do sistema podem ser carregados e removidos completamente da memória RAM a qualquer momento. Os drivers (módulos) ocupam pouco espaço quando carregados na memória RAM (cerca de 6Kb para a Placa de rede NE 2000, por exemplo).
11

• • • •

• • •

Não há a necessidade de se reiniciar o sistema após modificar a configuração de qualquer periférico ou parâmetros de rede. Somente é necessário reiniciar o sistema no caso de uma instalação interna de um novo periférico, falha em algum hardware (queima do processador, placa mãe, etc.) ou atualização do Kernel. Não precisa de um processador potente para funcionar. O sistema roda bem em computadores 386Sx 25 com 4MB de memória RAM (sem rodar o sistema gráfico X, que é recomendado 8MB de RAM). Já pensou no seu desempenho em um 486 ou Pentium ;-) O crescimento e novas versões do sistema não provocam lentidão, pelo contrário, a cada nova versão os desenvolvedores procuram buscar maior compatibilidade, acrescentar recursos úteis e melhor desempenho do sistema (como o que aconteceu na passagem do kernel 2.0.x para 2.2.x). Não é requerida uma licença para seu uso. O GNU/Linux é licenciado de acordo com os termos da GPL. Acessa sem problemas discos formatados pelo DOS, Windows, Novell, OS/2, NTFS, SunOS, Amiga, Atari, Mac, etc. Utiliza permissões de acesso a arquivos, diretórios e programas em execução na memória RAM. NÃO EXISTEM VÍRUS NO LINUX! Em 13 anos de existência, nunca foi registrado NENHUM tipo de vírus neste sistema. Isto tudo devido a grande segurança oferecida pelas permissões de acesso do sistema que funcionam inclusive durante a execução de programas. Rede TCP/IP mais rápida que no Windows e tem sua pilha constantemente melhorada. O GNU/Linux tem suporte nativo a redes TCP/IP e não depende de uma camada intermediária como o WinSock. Em acessos via modem a Internet, a velocidade de transmissão é 10% maior. Jogadores do Quake ou qualquer outro tipo de jogo via Internet preferem o GNU/Linux por causa da maior velocidade do Jogo em rede. É fácil rodar um servidor Quake em seu computador e assim jogar contra vários adversários via Internet. Roda aplicações DOS através do DOSEMU. Para se ter uma idéia, é possível dar o boot em um sistema DOS qualquer dentro dele e ao mesmo tempo usar a multitarefa deste sistema. Roda aplicações Windows através do WINE. Suporte a dispositivos infravermelho. Suporte a rede via rádio amador. Suporte a dispositivos Plug-and-Play. Suporte a dispositivos USB. Vários tipos de firewalls de alta qualidade e com grande poder de segurança de
12

• • • • • •

graça.
• • • •

Roteamento estático e dinâmico de pacotes. Ponte entre Redes. Proxy Tradicional e Transparente. Possui recursos para atender a mais de um endereço IP na mesma placa de rede, sendo muito útil para situações de manutenção em servidores de redes ou para a emulação de "mais computadores" virtualmente. O servidor WEB e FTP podem estar localizados no mesmo computador, mas o usuário que se conecta tem a impressão que a rede possui servidores diferentes. O sistema de arquivos usado pelo GNU/Linux (Ext3) organiza os arquivos de forma inteligente evitando a fragmentação e fazendo-o um poderoso sistema para aplicações multi-usuárias exigentes e gravações intensivas e ainda possui o recurso de Kjournal File System. Permite a montagem de um servidor Web, E-mail, News, etc. com um baixo custo e alta performance. O melhor servidor Web do mercado, o Apache, é distribuído gratuitamente junto com o Linux. O mesmo acontece com o Sendmail. Por ser um sistema operacional de código aberto, você pode ver o que o código fonte (o que foi digitado pelo programador) faz e adaptá-lo as suas necessidades ou de sua empresa. Esta característica é uma segurança a mais para empresas sérias e outros que não querem ter seus dados roubados (você não sabe o que um sistema sem código fonte faz na realidade enquanto esta processando o programa). Suporte a diversos dispositivos e periféricos disponíveis no mercado, tanto os novos como obsoletos. Pode ser executado em 10 arquiteturas diferentes (Intel, Macintosh, Alpha, Arm, S/390. Risc, Sparc, etc.). Consultores técnicos especializados no suporte ao sistema espalhados por todo o mundo. Entre muitas outras características que você descobrirá durante o uso do sistema. TODOS OS ÍTENS DESCRITOS ACIMA SÃO VERDADEIROS E TESTADOS PARA QUE TIVESSE PLENA CERTEZA DE SEU FUNCIONAMENTO.

Distribuições do Linux

13

Só o kernel GNU/Linux não é suficiente para se ter uma sistema funcional, mas é o principal. Existem grupos de pessoas, empresas e organizações que decidem "distribuir" o Linux junto com outros programas essenciais (como por exemplo editores gráficos, planilhas, bancos de dados, ambientes de programação, formatação de documentos, firewalls, etc). Este é o significado básico de distribuição. Cada distribuição tem sua característica própria, como o sistema de instalação, o objetivo, a localização de programas, nomes de arquivos de configuração, etc. A escolha de uma distribuição é pessoal e depende das necessidades de cada um. Algumas distribuições bastante conhecidas são: Slackware, Debian, Red Hat, Conectiva, Suse, Monkey, todas usando o SO Linux como kernel principal (a Debian é uma distribuição independente de kernel e pode ser executada sob outros kernels, como o GNU hurd). A escolha de sua distribuição deve ser feita com muita atenção, não adianta muita coisa perguntar em canais de IRC sobre qual é a melhor distribuição, ser levado pelas propagandas, pelo vizinho, etc. O melhor caminho para a escolha da distribuição, acredito eu, seria perguntar as características de cada uma e porque essa pessoa gosta dela ao invés de perguntar qual é a melhor, porque quem lhe responder isto estará usando uma distribuição que se encaixa de acordo com suas necessidade e esta mesma distribuição pode não ser a melhor para lhe atender. Segue abaixo as características de algumas distribuições seguidas do site principal e endereço ftp: Debian http://www.debian.org/ - Distribuição desenvolvida e atualizada através do esforço de voluntários espalhados ao redor do mundo, seguindo o estilo de desenvolvimento GNU/Linux. Por este motivo, foi adotada como a distribuição oficial do projeto GNU. Possui suporte a língua Portuguesa, é a única que tem suporte a 10 arquiteturas diferentes (i386, Alpha, Sparc, PowerPc, Macintosh, Arm, etc.) e aproximadamente 15 sub-arquiteturas. A instalação da distribuição pode ser feita tanto através de Disquetes, CD-ROM, Tftp, Ftp, NFS ou através da combinação de vários destes em cada etapa de instalação. Acompanha mais de 4350 programas distribuídos em forma de pacotes divididos em 4 CDs binários e 2 de código fonte, cada um destes programas são mantidos e testados pela pessoa responsável por seu empacotamento. Os pacotes são divididos em diretórios de acordo com sua categoria e gerenciados através de um avançado sistema de gerenciamento de pacotes (o dpkg) facilitando a instalação e atualização de pacotes. Possui tanto ferramentas para administração de redes e servidores quanto para desktops, estações multimídia, jogos, desenvolvimento, web, etc. A atualização da distribuição ou de pacotes individuais pode ser feita facilmente através de 2 comandos, não requerendo adquirir um novo CD
14

para usar a última versão da distribuição. É a única distribuição não comercial onde todos podem contribuir com seu conhecimento para o seu desenvolvimento. Para gerenciar os voluntários, conta com centenas de listas de discussão envolvendo determinados desenvolvedores das mais diversas partes do mundo. São feitos extensivos testes antes do lançamento de cada versão para atingir um alto grau de confiabilidade. As falhas encontradas nos pacotes podem ser relatados através de um sistema de tratamento de falhas que encaminha a falha encontrada diretamente ao responsável para avaliação e correção. Qualquer um pode receber a lista de falhas ou sugestões sobre a distribuição cadastrando-se em uma das lista de discussão que tratam especificamente da solução de falhas encontradas na distribuição (disponível na página principal da distribuição). Os pacotes podem ser instalados através de Tarefas contendo seleções de pacotes de acordo com a utilização do computador (servidor Web, desenvolvimento, TeX, jogos, desktop, etc.), Perfis contendo seleções de pacotes de acordo com o tipo de usuário (programador, operador, etc.), ou através de uma seleção individual de pacotes, garantindo que somente os pacotes selecionados serão instalados fazendo uma instalação enxuta. Existe um time de desenvolvedores com a tarefa específica de monitorar atualizações de segurança em serviços (apache, sendmail, e todos os outros 8000 pacotes)que possam compromenter o servidor, deixando-o vulnerável a ataques. Assim que uma falha é descoberta, é enviado uma alerta (DSA Debian Security Alert) e disponibilizada uma atualização para correção das diversas versões da Debian. Isto é geralmente feito em menos de 48 horas desde a descoberta da falha até a divulgação da correção. Como quase todas as falhas são descobertas nos programas, este método também pode ser usado por administradores de outras distribuições para manterem seu sistema seguro e atualizado. O suporte ao usuário e desenvolvimento da distribuição são feitos através de listas de discussões e canais IRC. Existem uma lista de consultores habilitados a dar suporte e assistência a sistemas Debian ao redor do mundo. ftp://ftp.debian.org/ - Endereço Ftp para download. Conectiva http://www.conectiva.com.br/ ftp://ftp.conectiva.com.br/ Libranet http://www.libranet.com/ Distribuição
15

baseada

na

Debian

GNU/Linux

oferecendo as principais características da distribuição Debian. São empacotadas os aplicativos mais utilizados da Distribuição Debian em um único CD, você pode ter um desktop completo sendo executado em pouco tempo. As atualizações de softwares são feitas gratuitamente. O sistema de gerenciamento de pacotes Debian permite o gerenciamento de atualizações automaticamente. Slackware http://www.slackware.com/ Distribuição desenvolvida por Patrick Volkerding, desenvolvida para alcançar facilidade de uso e estabilidade como prioridades principais. Foi a primeira distribuição a ser lançada no mundo e costuma trazer o que há de mais novo enquanto mantém uma certa tradição, provendo simplicidade, facilidade de uso e com isso flexibilidade e poder. Desde a primeira versão lançada em Abril de 1993, o Projeto Slackware Linux tem buscado produzir a distribuição Linux mais UNIX-like, ou seja, mais parecida com UNIX. O Slackware segue os padrões Linux como o Linux File System Standard, que é um padrão de organização de diretórios e arquivos para as distribuições. Enquanto as pessoas diziam que a Red Hat era a melhor distribuição para o usuário iniciante, o Slackware é o melhor para o usuário mais "velho", ou seja programadores, administradores, etc. ftp://ftp.slackwarebrasil.org/linux/slackware/ - Ftp da distribuição Slackware. SuSE http://www.suse.com/ - Distribuição comercial Alemã com a coordenação sendo feita através dos processos administrativos dos desenvolvedores e de seu braço norte-americano. O foco da Suse é o usuário com conhecimento técnico no Linux (programador, administrador de rede, etc.) e as corporações. A distribuição possui suporte ao idioma e teclado Português, mas não inclui (até a versão 6.2) a documentação em Português. Eis a lista de idiomas suportados pela distribuição: English, Deutsch, Français, Italiano, Espanholñ, Português, Português Brasileiro, Polski, Cesky, Romanian, Slovensky, Indonésia. Sua instalação pode ser feita via CD-ROM ou CD-DVD (é a primeira distribuição com instalação através de DVD). Uma média de 1500 programas acompanham a versão 6.3 distribuídos em 6 CD-ROMs. O sistema de gerenciamento de pacotes é o RPM padronizado. A
16

seleção de pacotes durante a instalação pode ser feita através da seleção do perfil de máquina (developer, estação kde, gráficos, estação gnome, servidor de rede, etc.) ou através da seleção individual de pacotes. A atualização da distribuição pode ser feita através do versão ou baixando pacotes de ftp://ftp.suse.com/. ganham direito a suporte de instalação via e-mail. suporte também é excelente e está disponível na web independente de registro. ftp://ftp.suse.com/ - Ftp da distribuição SuSE. Red Hat http://www.redhat.com/ ftp://ftp.redhat.com/ CD-ROM de uma nova Usuários registrados A base de dados de para qualquer usuário

Software Livre
(tradução do texto Linux e o Sistema GNU de Richard Stallman obtido no site do CIPSGA: http://www.cipsga.org.br). O projeto GNU começou há 12 anos atrás com o objetivo de desenvolver um sistema operacional Unix-like totalmente livre. Livre se refere à liberdade, e não ao preço; significa que você está livre para executar, distribuir, estudar, mudar e melhorar o software. Um sistema Unix-like consiste de muitos programas diferentes. Nós achamos alguns componentes já disponíveis como softwares livres -- por exemplo, X Window e TeX. Obtemos outros componentes ajudando a convencer seus desenvolvedores a tornarem eles livres -- por exemplo, o Berkeley network utilities. Outros componentes nós escrevemos especificamente para o GNU -- por exemplo, GNU Emacs, o compilador GNU C, o GNU C library, Bash e Ghostscript. Os componentes desta última categoria são "software GNU". O sistema GNU consiste de todas as três categorias reunidas. O projeto GNU não é somente desenvolvimento e distribuição de alguns softwares livres úteis. O coração do projeto GNU é uma idéia: que software deve ser livre, e que a liberdade do usuário vale a pena ser defendida. Se as pessoas têm liberdade mas não a apreciam conscientemente, não irão mantê-la por muito tempo. Se queremos que a liberdade dure, precisamos chamar a atenção das pessoas para a liberdade que elas têm em programas livres. O método do projeto GNU é que programas livres e a idéia da liberdade dos usuários ajudam-se mutuamente. Nós desenvolvemos software GNU, e conforme as pessoas encontrem programas GNU ou o sistema GNU e comecem a usá-los, elas também pensam sobre a filosofia GNU. O software mostra que a idéia
17

funciona na prática. Algumas destas pessoas acabam concordando com a idéia, e então escrevem mais programas livres. Então, o software carrega a idéia, dissemina a idéia e cresce da idéia. Em 1992, nós encontramos ou criamos todos os componentes principais do sistema exceto o kernel, que nós estávamos escrevendo. (Este kernel consiste do microkernel Mach mais o GNU HURD. Atualmente ele está funcionando, mas não está preparado para os usuários. Uma versão alfa deverá estar pronta em breve.) Então o kernel do Linux tornou-se disponível. Linux é um kernel livre escrito por Linus Torvalds compatível com o Unix. Ele não foi escrito para o projeto GNU, mas o Linux e o quase completo sistema GNU fizeram uma combinação útil. Esta combinação disponibilizou todos os principais componentes de um sistema operacional compatível com o Unix, e, com algum trabalho, as pessoas o tornaram um sistema funcional. Foi um sistema GNU variante, baseado no kernel do Linux. Ironicamente, a popularidade destes sistemas desmerece nosso método de comunicar a idéia GNU para as pessoas que usam GNU. Estes sistemas são praticamente iguais ao sistema GNU -- a principal diferença é a escolha do kernel. Porém as pessoas normalmente os chamam de "sistemas Linux (Linux systems)". A primeira impressão que se tem é a de que um "sistema Linux" soa como algo completamente diferente de "sistema GNU", e é isto que a maioria dos usuários pensam que acontece. A maioria das introduções para o "sistema Linux" reconhece o papel desempenhado pelos componentes de software GNU. Mas elas não dizem que o sistema como um todo é uma variante do sistema GNU que o projeto GNU vem compondo por uma década. Elas não dizem que o objetivo de um sistema Unixlike livre como este veio do projeto GNU. Daí a maioria dos usuários não saber estas coisas. Como os seres humanos tendem a corrigir as suas primeiras impressões menos do que as informações subseqüentes tentam dizer-lhes, estes usuários que depois aprendem sobre a relação entre estes sistemas e o projeto GNU ainda geralmente o subestima. Isto faz com que muitos usuários se identifiquem como uma comunidade separada de "usuários de Linux", distinta da comunidade de usuários GNU. Eles usam todos os softwares GNU; de fato, eles usam quase todo o sistema GNU; mas eles não pensam neles como usuários GNU, e freqüentemente não pensam que a filosofia GNU está relacionada a eles. Isto leva a outros problemas também -- mesmo dificultando cooperação com a manutenção de programas. Normalmente quando usuários mudam um programa GNU para fazer ele funcionar melhor em um sistema específico, eles mandam a mudança para o mantenedor do programa; então eles trabalham com o mantenedor explicando a mudança, perguntando por ela, e às vezes reescrevendo-a para manter a coerência e mantenebilidade do pacote, para ter o patch instalado.
18

Mas as pessoas que pensam nelas como "usuários Linux" tendem a lançar uma versão "Linux-only" do programa GNU, e consideram o trabalho terminado. Nós queremos cada e todos os programas GNU que funcionem "out of the box" em sistemas baseados em Linux; mas se os usuários não ajudarem, este objetivo se torna muito mais difícil de atingir. Como deve o projeto GNU lidar com este problema? O que nós devemos fazer agora para disseminar a idéia de que a liberdade para os usuários de computador é importante? Nós devemos continuar a falar sobre a liberdade de compartilhar e modificar software -- e ensinar outros usuários o valor destas liberdades. Se nós nos beneficiamos por ter um sistema operacional livre, faz sentido para nós pensar em preservar estas liberdades por um longo tempo. Se nós nos beneficiamos por ter uma variedade de software livres, faz sentido pensar sobre encorajar outras pessoas a escrever mais software livre, em vez de software proprietário. Nós não devemos aceitar a idéia de duas comunidades separadas para GNU e Linux. Ao contrário, devemos disseminar o entendimento de que "sistemas Linux" são variantes do sistema GNU, e que os usuários destes sistemas são tanto usuários GNU como usuários Linux (usuários do kernel do Linux). Usuários que têm conhecimento disto irão naturalmente dar uma olhada na filosofia GNU que fez estes sistemas existirem. Eu escrevi este artigo como um meio de fazer isto. Outra maneira é usar os termos "sistema GNU baseado em Linux (Linux-based GNU system)" ou "sistema GNU/Linux (GNU/Linux system)", em vez de "sistema Linux", quando você escreve sobre ou menciona este sistema.

19

Instalação do GNU/Debian Linux 3.0 r2
Menu de Instalação – Selecionando a Imagem de Instalação

Figura 1.0

Na figura 1.0, estaremos efetuando a instalação do Sistema Operacional GNU/Debian Linux 3.0 r2. Existem muitas imagens de instalação do GNU/Debian Linux. Caso deseje listar as imgens, pressione a tecla <F3>. Estaremos utilizando a imagen “bf24”, utilizada para instalar o GNU/Debian Linux com o kernel 2.4.

20

Menu de Instalação – Seleção de Ídioma

Figura 1.1

Na figura 1.1, estaremos selecionando nosso idioma para a instalação do Sistema Operacional GNU/Debian Linux 3.0 r2. Conforme descrito na figura 1.0, estaremos selecionando a opção “pt”, ou seja, Português.

21

Menu de Instalação – Seleção de Ídioma e Teclado

Figura 1.2

Na figura 1.2, estaremos selecionando nosso idioma e teclado para a instalação do Sistema Operacional GNU/Debian Linux 3.0 r2. Conforme descrito na figura 1.1, estaremos selecionando a opção “Brasileiro (teclado padrão ABNT2). Para quem possui teclado “Americano Internacional”, escolha a opção “Brasileiro (teclado padrão EUA).

22

Menu de Instalação – Notas de Lançamento

Figura 1.3

Na figura 1.3 nos fornece algumas informações sobre o Sistema Operacional GNU/Debian Linux. Podemos seguir adiante...

23

Menu de Instalação – Configuração do Teclado

Figura 1.4

Na figura 1.4, podemos reconfigurar nosso teclado novamente ou particionar o disco rígido, estaremos reconfigurando nosso teclado para Brasileiro padrão ABNT2.

24

Menu de Instalação – Selecionar Teclado

Figura 1.5

Na figura 1.5, estaremos selecionando nosso teclado “qwerty/br-abnt2 : Brasileiro (layout ABNT2)”.

25

Menu de Instalação – Particionar Disco Rígido

Figura 1.6

Na figura 1.6, estaremos particionando nosso disco rígido, onde iremos separar partições para a instalação do GNU/Debian Linux.

26

Menu de Instalação – Selecionar Unidade de Disco

Figura 1.7

Na figura 1.7, estaremos selecionando o disco no qual estaremos particionando o disco rígido e efetuando a instalação do Linux. Nesta etapa temos que tomar muito cuidado para não selecionar o disco errado, caso tenhamos mais de um. Estaremos efetuando a instalação no disco “/dev/hdb”, que é o nosso segundo disco, conforme descrito abaixo:
Dispositivo /dev/hda /dev/hdb /dev/hdc /dev/hdd Descrição IDE – Master Primário IDE – Master Secundário IDE – Slave Primário IDE – Slave Secundário Dispositivo /dev/sda /dev/sdb /dev/sdc /dev/sdd ... Descrição 1 unidade SCSI 2 unidade SCSI 3 unidade SCSI 4 unidade SCSI ...

27

Menu de Instalação – Limitações do LILO

Figura 1.8

Na figura 1.8, fornece informações muito importantes sobre a MBR (Master Boot Records), onde e como deve ser gravado o boot de nosso Sistema Operacional. Leia atentamente as informações da figura 1.7, pois se estivermos efetuando uma instalação do GNU/Debian Linux ou qualquer outra distribuição em uma máquina antiga, devemos gravar o boot do Sistema Operacional nos primeiros 1024 cilindros.

28

Menu de Instalação – Informações Adicionais sobre ReiserFS

Figura 1.9

Na figura 1.9, exibe algumas informações sobre o sistema de arquivos ReiserFS.

29

Menu de Instalação – Particionar Disco Rígido

Figura 2.0

Na figura 2.0, estaremos efetuando o particionamento de nosso disco rígido. Nesta etapa temos que tomar muito cuidado para não apagar as partições que já existem em nosso sistema. Criamos 3 partições para a instalação de nosso sistema GNU/Linux Debian, sendo elas:
Dispositivo hdb11 hdb12 hdb13 Tipo da Partição 83 – Linux 82 – Linux Swap 83 – Linux Tamanho 24Mb 256Mb 3072Mb Descrição Partição de boot Partição de troca Partição raíz

Em seguida salvamos a tabela de particionamento conforme figura 1.9.

30

Menu de Instalação – Particionar Disco Rígido

Figura 2.1

Na figura 2.1, após ter gravado a tabela de particionamento, iremos sair do aplicativo “cfdisk”, utilizado para particionar o disco rígido.

31

Menu de Instalação – Configuração da Partição Swap

Figura 2.2

Na figura 2.2, iremos inicializar uma partição Swap. O GNU/Debian Linux detecta automaticamente a partição Swap.

32

Menu de Instalação – Checar Blocos Defeituosos

Figura 2.3

Na figura 2.3, temos a opção de checar blocos defeituosos no disco. Apesar de ser uma tarefa demorada, é recomendado checar blocos defeituosos em discos novos, pois os mesmos nunca foram utilizados é não sabemos se existe erros.

33

Menu de Instalação – Formatar Dispositivo Selecionado

Figura 2.4

Na figura 2.4, será formatado o dispositivo “/dev/hdb12” e será utilizado o sistema de arquivos Linux Swap, portanto, todos os dados existentes no dispositivo serão apagados.

34

Menu de Instalação – Inicializar Dispositivo do Sistema

Figura 2.5

Na figura 2.5, iremos inicializar outro dispositivo, pois até agora só configuramos a Partição Swap. O próximo dispositivo a ser selecionado, será a partição raíz ( / ) do Sistema Operacional GNU/Debian Linux, portanto se você deseja criar partições separadas para alguns diretórios (ex.: /home /var /tmp /boot), não se esqueça que a próxima partição a ser inicializada após a Swap é a Raíz ( / ), onde ficarão os demais diretórios.

35

Menu de Instalação – Tipo de Sistema de Arquivos

Figura 2.6

Na figura 2.6, iremos escolher o sistema de arquivos para o dispositivo a ser selecionado. Iremos utilizar o sistema de arquivos “ext3”, que possui um recurso muito importanto chamado “Kjournal File System”, onde obtemos maior segurança em eventuais queda de energia.

36

Menu de Instalação – Selecionar Dispositivo

Figura 2.7

Na figura 2.7, iremos selecionar o dispositivo “/dev/hda13” para ser a raíz so sistema.

37

Menu de Instalação – Checar Blocos Defeituosos

Figura 2.8

Na figura 2.8, temos a opção de checar blocos defeituosos no disco. Apesar de ser uma tarefa demorada, é recomendado checar blocos defeituosos em discos novos, pois os mesmos nunca foram utilizados é não sabemos se existe erros.

38

Menu de Instalação – Formatar Dispositivo Selecionado

Figura 2.9

Na figura 2.9, será formatado o dispositivo “/dev/hdb13”, portanto, todos os dados existentes no dispositivo serão apagados.

39

Menu de Instalação – Gerando Sistema de Arquivos

Figura 3.0

Na figura 3.0, está sendo criado o sistema de arquivos “ext3” no dispositivo “/dev/hdb13”.

40

Menu de Instalação – Montar Dispositivo Selecionado

Figura 3.1

Na figura 3.1, iremos montar o dispositivo “/dev/hdb13” como raíz ( / ) do sistema. Será abaixo do “ / “ onde estarão os demais diretórios do GNU/Linux, tais como: /boot, /var, /home, /etc, /usr, /tmp, /lib , etc...

41

Menu de Instalação – Inicializar Dispositivo do Sistema

Figura 3.2

Na figura 3.2, iremos inicializar outro dispositivo, pois até agora só configuramos a Partição Swap e o “ / “, que é o suficiente para instalar o GNU/Linux, portanto, iremos também configurar um dispositivo só para os arquivos de inicialização do GNU/Linux. O próximo dispositivo a ser selecionado, será a partição de boot ( /boot ) do Sistema Operacional GNU/Debian Linux.

42

Menu de Instalação – Selecionar Dispositivo

Figura 3.3

Na figura 3.3, iremos escolher o sistema de arquivos para o dispositivo a ser selecionado. Iremos utilizar o sistema de arquivos “ext3”, que possui um recurso muito importanto chamado “Kjournal File System”, onde obtemos maior segurança em eventuais queda de energia.

43

Menu de Instalação – Checar Blocos Defeituosos

Figura 3.4

Na figura 3.4, temos a opção de checar blocos defeituosos no disco. Apesar de ser uma tarefa demorada, é recomendado checar blocos defeituosos em discos novos, pois os mesmos nunca foram utilizados é não sabemos se existe erros.

44

Menu de Instalação – Formatar Dispositivo Selecionado

Figura 3.5

Na figura 3.5, será formatado o dispositivo “/dev/hdb11”, portanto, todos os dados existentes no dispositivo serão apagados.

45

Menu de Instalação – Gerando Sistema de Arquivos

Figura 3.6

Na figura 3.6, está sendo criado o sistema de arquivos “ext3” no dispositivo “/dev/hdb11”.

46

Menu de Instalação – Montar Dispositivo Selecionado

Figura 3.7

Na figura 3.7, iremos montar o dispositivo “/dev/hdb11” como boot ( /boot ) do sistema. Será abaixo do “ /boot “ onde estarão os arquivos de inicialização do GNU/Linux.

47

Menu de Instalação – Instalar Kernel e Módulos

Figura 3.8

Na figura 3.8, iremos instalar o kernel e os módulos para que possamos dar inicio a instalação do GNU/Debian Linux

48

Menu de Instalação – CDROM

Figura 3.9

Na figura 3.9, iremos instalar GNU/Debian Linux através do CDROM, pois o mesmo também pode ser instalado através de NFS, WWW ou FTP.

49

Menu de Instalação – Configuração de Dispositivos

Figura 4.0

Na figura 4.0, iremos configurar os módulos dos dipositivos de nosso servidor, ex: placa de rede, som, vídeo, etc... Esta etapa é muito importante caso desejamos carregar algum módulo em específico para sua utilização no decorrer da instalação. Em muitos casos, o GNU/Debian Linux pode detectar alguns dipositivos de nosso sistema, como placa de rede.

50

Menu de Instalação – Configuração de Dispositivos

Figura 4.1

Na figura 4.1, exibe informações de que alguns módulos já estão embutidos no kernel, ex: sistema de arquivos, cdrom, floppy, etc...

51

Menu de Instalação – Configuração de Dispositivos

Figura 4.2

Na figura 4.2, exibe os módulos que podem ser carregados na instalação do GNU/Debian Linux. Caso deseje carregar algum módulo, basta selecioná-lo no menu desejado. Nesta estapa não estaremos adicionando nenhum módulo. Os módulos que adicionarmos nesta etapa, serão carregados toda vez que inicializarmos nosso servidor, portanto, não se preocupe, pois os módulos podem ser adicionados após a instalação de nosso sistema.

52

Menu de Instalação – Configuração de Rede

Figura 4.3

Na figura 4.3, o GNU/Debian Linux detectou nossa placa de rede e estaremos configurando a mesma no decorrer da instalação. Também temos a opção de continuar a instalação do sistema sem configurar nossa placa de rede, bastando apenas escolher a opção “Instalar o Sistema Básico”.

53

Menu de Instalação – Nome no Servidor

Figura 4.4

Na figura 4.4, estaremos configurando o “hostname” de nosso computador, ou seja, o nome de nosso servidor. É muito importante o nome de nosso servidor, pois ele será uma identificação em nossa rede e caso o mesmo esteja na Internet, será um alvo. Por que um alvo ? Imagine que você possui um servidor de email em sua empresa chamado “mail.freesoftware.org.br”. O nome “mail” chama muita atenção e o ideal seria colocar algum outro nome que não associa-se com email, como: smeagol, golum, ferrari, lamborguini, beta, alpha, etc...

54

Menu de Instalação – Ativar Rede DHCP ou STATIC

Figura 4.5

Na figura 4.5, estaremos efetuando a configuração de rede de nosso servidor. Caso deseje configurar seu servidor com um IP dinâmico, basta apenas selecionar a opção “<SIM>”, conforme decrito na figura 4.5, portanto, em um servidor, não colocamos um IP dinâmico. Em servidores a melhor forma de evitar aborrecimentos, é configurá-lo com IP estático, ou seja, mais conhecido como IP fixo.

55

Menu de Instalação – Configuração do IP do Servidor

Figura 4.6

Na figura 4.6, iremos atribuir um IP para nosso servidor. OBS: Caso esteja configurando um servidor ou uma estação de trabalho que não estarão na Internet, ou o servidor tem que obrigatoriamente estar em sua rede interna, utilize sempre IP's que não são roteáveis para na Internet, ou seja, IP's inválidos, conforme tabela abaixo:
Veja RFC 1597

Classe Classe A Classe B Classe C
Figura 4.6.1

IP 10.0.0.0 a 10.255.255.255 172.16.0.0 a 172.31.255.255 192.168.0.0 a 192.168.255.255

Mascará 255.0.0.0 ou /8 255.255.0.0 ou /16 255.255.255.0 ou /24

Utilizando IP's inválidos em sua rede, você evita um séria de problemas, tais como: lentidão, colisão, perda de pacotes, etc...

56

Menu de Instalação – Configuração da Mascará de Rede

Figura 4.7

Na figura 4.7, iremos atribuir a mascará de rede para nosso IP. Veja figura 4.6.1 caso esteja utilizando um endereço inválido e que não seja subnetado ou supernetado.

57

Menu de Instalação – Configuração do Gateway

Figura 4.8

Na figura 4.8, iremos atribuir um Gateway para nosso servidor. Um Gateway ou um roteador são utilizados para fazer repasses de pacotes para uma outra rede ou para a Internet.

58

Menu de Instalação – Configuração do Domínio do Servidor

Figura 4.9

Na figura 4.9, iremos atribuir um domínio para nosso servidor.

59

Menu de Instalação – Configuração do Resolvedor de Nomes

Figura 5.0

Na figura 5.0, iremos atribuir um servidor de nomes para nosso servidor. O servidor de nomes, mais conhecido como DNS (Domain Name Server), é utilizado na resolução de nomes na Internet, ou seja, tranforma nomes em IP's. Você já imaginou se todo o site que você desejasse acessar, você teria que colocar o IP do mesmo em seu navegador. Por isso existem os servidores de nomes que tranforme o site “www.freesoftware.org.br” em IP “200.155.x.x”.

60

Menu de Instalação – Instalação do Sistema GNU/Debian Linux

Figura 5.1

Na figura 5.1, estaremos iniciando a instalação de nosso sistema GNU/Debian Linux.

61

Menu de Instalação – Instalação do Sistema GNU/Debian Linux

Figura 5.2

Na figura 5.2, exibe o status da instalação do GNU/Debian Linux. Um ítem interessante é que a instalação do GNU/Debian é rápido, pois ele instala o mínimo essencial para seu funcionamento perfeito.

62

Menu de Instalação – Configuração do Gerenciador de Boot

Figura 5.3

Na figura 5.3, estaremos configurando o gerenciador de boot de nosso servidor. Um gerenciador de boot é utilizado para inicializar um determinado sistema operacional. Caso tenhamos mais de um sistema operacional em nosso servidor, quem nos fornecerá a opção de qual sistema inicializar é o gerenciador de boot.

63

Menu de Instalação – Configuração do Gerenciador de Boot

Figura 5.4

Na figura 5.4, estaremos instalando o gerenciador de boot na MBR (Master Boot Records). Temos também a opção de instalar o boot no disco para você deseje utilizar um outro gerenciador de boot. Estaremos utilizando o LILO como gerenciador de boot.

64

Menu de Instalação – Configuração do Gerenciador de Boot

Figura 5.5

Na figura 5.5, exibe informações importantes sobre o gerenciador de boot, de como torná-lo mais seguro. Após a instalação você pode editar o arquivo de configuração de boot (/etc/lilo.conf) do sistema e adicionar as seguintes linha para torná-lo mais seguro: restricted password=senha Após setar estas configurações no LILO, digite “lilo” para validar as alterações.

65

Menu de Instalação – Reiniciar o Sistema

Figura 5.6

Na figura 5.6, iremos reiniciar o sistema, pois a instalação foi finalizada. Temos também a opção “Criar um Disquete de Partida”, que é utilizado para inicializar o GNU/Debian Linux caso ocorra algum problema no gerenciador de boot do sistema. Quando instalamos o sistema operacional GNU/Linux e em seguida o Windows, o gerenciador de boot do Windows sobrepõe o gerenciador de boot do GNU/Linux, e então, não conseguimos inicializar o Linux, a não ser que tenhamos o “Disquete de Partida” ou um “Rescue Disk”.

66

Menu de Instalação – Reiniciar o Sistema

Figura 5.7

Na figura 5.7, iremos reiniciar o sistema. Não se esqueça de remover a mídia do leitor de CD.

67

Gerenciador de pacotes do Debian
dpkg
Iremos agora nos adaptar no GNU/Debian Linux, onde iremos ver alguns comandos úteis para instalação, consulta e exclusão de pacotes no sistema. Nesta etapa, também iremos aprender alguns ítens de configuração do Debian, exclusivo de sua distribuição. Listar os pacotes instalados no sistema: # dpkg -l
Opção: L minúsculo

Listar os pacotes instalados no sistema, filtrando pelo nome: # dpkg -l | grep <nome>
Opção: L minúsculo

Listar os pacotes instalados no sistema, que começam com “c”: # dpkg -l | awk '{print $2}' | grep ^c
Opção: L minúsculo

Obter informações de um pacote através do dpkg e suas dependências: # dpkg -I <pacote.deb>
Opção: i maiúsculo

Qual pacote instalou determinado aplicativo: # dpkg -S <aplicativo> # dpkg -S /bin/ls Onde estão instalados os arquivos do pacote “fileutils”: # dpkg -L fileutils Onde serão instalados os arquivos de um determiando pacote:
68

# dpkg -c <pacote.deb> Instalar um pacote no sistema através do dpkg: # dpkg -i <pacote.deb> Remover um pacote no sistema através do dpkg: # dpkg -r <pacote> Remover um pacote no sistema através do dpkg e excluir todos seus arquivos: # dpkg --purge <pacote> Remover um pacote no sistema brutalmente através do dpkg: # dpkg --purge --force-all <pacote>

APT
O “apt” é uma ferramenta útil para consulta, instalação e remoção de pacotes no sistema. Através do apt, conseguimos instalar um pacote e caso o mesmo apresente alguma dependência, o apt se encarrega de instalar a mesma. Também é possível manter o sistema atualizado de uma forma bastante simples e segura, pois os pacotes atualizados foram baixados do mirror “security.debian.org”, onde contém todos os pacotes que devem ser atualizados. Normalmente, quando surge uma vulnerabilidade de algum aplicativo, a equipe de desenvolvimento do Debian se encarrega de corrigir o aplicativo bugado, e após efetuar todos os testes, disponibiliza uma nova versão do aplicativo corrigido. Podemos utilizar o apt para manipular pacotes através de http, ftp, filesystem ou do próprio CD. Configurando o apt: # apt-setup

69

Localizando um determinado aplicativo: # apt-cache search <aplicativo> Instalando um determinado aplicativo: # apt-get install <aplicativo> Reinstalando um determinado aplicativo: # apt-get install <aplicativo> --reinstall Removendo um aplicativo do sistema: # apt-get remove <aplicativo> Compilando um determinado aplicativo para gerar um pacote.deb: # apt-get source <aplicativo> --compile Atualizando a lista de aplicativos dos mirrors configurados: # apt-get update Atualizando o sistema: # apt-get upgrade # apt-get dist-upgrade Arquivo de configuração dos mirrors:

70

# vi /etc/apt/sources.list
# CDROM deb cdrom:[Debian GNU/Linux 3.0 r2 _Woody_ - Official i386 Binary-1 (20031201)]/ unstable contrib main non-US/contrib non-US/main # Mirrors da Debian deb http://ftp.us.debian.org/debian/ stable main non-free contrib deb-src http://ftp.us.debian.org/debian/ stable main non-free contrib # Mirror do site de segurança da Debian deb http://security.debian.org/ stable/updates main contrib non-free

Onde ficam os pacotes.deb que foram baixados da Internet: # ls /var/cache/apt/archives/

OBS.: Após ter efetuado a instalação de um aplicativo através do apt, seus pacotes, que estão localizados no diretório “/var/cache/apt/archives/”, podem ser apagados. Também é possível migrar os pacotes de padrão RPM (RedHat Package Manager) para o Debian, utilizando o aplicativo “alien”. O nome “alien” foi uma excelente escolha, pois imaginem vocês migrando um pacote de padrão RPM para Debian (.deb). Com certeza o pacote.deb gerado pode ter se tornado um pacote de outro mundo, totalmente incompátivel com o Debian. Deixo aqui meus parábens ao criadores do nome “alien”. Marcio Garcia

71

Redes
Iremos agora nos adaptar aos arquivos de configuração de rede do Debian, que é diferente das outras distribuições. Arquivo de configuração de rede e gateway: # vi /etc/network/interfaces
# Interface Loopback e Ethernet auto lo eth0 # Configuração da interface Loopback iface lo inet loopback # Configuração da Interface Ethernet iface eth0 inet static address 192.168.100.1 netmask 255.255.255.0 gateway 192.168.100.1

Arquivo de configuração /etc/hosts: # vi /etc/hosts
127.0.0.1 192.168.100.1 # Suporte a IPv6 ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
72

localhost instrutor.freesoftware.org.br instrutor

Obs: É no arquivo /etc/hosts que definimos a configuração do domínio de nosso servidor.

Arquivo de configuração /etc/resolv.conf: # vi /etc/resolv.conf
search freesoftware.org.br nameserver 192.168.100.23

Arquivo de configuração do nome do servidor: # vi /etc/hostname
instrutor

Arquivo de configuração do módulo de rede: # vi /etc/modules
# Placa de rede 3COM 3c59x
Obs: É no arquivo /etc/modules que definimos os módulos que serão carregados na inicialização do sistema.

Iniciando o serviço de rede: # /etc/init.d/networking stop # /etc/init.d/networking start Checklist das configurações de rede do servidor: # ifconfig # route -n # hostname # hostname -d # ping instrutor # ping instrutor.freesoftware.org.br
Interfaces de rede do servidor – eth0 e lo Tabela de rotas do servidor Nome da servidor Domínio do servidor IP Ethernet tem que responder IP Ethernet tem que responder

Obs: Esta etapa é muito importante para o funcionamento correto de nosso servidor.

73

Configuração do ambiente Debian
Iremos agora instalar e configurar o ambiente gráfico e alguns aplicativos que iremos utilizar no decorrer do curso. Instalando e configurando o ambiente gráfico: # apt-get install xserver-xfree86 # apt-get install x-window-system # xf86config
Utilize caso seu ambiente gráfico não esteja corretamente configurado Obs: O apt irá instalar e configurar todas as dependências dos aplicativos acima.

Instalando e configurando um desktop: # apt-get install fluxbox # vi /root/.xinitrc
fluxbox
Obs: Configuramos o desktop padrão que será inicializado ao digitarmos “startx”.

Instalando o mozilla (browser, https e email): # apt-get install mozilla mozilla-psm mozilla-mailnews Instalando o vim: # apt-get install vim # vi /root/.vimrc
:syntax on
Obs: Ao editar os arquivos de configuração com o vi, os parâmetros irão ficar coloridos.

Configurando o mapa de caracteres pt_BR para o ambiente gráfico:

74

# dpkg-reconfigure locales

Obs: Iremos selecionar o mapa de teclados “pt_BR ISO-8859-1”.

Configurando o mapa de caracteres pt_BR para o ambiente texto:

75

# dpkg-reconfigure console-data

Obs: Iremos selecionar o mapa de teclados em uma lista de opções.

Obs: Selecionar a opção “qwerty”, opção na qual contém o layout Brasileiro.

Obs: Selecionar a opção “Brazilian”.

76

Instalação e Configuração DNS (Domain Name Server)
Introdução
Talvez você não conheça muito bem o DNS (Domain Name Server) – ainda – mas, sempre que entra na Internet, usa o DNS. Toda vez que você envia um email ou navega na World Wide Web (WWW), precisa do DNS. Enquanto os seres humanos preferem se lembrar dos nomes dos computadores, os computadores gostam de se comunicar por número. Na Internet, esse número tem 32 bits, entre zero e quatro bilhões, ou mais. Para um computador é fácil lembrar de tantos números, já que ele possui muita memória, o que é ideal para armazenar números. Porém, isso não é fácil para nós, seres humanos. Por exemplo, pegue aleatoriamente dez números de telefones de sua agenda e depois tente se lembrar de cada um deles. Achou difícil ? Agora, anexe códigos de área aleatórios a esses dez números de telefone. Isso demonstra o nível de dificuldade que teríamos para lembrar de dez endereços arbritários na Internet. Esse é um dos motivos pelo qual precisamos do DNS. O DNS lida com o mapeamento entre os nomes dos hosts, convenientes para nós, seres humanos, e entre os endereços na Internet, com os quais o computador lida. Na verdade, o DNS é o mecanismo padrão da Internet para anunciar e acessar todos os tipos de informações sobre hosts, não apenas endereços. E o DNS é usado por praticamente todos os softwares de interligação de redes, inclusive email; programas terminais remotos como como Telnet e SSH; programas de transferência de arquivos, como o FTP; e navegadores Web, como o Netscape Navigator e o Mozilla Navigator. Outro recurso do DNS é que ele torna as informações do host acessíveis em toda a Internet. Manter informações sobre hosts em um arquivo formatado em um único computador só ajuda os usuários naquele computador. O DNS oferece um meio de recuperar informações remotamente de qualquer lugar da rede. Além disso, o DNS permite que você distribua o gerenciamento de informações de hosts entre muitos sites e organizações. Você não precisa enviar seus dados a um site central ou recuperar periodicamente cópias do banco de dados “master”. Você deve simplesmente certificar-se de que sua seção, chamada de zona, esteja atualizada em seus SERVIDORES DE NOMES. Seus servidores de nomes tornam seus dados de zonas disponíveis para todos os outros servidores de nomes. Como o banco de dados é distribuído, o sistema também precisa ser capaz de localizar os dados que você procura buscando um número de possíveis
77

localizações. O DNS fornece inteligência aos servidores de nomes para que eles possam navegar pelo banco de dados e achar os dados em qualquer zona. Quando falamos sobre DNS, iremos no concentrar exclusivamente no BIND (Berkeley Internet Name Domain), que é a implementação das especificações do DNS.

A História do Domain Name Server
Durante a década de 1970, a ARPAnet era uma comunidade amigável, pequena, de algumas centenas de hosts. Um único arquivo, HOSTS.TXT, continha todas as informações necessárias sobre esses hosts; mapeamento de nome a endereço para cada host conectado à ARPAnet. A conhecida tabela de host do Unix, “/etc/hosts”, foi derivada do HOSTS.TXT (basicamernte eliminando campos que o Unix não usava). O HOSTS.TXT era atualizado pelo Network Information Center do SRI (NIC) e distribuído a partir de um único host, SRI-NIC. Os administradores da ARPAnet geralmente enviavam suas mudanças por email para o NIC, e periodicamente, por FTP para o SRI-NIC e capturavam o atual HOSTS.TXT. Suas mudanças eram compiladas em um novo HOSTS.TXT um ou duas vezes por semana. À medida que a ARPAnet crescia, contudo, esse esquema tornava-se impraticável. O tamanho do HOSTS.TXT crescia em proporção do ao crescimento do número de hosts da ARPAnet. Além disso, o tráfego gerado pelo processo de atualização aumentava cada vez mais rápido; cada host adicionado significava não apenas outra linha no HOSTS.TXT, mas potencialmente outra atualização de host dp SRI-NIC. E quando a ARPAnet mudou para protocolos TCP/IP, a população da rede explodiu. Agora, havia um milhão de problemas com o HOSTS.TXT: Tráfego e carga A taxa na SRI-NIC cobrada pelo tráfego da rede e carga de processadores envolvidos na distribuição do arquivo, começava a ficar insustentável. Colisões de nomes Não podia haver dois hosts no HOSTS.TXT com o mesmo nome. Contudo, enquanto o NIC podia atribuir endereços de uma forma que garantia suas singularidades, não tinha autoridade sobre os nomes do host. Não havia como impedir que alguém adicionasse um host com um nome conflitante e quebrasse o esquema inteiro. Se alguém adicionasse um host com o mesmo nome como mail principal, por exemplo, poderia romper com o serviço de email da ARPAnet. Consistência
78

Manter a consistência do arquivo em uma rede em expanção tornouse cada vez mais difícil. Quando um novo HOSTS.TXT atingia os mais distantes lugares da expandida ARPAnet, um host de rede alterava endereços ou surgia um novo host que os usuários queriam atingir. O problema maior era que o mecanismo do HOSTS.TXT não dimensionava bem. Ironicamente, o sucesso da ARPAnet como um experimento levou o HOSTS.TXT ao fracasso e à absolescência. A direção da ARPAnet contratou pesquisadores para criar um sucessor para o HOSTS.TXT. A meta era criar um sistema que solucionasse os problemas inerente a um sistema de tabelas de hosts unificados. O novo sistema deveria permitir a administração local de dados, e ainda disponibilizar os dados globalmente. A descentralização da administração eliminaria o gargalo de um host único e liberaria o problema do tráfego. E o gerenciamento local realizaria a tarefa de manter os dados atualizados com mais facilidade. O novo sistema deveria usar um espaço de nomes hierárquico para nomear hosts, garantindo assim a singularidade dos nomes. Paul Mockapetris, do Instituto de Ciência da Informação da Universidade de Colúmbia, era o responsável pelo projeto de arquitetura do novo sistema. Em 1984, ele liberou as RFC's 882 e 883, que descreviam o Domain Name Server. Essas RFC's foram suplantadas pela RFC's 1034 e 1035, as especificações atuais do DNS. Agora as RFC's 1034 e 1035 foram expandidas por muitas outras RFC's, descrevendo potenciais problemas de segurança, implementação e administração com o DNS, e descrevendo mecanismos para atualização dinâmica de servidores de nomes e a segurança de dados de zonas, e muito mais. Em poucas palavras o DNS é um banco de dados distribuído. Isso permite um controle local dos segmentos do banco de dados global, embora os dados em cada segmento estejam disponíveis em toda a rede através de um esquema cliente-servidor. Desempenhos resistentes e adequados são adquiridos por meio de reprodução e cache.

A História do BIND
A primeira implementação do DNS foi chamada JEEVES, escrita pelo próprio Paul Mockapetris. A implementação seguinte foi o BIND, um acrônimo de Berkeley Internet Domain, escrita para o sistema operacional do Unix BSD 4.3 de Berkeley por Kevin Dunlap. O BIND hoje é mantido pelo Internet Software Consortium. Maiores informações sobre o Internet Software Consortium e seu trabalho com o BIND, pode ser obtida através do site: https://www.isc.org/bind.html

79

Instalação do BIND
# apt-get install bind9

Configuração do BIND
# vi /etc/bind/named.conf
options { directory "/var/cache/bind"; allow-transfer { 192.168.100.1; 192.168.100.2; }; auth-nxdomain no; }; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; include "primary/freesoftware.conf";

80

# vi /var/cache/bind/primary/freesoftware.conf
zone "freesoftware.org.br" IN { type master; file "zone/db.freesoftware"; }; zone "100.168.192.in-addr.arpa" IN { type master; file "zone/rev.freesoftware"; };

# vi /var/cache/bind/zone/db.freesoftware
$TTL @ 3600 IN SOA freesoftware.org.br. root.freesoftware.org.br. ( 2004200500 3H 15M 1W 1D ) @ freesoftware.org.br. mail webmail @ instrutor IN IN IN IN IN IN NS A A A MX 5 A ; Serial ; Refresh ; Retry ; Expire ; Negative Cache TTL freesoftware.org.br. 192.168.100.1 192.168.100.1 192.168.100.1 mail.freesoftware.org.br. 192.168.100.1

# vi /var/cache/bind/zone/rev.freesoftware
$TTL @ 3600 IN SOA freesoftware.org.br. root.freesoftware.org.br. ( 2004200500 ; Serial 3H ; Refresh
81

# vi /var/cache/bind/zone/rev.freesoftware
15M ; Retry 1W ; Expire 1D ) ; Negative Cache TTL @ 1.100.168.192.in-addr.arpa. 1.100.168.192.in-addr.arpa. 1.100.168.192.in-addr.arpa. IN IN IN IN NS PTR PTR PTR freesoftware.org.br. freesoftware.org.br. mail.freesoftware.org.br. webmail.freesoftware.org.br.

# vi /etc/resolv.conf
search freesoftware.org.br nameserver 192.168.100.1

Iniciando o Serviço do BIND
# /etc/init.d/bind9 stop # /etc/init.d/bind9 start

Testando o BIND
# ping freesoftware.org.br # ping mail.freesoftware.org.br # ping webmail.freesoftware.org.br # ping instrutor.freesoftware.org.br # ping -R 192.168.100.1

82

daemontools
O que é ?
O daemontools é uma coleção de ferramentas para controlar serviços do UNIX (UNIX Like). O supervise que é um aplicativo do daemontools, monitora um serviço. Ele inicia um serviço e reinicia o serviço se o mesmo parar. Configurar um novo serviço é fácil: todo supervise precisa de um diretório com um script executável executando o serviço. O multilog (aplicativo do daemontools) salva as mensagens de erro para um ou mais logs, logando o data e hora de cada log e de cada linha. Automaticamente executa o rotate dos logs para diminuí-los e aumentar o espaço em disco. Se o disco estiver cheio, ele pausa e tenta novamente, sem perder qualquer dado.

O programa svscanboot
O aplicativo “svscanboot” é carregado durante a inicialização do sistema. O svscanboot faz uma chamada para o svscan no diretório /service, onde estão os scripts de inicialização, onde todas as mensagens de erros são logadas através do readproctitle. Caso algum script de inicialização esteja com erro, ou lincada de forma errada, as mensagens de erros serão exibidas através do readproctitle. O svscanboot está disponível a partir da versão 0.75 do daemontools.

Interface
svscanboot

svscanboot executa um pipeline
svscan /service 2>&1 | readproctitle service errors: .....

com 400 pontos. Os últimos 400 bytes de mensagens de erro do svscan será visível para o comando ps através do readproctitle. svscanboot seta o $PATH para
/command:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin

e limpa todas as outras variáveis de ambiente. Os escritores dos programas são encorajados a usar globalmente os nomes alocados no /command.

O programa svscan
svscan inicia e monitora uma coleção de serviços.
83

Interface
svscan inicia um processo supervise para cada subdiretório do diretório corrente, com um limite de 1000 subdiretórios. svscan pula os nomes dos subdiretórios que iniciam com pontos. supervise deve estar no path do svscan. svscan opcionalmente inicia um par de processos supervise, um para o subdiretório, outro para o log do subdiretório, com um pipe entre eles. svscan precisa de duas descrições livres para cada pipe. De 5 em 5 segundos, svscan checa pelo subdiretório novamente. Se ele ver um novo subdiretório, ele starta um novo processo supervise. Se ele ver um subdiretório antigo onde um processo supervise foi finalizado, ele reinicia o processo supervise. No registro do log ele reusa os mesmos pipe então nenhum dado é perdido. svscan é designado para executar para sempre. Se tiver problemas em criar um pipe ou executar o supervise, ele printa uma mensagem para stderr, que pode ser visualizada através do comando “ps” ou através dos logs do multilog; Irá tentar novamente depois de 5 segundos. Se é passado para o svscan um argumento de linha, ele troca para aquele diretório quando é iniciado.

O programa supervise
supervise starta e monitora um serviço.

Interface
supervise s

supervise vai para o diretório com o nome s e inicia o ./run. Ele reinicia ./run se ./run existir. Ele pausa por um segundo e em seguida inicia o ./run, de modo que não dê loops demasiamente se o ./run finalizar imediatamente. Se o arquivo s/down existir, supervise não inicia o ./run imediatamente. Você pode usar o svc para iniciar o ./run e fornecer outros comandos para o supervise. supervise mantém informações sobre o status em um formato binário dentro do diretório s/supervise, no qual deve ter escrita para o supervise. As informações sobre o status podem ser lidas pelo svstat. supervise pode sair imediatamente e em seguida iniciá-lo se ele não encontrar os arquivos que ele precisa no diretório s ou se outra cópia do supervise já está em execução no diretório s. Uma vez que o supervise esteja executando com sucesso, ele não irá encerrar ao menos que ele seja morto ou questionado a sair. Você pode usar o svok para checar se o supervise está executando com sucesso. Você pode usar o svscan para startar confiantemente uma coleção de
84

processos do supervise.

O programa svc
O programa svc controla os serviços monitorados pelo supervise.

Interface
svc opts services

opts é uma série de opções getopt-style. services consiste no número de argumentos, cada argumento chamando um diretório usado pelo supervise. svc aplica-se em todas as opções de cada serviço por sua vez. Aqui estão as

Opções
• • • • • • • • • • •

-u: Up. If the service is not running, start it. If the service stops, restart it. -d: Down. If the service is running, send it a TERM signal and then a CONT signal. After it stops, do not restart it. -o: Once. If the service is not running, start it. Do not restart it if it stops. -p: Pause. Send the service a STOP signal. -c: Continue. Send the service a CONT signal. -h: Hangup. Send the service a HUP signal. -a: Alarm. Send the service an ALRM signal. -i: Interrupt. Send the service an INT signal. -t: Terminate. Send the service a TERM signal. -k: Kill. Send the service a KILL signal. -x: Exit. supervise will exit as soon as the service is down. If you use this option on a stable system, you're doing something wrong; supervise is designed to run forever.

O programa svok
svok checa se o supervise está em execução.

Interface
svok service

svok checa se o supervise está executando com sucesso no diretório chamado /service. Retorna 0 se o supervise está executando com sucesso e retorna 100 se o supervise não está executando com sucesso.

85

O programa svstat
svstat printa o status do serviço monitorado supervise.

Interface
svstat services

services consiste em no número de argumentos, cada argumento chamando um diretório. svstat printa uma linha legível para cada diretório, dizendo se o serviço está executando com sucesso naquele diretório, e reporta informações do status mantido pelo supervise.

O programa readproctitle
readproctitle mantém um log automático rotacional na memória para inspeção pelo comando ps. readproctitle está disponível a partir da versão 0.75 do daemontools.

Interface
readproctitle L D

L consiste no número de argumentos. D é um argumento que consiste pelo menos em 5 pontos. readproctitle lê os dados no fim de D, deslocando D para a esquerda. Isto significa que os mais recentes dados são visíveis a listas de ferramentas de processos como o comando ps. readproctitle sempre deixa três pontos na esquerda de D. Por exemplo, se
readproctitle io errors: ....................

lê os dados
fatal error xyz warning abc

então os argumentos das linhas de comandos mudam para
readproctitle io errors: ... xyz!warning abc!

com um carácter da nova linha no final de cada !. As ferramentas de listagem de processos tipicamente exibe o carácter da nova linha como ? ou \n.

86

O programa multilog
multilog lê a sequência de linhas de stdin e apenda as linhas selecionadas para os logs.

Interface
multilog script

script consiste no número de argumentos. Cada argumento especifíca uma ação. As ações são realizadas para cada linha de entrada. Note que as ações devem conter shell metacaracteres que precisam ser citados quando o multilog está executando de um shell. multilog retorna 0 quando ele vê o final do stdin. Se stdin tem uma linha parcial no final então o multilog insere uma nova linha no final.

Timestamping
A ação
t

insere um @, um timestamp preciso, e um espaço na frente de cada linha. Isto é requerido para ser a primeira ação. Os testes padrões aplicam-se à linha depois que o timestamp é introduzido, por exemplo, se
multilog t '-*' '+* fatal: *' ./main

lê a linha
fatal: out of memory

então registrará uma linha como
@400000003b4a39c23294b13c fatal: out of memory

com o primeiro * combinando o timestamp. Você pode usar o tai64nlocal para converter estes timestamps em um formato legível.

Rotate logs automaticamente
No diretório de logs, contém muitos logs antigos com alguns números e um cd /log atual chamado current, e outros arquivos do multilog servem para manterse a par de suas ações. Cada nome de log antigo começa com @, continuado com um timestamp preciso exibindo quando o arquivo foi finalizado, cada log antigo começa com a string @ precedido com um timestamp preciso, exibindo quando o arquivo foi finalizado, e o arquivo de log é finalizado com um dos códigos abaixo:

.s: Este arquivo é completamente gravado e seguramente gravado no disco.
87

.u: Este arquivo pode ter sido truncado. Ele não foi processado.

Quando o multilog está executando, o arquivo current tem permissão 644. Quando o multilog grava o arquivo current no disco, ele seta o current para 744. Quando ele reinicia, ele retorna o valor do current para 644 e continua gravando novas linhas. Quando o multilog decide que o arquivo current está bastante grande, ele grava o current seguramente no disco, seta a permissão do current para 744, e renomeia o current para um arquivo de log antigo. A ação
ssize

seta o tamanho máximo do arquivo. O multilog irá decidir se o current está grande o bastante e está com tamanho de size bytes. size deve ter entre 4096 e 16777215. O tamanho máximo default do arquivo e 99999. A ação
nnum

Seta o número de arquivos de logs. O número default de logs é 10. Então, podemos atribuir em nosso script de inicialização, quantos logs serão criados pelo multilog e qual será o seu tamanho.

O programa setuidgid
setuidgid executa outro programa sob o uid e o gid de um cliente especificado.

Interface
setuidgid account child

account é um simples argumento. child consiste em um ou mais argumentos. setuidgid ajusta seu uid e gid ao uid e gid do cliente, removendo todos os suplementares. E então executa o child. setuidgid retorna 111 se ele não puder encontrar uma conta UNIX chamada account, ou se ele não puder setar o gid, ou se ele não puder setar o uid, ou se ele não puder executar o child. Senão seu código de saída é o mesmo que do child. setuidgid não pode ser executado por qualquer um quanto ao root.

88

O programa softlimit
softlimit executa outro programa com novos limites de recursos.

Interface
softlimit opts child

opts é uma série de opções getopt-style. child consiste em um ou mais argumentos. softlimit seta recursos de limites como especificado pelo opts. Eles então são executados pelo child.

Opções
Opções de controle de memória:
• • • • • • •

-m n: Same as -d n -s n -l n -a n. -d n: Limit the data segment per process to n bytes. -s n: Limit the stack segment per process to n bytes. -l n: Limit the locked physical pages per process to n bytes. This option has no effect on some operating systems. -a n: Limit the total of all segments per process to n bytes. This option has no effect on some operating systems. -o n: Limit the number of open file descriptors per process to n. This option has no effect on some operating systems. -p n: Limit the process number per uid to n. Opções controlando o tamanho dos arquivos: -f n: Limit output file sizes to n bytes. -c n: Limit core file sizes to n bytes. Opções eficientes: -r n: Limit the resident set size to n bytes. This limit is not enforced unless physical memory is full. -t n: Limit the CPU time to n seconds. This limit is not enforced except that the process receives a SIGXCPU signal after n seconds.

• •

• •

89

ucspi-tcp
O que é ?
tcpserver e tcpclient são ferramentas de comandos de linha fáceis de usar para construir aplicações TCP Cliente/Servidor. tcpserver aguarda por conexões entrantes e, para cada conexão, executa um programa de sua escolha. Seu programa recebe as variáveis de ambiente que mostram os nomes dos hosts locais e remotos, endereço IP e os números das portas. O tcpserver oferece um limite de conexões simultâneas para protegê-lo de processos fora de execução e memória. Quando o tcpserver está segurando 40 conexões simultâneas (por default), ele adía a aceitação de novas conexões. O tcpserver também oferece característica de controle de acesso TCP, similares a tcp-wrappers/tcp's hosts.allow só que muito mais rápido. Seus controles de acesso são compilados dentro de um arquivo no formato hash com cdb, podendo tratar fácilmente de milhares de hosts diferentes, ou seja, quem pode fazer relay, etc... Este pacote inclui uma ferramenta chamada recordio que monitora toda entrada e saída de um servidor. O tcpclient faz uma conexão TCP e executa um programa de sua escolha. Ele configura as mesmas variáveis de ambiente que o tcpserver. O UCSPI-TCP está disponível para diferente tipos de redes.

Outras ferramentas TCP de comandos de linha
O ucspi-tcp agora compete com diferentes tipos de programas, como:
• • • • • •

inetd; xinetd, uma evolução do inetd; o cliente mconnect fornecido como parte do SunOS; O programa socket; faucet e hose, parte do pacote netpipes; O programa netcat, que também suporta UDP.

O programa tcpserver
O tcpserver aceita conexões TCP entrantes.

Interface
tcpserver opts host port prog

opts é uma série de opções que podem ser utilizadas. host é um argumento. port é um argumento. prog consiste em um ou mais argumentos. tcpserver aguarda por conexões TCP de clientes. Para cada conexão, ele
90

executa o prog, com descrição 0 lendo da rede e descrição 1 gravando da rede. Também configura diferentes variáveis de ambiente. O endereço do servidor é fornecido por host e port. port pode ser um nome ou um número do arquivo /etc/services; se está 0, o tcpserver irá escolher uma porta TCP livre. host deve ser 0, permitindo conexões de endereços IP de qualquer lugar; ou um endereço IP decimal com pontos, permitindo conexões somente daquele endereço; ou um nome de host, permitindo conexões para o primeiro endereço IP daquele host. O tcpserver encerra sua execução quando recebe um SIGTERM.

Opções
Opções gerais:
• • •

-q: Quiet. Do not print error messages. -Q: (Default.) Print error messages. -v: Verbose. Print error messages and status messages. Opções de conexões: -c n: Do not handle more than n simultaneous connections. If there are n simultaneous copies of prog running, defer acceptance of a new connection until one copy finishes. n must be a positive integer. Default: 40. -x cdb: Follow the rules compiled into cdb by tcprules. These rules may specify setting environment variables or rejecting connections from bad sources. You can rerun tcprules to change the rules while tcpserver is running. -X: With -x cdb, allow connections even if cdb does not exist. Normally tcpserver will drop the connection if cdb does not exist. -B banner: Write banner to the network immediately after each connection is made. tcpserver writes banner before looking up $TCPREMOTEHOST, before looking up $TCPREMOTEINFO, and before checking cdb. This feature can be used to reduce latency in protocols where the client waits for a greeting from the server. -g gid: Switch group ID to gid after preparing to receive connections. gid must be a positive integer. -u uid: Switch user ID to uid after preparing to receive connections. uid must be a positive integer. -U: Same as -g $GID -u $UID. Typically $GID and $UID are set by envuidgid. -1: After preparing to receive connections, print the local port number to standard output. -b n: Allow a backlog of approximately n TCP SYNs. On some systems, n is silently limited to 5. On systems supporting SYN cookies, the backlog is irrelevant. -o: Leave IP options alone. If the client is sending packets along an IP source route, send packets back along the same route. -O: (Default.) Kill IP options. A client can still use source routing to connect and to send data, but packets will be sent back along the default route.
91

• •

• • • • •

• •

-d: Delay sending data for a fraction of a second whenever the remote host is responding slowly. This is currently the default, but it may not be in the future; if you want it, set it explicitly. -D: Never delay sending data; enable TCP_NODELAY. Opções de recolhimento de dados -h: (Default.) Look up the remote host name in DNS to set the environment variable $TCPREMOTEHOST. -H: Do not look up the remote host name in DNS; remove the environment variable $TCPREMOTEHOST. To avoid loops, you must use this option for servers on TCP port 53. -p: Paranoid. After looking up the remote host name in DNS, look up the IP addresses in DNS for that host name, and remove the environment variable $TCPREMOTEHOST if none of the addresses match the client's IP address. -P: (Default.) Not paranoid. -l localname: Do not look up the local host name in DNS; use localname for the environment variable $TCPLOCALHOST. A common choice for localname is 0. To avoid loops, you must use this option for servers on TCP port 53. -r: (Default.) Attempt to obtain $TCPREMOTEINFO from the remote host. -R: Do not attempt to obtain $TCPREMOTEINFO from the remote host. To avoid loops, you must use this option for servers on TCP ports 53 and 113. -t n: Give up on the $TCPREMOTEINFO connection attempt after n seconds. Default: 26

• •

• •

• • •

O programa tcprules
tcprules compila regras para o tcpserver.

Interface
tcprules cdb tmp

O tcpserver segue regras para decidir-se se uma conexão TCP é aceitável. Por exemplo, a regra:
18.23.0.32:deny

proibe conexões do endereço IP 18.23.0.32. O tcprules pode ser utilizado quando o tcpserver está executando, sem ter a necessidade de encerrar sua execução. O arquivo cdb é atualizado automaticamente. Primeiramente ele grava as regras para um arquivo tmp (temporário) e então move o conteúdo para o início do arquivo cdb. Se o arquivo tmp existir, ele será destruído. Os diretórios que contém os arquivos cdb e tmp devem ter permissão de gravação para que o tcprules possa alterá-los e eles devem estar no mesmo sistema de arquivos.
92

Se houver algum problema com a entrada ou com o tmp, o tcprules irá se queixar e irá deixar o cdb sozinho. O formato binário do cdb é portável para outras máquinas.

Formato das regras
Uma regra é uma linha. Um arquivo contendo regras podem também conter comentários: linhas iniciando com # são ignoradas. Cada regras contém um endereço, uma vírgula, e uma lista de instruções, com nenhum espaço extra. Quando o tcpserver recebe conexões daquele determinado endereço, ele segue as instruções.

Endereços
O tcpserver procura regras com vários endereços: 1. $TCPREMOTEINFO@$TCPREMOTEIP, if $TCPREMOTEINFO is set; 2. $TCPREMOTEINFO@=$TCPREMOTEHOST, if $TCPREMOTEINFO is set and $TCPREMOTEHOST is set; 3. $TCPREMOTEIP; 4. =$TCPREMOTEHOST, if $TCPREMOTEHOST is set; 5. shorter and shorter prefixes of $TCPREMOTEIP ending with a dot; 6. shorter and shorter suffixes of $TCPREMOTEHOST starting with a dot, preceded by =, if $TCPREMOTEHOST is set; 7. =, if $TCPREMOTEHOST is set; and finally 8. the empty string. O tcpserver usa a primeira regra que encontrar. Você deve usar a opção -p no tcpserver se você confiar em $TCPREMOTEHOST. Por exemplo, aqui estão algumas regras:
joe@127.0.0.1:first 18.23.0.32:second :third 127.:fourth

Se $TCPREMOTEIP é 10.119.75.38, tcpserver irá seguir a terceira instrução. Se $TCPREMOTEIP é 18.23.0.32, tcpserver irá seguir a segunda instrução. Se $TCPREMOTEIP é 127.0.0.1 e $TCPREMOTEINFO é conta, tcpserver irá seguir a quarta instrução. Se $TCPREMOTEIP é 127.0.0.1 e $TCPREMOTEINFO é joe, tcpserver irá seguir a primeira instrução. Você pode usar o tcprulescheck para ver como o tcpserver irá interpretar as regras no cdb.

93

Range de endereços
tcprules trata 1.2.3.37-53:ins como uma abreviação para as regras 1.2.3.37:ins, 1.2.3.38:ins e então até 1.2.3.53:ins. Similarmente, 10.2-3.:ins é uma abreviação para 10.2.:ins e 10.3.:ins.

Instruções
As instruções em uma regra podem começar com allow ou deny. Deny diz ao tcpserver para barrar a conexão sem executar qualquer coisa. Por exemplo, a regra
:deny

diz ao tcpserver para barrar todas conexões que não estão ativas por nenhuma regra específica. As instruções podem continuar com algumas variáveis de ambiente, no formulário, var=”x”. O tcpserver adiciona uma variável de ambiente $var com valor x. Por exemplo,
10.0.:allow,RELAYCLIENT="@fix.me"

adiciona uma variável de ambiente $RELAYCLIENT com valor @fix.me. As citações podem ser trocadas por qualquer caracter repetido:
10.0.:allow,RELAYCLIENT=/@fix.me/

Qualquer número de variáveis podem ser listadas:
127.0.0.1:allow,RELAYCLIENT="",TCPLOCALHOST="movie.edu"

O programa tcpclient
O tcpclient cria uma conexão que parte do TCP.

Interface
tcpclient opts host port prog

opts é uma série de opções getopt-style. host é um armento. port é um argumento. prog consiste em um ou mais argumentos. O tcpclient tenta conectar em um servidor TCP. Se for com sucesso, executa o prog, com descrição 6 lendo da rede e descrição 7 gravando na rede. Também configura diversas variáveis de ambiente. O endereço do servidor é dado por host e port. port pode ser um nome de / etc/services ou um número. host pode ser 0, referindo-se a maquina local, ou um endereço IP decimal com pontos, ou um nome de host. Se o servidor tem diversos endereços IP's, o tcpclient tenta endereçar cada
94

um por sua vez.

Opções
Opções gerais:
• • •

-q: Quiet. Do not print error messages. -Q: (Default.) Print error messages. -v: Verbose. Print error messages and status messages. Opções de conexão: -T x+y: Give up on the connection attempt after x+y seconds. Default: 2+58. When a host has several IP addresses, tcpclient tries to connect to the first IP address, waits x seconds, tries to connect to the second IP address, waits x seconds, etc.; then it retries each address that timed out, waiting y seconds per address. You may omit +y to skip the second try. Before version 0.88, tcpclient will use only x (default: 60). -i localip: Use localip as the IP address for the local side of the connection; quit if localip is not available. Normally tcpclient lets the operating system choose an address. -p localport: Use localport as the TCP port for the local side of the connection; quit if localport is not available. Normally tcpclient lets the operating system choose a port. -d: Delay sending data for a fraction of a second whenever the remote host is responding slowly. This is currently the default, but it may not be in the future; if you want it, set it explicitly. -D: Never delay sending data; enable TCP_NODELAY. Opções de recolhimento de dados: -h: (Default.) Look up the remote host name in DNS to set the environment variable $TCPREMOTEHOST. -H: Do not look up the remote host name in DNS; remove the environment variable $TCPREMOTEHOST. -l localname: Do not look up the local host name in DNS; use localname for the environment variable $TCPLOCALHOST. A common choice for localname is 0. -r: (Default.) Attempt to obtain $TCPREMOTEINFO from the remote host. -R: Do not attempt to obtain $TCPREMOTEINFO from the remote host. -t n: Give up on the $TCPREMOTEINFO connection attempt after n seconds. Default: 26.

• • •

• • •

Variáveis de ambiente TCP
$PROTO é uma string TCP. $TCPLOCALIP é o endereço IP do localhost, no formato decimal com pontos (ip.ip.ip.ip).
95

$TCPLOCALPORT é o número local da porta TCP, em decimal. $TCPLOCALHOST é o nome listado no DNS para o localhost. Se o nome não existir, $TCPLOCALHOST não é setado. Esteja ciente que $TCPLOCALHOST pode conter caracteres arbitrários. $TCPREMOTEIP é o endereço IP do host remoto, no formato decimal com pontos. $TCPREMOTEPORT é o número remoto da porta TCP, em decimal. $TCPREMOTEHOST é o nome listado no DNS para o host remoto. Se o nome não existir, $TCPREMOTEHOST não é setado. Esteja ciente que $TCPREMOTEHOST pode conter caracteres arbitrários. $TCPREMOTEINFO é uma string específica de conexão fornecido pelo host remoto através do protocolo 931/1413/IDENT/TAP. Se não existir informação, $TCPREMOTEINFO não é setado. Esteja ciente que $TCPREMOTEINFO pode conter caracteres arbitrários.

96

Qmail
Qmail é um MTA (Mail Transfer Agente), para sistemas operacionais Unixlike. “Qmail é um SMTP moderno que torna o sendmail obsoleto” Dan Bernstein Atualmente o Qmail é considerado um dos servidores de correio mais seguros e estáveis do mundo. Quando foi disponibilizado sua primeira versão, o desenvolvedor do Qmail lançou um desafio para a comunidade: Aquele que conseguisse invadir o servidor de correio com qmail, ganharia U$ 500,00. Bom, não preciso nem dizer que ninguém conseguiu. O Qmail foi escrito por Dan Bernstein (DJB), http://cr.yp.to/djb.html, um professor de Matemática da Universidade de Illinois em Chicago. Bernstein também é conhecido pelo seu trabalho de criptografia.

Releases do Qmail
0.70, publicado em 24 de Janeiro de 1996; Versão beta; 0.90, publicado em 01 de Agosto de 1996; Versão gamma; 1.00, publicado em 20 de Fevereiro de 1997; 1.03, publicado em 15 de Junho de 1998; versão corrente.

Por que usar o Qmail
Porque além de ser considerado um dos servidores de correio mais seguros e estáveis do mundo, é um servidor de correio modular, possui uma extensa suíte de aplicativos, trabalha com Mailbox ou Maildir, etc... e o mais interessante é que o Qmail é executado por usuários e grupos dele próprio, ou seja, o Qmail não é executá-do como root.

97

Algumas comparações do Qmail

Fontes: www.lifewithqmail.org/lwq.html www.geocities.com/mailsoftware42/

Pacotes
qmail-1.03.tar.gz - Pacote do Qmail qmail-1.03-mfcheck.3.patch - Checa se o domínio existe. qmailqueue.patch - sem limites de mensagens na fila (255 padrão). daemontools - Daemon que monitora os serviços do Qmail. ucspi-tcp - inet mais inteligente Controla as conexões do Qmail.

Download dos pacotes
Qmail http://cr.yp.to/software/qmail-1.03.tar.gz Patches http://qmail.org/top.html#patches Daemontools http://www.inter7.com

98

Ucspi-tcp http://www.inter7.com

Como instalar o daemontools
Faça download do pacote daemontools. A última versão do daemontools publicada é: daemontools-0.76.tar.gz. Crie um diretório chamado /package: # mkdir -p /package # chmod 1755 /package Descompacte o pacote dentro do diretório /package: # tar xzvf daemontools-0.76.tar.gz -C /package Compilando e instalando o daemontools: # cd /package/admin/daemontools-0.76/ # package/install

Como instalar o ucspi-tcp
Faça download do pacote ucspi-tcp. A última versão do ucspi-tcp publicada é: ucspi-tcp-0.88.tar.gz. Descompacte o pacote: # tar xzvf ucspi-tcp-0.88.tar.gz Compilando e instalando o ucspi-tcp: # cd ucspci-tcp-0.88 # make setup check Verificar se a instação foi efetuada com sucesso Troque First M. Last pelo seu nome

( echo 'First M. Last'; cat `cat SYSDEPS` ) | mail djb-sysdeps@cr.yp.to

99

Como instalar o Qmail
Faça download do pacote Qmail e seus Patches. A última versão do Qmail publicada é: qmail-1.03.tar.gz. Descompacte o pacote: # tar xzvf qmail-1.03.tar.gz Aplique os patches no Qmail: # cd qmail-1.03 # patch -p1 < ../<caminho_do_patche>/qmail-1.03-mfcheck.3.patch # patch -p1 < ../<caminho_do_patche>/qmailqueue.patch Antes de compilar o Qmail, precisamos criar seus usuários e grupos, para isto é necessário editar o arquivo “INSTALL.ids” e deixar somente os parâmetros para o Linux, conforme especificado abaixo: Criando os usuários e grupos do Qmail: # vi INSTALL.ids
groupadd nofiles useradd -g nofiles -d /var/qmail/alias alias useradd -g nofiles -d /var/qmail qmaild useradd -g nofiles -d /var/qmail qmaill useradd -g nofiles -d /var/qmail qmailp groupadd qmail useradd -g qmail -d /var/qmail qmailq useradd -g qmail -d /var/qmail qmailr useradd -g qmail -d /var/qmail qmails

Executando o script INSTALL.ids: # sh INSTALL.ids Instalando o Qmail (compila, instala e testa): # make setup check
100

Configurando o Qmail: # ./config-fast instrutor.freesoftware.org.br
Onde, a opção “instrutor” é o nome do servidor e “freesoftware.org.br” é nome do domínio do servidor.

É fundamental que o nome e domínio estejam configurados corretamente, e que a tabela /etc/hosts também esteja adequadamente configurado de acordo as configurações do servidor, para o bom funcionamento do Qmail. Já estamos com o daemontools, ucspci-tcp e Qmail com os patches instalados, iremos agora dar procedimento as configurações do Qmail.

Criando os alias do Qmail
Os alias do Qmail são arquivos de configuração utilizados para enviar emails para uma determinado usuário, portanto, iremos agora criar os alias do Qmail para que o mesmo saiba para quem encaminhar as mensagens do root, postmaster e mailer-daemon. Porque criar os alias: Alias postmaster mailer-daemon root Purpose RFC 2821 required, points to the mail administrator (you) standard recipient for some bounces redirects mail from privileged account to the system administrator

Iremos criar um usuário denominado “correio” que será utilizado para receber as mensagens do root, postmaster e mailer-daemon. Criando o usuário: # adduser correio Criando os alias do Qmail: # cd /var/qmail/alias/ # echo “correio@freesoftware.org.br” > .qmail-root # echo “correio@freesoftware.org.br” > .qmail-postmaster # echo “correio@freesoftware.org.br” > .qmail-mailer-daemon
101

Configurando as permissões: # chmod 644 .qmail-root .qmail-postmaster .qmail-mailer-daemon # chown root.qmail .qmail-* Iremos trabalhar com mensagens no Qmail no formato “Maildir”, que é mais seguro e confiável do que “mailbox”, portanto, como já possuimos um usuário criado, no qual irá receber as mensagens do root, postmaster e mailer-daemon, teremos agora que criar o diretório “Maildir” em seu home. Criando o diretório “Maildir” do usuário “geral”: # su -l correio $ cd /var/qmail/bin/ $ ./maildirmake /home/correio/Maildir $ exit # chmod 700 /home/geral/Maildir

Configurando o script “/var/qmail/rc”
O script “/var/qmail/rc” é o responsável em iniciar o servidor de correio Qmail, portanto, só é possível enviar mensagens para usuários locais, devido a não configuração do script do “smtpd”, na qual estaremos efetuando mais tarde. O diretório /var/qmail/boot contém exemplos de scripts de boot para o Qmail para diferentes configurações: /var/spool/mail vs. $HOME/Mailbox, usando o procmail ou ponto-forward, e várias combinações. Exemplo: Criando o script “rc”: # cp /var/qmail/boot /var/qmail/rc # vi /var/qmail/rc
#!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to deliver messages by default exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start "`cat /var/qmail/control/defaultdelivery`"
102

Criando os alias do Qmail: Nota: Este script utiliza crases (`), e não aspas simples ('). Após ter criado o script /var/qmail/rc, então execute estes comandos: # chmod 755 /var/qmail/rc # mkdir /var/log/qmail Iremos trabalhar com o formato de emails “./Maildir/” que é muito mais flexível que “mailbox”, pois a diferença entre eles é que trabalhando com “./Maildir/”, cada mensagem se torna um arquivo, e trabalhando com “mailbox”, todas as mensagem ficam armazenadas em um só arquivo. Para configurarmos o método que iremos trabalhar, no caso “./Maildir/”, basta seguir o procedimento abaixo: Configurando as permissões: # echo “./Maildir/” > /var/qmail/control/defaultdelivery # chown root.qmail .qmail-* Nota: defaultdelivery não é um arquivo de controle do qmail. É somente uma configuração no qual utilizamos para configurar o método de mensagens recebidas. O script também pode ser criado da seguinte forma: Como root: # cp /var/qmail/boot /var/qmail/rc # vi /var/qmail/rc
#!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to deliver messages by default exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir/ splogger qmail
Onde, trocamos o parâmetro “./Mailbox” para “./Maildir/” .

103

As duas formas de configuração do script “rc” funcionam da mesma maneira, portanto, fica a critério de vocês de como configurá-lo, desde que siga os exemplos acima.

Iniciando o Qmail somente local
Iremos agora carregar o serviço do Qmail, portanto ele não irá abrir nenhum socket (porta), pois o mesmo até agora, está configurado para ser executado somente local. Carregando o serviço do Qmail: # csh -cf '/var/qmail/rc &' OBS.: Antes de carregar o serviço do Qmail, verifique se você possui a shell “csh” instalada em seu sistema, caso não esteja, devemos instalar a shell primeiro de depois carregar o serviço do Qmail.

Verificando os processos do Qmail
Iremos agora listar os processos do Qmail para verificar se até agora houve algum erro de configuração. Listando os processos do Qmail: # ps wax Deverá aparecer uma lista de serviços ativos conforme abaixo:
qmail-send splogger qmail qmail-lspawn ./Maildir/ qmail-rspawn qmail-clean

Além dos processos listados acima, devemos também verificar os logs para ter certeza de que tudo está OK, portanto iremos listar os logs do arquivo “mail.log” localizado no diretório “/var/log/”. Listando os logs do Qmail:

104

# tail /var/log/mail.log
....qmail qmail: 10.......391995status: local 0/10 remote 0/20

Deverá aparecer no “mail.log” a linha acima, indicando que tudo está correto com o Qmail.

Testando o servidor de correio Qmail
Iremos agora efetuar testes de envio de mensagens para o usuário local “correio” e também iremos forjar um erro no envio de uma mensagem, onde a mesma deverá rertornar com erro encaminhando a mensagem para o “postmaster”. 1º teste – Enviando mensagem para um usuário válido: # echo to: correio | /var/qmail/bin/qmail-inject
Ir para o diretório do usuário “correio” (/home/correio/Maildir/new) e verificar se ele recebeu a mensagem.

2º teste – Enviando mensagem para um usuário inválido: # echo to: mgarcia | /var/qmail/bin/qmail-inject
A mensagem irá voltar com erro para o postmaster, pois o usuário “mgarcia” não existe.

3º teste – Não é case sensitive: # echo to: PostMaSteR | /var/qmail/bin/qmail-inject
O postmaster irá receber a mensagem, pois a mesma não é case sensitive.

Parando o servidor de correio Qmail
Após ter efetuado os testes, iremos parar o servidor de correio para dar procedimento a outras configurações do mesmo, pois o Qmail será administrado pelo daemontools (responsável pelo serviço) e pelo ucspi-tcp (responsável pelas conexões). Parando os serviços do Qmail: # kill -9 `pidof qmail-send` pidof `splogger` pidof `qmail-lspawn` pidof `qmail-rspawn` pidof `qmail-clean`

105

Configurando o binário “sendmail”
Em todas as distribuições o servidor de correio “sendmail” vem instalado por default, com exceção do GNU/Debian que vem com o servidor de correio “exim”, onde ambos possuem o binário sendmail no diretório “/usr/sbin” e “/usr/lib/”. Quando instalamos o servidor de correio Qmail, o mesmo também utiliza o binário “sendmail”, que fica localizado no diretório “/var/qmail/bin/”. Na maioria dos casos acorrem erros ao tentarmos enviar mensagens para usuários externos, devido ao Qmail utilizar o “sendmail” que está localizado no diretório “/usr/sbin/”, portanto iremos apagá-lo e criar um link apontando para o “sendmail” do Qmail. Configurando o binário “sendmail”: # rm /usr/sbin/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail # rm /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

Configurando o SEND do Qmail
Iremos agora configurar o SEND do servidor de correio Qmail, para que o mesmo possa enviar mensagens para qualquer usuário. Configurando o SEND: # cd /var/qmail/ # mkdir -p supervise/qmail-send/log/../env # vi supervise/qmail-send/run
#!/bin/sh exec /var/qmail/rc

# vi supervise/qmail-send/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s2500000 \ /var/log/qmail/qmail-send

106

Configurando o SMTP do Qmail
Iremos agora configurar o SMTP do servidor de correio Qmail, para que os usuários possam enviar mensagens para outros usuários que não fazem parte do servidor de correio, ou seja, para usuários externos. Configurando o SMTP: # cd /var/qmail/ # mkdir -p supervise/qmail-smtpd/log/../env # vi supervise/qmail-smtpd/run
#!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` exec /usr/local/bin/softlimit -m 3000000 /usr/local/bin/tcpserver \ -H -R -v -p -x /etc/tcp.smtp.cdb -u $QMAILDUID -g $NOFILESGID 0 smtp \ /var/qmail/bin/qmail-smtpd 2>&1

# vi supervise/qmail-smtpd/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s2500000 \ /var/log/qmail/qmail-smtpd

Configurando o POP3D do Qmail
Iremos agora configurar o POP3D do servidor de correio Qmail, para que os usuários possam receber mensagens do servidor de correio Qmail. Configurando o POP3D:

107

# cd /var/qmail/ # mkdir -p supervise/qmail-pop3d/log/../env # vi supervise/qmail-pop3d/run
#!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` exec /usr/local/bin/softlimit -m 5000000 /usr/local/bin/tcpserver \ -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup instrutor.freesoftware.org.br \ /var/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

# vi supervise/qmail-pop3d/log/run
#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s2500000 \ /var/log/qmail/qmail-pop3d

Criando os diretórios de logs do Qmail
Iremos agora criar os diretórios de logs do Qmail para que todas as mensagens sejam logadas, independente se as mesmas foram enviadas com sucesso ou não. Criando o diretório de logs do Qmail: # cd /var/log/ # mkdir -p qmail/qmail-send/../qmail-smtpd/../qmail-pop3d # chown -R qmaill: qmail

Criando os links dos scripts do Qmail
Iremos agora criar os links dos scripts (SEND, SMTPD e POP3D) do Qmail, para que os mesmos possam ser gerenciados pelo daemontools e pelo ucspci-tcp. A partir do momento que os links forem criados, o serviço do Qmail será iniciado, devido ao daemontools carregá-lo automaticamente. Criando os links dos scripts do Qmail:

108

# ln -s /var/qmail/supervise/qmail-send/ /service/qmail-send # ln -s /var/qmail/supervise/qmail-smtpd/ /service/qmail-smtpd # ln -s /var/qmail/supervise/qmail-pop3d/ /service/qmail-pop3d Para cada script linkado, deverá aparecer duas linhas de serviços ao digitar o comando “ps wax”:
tcpserver multilog

Configurando a tabela de relay
Iremos agora configurar a tabela de relay do Qmail, pois é a tabela de relay quem diz quem tem permissão de enviar emails, tantos locais como remotos. Outro ítem importante é que se não configurarmos corretamente as redes que podem fazer relay, podemos nos tornar um servidor de SPAM. Configurando a tabela de relay do Qmail: # vi /etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT="" 192.168.100.:allow,RELAYCLIENT="" 192.168.0.23:allow,RELAYCLIENT=""
Na opção acima, somente os ips 127.0.0.1 e 192.168.0.23 e a rede 192.168.100.0 podem fazer relay.

Gerando o banco de dados da tabela de relay: # tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp Temos que criar o banco de dados da tabela de relay, pois o qmail somente lê o arquivo “tcp.smtp.cdb”. Qualquer alteração na tabela de relay, é necessário executar o “tcprules” novamente.

Habilitando a checagem de domínio
Iremos agora configurar um arquivo de controle no diretório “/var/qmail/control/” denominado “mfcheck”, onde o mesmo é responsável em checar se o reverso do domínio existe, das mensagens que estamos enviando e recebendo.

109

Criando o arquivo de checagem do reverso: # cd /var/qmail/control/ # vi mfcheck
1
Na opção acima, 1 está habilitado para a checagem de domínio e 0 esta desabilitado.

Após a criação do arquivo de checagem de domínio, é necessário parar e iniciar o servidor de correio Qmail. Parando o servidor de correio Qmail: # svc -d /service/qmail-send /service/qmail-send/log # svc -d /service/qmail-smtpd /service/qmail-smtpd/log # svc -d /service/qmail-pop3d /service/qmail-pop3d/log
Onde a opção “-d” é igual a “down”

Iniciando o servidor de correio Qmail: # svc -u /service/qmail-send /service/qmail-send/log # svc -u /service/qmail-smtpd /service/qmail-smtpd/log # svc -u /service/qmail-pop3d /service/qmail-pop3d/log
Onde a opção “-u” é igual a “up”

Script de rotinas do Qmail
Utilizando o script qmailctl podemos parar o qmail, iniciar, pausar, listar a fila de mensagens, listar quantas mensagens estão na fila, mandar um sinal para o qmail entregar as mensagens imediatamente, etc... Download: http://www.lifewithqmail.org/qmailctl-script-dt70 Após o download do script de rotinas do Qmail, coloque-o em algum diretório que faça parte do patch do sistema e dê permissão de execução para o mesmo: # cp qmailctl /usr/sbin/ # chmod 750 /usr/sbin/qmailctl

110

Rotinas do Qmail:
qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl qmailctl stop start restart pause cont stat cdb queue doqueue flush reload alrm hup Para o servidor de correio Inicia o servidor de correio Restarta o servidor de correio Pausa o servidor de correio Starta o servidor de correio pausado Mostra o status do servidor de correio Refaz a tabela de relay Mostra o status da fila de correio Agenda a fila de mensagens para entrega Ídem doqueue Recarrega tabelas de domínios locais e virtuais Ídem doqueue Ídem reload

Arquivos de controle do Qmail
Segue abaixo arquivos de controle / configuração do Qmail localizados no diretório “/var/qmail/control/”: Control
badmailfrom bouncefrom bouncehost

Default
none MAILERDAEMON me

Used by
qmail-smtpd qmail-send qmail-send /service/qmailsmtpd/run qmail-send qmail-send /var/qmail/rc qmail-inject qmail-inject qmail-smtpd qmail-send qmail-send

Purpose
blacklisted From addresses username of bounce sender hostname of bounce sender max simultaneous incoming SMTP connections max simultaneous local deliveries max simultaneous remote deliveries default .qmail file default domain name default host name max number of bytes in message (0=no limit) host name of double bounce sender user to receive double bounces

concurrencyincoming none concurrencylocal concurrencyremote defaultdelivery defaultdomain defaulthost databytes doublebouncehost doublebounceto 10 20 none me me 0 me postmaster

111

envnoathost helohost idhost localiphost locals me morercpthosts percenthack plusdomain qmqpservers queuelifetime rcpthosts smtpgreeting smtproutes timeoutconnect timeoutremote timeoutsmtpd virtualdomains

me me me me me FQDN of system none none me none 604800 none me none 60 1200 1200 none

qmail-send qmail-remote qmail-inject qmail-smtpd qmail-send various qmail-smtpd qmail-send qmail-inject qmail-qmqpc qmail-send qmail-smtpd qmail-smtpd qmail-remote qmail-remote qmail-remote qmail-smtpd qmail-send

default domain for addresses without "@" host name used in SMTP HELO command host name for MessageID's name substituted for local IP address domains that we deliver locally default for many control files secondary rcpthosts database domains that can use "%"-style relaying domain substituted for trailing "+" IP addresses of QMQP servers seconds a message can remain in queue domains that we accept mail for SMTP greeting message artificial SMTP routes how long, in seconds, to wait for SMTP connection how long, in seconds, to wait for remote server how long, in seconds, to wait for SMTP client virtual domains and users

Variáveis de ambiente do Qmail
Muitos aplicativos do Qmail utilizam variáveis de ambiente. Segue abaixo, lista de variáveis e suas respectivas descrições:

Name

Man page

Set or Purpose used
112

DATABYTES DEFAULT DTLINE EXT EXT2 EXT3 EXT4 HOME HOST HOST2 HOST3 HOST4 LOCAL LOGNAME MAILHOST MAILNAME MAILUSER NAME NEWSENDER QMAILDEFAULTDOMAIN QMAILDEFAULTHOST QMAILHOST QMAILIDHOST QMAILINJECT

qmail-smtpd used qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmailcommand qmail-inject qmail-inject qmail-inject qmail-inject qmail-inject qmailcommand qmail-inject qmail-inject qmail-inject qmail-inject qmail-inject set set set set set set set set set set set set used used used used used set used used used used used

Overrides control/databytes Portion of address matching "-default" in a .qmail file name. Delivered-To header field The address extension Portion of EXT following first dash Portion of EXT following second dash Portion of EXT following third dash The user's home directory The domain part of the recipient address Portion of HOST preceding last dot. Portion of HOST preceding second-to-last dot Portion of HOST preceding thirdto-last dot The local part of the recipient address User name in From header field (4) Host name in From header field (2) Personal name in From header field (2) User name in From header field (2) Personal name in From header field (3) Forwarding sender address (see "man dot-qmail") Overrides control/defaultdomain Overrides control/defaulthost Host name in From header field (1) Overrides control/idhost Specify various options (see next table)

113

QMAILMFTFILE QMAILNAME QMAILPLUSDOMAIN QMAILSHOST QMAILSUSER QMAILUSER RECIPIENT RELAYCLIENT RPLINE SENDER UFLINE USER USER

qmail-inject qmail-inject qmail-inject qmail-inject qmail-inject qmail-inject qmailcommand

used used used used used used set

File containing list of mailing list addresses for Mail-Followup-To generation Personal name in From header field (1) Overrides control/plusdomain Host name in envelope sender address User name in envelope sender address User name in From header field (1) Envelope recipient address Ignore control/rcpthosts and append value to recipient address Return-Path header field Envelope sender address UUCP-style "From " line The current user User name in From header field (3)

qmail-smtpd used qmailcommand qmailcommand qmailcommand qmailcommand qmail-inject set set set set used

QMAILINJECT Flags Letter
c s f i r m

Purpose
Use address-comment style for the From field Do not look at any incoming Return-Path field Delete any incoming From field Delete any incoming Message-ID field Use a per-recipient VERP Use a per-message VERP

Arquitetura
Modules
qmail-smtpd qmail-inject qmail-rspawn/qmail-remote

Function
accepts/rejects messages via SMTP injects messages locally handles remote deliveries

114

qmail-lspawn/qmail-local qmail-send qmail-clean

handles local deliveries processes the queue cleans the queue

Estrutura de Diretórios
O diretório /var/qmail é o diretório onde contém toda a estrutura do Qmail. Seus subdiretórios são: Directory
alias bin boot control doc man queue users

Contents
.qmail files for system-wide aliases program binaries and scripts startup scripts configuration files documentation (except man pages) man pages the queue of unsent messages the qmail-users database files

Estrutura do Queue
O diretório queue contém as mensagens que estão na fila para serem enviadas: Subdirectory Contents
bounce info* intd local* lock mess* pid remote* todo permanent delivery errors envelope sender addresses envelopes under construction by qmail-queue local envelope recipient addresses lock files message files used by qmail-queue to acquire an i-node number remote envelope recipient addresses complete envelopes

Tentativas de Entrega das Mensagens
O diretório queue contém as mensagens que estão na fila para serem enviadas. Segue abaixo as tentativas de entrega de emails quando a mesma retorna devido a caixa postal do destinatário estar lotada, ou por algum outro motivo:
115

Tentativas de Entrega
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

Segundos
0 400 1600 3600 6400 10000 14400 19600 25600 32400 40000 48400 57600 67600 78400 90000 102400 115600 129600 144400 160000 176400 193600 211600 230400 250000 270400 291600 313600 336400 360000 384400 409600 435600

D-HH:MM:SS
0-00:00:00 0-00:06:40 0-00:26:40 0-01:00:00 0-01:46:40 0-02:46:40 0-04:00:00 0-05:26:40 0-07:06:40 0-09:00:00 0-11:06:40 0-13:26:40 0-16:00:00 0-18:46:40 0-21:46:40 1-01:00:00 1-04:26:40 1-08:06:40 1-12:00:00 1-16:06:40 1-20:26:40 2-01:00:00 2-05:46:40 2-10:46:40 2-16:00:00 2-21:26:40 3-03:06:40 3-09:00:00 3-15:06:40 3-21:26:40 4-04:00:00 4-10:46:40 4-17:46:40 5-01:00:00

116

35 36 37 38 39 40

462400 490000 518400 547600 577600 608400

5-08:26:40 5-16:06:40 6-00:00:00 6-08:06:40 6-16:26:40 7-01:00:00

117

Vpopmail
O vpopmail é um servidor pop3d com suporte a domínios virtuais muito utilizado, que trabalha em conjunto com o Qmail, desenvolvido por Chris Johnson e mantido por Ken Jones.

Vantagens

Suporte até 23 milhões de domínios virtuais, balanceado por uma árvore de diretórios; Suporte até 23 milhões de usuários por domínio, balanceado por uma árvore de diretórios; Integração total com o Qmail; Não requer contas de usuários no sistema; Suporte para MySQL, Oracle, PostGreSQL, LDAP, Sybase, “/etc/passwd” e “/etc/shadow”; Um usuário que possui conta em mais de um domínio, possui uma senha diferente para cada; Administração em modo texto e gráfico, etc...

• • •

Pacotes
vpopmail-5.2.1.tar.gz - Pacote do Servidor POP3d

Download
vpopmail http://www.inter7.com/vpopmail/vpopmail-5.2.1.tar.gz

Como instalar o vpopmail
Faça download do pacote Vpopmail. A última versão do vpopmail publicada é: daemontools-0.76.tar.gz. Descompactando o vpopmail: # tar xzvf vpopmail-5.2.1.tar.gz # cd vpopmail-5.2.1 Criando o grupo e usuário do vpopmail:

118

# groupadd -g 89 vchkpw # adduser -g vchkpw -u 89 -d /var/vpopmail vpopmail Obs.: Por padrão, o vpopmail é instalado no diretório “/home/vpopmail” e iremos instalar o Vpopmail do diretório “/var/vpopmail”. Compilando o vpopmail: # ./configure --enable-clear-passwd=n --enable-md5-passwords=y --enable-logging=y --enable-default-domain=freesoftware.org.br -with-prefix=/var/vpopmail # make # make install-strip O que é cada opção:
--enable-clear-passwd= --enable-md5-passwords= --enable-logging= --enable-default-domain= -with-prefix= Habilita/Desabilita senhas em branco Habilita senhas com cripografia MD5 Habilita logs de acesso Compila o vpopmail com um domínio default Local onde será instalado o vpopmail

Configurando o vpopmail: # cd /var/vpopmail/bin/ # ./vadddomain freesoftware.org.br # ./vadduser mgarcia@freesoftware.org.br # ./vadduser mgarcia@freesoftware.org.br # ./vadduser ralf@freesoftware.org.br # ./vuserinfo mgarcia@freesoftware.org.br # ./vpasswd ralf@freesoftware.org.br # ./vdeluser mgarcia@freesoftware.org.br # ./vsetuserquota ralf@freesoftware.org.br

119

Courier-Imap
O Courier-imap é um servidor que provê acesso IMAP aos Maildirs. É muito popular com correios que utilizam o esquema Maildir, pois o mesmo não possui suporte a Mailbox. A vantagem de se utilizar Maildir, é que o mesmo pode ser acessado de diversas aplicações simultâneamente, além de ser mais rápido e eficiente. Possui recursos como:
• • •

IMAP sobre SSL; Ipv6; Supote a PAM, MySQL, PostGreSQL, LDAP, etc...

Pacotes
courier-imap-3.0.3.20040411.tar.bz2 - Pacote do Servidor IMAP

Download
courier-imap http://www.inter7.com/courierimap.html

Dependências
Antes de instalar e configurar o courier-imap é necessário instalar as seguintes dependências: # apt-get install zlib1g # apt-get install zlib1g-dev # apt-get install expect # apt-get install libgdbmg1-dev # apt-get install openssl # apt-get install libssl-dev

Como instalar o courier-imap
Faça download do pacote courier-imap. A última versão do courier publicada é: courier-imap-3.0.3.20040411.tar.bz2. Descompactando o courier-imap:
120

# tar xjvf courier-imap-3.0.3.20040411.tar.bz2 Antes de instalar o courier-imap é necessário configurar as bibliotecas do vpopmail no diretório “/var/vpopmail/etc/”, pois o courier-imap irá buscar estas bibliotecas. Configurando as bibliotecas do vpopmail: # echo “-I/var/vpopmail/include” > /var/vpopmail/etc/inc_deps # echo “-L/var/vpopmail/lib -lvpopmail” > /var/vpopmail/etc/lib_deps
A 1ª opção é “i” maiúsculo e a 2ª opção é “L” maiúsculo e a opção “lvpopmail” é L minúsculo

Instalando o courier-imap: # cd courier-imap-3.0.3.20040411 # ./configure --disable-root-check --without-auth-daemon --with-authvchkpw

# make # make install-strip # make install-configure Iniciando o serviço do courier-imap: # /usr/lib/courier-imap/libexec/imapd.rc start Parando o serviço do courier-imap: # /usr/lib/courier-imap/libexec/imapd.rc stop

Qmailadmin
O qmailadmin é uma ferramenta web gráfica utilizada para administrar domínios virtuais e usuários dos domínios. Possui recursos como:

121

• • • • • •

Adicionar usuários; Remover usuários; Aliases; Forward; Mailing list; Vacation.

Outros recursos do qmailadmin
Cada usuário do vpopmail pode administrar sua própria conta, podendo usufruir de tais recursos:
• • • •

Troca de senha; Forward; Salvar cópia de email; Vacation.

Pacote
qmailadmin-1.0.6.tar - Pacote do qmailadmin

Download
qmailadmin http://www.inter7.com/qmailadmin/

Pré-requisitos
Antes de instalar e configurar o qmailadmin é necessário instalar os seguintes pacotes:
apache php4 ezmlm autorespond qmail vpopmail Servidor Web Suporte a php4 Lista de distribuição Necessário para a lista de distribuição Servidor do Qmail Servidor pop3d

OBS.: Configurar o servidor “apache” com suporte a “PHP4”

Instalando o apache: # apt-get install apache Instalando o php4:

122

# apt-get install php4 Os pacotes “ezmlm-0.53.tar.gz” e “autorespond-2.0.2.tar.gz” podem ser feitos o download através do site: http://www.inter7.com.br Instalando o ezmlm: # # # # # tar xzvf ezmlm-0.53.tar.gz cd ezmlm-0.53 make make man make setup

Instalando o autorespond: # # # # tar xzvf autorespond-2.0.2.tar.gz cd autorespond-2.0.2 make make install

Como instalar o qmailadmin
Faça download do pacote qmailadmin. A versão do qmailadmin que iremos utilizar é: qmailadmin-1.0.6.tar.gz. Descompactando o qmailadmin: # tar xzvf qmailadmin-1.0.6.tar.gz Instalando o qmailadmin: # cd qmailadmin-1.0.6/ # ./configure --enable-htmllibdir=/var/www/ --enable-cgibindir=/usr/lib/cgi-dir/

# make # make install-strip

123

Como acessar o qmailadmin
Abra em seu browser o seguinte endereço:
http://localhost/cgi-dir/qmailadmin

Squirrelmail
O squirrelmail é um webmail integrado com o qmail e vpopmail. Possui suporte a domínios virtuais e também possui mais de 200 plugins, cada um com uma finalidade.

Pacote
squirrelmail-1.4.2.tar.bz2 - Pacote do webmail

Download
squirrelmail http://www.squirrelmail.org

Como instalar o squirrelmail
Faça download do pacote squirrelmail. A última versão do squirrelmail publicada é: squirrelmail-1.4.2.tar.bz2. Descompactando o squirrelmail: # tar xjvf squirrelmail-1.4.2.tar.bz2 -C /var/www/ Instalando o squirrelmail: # cd /var/www/ # mv squirrelmail-1.4.2 webmail # ./configure
Agora é só seguir as instruções do menu

Como acessar o squirrelmail
Abra em seu browser o seguinte endereço:

124

http://localhost/webmail/

Como deixar o webmail mais seguro
Configure um domínio virtual no apache para o webmail com suporte a ssl. Coloque o logo da empresa e aplique alguns plugins importântes no dia-adia como por exemplo: calendário, selecionar todas mensagens, etc... Caso queira adicionar mais plugins no seu webmail, acesse o site: http://www.squirrelmail.org/plugins/

125

OPENLDAP2
Existem duas maneiras de instalar o OpenLDAP2 no Debian, sendo elas: 1ª – Através do apt; 2ª – Através do código fonte, baixando os pacotes diretamente no site. Iremos utilizar as duas formas para instalar o OpenLDAP2.

Instalação do OpenLdap2 através do APT
Estaremos utilizando o APT para instalar o OpenLDAP2. Instalando o OpenLDAP2 através do “apt”: # apt-get source openldap2 --compile Se ocorrer problemas de dependência, utilize o comando abaixo para instalar as mesmas: # apt-get install <nome> Onde o <nome> é o pacote que o APT encontrou a dependência. Após resolvido as mesmas, devemos repetir o comando: # apt-get source openldap2 --compile

Serão gerados 5 arquivos:
ldap-gateways_2.0.23-6_i386.deb ldap-utils_2.0.23-6_i386.deb libldap2-dev_2.0.23-6_i386.deb libldap2_2.0.23-6_i386.deb slapd_2.0.23-6_i386.deb Responsável pela comunicação Bibliotecas úteis Bibliotecas para o cliente ldap Cliente ldap Server ldap

126

Agóra iremos instalar os pacotes gerados pelo “apt”: # apt-get install ldap-gateways_2.0.23-6_i386.deb # apt-get install ldap-utils_2.0.23-6_i386.deb # apt-get install libldap2-dev_2.0.23-6_i386.deb # apt-get install libldap2_2.0.23-6_i386.deb # apt-get install slapd_2.0.23-6_i386.deb

Após instalar o Openldap2, será chamado a configuração do servidor ldap.

Deve-se escolher como a base do LDAP será criada. Em nosso caso iremos escolher a opção AUTO para que o LDAP gere automaticamente nossa base , o banco usado para esta base será o lbdm.

127

Aqui escolheremos o padrão para o SUFIXO do LDAP, esse sufixo será utilizado nas pesquisas e autenticação no diretório ldap. Escolha a opção domain or host para que o sufixo seja criado com o padrão de seu endereço DNS.

Indique uma senha para o administrador, ele será o usuário responsável por fazer as alterações no diretório.

Arquivos de configuração do OPENLDAP
128

Serão gerados 5 arquivos:
/etc/ldap.secret /etc/ldap/slapd.conf /etc/ldap/lapd.conf /var/lib/ldap/ Senha do administrador do diretório Configuração do servidor LDAP Configuração do cliente LDAP Diretório da base de dados

Arquivo de configuração do cliente: # vi /etc/ldap/ldap.conf
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.4.8.6 2000/09/05 17:54:38 kurt Exp $ # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example, dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 #SIZELIMIT #TIMELIMIT #DEREF 12 15 never

# Configuracao do localhost host localhost # Base principal do LDAP base dc=gusl,dc=org,dc=br # User que sera padrao nas pesquisas binddn cn=admin,dc=gusl,dc=org,dc=br # Senha padrao para fazer as pesquizas bindpw 123456 # Senha utilizando md5 pam_password md5
129

# Define um filtro para as pesquisas pam_filter objectclass=account # Forca os usuarios a usarem um determinado grupo pam_groupdn cn=users,ou=Group,dc=gusl,dc=org,dc=br # Habilita o SSL ssl yes

Arquivo de configuração do servidor: # vi /etc/ldap/slapd.conf
# This is the main ldapd configuration file. See slapd.conf(5) for more # info on the configuration options. # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/qmail.schema # Schema check allows for forcing entries to # match schemas for their objectClasses's schemacheck on # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd.pid # List of arguments that were passed to the server argsfile /var/run/slapd.args # Where to store the replica logs replogfile /var/lib/ldap/replog # Read slapd.conf(5) for possible values loglevel 0 ############################################# ########################## # ldbm database definitions #############################################

130

########################## # The backend type, ldbm, is the default standard database ldbm # The base of your directory suffix "dc=gusl,dc=org,dc=br" # Where the database file are physically stored directory "/var/lib/ldap" # Indexing options index objectClass eq # Save the time that the entry gets modified lastmod on # The userPassword by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the # admin entry below access to attribute=userPassword by dn="cn=admin,dc=gusl,dc=org,dc=br" write by anonymous auth by self write by * none # The admin dn has full write access access to * by dn="cn=admin,dc=gusl,dc=org,dc=br" write by * read # For Netscape Roaming support, each user gets a roaming # profile for which they have write access to access to dn=".*,ou=Roaming,o=morsnet" by dn="cn=admin,dc=gusl,dc=org,dc=br" write by dnattr=owner write

Arquivo de configuração da senha do OpenLDAP: # vi /etc/ldap.secrets
NOSSA_SENHA

131

Instalando o pacote migrationtools
O pacote migrationtools é o responsável em fazer a migração dos dados do Linux para um arquivo padrão LDIF, este pacote instala scripts em perl que faz as migrações. Iremos verificar se o perl está instalado: # dpkg -l | grep perl

Caso não esteja, teremos que efetuar a instalação do mesmo: # apt-get install perl-5.6

Após a instalação do perl, iremos instalar o migrationtools: # apt-get install migrationtools Agora acessamos o diretório “/usr/share/migrationtools/” e editamos o arquivo “migrate_common.ph”, arquivo responsável pela configuração básica dos demais scripts, altere conforme abaixo: # cd /usr/share/migrationtools/ # vi migrate_common.ph
# Default DNS domain $DEFAULT_MAIL_DOMAIN = "freesoftware.org.br"; # Default base $DEFAULT_BASE = "dc=freesoftware,dc=org,dc=br"; # where /etc/mail/ldapdomains contains names of ldap_routed # domains (similiar to MASQUERADE_DOMAIN_FILE). $DEFAULT_MAIL_HOST = "instrutor.freesoftware.org.br";

Migrando a Base de Objetos
Iremos migrar a base de objetos para que o diretório de LDAP possa criar os objetos “o”, porém, a princípio vamos criar apenas o “OU” People e Group.

132

# cd /usr/share/migrationtools/ # ./migrate_base.pl /root/base.ldif Executando o comando acima estaremos migrando os objetos básicos para a criação do seu diretório. Vamos utilizar apenas o “OU” People que é responsável por guardar os usuários do diretório, e o Group que é o responsável por guardar os grupos. Portanto, edite o /root/base.ldif delete a linha que fazer referência aos outros “OU”, o arquivo deve ficar como indicado abaixo: # vi /root/base.ldif
dn: ou=People,dc=gusl,dc=org,dc=br ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=gusl,dc=org,dc=br ou: Group objectClass: top objectClass: organizationalUnit

Adicionando as informações dos arquivos LDIF no diretório LDAP: # cd /root
# ldapadd -x -D “cn=admin,dc=freesoftware,dc=org,dc=br” -f base.ldif -W Enter LDAP Password:
OBS.: Informar a senha do servidor LDAP

Com isso acabamos de criar os objetos “OU”, “People” e “Group”, o básico para fazer autenticação do LDAP ou utilizar o mesmo para lista de contatos. Podemos fazer um teste para saber se o LDAP está funcionando, vamos utilizar o ldapclient para fazer isto: # ldapsearch -x Esse comando irá retornar todos os objetos da base LDAP.

Ferramenta de administração web para o OpenLDAP
Agora que o LDAP está rodando, poderemos manipular nossos usuários via WEB utilizando ferramentas OpenSource, portanto, iremos utilizar o DAVEDAP.

133

Download
http://davedap.sourceforge.net

Pré-requisitos
Para que o davedap funcione corretamente, teremos que instalar os seguintes pacotes:
apache php4 Já instalado e configurado Já instalado e configurado

Instalando suporte a LDAP no PHP4: # apt-get install php-pear # apt-get install php-ldap

Como instalar o davedap
Faça download do pacote davedap. A última versão do davedap publicada é: phpldapadmin-0.9.3.tar.gz. Descompactando o davedap: # tar xjvf phpldapadmin-0.9.3.tar.gz -C /var/www/ Instalando o davedap: # cd /var/www/ # mv phpldapadmin-0.9.3 davedap # cd davedap # cp config.php.example config.inc.php Editando o arquivo de configuração do davedap: # vi config.inc.php
<?php /* * The phpLDAPadmin config file
134

* * * * * * * */

This is where you customize phpLDAPadmin. The most important part is immediately below: The "LDAP Servers" section. You must specify at least one LDAP server there. You may add as many as you like. You can also specify your language, and many other options.

// Your LDAP servers $i=0; $servers = array(); $servers[$i]['name'] = 'Servidor LDAP'; /* A convenient name that will appear in the tree viewer */ $servers[$i]['host'] = 'localhost'; /* Examples: 'ldap.example.com', 'ldaps://ldap.example.com/' Note: Leave blank to remove it from the list of servers in the tree viewer*/ $servers[$i]['base'] = 'dc=freesoftware,dc=org,dc=br'; /* The base DN of your LDAP server. Leave this blank to have phpLDAPadmin auto-detect it for you. */ $servers[$i]['port'] = 389; /* The port your LDAP server listens on (no quotes) */ $servers[$i]['auth_type'] = 'config'; /* 2 options: 'form': you will be prompted, and a cookie stored with your login dn and password. 'config': specify your login dn and password here. In both cases, use caution! */ $servers[$i]['login_dn'] = 'cn=admin,dc=freesoftware,dc=org,dc=br'; /* For anonymous binds, leave the login_dn and login_pass blank */ $servers[$i]['login_pass'] = '123456'; /* Your password (only if you specified 'config' for 'auth_type' */ $servers[$i]['tls'] = false; /* Use TLS to connect. Requires PHP 4.2 or newer */ $servers[$i]['default_hash'] = 'md5'; /* Default password hashing algorith; One of md5, ssha, sha, md5crpyt, smd5, blowfish or leave blank for now default algorithm. */ $servers[$i]['login_attr'] = 'dn'; /* If you specified 'form' as the auth_type above, you can optionally specify here an attribute to use when logging in. If you enter 'uid', then login as 'dsmith', phpLDAPadmin will
135

search for uid=dsmith and log in as such. Leave blank or specify 'dn' to use full DN for logging in .*/ $servers[$i]['read_only'] = false; /* Specify true If you want phpLDAPadmin to not display or permit any modification to the LDAP server. */ $servers[$i]['enable_auto_uid_numbers'] = false; /* This feature allows phpLDAPadmin to automatically determine the next available uidNumber for a new entry. */ $servers[$i]['auto_uid_number_mechanism'] = 'search'; /* The mechanism to use when finding the next available uidNumber. Two possible values: 'uidpool' or 'search'. The 'uidpool' mechanism uses an existing uidPool entry in you r LDAP server to blindly lookup the next available uidNumber. The 'search' mechanism searches for entries with a uidNumber value and finds the first available uidNumber (slower). */ $servers[$i]['auto_uid_number_search_base'] = 'ou=People,dc=example,dc=com'; /* The DN of the search base when the 'search' mechanism is used above. */ $servers[$i]['auto_uid_number_min'] = 1000; /* The minimum number to use when searching for the next available UID number (only when 'search' is used for auto_uid_number_mechanism' */ $servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com'; /* The DN of the uidPool entry when 'uidpool' mechanism is used above. */ // If you want to configure additional LDAP servers, do so below. $i++; $servers[$i]['name'] = 'Another server'; $servers[$i]['host'] = ''; $servers[$i]['base'] = 'dc=example,dc=com'; $servers[$i]['port'] = 389; $servers[$i]['auth_type'] = 'config'; $servers[$i]['login_dn'] = ''; $servers[$i]['login_pass'] = '';
136

$servers[$i]['tls'] = false; $servers[$i]['default_hash'] = 'crypt'; $servers[$i]['login_attr'] = ''; $servers[$i]['read_only'] = false; $servers[$i]['enable_auto_uid_numbers'] = false; $servers[$i]['auto_uid_number_mechanism'] = 'search'; $servers[$i]['auto_uid_number_search_base'] 'ou=People,dc=example,dc=com'; $servers[$i]['auto_uid_number_min'] = 1000; $servers[$i]['auto_uid_number_uid_pool_dn'] 'cn=uidPool,dc=example,dc=com';

= =

// If you want to configure more LDAP servers, copy and paste the above (including the "$i++;") // The temporary storage directory where we will put jpegPhoto data // This directory must be readable and writable by your web server $jpeg_temp_dir = "/tmp"; // Example for Unix systems //$jpeg_temp_dir = "c:\\temp"; // Example for Windows systems /** **/ /** Appearance and Behavior **/ /** **/ // The language setting. If you set this to 'auto', phpLDAPadmin will // attempt to determine your language automatically. Otherwise, available // lanaguages are: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', and 'ru' // Localization is not complete yet, but most strings have been translated. // Please help by writing language files. See lang/en.php for an example. $language = 'auto'; // Set to true if you want to draw a checkbox next to each entry in the tree viewer // to be able to delete multiple entries at once $enable_mass_delete = false; // Set to true if you want LDAP data to be displayed read-only (without input fields) // when a user logs in to a server anonymously $anonymous_bind_implies_read_only = true; // If you used auth_type 'form' in the servers list, you can adjust how long the cookie will last // (default is 0 seconds, which expires when you close the browser) $cookie_time = 0; // seconds // How many pixels wide do you want your left frame view (for the tree browser) $tree_width = 320; // pixels

137

// How long to keep jpegPhoto temporary files in the jpeg_temp_dir directory (in seconds) $jpeg_tmp_keep_time = 120; // seconds // Would you like to see helpful hint text occacsionally? $show_hints = true; // set to false to disable hints // When using the search page, limit result size to this many entries $search_result_size_limit = 50; /** **/ /** Simple Search Form Config **/ /** **/ // Which attributes to include in the drop-down menu of the simple search form (comma-separated) // Change this to suit your needs for convenient searching. Be sure to change the correlating // list below ($search_attributes_display) $search_attributes = "uid, cn, gidNumber, objectClass, telephoneNumber, mail, street"; // This list correlates to the list directly above. If you want to present more readable names // for your search attributes, do so here. Both lists must have the same number of entries. $search_attributes_display = "User Name, Common Name, Group ID, Object Class, Phone Number, Email, Addre ss"; // The list of attributes to display in each search result entry summary $search_result_attributes = "dn, cn"; /** **/ /** User-friendly attribute translation /** **/ $friendly_attrs = array(); // Use this array to map attribute names to user friendly names. For example, if you // don't want to see "facsimileTelephoneNumber" but rather "Fax". $friendly_attrs[ 'facsimileTelephoneNumber' ] = 'Fax'; $friendly_attrs[ 'telephoneNumber' ] = 'Phone'; /** /** Hidden attributes /** **/ **/ **/ **/

138

// You may want to hide certain attributes from being displayed in the editor screen // Do this by adding the desired attributes to this list (and uncomment it). This // only affects the editor screen. Attributes will still be visible in the schema // browser and elsewhere. An example is provided below: //$hidden_attrs = array( 'jpegPhoto', 'objectClass' ); ?>

Como acessar o davedap
Acessando o endereço abaixo teremos acesso a base LDAP, podendo fazer qualquer tipo de alteração, adicionar usuários, unix, samba, grupos, etc...
http://localhost/davedap/

Instalação do OpenLdap2 através do código fonte
Estaremos efetuando agora a instalação do OpenLDAP através de seu código fonte.

Pré-requisitos
openssl Databases – BerkeleyDB ou GDBM Cyrus – SASL

Pacotes
db-4.1.25.tar.gz – Pacote do BerkeleyDB cyrus-sasl-2.1.18.tar.gz – Pacote de Autenticação e Criptografia openldap-stable-20040329.tgz – Pacote do OpenLDAP

Download
BerkeleyDB http://www.sleepycat.com

139

Cyrus – SASL http://asg.web.cmu.edu/sasl/sasl-library.html OpenLDAP http://www.openldap.org

Como instalar o BerkeleyDB
Faça download do pacote BerkeleyDB. A última versão estável do BerkeleyDB é: db-4.1.25.tar.gz. Descompactando o BerkeleyDB: # tar xjvf db-4.1.25.tar.gz Instalando o BerkeleyDB: # cd db-4.1.25/docs/ # ../dist/configure # make # make install
OBS.: A base será instalada em /usr/local/BerkeleyDB.4.1/

Colocar o diretório /usr/local/BerkeleyDB.4.1 no arquivo /etc/ld.so.conf: # echo “/usr/local/BerkeleyDB.4.1” > /etc/ld.so.conf # ldconfig # ldconfig -v | grep BerkeleyDB

Como instalar o Cyrus - SASL
Faça download do pacote Cyrus - SASL. A última versão estável do Cyrus – SASL é: cyrus-sasl-2.1.18.tar.gz. Descompactando o Cyrus – SASL: # tar xjvf cyrus-sasl-2.1.18.tar.gz
140

Instalando o Cyrus – SASL: # tar xzvf cyrus-sasl-2.1.18.tar.gz # cd cyrus-2.1.18 # ./configure --with-bdb-libdir=/usr/local/BerkeleyDB.4.1/lib --withbdb-incdir=/usr/local/BerkeleyDB.4.1/include --enable-krb4=no #make #make install
OBS.: A base será instalada em /usr/local/BerkeleyDB.4.1/

Crie um link simbólico das “libs” do Cyrus – SASL para “/usr/lib/”: # ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

Como instalar o OpenLDAP
Faça download do pacote OpenLDAP. A última versão estável do OpenLDAP é: openldap-stable-20040329.tgz. Descompactando o OpenLDAP: # tar xjvf openldap-stable-20040329.tgz Instalando o OpenLDAP: # cd openldap-2.1.29 # env CPPFLAGS=”-I/usr/local/BerkeleyDB.4.1/include” LDFLAGS=”-L/usr/local/BerkeleyDB.4.1/lib” ./configure # make depend # make # make install
A opção do CPPFLAGS é “i” maiúsculo e a opção do LDFLAGS é “L” maiúsculo

O OpenLDAP será instalado no diretório “/usr/local/”.
141

Configuração do OpenLdap
Editando o arquivo de configuração do OpenLDAP: # vi /usc/local/etc/openldap/slapd.conf
## O include inclui os esquemas com que você quer trabalhar, sendo os principais: include include include include /usr/local/etc/openldap/schema/core.schema /usr/local/etc/openldap/schema/cosine.schema /usr/local/etc/openldap/schema/inetorgperson.schema /usr/local/etc/openldap/schema/nis.schema

## PID's e Arg's file usados no daemon do Servidor LDAP. pidfile argsfile /usr/local/var/slapd.pid /usr/local/var/slapd.args

## Alguns parâmetros do LDAP. allow bind_v2 concurrency idletimeout loglevel sizelimit timelimit threads 0 10000 240 120 100 "c=BR" 240 defaultsearchbase

## Tipo de banco utilizado. No nosso caso estaremos utilizando o BerkeleyDB. #Também iremos configurar duas hierarquias de nossa base: database suffix rootdn rootpw bdb "c=BR" "cn=Manager,c=BR" {MD5}4QrcOUm6Wau+VuBX8g+IPg==

# c = Country. # cn = Common Name.
142

# dc = Domain Component. # rootdn = Usuário administrador do LDAP. # rootpw = Senha do administrador. Pode ser criptografado. ## Diretório onde será guardado a base LDAP. directory /usr/local/var/openldap-data

## Index usados pelo LDAP. index mail,cn,sn index uid cachesize 10000 checkpoint 100 30 dbnosync index objectClass pres,eq,sub pres,eq eq

Carregando o serviço do OpenLDAP
Para iniciar o daemon do LDAP basta apenas executá-lo: # /usr/local/libexec/slapd

Configurando as entradas no OpenLDAP
Após ter iniciado nosso servidor, vamos começar a configurar as entradas no LDAP. O Ldap utiliza um formato de arquivo conhecido como ldif, que nada mais é que um arquivo de texto puro, porém você deve seguir os formatos de uma entrada, conforme exemplo abaixo: Iremos criar a base do OpenLDAP: # vi base.ldif
# Brasil dn: c=BR objectClass: country c: BR

143

Agora iremos criar uma Organização da base: # vi organizacao.ldif
# Freesoftware dn: o=Freesoftware, c=BR objectClass: organization o: GUSL

Agora iremos criar uma Unidade Organizacional da Organização: # vi unidadeorganizacional.ldif
# Departamento dn: ou=Treinamento, o=Freesoftware, c=BR ou: Treinamento description: Departamento de Treinamento objectClass: organizationalUnit

Agora iremos criar um usuário:

144

# vi correio.ldif
dn: uid=correio,ou=Treinamento,o=freesoftware,c=BR mailAlternateAddress: correio@freesoftware.org.br objectClass: inetOrgPerson objectClass: qmailuser uid: correio cn: correio sn: Freesoftware mail: correio@freesoftware.com.br mailMessageStore: /var/vmail/correio mailQuotaSize: 200000000 mailQuotaCount: 10000 mailSizeMax: 100000000 mailHost: instrutor.freesoftware.com.br userPassword: {MD5}4QrcOUm6Wau+VuBX8g+IPg==

Agora iremos importar a base (base.ldif), a organização (organizacao.ldif) e a unidade organizacional (unidadeorganizacional.ldif) na base LDAP. O usuário correio (correio.ldif) será importado na base LDAP após a configuração o Qmail com suporte a OpenLDAP. Importando as entradas na base LDAP:
# ldapadd -x -W -v -D'cn=Manager,c=BR' -f base.ldif # ldapadd -x -W -v -D'cn=Manager,c=BR' -f organizacao.ldif # ldapadd -x -W -v -D'cn=Manager,c=BR' -f unidadeorganizacional.ldif

O que é cada opção:
-x -W -v -D -f Autenticação Simples Pedir senha do usuário que vai fazer a conexão Verbose Usuário que irá conectar na base Arquivo ldif que será adicionado na base LDAP

145

Modificando as entradas na base LDAP
# ldapmodify -x -W -v -D'cn=Manager,c=BR' -f arquivo.ldif

Removendo as entradas na base LDAP
# ldapdelete -x -W -v -D'cn=Manager,c=BR' -f arquivo.ldif

Consultando as entradas na base LDAP
# ldapsearch -x

Como fazer a indexão da base LDAP
# slapindex

Útil quando você tem uma base pronta e quer exportá-la para outro servidor, basta você copiar o diretório de onde esteja a base e no novo servidor executar este comando para que a base seja reindexada.

Criptografando senhas do OpenLDAP
# slapdpasswd -h '{criptografia}'
Em seguida o slapdpasswd irá pedir a senha

Onde:
-h Criptografia

As suportadas são: {MD5}, {SMD5}, {SHA}, {SSHA} e {CRYPT} Como faço para informar a senha em linha de comando:

146

-s <senha>

Senha

A opção “-s <senha>” é utilizado para informar a senha na linha de comando. Sem este parâmetro, será pedido que você entre com a senha e a confirme. A saída deste comando exibe a criptografia escolhida e a senha digitada criptografada.

147

Instando o Qmail com suporte a LDAP
Pré-requisitos
Antes de efetuar a instalação o Qmail+LDAP, devemos ter instalado e configurado em nosso servidor os seguintes aplicativos:
ucspi-tcp daemon-tools OpenLdap Controle de conexões Controle dos serviços do Qmail Servidor LDAP com seus respectivos usuários

Download do Qmail
http://cr.yp.to/software/qmail-1.0.3.tar.gz

Download do Patch do LDAP para o Qmail
http://www.qmail-ldap.org/qmail/qmail-ldap-1.03-20040301a.patch.gz Iremos utilizar o patch “qmail-ldap-1.03-20040301a.patch.gz” que é o último estável.

Instalação do Qmail
Nesta etapa iremos somente descompactar o Qmail e após ter aplicado o patch iremos editar o Makefile para efetuar algumas alterações e após as alterações iremos instalar o Qmail.

Descompactando o Qmail
# tar xzvf qmail-1.0.3.tar.gz

Aplicando o patch do LDAP no Qmail
Colocar o patch do ldap um nível acima do diretório do Qmail: # gunzip qmail-ldap-1.03-20040301a.patch.gz # cd qmail-1.0.3 # patch -p1 < ../qmail-ldap-1.03-20040301a.patch
148

Editando o Makefile do Qmail
Iremos agora editar o Makefile do Qmail anter de efetuar sua instalação. Editando o Makefile do Qmail: # vi Makefile
# Descomentar a opção “LDAPFLAGS” e setar alguns parâmetros: LDAPFLAGS=-DALTQUEUE -DBIGTODO -DEXTERNAL_TODO -DDASH_EXT -DIGNOREVERISIGN # Bibliotecas do LDAP LDAPLIBS=-L/usr/local/lib -lldap -llber # Includes do LDAP LDAPINCLUDES=-I/usr/local/include # Utilizado para mostrar o status de download de aplicativos do Netscape MNW=-DMAKE_NETSCAPE_WORK # Habilita a criação automática da caixa postal do usuário no qmail. Quando criamos o entrada do usuário no LDAP, e enviamos email para o mesmo, a caixa postal do usuário será criada automaticamente setando os parâmetros abaixo MDIRMAKE=-DAUTOMAILDIRMAKE HDIRMAKE=-DAUTOHOMEDIRMAKE # Necessário quanto utilizamos auth_pop e auth_imap SHADOWLIBS=-lcrypt

Após ter configurado o Makefile do Qmail, iremos instalar o mesmo: # make setup check # ./config-fast <host.dominio>
No nosso caso iremos configurar o Qmail com o domínio: instrutor.freesoftware.com.br

Configurando o LDAP com suporte ao Qmail
Após ter compilado o Qmail, devemos configurar o LDAP para suportar o Qmail. # cd qmail-1.0.3 # cp qmail.schema /usr/local/etc/openldap/schema/ Após ter copiado o schema do Qmail para o LDAP, devemos editar o arquivo
149

de configuração do OpenLDAP e modificá-lo para suportar o Qmail: # vi /usc/local/etc/openldap/slapd.conf
## O include inclui os esquemas com que você quer trabalhar, sendo os principais: include include include include include /usr/local/etc/openldap/schema/core.schema /usr/local/etc/openldap/schema/cosine.schema /usr/local/etc/openldap/schema/inetorgperson.schema /usr/local/etc/openldap/schema/nis.schema /usr/local/etc/openldap/schema/qmail.schema

## PID's e Arg's file usados no daemon do Servidor LDAP. pidfile argsfile /usr/local/var/slapd.pid /usr/local/var/slapd.args

## Alguns parâmetros do LDAP. allow bind_v2 concurrency idletimeout loglevel sizelimit timelimit threads 0 10000 240 120 100 "c=BR" 240 defaultsearchbase

## Tipo de banco utilizado. No nosso caso estaremos utilizando o BerkeleyDB. #Também iremos configurar duas hierarquias de nossa base: database suffix rootdn rootpw bdb "c=BR" "cn=Manager,c=BR" {MD5}4QrcOUm6Wau+VuBX8g+IPg==

# c = Country. # cn = Common Name. # dc = Domain Component. # rootdn = Usuário administrador do LDAP. # rootpw = Senha do administrador. Pode ser criptografado.
150

## Diretório onde será guardado a base LDAP. directory /usr/local/var/openldap-data

## Index usados pelo LDAP. index mail,cn,sn index uid cachesize 10000 checkpoint 100 30 dbnosync
Foi adicionado no arquivo de configuração somente o include do qmail

pres,eq,sub pres,eq eq

index objectClass

Após ter configurado o LDAP com suporte ao Qmail, devemos parar o LDAP e iniciá-lo novamente: # killall -9 slapd # /usr/local/libexec/slapd Pronto, o LDAP está com suporte ao Qmail.

Criando usuário para interagir com o LDAP
Iremos agora criar um usuário, onde o mesmo será o responsável em interagir com o LDAP, ou seja, toda consulta, envio/recepção de email, será feita com o LDAP através do usuário “vmail”. # # # # # # groupadd vmail useradd -g vmail -d /var/vmail vmail cd /var mkdir vmail chown vmail: vmail chmod 700 vmail

Criando os alias do Qmail
Iremos agora criar os alias do Qmail, utilizado para receber mensagens do root, postmaster e mailer-daemon. Estas mensagens podem ser de erro, de serviços do sistemas, etc...

151

Teremos que designar um usuário para receber estas mensagens, no nosso caso iremos utilizar o usuário “correio”. O usuário “correio” deve ser criado na base LDAP. # # # # cd /var/qmail/alias echo “correio@freesoftware.org.br” > .qmail-root echo “correio@freesoftware.org.br” > .qmail-postmaster echo “correio@freesoftware.org.br” > .qmail-mailer-daemon

Criando os arquivos de controle do Qmail
Iremos agora criar os arquivos de controle do Qmail, onde os mesmo serão os responsáveis em interagir com o LDAP. # cd /var/qmail/control/

Configurando o usuário e grupo que irá interagir com o LDAP
# id -u vmail > ldapuid # id -g vmail > ldapgid

Configurando o usuário “administrador” que irá controlar a Base LDAP
# echo “cn=Manager,c=BR” > ldaplogin

Configurando a senha do “Manager” no Qmail
# echo “123456” > ldappassword

Configurando a base do LDAP no Qmail
# echo “c=BR” > ldapbasedn

Configurando o endereço do servidor LDAP

152

# echo “127.0.0.1” > ldapserver

Configurando o objectclass para usuário poder interagir com o LDAP
# echo “qmailuser” > ldapobjectclass

Configurando arquivos de controle para o Qmail consultar o LDAP
# # # # echo echo echo echo “./Maildir/ > aliasempty “both” > ldapdefaultdotmode “0” > ldaplocaldelivery “1” > ldaprebind

Configurando mensagem de quota
# echo “Sua caixa postal esta com 70% de utilização” > quotawarning

Configurando o arquivo para criação da conta do usuário no Qmail
# echo “/var/qmail/bin/dirmaker.sh” > dirmaker

Criando o script para criação automática da caixa postal do usuário
# vi /var/qmail/bin/dirmaker.sh
#!/bin/bash mkdir -m 700 -p $1 #EOF

# chmod 755 /var/qmail/bin/dirmaker.sh

153

Configurando tabela de relay do SMTP
# vi qmail-smtpd.rules
# SMTP server rules. # Default rule is to accept mails but not to relay. Do not even think of setting # RELAYCLIENT on the default rule. # Other useful stuff: # BLOCKRELAYPROBE: reject recipients with and "!", "%" or double-"@" # LOGLEVEL: Level of log verbosity # MAXRCPTCOUNT: maximum number of RCPT TOs you accept # NOBOUNCE: Rejects null sender bounces, use only in extreme cases # NOPBS: Disable pop-befor-smtp feature (pbscheck). # QMAILQUEUE: alternate mail queueing program # RBL: If set turns on rbl checking. # RBLONLYHEADER: only tag messages filtered by rbl checking. # REJECTEXEC: Reject DOS/Windows executables in mail attachements. # RETURNMXCHECK: Rejects senders if they don't have a valid return MX. # SANITYCHECK: Rejects senders without an @, no . or too long/short TLD # 550GREETING: Rejects a connection right away with an 550 error # SMTP550DISCONNECT: Disconnect the SMTP session if a 5xx error happens # TARPITCOUNT: number of RCPT TOs you accept before you start tarpitting. # TARPITDELAY: number of seconds of delay to introduce while tarpitting # RCPTCHECK: Check if the recipient of a message really exists. # SENDERCHECK: Check if the sender of a message really exists. # 192.168.100.:allow,RELAYCLIENT="" 10.1.2.:allow,RELAYCLIENT="" :allow

Na configuração acima as redes “192.168.100” e “10.1.2” podem fazer relay. Após a configuração do arquivo de relay, teremos que digitar make para gerar o cdb. # make OBS.: Qualquer configuração que efetuarmos no diretório “/var/qmail/control” com exeção dos arquivos do LDAP, teremos que digitar “make” para gerar o cdb dos arquivos que foram modificados.

Configurando os scripts do Qmail
Iremos agora configurar os scripts do SEND, SMTPD e POP3D do Qmail, que já estão pre-configurados no diretório “/var/qmail/boot/”.

154

Configurando o SEND
# cd /var/qmail/boot/qmail/ # vi run
#!/bin/sh exec 2>&1 # # qmail-send and friends # QMAIL="/var/qmail" ALIASEMPTY=$(head -1 $QMAIL/control/aliasempty 2> /dev/null) ALIASEMPTY=${ALIASEMPTY:="./Maildir/"} PATH="$QMAIL/bin:$PATH" # limit to prevent memory hogs ulimit -c 204800 exec envdir ./env qmail-start "$ALIASEMPTY" splogger qmail

# vi log/run
#!/bin/sh exec setuidgid qmaill multilog t /var/qmail/log/qmail

Configurando o SMTPD

155

# cd /var/qmail/boot/qmail-smtpd/ # vi run
#!/bin/sh exec 2>&1 # # SMTP service # QMAIL="/var/qmail" ME=$(head -1 $QMAIL/control/me) CONCURRENCY=${CONCURRENCY:=50} PATH="$QMAIL/bin:$PATH" # source the environemt in ./env eval `env - envdir ./env awk '\ BEGIN { for (i in ENVIRON) printf "%s=\"%s\"\n", i, ENVIRON[i] }'` # enforce some sane defaults USER=${USER:="qmaild"} exec envdir ./env \ envuidgid $USER \ tcpserver -v -URl $ME -x$QMAIL/control/qmail-smtpd.cdb \ ${CONCURRENCY+"-c$CONCURRENCY"} ${BACKLOG+"-b$BACKLOG"} 0 smtp \ $QMAIL/bin/qmail-smtpd

# vi log/run
#!/bin/sh exec setuidgid qmaill multilog t /var/qmail/log/qmail-smtpd

# # # # # # #

cd env echo “/var/qmail/bin/qmail-queue” > QMAILQUEUE touch BLOCKRELAYPROBE touch RCPTCHECK touch RETURNMXCHECK touch SANITYCHECK touch SENDERCHECK

Configurando o POP3D

156

# cd /var/qmail/boot/qmail-pop3d/ # vi run
#!/bin/sh exec 2>&1 # # POP3 service # QMAIL=/var/qmail ME=$(head -1 $QMAIL/control/me) ALIASEMPTY=$(head -1 $QMAIL/control/aliasempty > /dev/null 2>&1) if test X"$ALIASEMPTY" = "X"; then ALIASEMPTY=./Maildir/ fi PATH=$PATH:"$QMAIL/bin" exec envdir ./env \ tcpserver -v -HRl $ME 0 pop3 \ $QMAIL/bin/qmail-popup $ME \ $QMAIL/bin/auth_pop \ $QMAIL/bin/qmail-pop3d "$ALIASEMPTY"

# vi log/run
#!/bin/sh exec setuidgid qmaill multilog t /var/qmail/log/qmail-pop3d

Criando os links dos serviços do Qmail
Iremos agora criar os links dos serviços do Qmail para que o daemontools controle os mesmos. # ln -s /var/qmail/boot/qmail /service/qmail # ln -s /var/qmail/boot/qmail-smtpd /service/qmail-smtpd # ln -s /var/qmail/boot/qmail-pop3d /service/qmail-pop3d

Pronto, nosso servidor de correio com suporte a LDAP está configurado.

157

Referências
Alessandro Kenji Urakawa Renato Tambelini Marcos Amorim http://cr.yp.to http://www.lifewithqmail.org http://www.inter7.com http://www.lifewithqmail.org/ldap/ http://www.openldap.org http://focalinux.cipsga.org.br
DNS e BIND O'REILLY

158

GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
159

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as FrontCover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machinegenerated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are
160

considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

161

4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

• • • •

• • •

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
162

• • •

L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of BackCover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
163

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
164

9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

165

Sign up to vote on this title
UsefulNot useful