Sunteți pe pagina 1din 269

1

Guia Linux Professional Clayton Lobato

Guia Linux Professional Clayton Lobato

Depois de escrever, reescrever, escrever mais uma vez e ficar nesse ciclo vicioso por mais de um ano, creio ter conseguido chegar a um formato de material que pode ajudar no entendimento do sistema GNU/Linux. Umas de minhas maiores preocupaes foi em buscar os conceitos do como funciona e focar um pouco menos o como fazer, pois esses esto disponveis na internet. Outro fato que me chamou a ateno era ter um grande nmero de meus alunos sempre me questionando como os servios realmente funcionavam. Por exemplo, um dia um aluno me fez parar uma aula para explicar como e de onde o comando useradd saberia qual seria o primeiro ID que seria usado para criao dos usurios e grupos, onde seriam criados o diretrio home do usurio e se seria ou no criado o mesmo. Uma pergunta ficou nesse tempo todo... o que realmente eu deveria focar em minhas aulas ?. A resposta foi simples, imediata e intrigante... buscar o entendimento de como funciona. Mas como faria isso para pessoas que nunca tiveram contato com o sistema de uma forma clara e simples e de fcil entendimento possvel ? Encontrei essas respostas em sala de aula testando alguns mtodos alternativos com os alunos. O primeiro passo foi organizar algumas pequenas apostilas complementares para usar com eles. Aps alguns anos, um grande volume de materiais e pedidos de alunos, resolvi organizar todo esse material, detalhando ao mximo as informaes focando os objetivos propostos.. Entendimento claro e direto do funcionamento do sistema e como usar os comandos de forma simples. A proposta do material trazer ao estudante de GNU/Linux, os principais conceitos e desafios de uso do sistema, em um mundo mais Corporativo. Para isso, alinhamos todo o nosso contedo com o processo de administrao do sistema. Mas nada se faz sozinho. Apresentei o material a Diretoria da X25 Treinamento e Consultoria que apoiou a idia e adotou o livro em seus treinamentos GNU/Linux alm de ajudar a divulg-lo entre a comunidade adepta ao Software Livre, na qual VOC tambm deve estar inserido... ao contrrio no estaria lendo a apresentao do livro. Um grande abrao, Paz, Liberdade e Sonhos. Clayton Lobato

Guia Linux Professional Clayton Lobato

Guia Linux Professional Clayton Lobato

A Deus e a todos que colaboraram de forma direta e indireta para a realizao deste trabalho. Diana Nunes e Marcelo Burato pelo apoio e pacincia por todas as vezes que adiei a entrega deste material. A Adriana Heinen pelo apoio incondicional e pela elaborao da capa deste material, alm de todo o apoio em todas as fases do processo de criao do mesmo. Aos meus alunos e ex-alunos que estiveram comigo durante todos os anos em que o projeto nasceu at o estado atual de editorao. Dona Dica, Seu Eduardo, Seu Mrio, Dona Moroza, Telma e Jorge, Karine, Beatriz, Tain, Simone, Fernanda, Luiz Gaudncio, Luis Eduardo, Alice Caroline, Akemi e Fernanda. Muito obrigado por serem minha famlia.

Guia Linux Professional Clayton Lobato

Guia Linux Professional Clayton Lobato

Sumrio
Captulo 1 Um pouco de Histria.......................................................................................13 Um pouco de histria................................................................................ .......................15 Histria dos sistemas operacionais..............................................................................15 Estrutura................................................................................................ .....................15 . Classificaes.......................................................................................................... ....15 . A histria do Linux.............................................................................. .........................16 Qual a diferena entre Linux e Unix?...........................................................................16 O que GPL?.............................................................................................................. .17 . O que so as tais distribuies?.................................................................................. .17 Vantagens do Cdigo-Aberto.......................................................................................18 Captulo 2 - Dispositivos de armazenamento e estrutura de diretrios...............................21 Estrutura de diretrios.....................................................................................................23 Estudo dos dispositivos de armazenamento....................................................................24 Tipos de File System e Particionamento de Discos. ......................................................26 Particionamento de discos Comando fdisk....................................................................27 Formatao do disco Comando mkfs.............................................................................30 Instalao do GNU/LINUX.............................................................................. ...................31 Captulo 3 - Processo de inicializao, Boot Loader e Run Level..........................................41 Bootstrapping Inicializao do Computador..................................................................43 Gerenciadores de boot (bootloaders)...............................................................................44 GRUB ( GRand Unified Bootloader)..............................................................................44 LILO ( LInux LOader )...................................................................................................46 Nveis de execuo do Sistema.................................................................................. ......46 Captulo 4 - Administrao do GNU/Linux............................................................................49 Usurios, Grupos, Senhas e NPA......................................................................................51 1. useradd ..................................................................................................... .............51 . 2. userdel ................................................................................................ ...................52 . 4. chsh........................................................................................... .............................53 . 5. chage ................................................................................................ .....................53 . 6. usermod ..................................................................................................... ............54 . 7. chfn .......................................................................................................... ..............54 . 8. groupadd.............................................................................................................. ...55 . 9. groupdel.......................................................................................................... ........55 . 10. gpasswd ................................................................................................... ............55 . 11. groupmod.............................................................................................................. 56 . 12. chpasswd......................................................................................... .....................56 . 13. id.............................................................................................................. .............56 . 14. chgrp .............................................................................................................. ......57 . 15. finger.....................................................................................................................57 . 16. chmod ................................................................................................... ...............61 . 17. chown..................................................................................................................... 2 6 Captulo 5 Comandos GNU/Linux.......................................................................................65 1. cat.............................................................................................................. .............67 . 2. tac .............................................................................................................. ............67 . 3. cut ..........................................................................................................................68 . 4. expand .................................................................................................. .................68 . 5. fmt ............................................................................................. ............................69 . 6. head ........................................................................................................... ............69 . 7. tail .............................................................................................................. ............70 .

Guia Linux Professional Clayton Lobato

8 8. hexdump .................................................................................................... ............70 . 9. join ...................................................................................................... ...................70 . 10. split .................................................................................................. ....................71 . 11. tr .................................................................................................. ........................71 . 12. nl ............................................................................................................. .............72 . 13. paste ..................................................................................................... ...............72 . 14. pr ......................................................................................... ................................73 . 15. sort .......................................................................................................................73 . 16. wc ......................................................................................... ...............................74 . 18. uniq .......................................................................................................... ............74 . 19. sed ................................................................................................. ......................75 . 20. cp ........................................................................................................ .................75 . 21. find ............................................................................................................... ........76 . 22. mv.............................................................................................................. ...........77 . 23. ls.................................................................................................. .........................77 . 24. rm......................................................................................... ................................82 . 25. mkdir ............................................................................................................... ....82 . 26. rmdir............................................................................................ .........................83 . 27. man .............................................................................................................. .......83 . 28 info ............................................................................................................. ...........84 . 29 tar .............................................................................................. ...........................85 . 30 gzip ............................................................................................... ........................85 . 31 bzip2 .............................................................................................. .......................86 . 32 crontab.............................................................................................................. .....86 . 33 ps...................................................................................................... .....................87 . 34 kill .............................................................................................. ...........................88 . 35 killall ......................................................................................................................88 . 36 nice ................................................................................................ .......................89 . 37 renice ................................................................................................... .................89 . 38 mount / umount................................................................................... ...................90 Captulo 6 - Instalao e compilao de programas e compilao do Kernel......................95 Processo de compilao de programas............................................................................97 Pacotes RPM.................................................................................................. ................101 . RPM........................................................................................................... ................102 . Pacotes DEB........................................................................................... .......................104 . DPKG........................................................................................................... ..............104 . Kernel do Linux........................................................................................................... ...106 . Captulo 7 - Sistema X Window........................................................................................... 11 1 Instalao do Servidor X11............................................................................................113 Captulo 8 Conceitos Bsicos de Protocolos TCP/IP..........................................................119 Histrico................................................................................................... .....................121 . Modelo de Referncia ISO/OSI............................................................................... .........121 Modelo TCP/IP...................................................................................................... ..........123 . Endereamento IP e Classes..........................................................................................125 Subredes.............................................................................................. .........................127 . Netmask - Mscara de Subredes...............................................................................127 Protocolos e Aplicaes........................................................................................ .........134 . Protocolo Internet - IP................................................................................................134 Address Resolution Protocol - ARP.............................................................................135 Internet Control Message Protocol - ICMP..................................................................136 Transmission Control Protocol - TCP...........................................................................137 User Datagram Protocol - UDP...................................................................................137 Protocolos da Camada de Aplicao..........................................................................138 Outros Protocolos e Aplicaes..................................................................................139

Guia Linux Professional Clayton Lobato

9 Captulo 9 - Comandos e arquivos bsicos de configurao e administrao de interfaces ethernet.............................................................................................................................141 . Linux e interface ethernet...................................................................................... .......143 . Comandos de redes GNU/Linux.................................................................................. ....146 ifconfig.................................................................................................. ....................146 . arp.............................................................................................................................147 . dig............................................................................................................... ..............148 . ifup............................................................................................................................148 . ifdown.............................................................................................. .........................148 . route.......................................................................................... ...............................148 . dhclient.................................................................................................. ...................149 . hostname................................................................................................... ...............150 . netstat.......................................................................................................................150 . ping............................................................................................................. ..............151 . traceroute2........................................................................................ .......................151 . Comandos de redes GNU/Linux.................................................................................. ....152 Eliminando rotas ................................................................................... ....................152 Negando pacotes ..................................................................................... .................152 Alguns servios de redes...........................................................................................152 Captulo 10 - Servidor DNS ( Domain Name Server ).......................................................155 O Servio de Resoluo de Nomes DNS......................................................................157 Fundamentos do DNS................................................................................................157 Requisitos de sistema................................................................................................157 Instalao do BIND................................................................................................ ....158 . Captulo 11 - O SAMBA Servidor Compartilhamento GNU/Linux Windows......................161 Instalao.......................................................................................................... ............163 . Configurao................................................................................................ .................163 . Captulo 12 - SQUID Proxy Firewall em Layer 7 ?.............................................................171 Instalao do Squid.......................................................................................... .............173 . Captulo 13 - Servidor DHCP....................................................................................... .......179 . 1. DHCP simples.............................................................................................. ..............181 . 2. IP fixo usando DHCP..................................................................................................182 Captulo 14 - Servidor Postfix / Dovecot.............................................................................185 Captulo 15 . Servidor WWW..............................................................................................239 Instalao.......................................................................................................... ............241 . Captulo 16 - Compartilhando arquivos no GNU/Linux.......................................................259 Captulo 17 - Servio OpenSSH..........................................................................................263 Captulo 18 - Referncias Bibliogrficas.............................................................................269

Guia Linux Professional Clayton Lobato

10

Guia Linux Professional Clayton Lobato

11

Para quem se destina esse livro ?


Este livro se destina aos profissionais de tecnologia, estudantes universitrios e todos que tenham vontade de conhecer o mundo GNU/Linux, indo dos mecanismos mais simples s estruturas mais internas e complexas do sistema. Se voc um usurio experiente ou est conhecendo o GNU/Linux, este livro lhe servir.

O que abordado nesse Livro.


Neste livro sero vistos aspectos importantes para a instalao do sistema, uso de comandos e conceitos necessrios para a administrao do sistema, arquivos importantes para o processo de administrao do sistema. Buscaremos o entendimento do processo de integrao ao hardware, integrao com o usurio e comandos internos do sistema.

Guia Linux Professional Clayton Lobato

12

Guia Linux Professional Clayton Lobato

13

Captulo 1 Um pouco de Histria


Como todo incio, conhecermos um pouco da histria e filosofia do mundo GNU/Linux nos far entender alguns conceitos, lendas e mitos deste fascinante e relativamente novo universo. Durante algum tempo, achava-se que o GNU/Linux era uma cpia exata ou um clone do unix. Depois veio a fase do Foi apenas uma melhoria no minix, o cdigo o mesmo mas na verdade existe uma histria bem mais interessante e desafiadora no processo de criao do sistema. Na primeira parte deste Livro, conheceremos alguns aspectos interessantes sobre a histria do sistema, suas licenas e o modelo de implementao conhecido como colaborativa. De antemo posso garantir que em nenhum momento o sistema foi desenvolvido para derrubar ou competir com nenhuma outra plataforma existente, s queriam rodar um sistema baseado em unix em um micro com arquitetura X86. Ento vamos conhecer um pouco de histria GNU/Linux.

Guia Linux Professional Clayton Lobato

14

Guia Linux Professional Clayton Lobato

15

Um pouco de histria
Histria dos sistemas operacionais
No incio da computao os primeiros "sistemas operacionais" eram nicos, pois cada mainframe vendido necessitava de um sistema operacional especfico. Esse problema era resultado de arquiteturas diferentes e da linguagem utilizada no caso, assembly (linguagem de baixo nvel). Aps essa fase, iniciou-se a pesquisa de sistemas operacionais que automatizassem a troca de tarefas (jobs), pois os sistemas eram mono-usurio e tinham cartes perfurados como entrada (eliminando, assim, o trabalho de pessoas que eram contratadas apenas para trocar os cartes perfurados). Um dos primeiros sistemas operacionais de propsito geral foi o CTSS, desenvolvido no MIT. Aps o CTSS, o MIT, os laboratrios Bell da AT&T e a General Eletric desenvolveram o Multics, cujo objetivo era suportar centenas de usurios. Apesar do fracasso comercial, o Multics serviu como base para o estudo e desenvolvimento de sistemas operacionais. Um dos desenvolvedores do Multics, que trabalhava para a Bell, Ken Thompson, comeou a rescrever o Multics num conceito menos ambicioso, criando o Unics (em 1969), que mais tarde passou a chamar-se Unix. Os sistemas operacionais eram geralmente programados em assembly, at mesmo o Unix em seu incio. Ento, Dennis Ritchie (tambm da Bell) criou a linguagem C a partir da linguagem B, que havia sido criada por Thompson. Finalmente, Thompson e Ritchie reescreveram o Unix em C. O Unix criou um ecossistema de verses, onde destacam-se: System V e derivados (HP-UX, AIX); famlia BSD (FreeBSD, NetBSD, OpenBSD, etc.), Linux e at o Mac OS X (que deriva do Mach e FreeBSD). Na dcada de 1970, quando comearam a aparecer os computadores pessoais, houve a necessidade de um sistema operacional de utilizao mais fcil. Em 1980, William (Bill) Gates e seu colega de faculdade, Paul Allen, fundadores da Microsoft, compram o sistema QDOS ("Quick and Dirty Operating System") de Tim Paterson por $50.000, batizam-no de DOS (Disk Operating System) e vendem licenas IBM. O DOS vendeu muitas cpias, como o sistema operacional padro para os computadores pessoais desenvolvidos pela IBM. No comeo da dcada de 1990, um estudante de computao finlands postou um comentrio numa lista de discusso da Usenet dizendo que estava desenvolvendo um kernel de sistema operacional e perguntou se algum gostaria de auxili-lo na tarefa. Este estudante chamava-se Linus Torvalds e o primeiro passo em direo ao to conhecido Linux foi dado naquele momento.

Estrutura
Um sistema operacional (ou seu kernel), possui as seguintes funes: 1. Agendamento de processos; 2. Gerenciamento de memria; 3. Sistema de arquivos; 4. Disponibilizao de entrada e sada de dados.

Classificaes
Em relao ao seu projeto (arquitetura), segundo Tanenbaum:

Sistema monoltico: o kernel consiste em um nico processo executando

Guia Linux Professional Clayton Lobato

16 numa memria protegida (espao do kernel). Ex.: Windows, Linux, FreeBSD.


Sistema em camada: funes do kernel iro executar em camadas distintas, de acordo com seu nvel de privilgio. Ex.: Multics. Modelo cliente-servidor ou micro-kernel: o kernel consiste apenas no essencial (comunicao e gerenciamento de processos), e funes como sistemas de arquivos e gerenciamento de memria so executadas no espao do usurio como servios; as aplicaes (programas) so os clientes. Ex.: GNU Hurd, Mach. Monitor de mquinas virtuais: fornece uma abstrao do hardware para vrios sistemas operacionais. Ex.: VM/370, VMware, Xen.

Quanto capacidade de processamento, pode-se usar a seguinte classificao:

Monotarefa: pode-se executar apenas um processo de cada vez Ex.: DOS.

Multitarefa: alm do prprio SO, vrios processos esto carregados em memria, sendo que um pode estar ocupando o processador e outros ficam enfileirados, aguardando a sua vez. O compartilhamento de tempo no processador distribudo de modo que o usurio tenha a impresso que vrios processos esto sendo executados simultaneamente. Multiprocessamento ou multi programao: o SO pode distribuir as tarefas entre vrios processadores.

A histria do Linux
Inspirado em um sistema desenvolvido por Andrew Tanembaum, Linus trabalhou duro desenvolver o GNU/Linux. Um pouco antes de lanar a primeira verso oficial do kernel, Linus mandou a seguinte mensagem para o grupo de notcias comp.os.minix: Voc suspira por melhores dias do Minix-1.1, quando homens sero homens e escrevero seus prprios drivers de dispositivos? Voc est sem um bom projeto e est morrendo por colocar as mos em um sistema operacional o qual voc possa modificar de acordo com suas necessidades? Voc est achando frustrante quando tudo trabalha em Minix? Chega de atravessar noites para obter programas que trabalhem corretamente? Ento esta mensagem pode ser exatamente para voc. Como eu mencionei h um ms atrs, estou trabalhando em uma verso independente de um sistema operacional similar ao Minix para computadores AT-386. Ele est, finalmente, prximo do estgio em que poder ser utilizado (embora possa no ser o que voc esteja esperando) e eu estou disposto a colocar os fontes para ampla distribuio. Ele est na verso 0.02... contudo eu tive sucesso rodando o bash, gcc, gnu-make, gnu-sed, compresso e etc nele. No dia 5 de Outubro de 1991, Linus Torvalds anunciou a primeira verso oficial do Linux, verso 0.02. Desde ento, muitos programadores tm respondido ao seu chamado e tm ajudado a fazer do Linux o sistema operacional que hoje uma grande maravilha. Um sistema criado inteiramente por programadores espalhados pela Internet, os hackers!

Qual a diferena entre Linux e Unix?


Linus Torvalds, quando criou o Linux, criou ele nos padres POSIX, que o mesmo padro que os UNIX usam. por esse mesmo uso do padro POSIX que o Linux parecido com o UNIX. Alm do mais, existem vrios tipos de UNIX, que tm seu cdigo-fonte

Guia Linux Professional Clayton Lobato

17 fechado e pago. Uma resposta mais completa para esta pergunta foi feita pelo Fernando M. Roxo: Limpo, claro e definitivo: O Linux no UNIX. O Linux um UNIX. O UNIX foi um sistema criado e registrado pela Unix Lab. Todos os sistemas baseados naqueles cdigos so chamados de uma forma geral de UNIX. Linux foi escrito desde o incio pelo Linus Torvalds e no contm nenhuma linha de cdigo do UNIX. Mas o Linux foi escrito conforme o padro POSIX, que deve ser o padro da API (Application Programming Interface) Unix, que em ltima anlise pode ser resumido (forando um pouco a barra) como sendo as chamadas do sistema. Por isto se diz que o Linux um Unix (no UNIX). Tem uma diferena sutil a. Por causa da API POSIX, do conjunto de utilitrios (FSF/GNU em sua maioria) e do uso do X-Window (XFree) o Linux to parecido com o UNIX que existem empresas que usam o Linux para desenvolver para os UNIX que no sejam os delas mesmas (por exemplo a IBM).

O que GPL?
Se voc j ouviu falar bem de Linux, com certeza j deve ter ouvido falar nesta sigla. GPL significa General Public License (ou traduzindo grosseiramente: Licena Pblica Geral) e foi criada pela Free Software Foundation. A grande maioria dos programas que vm nas distribuies Linux so de cdigo-fonte aberto e usam esta licena. Uma licena serve para proteger o seu cdigo quando ele for lanado para o pblico. A licena GPL permite que o autor do cdigo distribua livremente o seu cdigo... Outras pessoas podem simplesmente pegar este cdigo, modificar suas prprias necessidades e usar vontade. O nico requerimento que a pessoa que modificou deve lanar o cdigo modificado em GPL e manter tambm o seu cdigo aberto (e no apenas distribuir os binrios). Isso tudo cria uma comunidade de desenvolvedores onde toda a ajuda mtua e voc pode pegar vrias idias de outros desenvolvedores simplesmente olhando o cdigo deles. Alm disso, voc pode aproveitar e poder ajudar o desenvolvedor, criando correes e mandando-as para o autor. com essa licena que o kernel do Linux liberado. assim que o kernel tem seu desenvolvimento feito por vrias e vrias pessoas em todo o mundo. Estas pessoas pegam livremente o cdigo-fonte do kernel, analisam-no e procuram por erros. Se encontrarem erros, escrevem correes e mandam para o Linus Torvalds. E no s correes, mas desenvolvedores tambm fazem novas implementaes ao kernel e mandam para o Linus Torvalds organizar tudo. E assim que temos hoje em dia este grande e bem feito e organizado kernel do Linux! assim que a filosofia GPL funciona e funciona muito bem para criar uma comunidade de desenvolvedores justa! Eu pessoalmente apio e muito a licena GPL, que para mim simplesmente perfeita. Vivas Free Software Foundation por criar esta licena! E vivas para os desenvolvedores que a utilizam para seus cdigos! :)

O que so as tais distribuies?


Distribuies: uma palavra que voc vai ouvir muito no mundo Linux. A liberdade de escolha e a diversidade so vantagens que o software livre nos traz e as distribuies so um resultado disso. O papel de uma distribuio Linux juntar todos os programas de cdigo-fonte, empacot-los, otimiz-los e deixar pronto para que o usurio final possa instalar e usar. So facilitadores. Qualquer um pode simplesmente sair buscando todos os programas na Internet, junt-los, compil-los e formar seu sistema Linux. Mas ser que

Guia Linux Professional Clayton Lobato

18 todos querem fazer isso toda hora? a que entra o trabalho de facilitador: as distribuies. Existem centenas (sem exagero) de distribuies Linux disponveis para todos os tipos de usurios. Cabe a cada usurio escolher qual distribuio usar (cada um com seus mritos e gostos). As maiores distribuies (com excees, claro), so feitas por empresas que investem muito no Linux. Estas empresas coletam e produzem programas livres (e s vezes at mesmo proprietrios), empacotam, deixam tudo facilitado com um instalador e disponibilizam de graa na Internet e venda com CDs. Estas empresas geralmente no ganham dinheiro vendendo caixinhas, licenas, ou coisas do tipo. Isso uma prtica do software proprietrio. Estas empresas ganham atravs de servio: quando voc compra um pacote de uma distribuio, voc recebe algo como 6 CDs, um livro, servio de suporte e outras coisas confortveis para o usurio. Voc est pagando pelo servio! Se por acaso voc no quiser pagar por essas coisas, voc mesmo pode baixar a distribuio, comprar mdias de CDs 80 centavos cada e gravar para usar vontade. Voc s no vai ganhar a caixinha bonitinha, os CDs, o livro e o suporte. Empresas geralmente precisam de garantias, suporte, gente para fazer a personalizao, entre outros. E a que ela pode optar por comprar uma distribuio oficial com suporte e servios vinculados. Ou quem sabe, montar uma equipe competente para trabalhar internamente e se comprometer a dar um servio de qualidade. Mais frente, vou analisar algumas distribuies e dar uma viso geral sobre elas, a fim de ajudar na escolha inicial de cada usurio. Mas lembre-se: gosto gosto e cada um tem suas necessidades. No fim, tudo Linux.

Vantagens do Cdigo-Aberto
Depois de conhecer um pouco sobre o Linux, seu desenvolvimento aberto e as licenas livres, que tal agora conhecermos algumas vantagens do cdigo-aberto? :)

Resposta rpida para falhas


Nada perfeito, certo? claro que isso uma verdade e por isso no podemos esperar que o Linux nunca tenha defeitos (sim, no Linux aparecem falhas tambm). Mas o que diferencia o Linux de sistemas proprietrios sua capacidade de correo rpida para essas falhas. O que eu quero dizer com isso? Bem, primeiro temos que ver que com o cdigo aberto, a possibilidade de se achar uma falha aumenta bastante, pois vrias cabeas podem auditar o cdigo e procurar por falhas de implementao nele a qualquer momento e parte do mundo. Em um curto perodo de tempo, o sistema fica bem mais seguro e estvel. E justamente isso que acontece na poca em que o kernel est em desenvolvimento: lana-se verses instveis do cdigo e vrias pessoas vo auditando e testando, at se chegar a um kernel estvel, pronto para ser lanado para o pblico em geral usar em produo. Segundo, no mundo do software livre (e isso inclui principalmente o Linux) as falhas que so encontradas so rapidamente consertadas e lanadas ao pblico. Para se ter uma idia, geralmente as falhas que se encontram so corrigidas e empacotadas (prontas pra atualizao) pelas distribuies num perodo de 24 horas (ou muito menos). Isso se chama eficincia!

Guia Linux Professional Clayton Lobato

19 Tudo isto resultado do modelo de cdigo-fonte aberto, porque as pessoas sentem a necessidade de retribuir com correes aquele conhecimento que lhes foi passado.

Mais pessoas disponveis a observar e cuidar do cdigo


Est bem... Entendemos que com o modelo de cdigo-fonte aberto, qualquer pessoa pode pegar o cdigo em algum lugar, olhar e mexer. Agora imagine que voc seja um desenvolvedor e quer colocar as mos na massa, programando algum utilitrio ou coisa parecida. Voc tem algumas opes: 1. Comear seu programa a partir do zero, fechar o cdigo e continuar desenvolvendo. 2. Se juntar a uma empresa que faz programas de cdigo-fechado e trabalhar para ela desenvolvendo. 3. Desenvolver o cdigo-livre e disponibilizar para a comunidade. 4. Juntar-se a um grupo que desenvolve programas de cdigo-fonte aberto, desenvolvendo melhorias e correes. No item 1, voc vai ter muito trabalho e vai ter que dedicar muito tempo para uma coisa que no pode valer tanto a pena (fazer coisas do zero hoje em dia so bem mais difceis). Ingressar um produto novo no mercado prostitudo que a informtica muito difcil. Vai ser preciso tambm timos conceitos de marketing! J no item 2, voc tem uma possibilidade de sucesso maior que a do item 1, mas sempre ter restries. Voc no ter muita liberdade sobre o que vai fazer, pois estar sempre submetido poltica restrita da empresa proprietria. Alm disso, a tarefa de ingressar em uma boa empresa desenvolvedora de software difcil, pois voc provavelmente vai precisar de um bom currculo, experincias e por a vai. J os itens 3 e 4, as coisas ficam mais fceis. No mundo do software livre, tudo funciona como uma seleo natural. A pessoa que se esfora em seus estudos e prticas e desenvolve algo bom para a comunidade, obtm seu status nela e rapidamente ganha confiana e chamado para vrios projetos grandes. Por exemplo: imagine que voc um Z Ningum, que mal entrou na universidade, no tem muita experincia em empresas e passa o dia todo fuando na Internet. Ser que voc tem muitas chances de ingressar numa empresa? Agora imagine que voc resolveu estudar uma linguagem de programao e comeou a praticar verificando e fazendo mudanas em cdigos de programas livres? Voc estar recebendo conhecimento do mundo todo gratuitamente, no conforto de sua casa e seu computador. Com o tempo, se suas contribuies forem boas e importantes, a comunidade em si se encarregar de deix-lo mais importante e esperto no mundo da computao. Em pouco tempo, seu nome poder estar entre muitos outros nomes importantes na comunidade e isso chama e muito a ateno de grandes empresas (tanto proprietrias quanto de software livres). Alm disso, voc no fica restrito a apenas uma linha. Voc pode desenvolver o que quiser, o quanto puder e quando quiser. Dependendo do seu esforo, voc receber recompensas pessoais. Ento o fator mais importante esse: muito mais oportunidades. E isso no se restringe apenas quem est comeando no. J vi muita gente que passou anos em softwares proprietrios e que depois conheceu o modelo de cdigo-aberto, abraou e hoje se sente muito melhor com isso do que antes. Experincia tudo, viva para voc ver como ! Contagiante! :)

Guia Linux Professional Clayton Lobato

20 So essas oportunidades que fazem mais e mais desenvolvedores aparecerem no mundo do software livre e do Linux. Hoje em dia o kernel do Linux mantido por centenas de pessoas, de diversas partes do mundo (e de empresas tambm) livremente. E d muito certo! Depois de ler este texto, agora mesmo voc pode baixar os fontes do kernel e contribuir com alguma coisa. Imagine o mundo todo fazendo isso!

Todos podem contribuir sem se preocupar tanto


Como dito anteriormente, qualquer pessoa pode contribuir. Para isso acontecer num modelo de desenvolvimento proprietrio, o desenvolvedor teria que falar com a empresa, pedir o cdigo-fonte, pedir autorizao, entre outras burocracias (com o risco de no aceitarem) para fazer isso legalmente. E ainda por cima poder (provavelmente) acontecer de voc ter que pagar para fazer essas coisas. No desenvolvimento aberto, voc pode pegar e modificar a qualquer momento, de qualquer lugar e como quiser, sem ter que dar satisfao a ningum. Adeus preocupaes... A nica preocupao que voc teria seria na hora de distribuir o programa junto com as coisas que voc modificou. Para isso voc teria que respeitar a licena.

Uso Livre
Da mesma forma que qualquer pessoa pode pegar o cdigo-fonte, modificar livremente sua maneira, qualquer pessoa pode tambm pegar o programa e usar sem precisar dar satisfao ningum. Se por exemplo eu quiser usar um WebMail (e uso ;P), eu pego na Internet e uso livremente. No software livre voc nunca vai precisar pagar licenas de uso para os programas. S o que voc precisar pagar pelo servio. Imagine assim: Voc tem todas as peas de um carro de graa e s preciso mont-lo. Se voc no quer ter o trabalho de montar o carro, pague para alguma outra pessoa fazer pra voc. Mas se voc souber como fazer e quiser fazer, faa vontade. O nico preo que voc ir pagar tempo e esforo.

Incentivo ao Mercado Local (Pequenas e mdias empresas)


Assistindo a uma palestra de John "Maddog" Hall, aprendi que o software livre incentiva o mercado local. Quando falamos em software proprietrio, apenas uma empresa detm o direito do software. Outras empresas podem surgir como "parceiras" ou "filiais", mas sempre pagando alguma coisa pra matriz e criando dependncia. No software livre a coisa diferente, qualquer pessoa pode lanar uma empresa de servios (por exemplo, em software) e comear a trabalhar com produtos livres com total liberdade. Essa mesma empresa vai estar criando uma cultura para aquele programa e isso influencia positivamente quem criou o programa. Sem ter que dar satisfao e pagar para uma matriz, a empresa local pode ganhar mais dinheiro, investir em si mesma e quem sabe comear a desenvolver junto com a empresa criadora. Tudo isso em uma relao saudvel. E de acordo com a demanda, o cliente vai escolher sempre o mais ao seu nvel. Se por exemplo o Sr. Joo, que possui um escritrio de contabilidade, com 3 pessoas, quiser montar uma rede baseada em software livre, ele pode escolher uma empresa local para fazer isso. Se uma empresa gigante (exemplo: Casas Bahia) quiser fazer o mesmo, ela contrata uma corporao (tipo a IBM). Como eu disse anteriormente: seleo natural.

Guia Linux Professional Clayton Lobato

21

Captulo 2 - Dispositivos de armazenamento e estrutura de diretrios.


Antes de pensarmos em fazer qualquer tipo de interao junto ao sistema, precisamos nos localizar. Duas informaes so imprescindveis: 1. Onde ficam armazenados os arquivos do sistema e para que serve cada diretrio do sistema; 2. Como podemos usar os dispositivos de armazenamento. muito comum que j se comece um material sobre sistema, instalando o mesmo. Porm, vamos primeiro abordar a organizao dos dados e dispositivos de armazenamentos, haja vista que para instalarmos precisamos saber onde e como colocar as informaes no sistema. Analisando de outra forma, como poderemos projetar nosso sistema para que os servios nele instalado sejam estveis e confiveis se no soubermos onde e como organizar os arquivos ? Imagine instalar um servidor DHCP, um servidor SAMBA e uma estao de trabalho. Voc seria capaz de descrever como seria organizado o sistema para que todas as instalaes fossem bem sucedidas ? No podemos pensar em ter a mesma organizao para os trs exemplos citados anteriormente, haja visto que cada perfil ter caractersticas prprias. Em grande parte dos materiais, encontraremos descrito que precisamos apenas de duas parties para instalarmos o sistema. Uma seria descrita como swap e outra como /. No deixa de ser verdade. Para instalaes menos criteriosas termos apenas duas parties bastam. Mas se pensarmos em sistemas de produo, realmente teremos problemas com essa estrutura. Para cada instalao, o que determinar toda a estrutura do sistema ser o conjunto de aplicaes que sero instalados. No podemos pensar, por exemplo, em estruturas iguais para uma instalao voltada de uma estao de trabalho e uma mquina que iremos usar como servidor SAMBA. Cada perfil ir requerer uma organizao prpria dos dispositivos de armazenamento. Nesse captulo, abordaremos aspectos relacionados a estrutura de diretrios, organizao dos dispositivos de armazenamento, suas limitaes e como projetar a instalao do GNU/Linux. Ento.. caf e uma boa poltrona e bom estudo...

Guia Linux Professional Clayton Lobato

22

Guia Linux Professional Clayton Lobato

23

Estrutura de diretrios.
Algo que intriga a muitos iniciantes no GNU/Linux a organizao dos arquivos. O fato de todo e qualquer arquivo estar submetido a um nico ponto, o diretrio / (root), torna o entendimento da organizao de arquivos um tanto confusa para muitos. Em primeiro lugar, no devemos confundir o diretrio / (root) com o diretrio do usurio root, o qual est localizado em /root (observe que ele um sub-diretrio do diretrio principal /), comum esse tipo de confuso. Outro detalhe que devemos observar aqui, que cada diretrio do sistema GNU/Linux tem um papel especfico. Conhecer a funo de cada diretrio fundamental para as tarefas administrativas. comum ouvirmos iniciantes reclamando que no sabem para onde foram as aplicaes instaladas no sistema e perderem um bom tempo para achar e identificar qual o arquivo dever ser usado. O primeiro passo para se ter uma vida mais tranqila no sistema conhecer a estrutura a estrutura de diretrios. Dado o primeiro passo, os outros sero bem mais simples. Vamos ver um pouco da organizao dos diretrios, veja o Mapa 3.1

Mapa 3.1 Detalhamento da estrutura de diretrios.

Guia Linux Professional Clayton Lobato

24 Outro fato que chama a ateno e provoca srios transtornos de entendimento para novos administradores a ausncia de estruturas independentes de diretrios. Todos os discos estaro montados em um diretrio, abaixo do /. Em sistemas como o Windows, cada partio ter uma estrutura de diretrios prpria e ser apresentada de forma independente. No GNU/Linux isso no acontece.

Estudo dos dispositivos de armazenamento


Nas pginas anteriores vimos que toda a estrutura de arquivos do sistema estaria submetida ao diretrio /, o que nos faz crer que todo e qualquer dispositivo de armazenamento estar ligado a um ponto, um sub-diretrio do /, chamado de ponto de montagem. No GNU/Linux, todas as informaes contidas em dispositivos de armazenamento sero dispostas em diretrios. Esse processo descrito como montagem de dispositivos, ou seja, dispor das informaes de um volume em um sub-diretrio do /, para que o usurio possa ter acesso. Todo o processo ser detalhado mais adianta quando estudarmos o comando mount e o arquivo /etc/fstab. Mas uma pergunta permanece... Como posso organizar meus dispositivos de armazenamento, quais suas limitaes e como sero identificados no GNU/Linux ? Encontraremos uma forma muito peculiar de identificao dos discos rgidos. Cada dispositivo ter um nome prprio de acordo com a porta qual est instalada. Em um padro IDE, todos os discos estaro identificados pelo prefixo hd, seguido do endereo da porta (a, b, c , d) e o nmero da partio. Em discos SATA e SCSI teremos a identificao com o prefixo sd. Trocando em midos... Se um disco estiver conectado a uma porta IDE 0, sendo o mesmo um primeiro master, teremos o disco identificado como hda. Se este mesmo disco for dividido em 4 parties, teremos ento hda1, hda2, hda3, hda4. Se tivermos a mesma configurao em um disco SCSI ou SATA, teremos sda1, sda2, sda3, sda4. Para cada dispositivo, teremos no mximo 4 parties primrias e 12 parties lgicas. No necessrio que sejam esgotadas as parties primrias para termos as parties lgicas, porm, independente de como esteja a configurao do disco, sempre que uma partio for identificada com os valores numricos de 5 16, essas sero parties lgicas e de 1 4, primrias. Os limites descritos acima so para cada disco instalado no sistema, independente da razo de sua existncia. No devemos confundir com as limitaes impostas para o tipo de partio SWAP, a qual veremos mais adiante. No mapa abaixo, coloquei algumas situaes bem comuns para discos instalados no GNU/Linux, observe os detalhes da organizao dos discos.

Guia Linux Professional Clayton Lobato

25

Mapa 3.2 Detalhamento das parties de discos no GNU/Linux. No exemplo acima, temos um sistema IDE padro sendo usado. Os dispositivos hda e hdb tm parties primrias e lgicas, sendo que no primeiro, esgotamos as possibilidades de parties primrias para iniciarmos as lgicas. No segundo, temos 3 parties primrias e cinco parties lgicas. Importante notar a nomenclatura das parties, observe que as parties lgicas sempre iniciam com o identificador numrico 5. Os demais discos tem apenas parties primrias. Falamos em partes de discos, em organizao fsica dos dispositivos. Alm de definir em quantas partes estar dividido o dispositivo importante entender os tipos de file-system, afinal ele quem organizar os dados para que possamos acessar.

Guia Linux Professional Clayton Lobato

26

Tipos de File System e Particionamento de Discos.


Aps dividirmos um disco em pedaos, o que chamamos de particionamento, necessrio definirmos um sistema de arquivo que ser responsvel pelo controle das informaes. Isso feito pelo processo de formatao das parties. O sistema de arquivos ir dividir o espao da partio em: 1. Uma parte para armazenar os dados relativos ao sistema de arquivos em si; 2. Com o espao restante, segmentar em pequenos espaos de tamanhos bem definidos, conhecidos como inodes. No existem regras que definam um sistema de arquivos como o universal. Podemos ter um disco, dividido em 5 parties e mais de um sistema de arquivos, um para cada partio, porm, sistemas de arquivos podem ser incompatveis entre si. Por isso, cuidado ao manuse-los. Um sistema operacional pode ser totalmente compatvel com um determinado sistema de arquivo, mesmo no sendo o sistema de arquivo padro. Esse um aspecto bem positivo de se trabalhar com o GNU/Linux, temos suporte para quase todas os sistemas de arquivos existentes hoje, para no falarmos todos. Na abaixo, encontraremos os sistemas de arquivos suportados pelo GNU/Linux.

Fig. 3.3 Detalhamento de File - System.

Guia Linux Professional Clayton Lobato

27 Dentre todos os sistemas de arquivos, um que devemos ter o cuidado em entender o SWAP. No processo de instalao do sistema, precisamos apenas de duas parties, uma partio que ser usada para o / (local onde o sistema ser estruturado) e outra para ser usada como SWAP, onde sero colocados processos que no estejam em estado de processando, liberando espao em memria para processos ativos. Existem limitaes que devemos respeitar. Por sistema, note que no falei disco e sim sistema, podemos ter no mximo 16 gigas de SWAP total e 2 gigas por partio. Em uma viso mais prtica...

Limitao por partio Nmero mximo de parties SWAP Limitao por sistema

2 Gigas 8 8 Parties x 2Gigas = 16 Gigas

De uma forma geral, o tamanho da partio SWAP estava relacionado com a quantidade de RAM existente no computador. Definamos a quantidade de SWAP da seguinte maneira. SWAP = 2 x RAM (SWAP ser 2 vezes a quantidade de RAM) Considerando que memria RAM era mais valiosa que ouro, esse clculo foi meio abandonado quando o volume de memria RAM chegou aos patamares de 512 Megas. Em sistemas normais, mais que 512 Megas de Swap realmente desnecessrio. Hoje em dia, algumas literaturas indicam valores entre 256 a 512 MB, para sistemas com mais de 512 de RAM, porm, na prtica, o que determinar o quanto de SWAP dever ser instalado no sistema so as aplicaes e necessidades impostas pelo cenrio a ser desenvolvido. Por isso, entendermos os motivos que nos levar a instalao de uma mquina com o sistema GNU/Linux fundamental.

Particionamento de discos Comandofdisk


Antes mesmo de instalarmos, vamos verificar como preparar os disco atravs do comando fdisk. Considerado um comando com certa dificuldade, faremos um exerccio prtico para tentar facilitar o entendimento. Nunca devemos esquecer que o comando fdisk um particionador destrutivo, ou seja, uma vez usado, todos os dados contidos no dispositivo sero perdidos. O primeiro passo aqui seria a chamada para o fdisk. Para isso digite o comando abaixo. # fdisk /dev/sda Com uma sintaxe simples, o fdisk requer que seja informado qual disco ser usado no processo. Em nosso caso, teremos o sda como alvo do processo de particionamento. A tela inicial do fdisk ser apresentada como na Fig. 3.4.

Guia Linux Professional Clayton Lobato

28

Fig. 3.4 Tela incial do fdisk Observe que no topo da tela exibida teremos informaes da volumetria do dispositivo. Com a comando p, listaremos a tabela de parties do disco. O mesmo podemos obter sem a necessidade de entrarmos no prompt de execuo do fdisk digitando na shell do sistema o comando #fdisk -l. Veja a Fig. 3.5

Fig. 3.5 Listagem da organizao do disco. Observe na figura acima que a partio estendida aparece destacada, veja ao lado direito a descrio Extended e logo abaixo dela est a partio lgica. Com a comando m teremos o help do fdisk, aqui encontraremos as opes para uso do fdisk. Algumas opo sero apresentadas apenas no menu de uso avanado do fdisk. Para acesso aos recursos avanados digite o comando x e em seguida o comando m. Muito cuidado ao usar o fdisk, para garantias de que o que foi feito realmente era a ao desejada, sempre use o comando p, assim voc acompanhar todo o processo. Caso tenha dvidas do que fazer, o comando q sempre ser bem-vindo. Com ele sairemos do prompt do fdisk sem salvar as alteraes. Veja um exemplo na Fig 3.6

Guia Linux Professional Clayton Lobato

29

Fig. 3.6 Detalhamento da opo m do fdisk. Antes de criarmos novas parties, vamos apagar todas as existentes no sistema, use o comando d. O nmero da partio ser solicitado. Informe-o de acordo com a partio que deseja apagar. Farei com uma partio para demonstrar, veja abaixo.

Fig. 3.7 Detalhamento da opo d do fdisk. Faa o mesmo com as outras parties que deseja apagar, uma a uma. Criaremos agora a nova partio. Para isso, usaremos o comando n. Algumas informaes sero solicitadas. Veja que no exemplo abaixo. O primeiro passo definirmos se a partio ser ou no primria. Em seguida, informamos o nmero da partio, defina o bloco inicial da partio. Caso no saiba qual ser o bloco inicial, use o valor definido pelo sistema. Por fim, informe o tamanho da partio, exatamente como demonstrado no exemplo. Note que existe um sinal + antes do tamanho e a letra M para determinarmos que o tamanho ser em Megas.

Fig. 3.8 Detalhamento da opo n. Repita esta etapa para criar as outras parties do sistema. Aps definirmos o tamanho, definiremos o tipo de file system da partio, usando

Guia Linux Professional Clayton Lobato

30 comando t . Ser solicitado o nmero de uma partio, e em seguida o cdigo do tipo do file system. Com a opo L teremos a lista de todos os file system suportados. Identifique o file system que ir usar na partio e digite o cdigo hexadecimal que est descrito ao lado esquerdo da descrio na tabela apresentada. Tendo uma viso geral do processo teremos. . .

Fig. 3.10 Detalhamento de todo o processo de escolha do File System. Repita essa etapa para cada partio criada, assim, no teremos surpresas desagradveis nas prximas etapas do processo. Usando o comando w, salve e saia do fdisk. Para que todas as alteraes sejam vlidas, interessante reiniciar o sistema. Sistema reiniciado, vamos ao processo de formatao das parties criadas.

Formatao do disco Comando mkfs


O fato de se criar uma partio e definir um file system no nos d a condio de uso da partio. Para que possamos us-la precisamos format la de forma que o sistema possa entender a organizao dos dados. No esquea que o fdisk apenas um particionador, para formatarmos um partio no GNU/Linux, usaremos o comando mkfs. Imagine que seja necessrio formatar uma partio, usando o ext3 como file system. Veja como simples... #mkfs.ext3 /dev/sda5 Interessante nesse momento buscarmos por blocos defeituosos. Para isso, use o

Guia Linux Professional Clayton Lobato

31 comando fsck, como no exemplo abaixo #fsck.ext3 -pc /dev/sda5 No comando acima, duas aes foram efetuadas. O -p define que ser feito a reparao do sistema automaticamente. J o -c busca por bad blocks e os adiciona a uma lista. Para parties SWAP, o conceito basicamente o mesmo, o que muda so os comandos que usaremos. Veja como a mesma ao seria feita para a SWAP. #mkswap -c /dev/sda6 Formatao feita, vamos ativar a partio SWAP com o comando swapon #swapon -a Podemos verificar as parties SWAP lendo o contedo do arquivo /proc/swaps. #cat /proc/swaps Muito bem, parties criadas, formatadas e checadas. Podemos seguir com nosso processo.

Instalao do GNU/LINUX
Partiremos agora para instalao do GNU/Linux. Usaremos o padro de instalao grfica, por questes didticas. No usarei aqui nenhuma instruo avanada para a instalao apesar de criar as parties e formatar os discos usando o fdisk para dar uma base de como seria o preparo para instalao no slackware, por exemplo. Detalhar cada processo de forma muito minuciosa, seria realmente complicado haja vista que venho dizendo desde o incio que para determinarmos uma organizao para a instalao precisamos entender as necessidades do ambiente a ser configurado. Por isso, resolvi usar minhas aulas para discutirmos um pouco mais sobre o assunto, e acredite, falamos muito sobre isso. Para demonstrar a instalao, usaremos o Fedora como modelo. Respeitando as caractersticas de cada distribuio, o processo basicamente o mesmo. Vamos ao processo de instalao. Creio que seja interessante conhecer o equipamento que ser usado, para poder determinar caractersticas mais especficas ao sistema.

Guia Linux Professional Clayton Lobato

32 O primeiro passo iniciar o sistema pelo cd de instalao. Aps o boot do sistema pelo dispositivo de cd, ser apresentada uma tela de boas vindas, como na figura 3.11

Fig. 3.11 Tela Inicial de Instalao. Na tela apresentada observe nas possibilidades de uso do menu. Caso queira instalao em modo console, reduzindo o consumo de recursos com o ambiente grfico, digite linux text e em seguida pressione enter. Para iniciar a instalao em modo grfico apenas pressione a tecla enter. Na etapa seguinte ser apresentada uma solicitao de testes dos discos de instalao. Caso queira ter certeza que nenhum dos discos traro problemas durante a instalao, selecione OK. Caso queira passar esta fase sem testes de discos, selecione SKIP. Veja a figura 3.12.

Fig. 3.12 Testes de discos de Instalao importante verificar os discos, ao menos durante a primeira instalao com mdias novas, isso nos garante que no seremos pego de surpresa l pelos 99 % da instalao.

Guia Linux Professional Clayton Lobato

33 Aps selecionar se iremos ou no executar os testes nos discos, passaremos para as etapas seguintes. Selecione o idioma para a instalao do sistema. Veja o exemplo na figura 3.13.

Fig. 3.13 Seleo de Idioma Idioma selecionado, definiremos agora o tipo do teclado. Caso seu teclado tenha o , selecione o layout Portugus Brasileiro, caso no tenha, identifique o teclado e selecione na lista apresentada, como na figura 3.14 e vamos adiante.

Fig. 3.14 Configurao do teclado Na etapa seguinte, defina se ser feito uma nova instalao ou uma atualizao do sistema . Caso o sistema j esteja instalado, e queira atualizar o mesmo e tenha o cd de uma nova verso, apenas solicite uma atualizao do sistema. Caso queira instalar a instalao do zero, escolha Instalar Fedora Core. Escolhido a ao, passo adiante. Agora defina qual processo ser executado, se instalao ou atualizao. Veja a figura 3.15.

Guia Linux Professional Clayton Lobato

34

Fig. 3.15 Seleo do Processo Atualizao ou Instalao Ser questionado qual o procedimento para organizao do disco. Eu uso sempre o processo manual, assim posso determinar exatamente como os meus discos sero usados pelo sistema, alm de poder determinar que, em caso de termos uma instalao do windows, no corro riscos de perder as informaes do mesmo. Veja a Figura 3.16

Guia Linux Professional Clayton Lobato

35 Fig. 3.16 Definio do processo de configurao do Disco

Guia Linux Professional Clayton Lobato

36 Agora chegamos ao Disk Druid, um formatador em ambiente grfico que nos auxiliar na organizao do disco. Precisamos escolher no mnimo de duas parties, uma para ser usada pelo / e outra para ser a swap. Lembre-se que os discos podem ser particionados pelo fdisk, mas as relaes entre os discos e o ponto de montagem no foi feito at o momento. Aqui que realmente definiremos qual partio ser disposta em qual ponto de montagem. Defina de acordo com suas necessidades e boa sorte. Veja um exemplo na Figura 3.17

Fig. 3.17 Disk-Druid Aps organizarmos o file system, definirmos o tipo de file system, passamos a configurao do Boot Loader do sistema, veremos mais detalhes nos prximos captulos. No caso do Fedora, trabalharemos com o GRUB, como demonstrado na figura 3.18

Fig. 3.18 Configurao do Boot-Loader

Guia Linux Professional Clayton Lobato

37 Configurar uma interface ethernet no necessrio nesse momento, porm pode ser feito como na figura 3.19

Fig. 3.19 Configurao da interface de rede Defina o fuso horrio que ser adotado pelo sistema, seguindo o exemplo da figura

3.20

Fig. 3.20 Seleo de Fuso

Guia Linux Professional Clayton Lobato

38 Nesse ponto da instalao definiremos uma senha para o administrador do sistema, o usurio root. Veja a figura 3.21

Fig. 3.21 Definio de senha de root No GNU/Linux, temos dois caminhos a seguir a partir deste ponto. O primeiro escolhermos um dos perfis sugeridos pelo prprio sistema com alguns pacotes pr estabelecidos de acordo com cada perfil e um segundo caminho que o de escolhermos os pacote que desejamos instalar. Em caso de servidores, aconselha-se escolher os pacotes manualmente, definindo somente o que necessrio para o funcionamento da mquina. Veja a tela dessa etapa na figura 3.22

Fig. 3.22 Seleo de pacotes Uma tela descrevendo o que ser feito ser apresentada, confirma a instalao para

Guia Linux Professional Clayton Lobato

39 continuarmos o processo. Veja a figura 3.23

Fig. 3.23 Aviso de incio de instalao Agora s nos resta esperar a concluso da instalao . Nessa etapa sero apresentados os pacotes que esto sendo instalados. Como falei, basta aguardar. Veja um exemplo na figura 3.24

Fig. 3.24 Detalhes do processo de instalao

Guia Linux Professional Clayton Lobato

40 Como demonstrado na figura 3.25, reinicie a mquina e pronto ...GNU/Linux pronto para o combate...

Fig. 3.25 Finalizao da instalao, aviso de reboot Como vimos acima, no h grandes segredos para instalar o sistema, desde que se saiba o que e onde queremos instalar.

Guia Linux Professional Clayton Lobato

41

Captulo 3 - Processo de inicializao, Boot Loader e Run Level


Instalao feita, inicia agora a nossa vida de estudos e administrao do GNU/Linux. Nesse captulo, abordaremos como se d o processo de bootstrap, arquivos lidos, exploso do kernel em memria, o processo init, arquivos relacionados ao init, nveis de execuo at chegarmos no ponto de um usurio logado e pronto para interagir junto ao sistema. Importante observar as relaes entre os processos e os arquivos lidos e gravados, isso nos dar a possibilidade de definirmos exatamente o comportamento do sistema.

Guia Linux Professional Clayton Lobato

42

Guia Linux Professional Clayton Lobato

43

Bootstrapping Inicializao do Computador.


Muitas pessoas me questionam se o mais importante saber o maior nmero de comandos possveis e imaginveis ou saber como colocar um super servidor no ar. Para mim, o entendimento do sistema e conhecer as relaes entre os processos e os arquivos. Saber como se comporta o sistema durante o processo de inicializao o foco deste captulo. Estudaremos as etapas de bootstrapping desde os testes da bios ao processo de login do usurio. Vamos direto ao ponto ento. Veja a seqncia de boot no diagrama 4.1

Diagrama 4.1 Detalhamento do Processo de inicializao do Sistema. Durante o processo de inicializao, nada est em funcionamento e o sistema tem que se virar para criar o ambiente necessrio para que possamos interagir com o mesmo. Durante o processo de bootstrapping, o kernel carregado em memria e inicia um conjunto de execues para tornar o sistema disponvel. No grfico acima, tentei resumir todo o processo para tornar mais simples a visualizao do mesmo, porm, acho importante detalhar um pouco demonstrando os arquivos que sero lidos durante esta etapa. Iniciado o sistema, a primeira etapa do processo iniciado pelo cdigo de boot encontrado em memria ROM. Durante essa etapa, o sistema faz um reconhecimento do hardware, em seguida, tenta localizar uma chamada para carga do kernel em memria. Essa etapa eu chamo de boot de bios. Em seguida o kernel chamado, carregado em memria e entra em ao. Vamos

Guia Linux Professional Clayton Lobato

44 estudar essa etapa do boot, que chamo de boot de kernel. Durante o processo de bootstrapping, sua primeira tarefa garantir o kernel em execuo em memria. Para isso, feito uma chamada ao arquivo /boot/vmlinuz. Aps carregar e garantir a execuo do kernel em memria, este executa testes de memria para tentar descobrir quanto poder ser usado. Algumas informaes so dimensionadas de forma estatstica, assim, pode-se determinar quanto de memria ser usada para si e quanto poder ser inicializada. Esta memria reservada para o kernel, o que impede o uso para aplicaes em camadas de usurio. Uma das primeiras etapas aqui a checagem do hardware, para poder determinar que dispositivos esto presentes. As informaes dos dispositivos nem sempre so fornecidas completamente. Para resolver isso, o kernel sonda o barramento em busca dos dispositivos para determinar informaes nos drivers apropriados. Para os dispositivos com drivers que esto faltando ou que no respondem a sondagem sero desabilitados. Em compensao, dispositivos conectados posteriormente podem ter seus drivers carregados ou habilitados durante a execuo. Terminado o processo do kernel, vrios processos so criados. O primeiro processo a ser criado o init, considerado o processo pai de todos os outros processos. Sua identificao ser sempre com o PID 1 (Identificador do processo). Junto ao processo init vrios outros processos so carregados. Todos esses processos esto ligados ao nvel de execuo do sistema, o que veremos em mais detalhes em captulos posteriores. Mas uma pergunta ainda permanece. Quem responsvel pela chamada do kernel ? Bem, o responsvel por essa chamada o BOOT LOADER. No GNU/Linux temos dois BOOT LOADERS padro, o GRUB e o LILO. Vamos ver em detalhes ambos na etapa seguinte.

Gerenciadores de boot (bootloaders)


Aps a etapa de boot da mquina, que iniciado pela BIOS, o primeiro mecanismo de interao que teremos junto ao sistema o Boot Loader. No GNU/Linux temos dois Boot Loaders, o GRUB ( GRand Unifying Bootloader ) e o LILO ( LInux LOader ). de responsabilidade dele fazer a chamada do kernel do sistema, por isso, se faz necessrio o entendimento do Boot Loader para um administrador de sistema. Partiremos do GRUB.

GRUB ( GRand Unified Bootloader)


A primeira informao que devemos ter do GRUB sobre a localizao do seu arquivo de configurao e como personaliz-lo. Os arquivos de configurao do grub esto em /boot/grub. Alguns livros informam no como sendo o arquivo menu.lst, porm, vejam que menu.lst um link do arquivo grub.conf, como demonstrado abaixo. #ls /boot/grub lrwxrwxrwx 1 root root 11 Ago 31 11:45 menu.lst -> ./grub.conf

Guia Linux Professional Clayton Lobato

45

Vamos entender o arquivo grub.conf. #vim /boot/grub/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You do not have a /boot partition. This means that # # # # all kernel and initrd paths are relative to /, eg. root (hd0,5) kernel /boot/vmlinuz-version ro root=/dev/hda6 initrd /boot/initrd-version.img (Indicao de qual sistema operacional ser inicializado por padro)

#boot=/dev/hda default=1 timeout=15 (Indicao do tempo de espera, em segundos, para carregar o sistema operacional, caso no haja interao de teclado) splashimage=(hd0,5)/boot/grub/splash.xpm.gz papel de parede do GRUB) (Arquivo que ser usado como

hiddenmenu (Inibe a exibio de opes no menu do grub, durante o boot. Garante que a imagem especificada pela linha default seja carregada) title Fedora Core (2.6.15-1.2054_FC5) (Nome do Sistema. carter informativo. Podemos colocar qualquer nome nessa rea) Apenas em

root (hd0,5) (Indica a partio onde o sistema foi instalado. Um detalhe importante observar a forma como os endereos do disco so informados, hd0 corresponde hda e 5 sexta partio do disco. Trocando em midos, hd0,5 correspondente hda6) kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet (Imagem do kernel que ser chamada para o Boot) initrd /boot/initrd-2.6.15-1.2054_FC5.img (Aqui teremos a chamada do arquivo que contm informaes dos mdulos que sero carregados. Cada compilao do kernel ter seu arquivo de imagens) title Other rootnoverify (hd0,0) (Essa opo tem a mesma funo de root, porm, no tenta montar a partio raiz. muito usada para chamadas de sistemas como MS-DOS e Windows) chainloader +1 (Alguns sistemas operacionais armazenam seus bootloaders no incio da partio onde esto instalados. O chainloader informa o local onde o Bootloader foi instalado) Alm de entendermos as configuraes do GRUB, precisamos conhecer ainda o utilitrio grub-install. O grub-install instala o GRUB na MBR do primeiro disco, criando o

Guia Linux Professional Clayton Lobato

46 diretrio /boot/grub. As opes mais usadas com o grub-install so : raiz) --root-directory=DIR (Instala a imagem do GRUB em diretrio que no seja o

--recheck (Checa o arquivo /boot/grub/device.map. til quando retiramos ou acrescentamos um novo disco no sistema)

LILO ( LInux LOader )


O LILO foi o primeiro Bootloader usado pelas distribuies GNU/Linux. Por ser grande para caber no setor de boot ou na MBR, o LILO foi dividido em duas partes. A primeira o motor de arranque e est na MBR ou setor de boot, sendo que a segunda a responsvel pela interao com o usurio. Um dos aspectos mais importantes do lilo a configurao do mesmo. Vamos analisar o arquivo /etc/lilo.conf boot=/dev/hda do sistema) map=/boot/map install=/boot/boot.b prompt LILO) timeout=50 image=/boot/vmlinuz label=Linux root=/dev/hdb1 readonly (Define o tempo de espera antes de iniciar o sistema) (Caminho completo para a imagem que ser carregada) (Nome de identificao da imagem) (Partio que dever ser montada como root) (Apenas Leitura) (Aqui definimos de qual disco ser usado o setor de boot (Arquivos de mapas. Por padro /boot/map) (Arquivo de setor de boot) (Disponibiliza ao usurio um prompt de interao com o

Para que possamos ter as alteraes disponveis no prximo boot do sistema, necessrio usar a aplicao /sbin/lilo.

Nveis de execuo do Sistema.


Durante o processo de boot do sistema, init ativado dando incio ao que chamo de exploso dos processos filhos do init, ou seja, todo e qualquer processo startado no sistema. Esses processos esto ligados diretamente ao nvel de execuo do sistema, o qual est referenciado no arquivo /etc/inittab. necessrio entendermos algumas informaes desse arquivo, ento vamos a elas. No processo de carga do init, o arquivo /etc/inittab ser lido para que o sistema saiba qual nvel de execuo padro. Atravs do nvel de execuo, o sistema saber quais servios devero ser carregados sempre que a mquina for ligada. Em um sistema padro, temos 7 nveis de execuo para o Linux, indo do nvel 0 ao nvel 6, cada um com uma caracterstica. Veja o padro de funcionamento dessas caractersticas, analisando Mapa 4.2.1. Importante ressaltar que algumas distribuies alteram o comportamento de alguns nveis.

Guia Linux Professional Clayton Lobato

47

Mapa 4.2.1 Detalhamento dos nveis de execuo. Para determinarmos o nvel padro de execuo, edite a linha id:NE:initdefault:, onde NE o nvel de execuo do sistema. Por exemplo, id:3:initdefault: determina que o nvel de execuo ser o nvel 3. Para cada nvel de execuo existir um diretrio /etc/rc.d/rcNE.d, onde encontraremos os scripts de start e stop dos servios relacionados com este nvel. Os arquivos esto descritos de duas formas S45autofs e K85autofs, vamos entend-los. O S indica que o servio relacionado ao arquivo ser inicializado durante o start do nvel, o nmero 45 indica a ordem de prioridade desse servio em relao aos outros que tambm sero carregados o nome apenas uma descrio, aqui colocamos o nome de servio para facilitar a identificao do mesmo. No outro arquivo teremos o K indicando que o servio ser morto, desligado, o nmero como no primeiro caso indica a ordem em relao aos outros servios que sero mortos e o nome. Para cada nvel existir um conjunto de aplicaes que sero mortos e outras que sero carregadas. Para saber mais sobre esses servios, veja o contedo dos diretrios /etc/rc.d/rcNE.d. Aps os processos terem sido inicializado, a prxima etapa a execuo do getty, aguardando o login do usurio. Essa etapa descrita como boot de usurio. Durante o processo de login do usurios, alguns arquivos so lidos para que seja criado o ambiente de interao do mesmo, junto ao sistema. Seria quase impossvel criar um ambiente para cada usurio, tendo que copiar cada arquivo necessrio para os homes, manualmente. Para isso, o sistema ler a varivel skel no arquivo /etc/default/useradd, ele informar onde esto os arquivos necessrios para a criao do ambiente do usurio (.bashrc, .bash_profile e .bash_logout), no nosso caso em /etc/skel. O arquivo .bash_profile responsvel pelos programas que devem ser executados na abertura da sesso do usurio, pela configurao do ambiente e pelos caminhos (PATH). Nele tambm h uma chamada para o .bashrc. O arquivo .bashrc executado por uma chamada do .bash_profile. Podemos editar o arquivo para personalizar o ambiente. Nele muito comum que sejam criados alias para

Guia Linux Professional Clayton Lobato

48 comando, facilitando a vida do usurio. Importante lembrar que estamos falando de um arquivo que estar no diretrio home do usurio, assim, tudo o que for alterado nele, ser valido apenas para o usurio. Veja como poderamos editar este arquivo. $vim .bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi alias l='ls -aF --color=auto' alias montacd='eject; /media/cdrom; ls' sleep 5; eject -t; mount /media/cdrom; cd

Ainda existem dois arquivos que fazem parte do processo de criao de ambiente do usurio com o sistema, sendo estes o /etc/bashrc (responsvel por variveis globais, lido sempre que o uma nova sesso da bash for executada) e o /etc/profile (executado sempre que um usurio logar. Responsveis pelas variveis do sistema dentre outras informaes usadas pelo usurio junto as consoles). Para determinar comportamentos globais, comuns a todos os usurios, podemos editar o arquivo /etc/profile. Para criarmos aliases globais, podemos usar o /etc/bashrc. Algumas variveis devem ser conhecidas, para que possamos ajustar o sistema para necessidades mais especficas.
Varivel BASH PS1 PATH HOSTNAME HOME LOGNAME UID Definio shell usada pelo usurio Formato de apresentao do prompt Caminhos de localizao aplicaes do sistema. Nome da mquina Diretrio home do usurio logado Login do usurio Identificador numrico do usurio de comandos e

Alterar qualquer valor das variveis do sistema pode acarretar no funcionamento pouco eficiente do mesmo, por isso, cuidado ao tratar dessas informaes. Veremos mais sobre shell, variveis de sistemas e customizao de ambiente mais adiante.

Guia Linux Professional Clayton Lobato

49

Captulo 4 - Administrao do GNU/Linux


Aps instalado, nossa prxima etapa entendermos os comandos e como us-los em conjunto, para darmos mais dinamismo nossas aes. Todos os comandos aqui fazem parte do contedo exigido pela prova de certificao da LPI Linux Professional Institute e do processo de certificao da Red Hat RHCE, por isso tentei colocar o maior nmero de informaes possveis alm de alguns manuais completos e traduzidos. Usaremos os mapas mentais, buscando melhor visualizao das opes dos comandos, facilitando o entendimento. Vamos l ento...

Guia Linux Professional Clayton Lobato

50

Guia Linux Professional Clayton Lobato

51

Usurios, Grupos, Senhas e NPA.


Em sistemas como o GNU/Linux, entender os mecanismos de administrao de usurios, senhas, grupos e as relaes entre usurios, grupos e arquivo fundamental. Nada se faz no sistema sem um usurio e muito menos se no soubermos como criar um ambiente onde muitos usurios podem interagir. Por definio, cada usurio no sistema ter seu prprio ambiente onde poder armazenar seus dados, o que chamamos de diretrio home, criado normalmente no /home, o qual leva o mesmo nome definido como o login do usurio, alm de possuir um grupo principal e um UID ( User ID Identificador de usurio ). Mas isso no o bastante para um usurio interagir com o sistema. Alm de todas as informaes descritas acima, para que o usurio possa interagir com o sistema preciso que ao mesmo seja relacionado um shell, um interpretador de comandos. No GNU/Linux temos vrias possibilidades de shell, sendo o padro o bash (Bourne-Again Shell). Nas prximas pginas deste captulo, veremos alguns comandos usados para administrar usurios, grupos e senhas e mais adiante veremos ainda onde todas as informaes ficam armazenadas e como podemos alterar o comportamento padro do sistema. Para vermos a chamada do comando em execues configuraremos o ambiente executando o comando abaixo. $set -x Para desligar a exibio do comando, use o comando $set +x Podemos ainda usar o comando strace, este realmente um comando interessante de ser usado para conhecermos os detalhes de ao de cada comando do GNU/Linux.

1.

useradd

Descrio: Cria usurio no sistema

Mapa 1 Detalhamento de Opes do comando useradd Exemplos: #useradd clayton

Guia Linux Professional Clayton Lobato

52 #useradd -d /users/clayton clayton #useradd -d -m /users/clayton clayton #useradd -c Clayton Lobato clayton

2.

userdel

Descrio: Apaga um usurio do sistema.

Mapa 2. Detalhamento de Opes do comando userdel Exemplos: #userdel -f clayton #userdel -r clayton #useradd clayton

3. passwd
Descrio: Define ou altera a senha de um usurio.

Mapa 3. Detalhamento de Opes do comando passwd Exemplos: #passwd -x 5 clayton #passwd -w 3 clayton #passwd -n 4 clayton #passwd -d clayton

Guia Linux Professional Clayton Lobato

53

4. chsh
Descrio: Altera o shell do usurio.

Mapa 4 Detalhamento de Opes do comando chsh. Exemplos: #chsh -s /bin/sh clayton #chsh -l

5. chage
Descrio: Muda informaes de expirao de senha do usurio.

Mapa 5 Detalhamento de Opes do comando chage. Exemplos: #chage -l clayton #chage -M 20 clayton #chage -m 10 clayton

Guia Linux Professional Clayton Lobato

54

6. usermod
Descrio: Altera informaes da conta do usurio.

Mapa 6 Detalhamento de Opes do comando usermod. Exemplos: #usermod -g desenvolv clayton #usermod -c Clayton Lobato clayton #usermod -l c1141478 -c clayton lobato clayton #usermod -L clayton #usermod -U clayton

7. chfn
Descrio: Altera informaes de identificao do usurio.

Mapa 7 Detalhamento de Opes do comando chfn. Exemplos: #chfn -f Clayton Lobato clayton

Guia Linux Professional Clayton Lobato

55

8. groupadd
Descrio: Cria grupo no sistema

Mapa 8. Detalhamento de Opes do comando groupadd. Exemplos: #groupadd layer #groupadd -f layer #groupadd -g 525 bases #groupadd -r master

9. groupdel
Descrio: Apaga grupo no sistema Exemplos: #groupdel layer

10. gpasswd
Descrio: Administra o arquivo /etc/group.

Mapa 10 Detalhamento de Opes do comando gpasswd. Exemplos: #gpasswd -a clayton suporte #gpasswd -d clayton suporte #gpasswd -M alice,eduardo suporte e -a. Existe uma diferena enorme, muito mais em execuo que conceitual das opes -M

Guia Linux Professional Clayton Lobato

56

11. groupmod
Descrio: Modifica informaes de um grupo.

Tabela 11 Detalhamento de Opes do comando groupmod. Exemplos: #groupmod -g 536 suporte #groupmod -n suporte redes

12. chpasswd
Descrio: Atualiza a senha de usurios cadastrados no sistema a partir de um arquivo com o formato usurio:senha.

Opes
-e

Descrio
Aguarda que as senhas sejam criptografadas.

Mapa 12 Detalhamento de Opes do comando chpasswd.

13. id
Descrio: Exibe os ids dos usurios.

Mapa 13 Detalhamento de Opes do comando id Exemplos: #id -g clayton #id -u clayton #id -n clayton #id -G clayton

Guia Linux Professional Clayton Lobato

57

14. chgrp
Descrio: Define um novo grupo a um arquivo.

Mapa 14 Detalhamento de Opes do comando chgrp Exemplos: #chgrp root teste #chgrp root:teste base_dados #chgrp -hR root /base/postgres

15. finger
Descrio: Exibe informaes de usurios.

Mapa 15 Detalhamento de Opes do comando finger Exemplos: #finger clayton #finger -p clayton #finger -m clayton Para que um usurio seja vlido no sistema, este precisa obrigatoriamente de um login, uid, gid, home, shell e senha. As senhas no GNU/Linux so definidas pelo comando passwd e armazenada em /etc/shadow. No arquivo /etc/passwd, ao contrrio do que se pensa, sero armazenadas apenas as informaes da conta do usurio. Veja na Figura 1. Fig 1. Informaes da conta do usurio

Guia Linux Professional Clayton Lobato

58

Observe que temos 7 colunas divididas por : ( dois pontos ). Da esquerda para a direita, temos... clayton :x :500 :500 usurio); :Clayton Lobato :/home/clayton :/bin/bash login do usurio; Indicao de senha; UID User ID; gID Group ID (nesse caso teremos o grupo principal do Comment Comentrio, descrio do usurio; Diretrio home do usurio; Shell do usurio.

Note que as senhas no esto presente no arquivo /etc/passwd. Para visualizarmos as senhas encriptadas, exibiremos o arquivo /etc/shadow. Veja a figura 2.

Fig. 2. Visualizao de senhas encriptadas Mas de onde saem todas essas informaes ? Existem alguns arquivos que so fundamentais para administrao do sistema. Em se tratando de usurios, vamos estudar os 4 que acho mais importante. Comearemos pelo /etc/login.defs. Este um dos primeiros a ser lido no processo de criao do usurio. Nele, informaes como controles de senhas, UID inicial e final e criao ou no do diretrio home so gerenciados. Veja algumas opes importantes desse arquivo.

Mapa 16 - Detalhamento do arquivo /etc/login.defs

Guia Linux Professional Clayton Lobato

59 Outro arquivo que devemos conhecer o /etc/default/useradd. Vamos ao contedo deste...

Mapa 17 - Detalhamento do arquivo /etc/default/useradd Fechando o conjunto de informaes, para todo usurio criado, ser criado um diretrio home e nele teremos os arquivos responsveis pelo ambiente de interao dos usurios. Durante o processo de criao do usurio foi dito que um grupo principal para o usurio foi criado. Mas... Como funciona essa relao ? Bem, no mundo GNU/Linux cada usurio, arquivo, processo tem relao com um grupo. Digite o comando ls -l em sua console, veja o que aparece. . .

drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwx-----drwxr-xr-x drwxr-xr-x drwxr-xr-x dr-xr-xr-x drwxr-xr-x dr-xr-xr-x drwxr-x--drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxrwxrwt drwxr-xr-x drwxr-xr-x drwxr-xr-x

2 3 9 78 3 11 2 4 2 2 2 2 53 5 2 2 2 10 3 14 26 3

root root root root root root root root root root root root root root root root root root root root root root

root 4096 Jan 1 2000 bin root 4096 Jan 1 2000 boot root 4920 Jan 1 00:02 dev root 12288 Jan 1 00:01 etc root 4096 Jan 1 2000 home root 4096 Jan 1 2000 lib root 16384 Dez 31 22:53 lost+found root 4096 Jan 1 2000 media root 4096 Abr 25 2005 misc root 4096 Mai 23 2005 mnt root 4096 Jan 1 00:01 net root 4096 Mai 23 2005 opt root 0 Dez 31 22:01 proc root 4096 Jan 1 2000 root root 4096 Jan 1 2000 sbin root 4096 Jan 1 2000 selinux root 4096 Mai 23 2005 srv root 0 Dez 31 22:01 sys root 4096 Jan 1 00:01 tmp root 4096 Jan 1 2000 usr root 4096 Jan 1 2000 var root 4096 Dez 31 22:55 x25

Para cada arquivo apresentado existe uma relao com um usurio e um grupo. Para que se tenha acesso a um arquivo, necessrio ter permisso. Vamos entender essa relao analisando umas das linhas exibidas acima.

Guia Linux Professional Clayton Lobato

60

drwxr-xr-x d rwx r-x

2 root root 4096 Jan 1 2000 bin Indicao de que o arquivo um diretrio; Indica o nvel de permisso de acesso do DONO do arquivo; Indica o nvel de permisso de acesso do GRUPO do arquivo;

r-x Indica o nvel de permisso de acesso para usurios que no se enquadram nos parmetros anteriores, ou seja, no o dono e nem faz parte do grupo do arquivo; root root 4096 bin Indica o usurio DONO do arquivo; Indica o GRUPO do arquivo; Tamanho do arquivo, em bytes.; Data e hora do ultimo acesso ao arquivo; Nome do arquivo.

Jan 1 2000 14:01

Mas onde ficam armazenadas as informaes dos grupos, membros dos grupos e como gerenciar os grupos no GNU/Linux ? Vamos por partes! O arquivo no qual as informaes de grupos so armazenados o /etc/group. Como acontece com os usurios, os grupos tambm possuem uma senha, s que no caso dos grupos o uso opcional. As senhas dos grupos ficam armazenadas no arquivo /etc/gshadow. Veja o contedo do arquivo /etc/group. Nele encontraremos informaes dos grupos como o nome, group id e membros. Para entendermos, vamos olhar o contedo do arquivo citado. mailnull:x:47: smmsp:x:51: rpcuser:x:29: nfsnobody:x:65534: apache:x:48: squid:x:23: webalizer:x:67: tomcat:x:91: xfs:x:43: ntp:x:38: mysql:x:27: screen:x:84: postdrop:x:90: postfix:x:89:

Guia Linux Professional Clayton Lobato

61 eduardo:x:501: notifiles:x:502: qmail:x:503:clayton Observe o grupo eduardo. Nele temos a descrio do grupo e o gid do mesmo, neste caso o nmero 501. J o grupo qmail, possui um membro chamado clayton, este um usurio. Trocando em midos... A estrutura base do arquivo /etc/group grupo:x:gid:membros Entendido como gerenciar usurios e grupos, o prximo passo ser o gerenciamento de permisses de acesso aos arquivos. Tudo no GNU/Linux um arquivo, e para cada arquivo definimos um nvel de acesso, nvel esse dividido em leitura (read), escrita (write) e execuo (execute), alm das informaes de dono e grupo. Alguns comandos so usados para determinar um nvel de permisso de acesso, o que chamo de NPA, alm de determinar o dono e o grupo do arquivo. Quando novos arquivos so criados no sistema, entra em ao o umask, o qual garante que que determinados NPAs sejam usados como padro, no processo de criao desses arquivos. No GNU/Linux teremos dois padres, 755 ser usado como padro para criao de diretrios e 644 para criao de arquivos. Para alterarmos o valor do umask, usamos o seguinte mecanismo. 777 - 027 = 750 ( estes sero os nveis de permisso ) Detalhando a informao.... 777 o valor total permitido para os nveis de permisso de acesso. 027 ser o decremento umask. O resultado desse clculo ser o valor do NPA usado pelo sistema, nesse caso, 750 (Dono com permisso total, grupo podendo ler e executar e outros sem nenhum tipo de acesso). Vejamos os comandos que nos permitem definir os nveis de acesso, dono e grupo dos arquivos. No usaremos os mapas aqui por conta da quantidade de informaes dos comandos.

16. chmod
Descrio: Gerencia os nveis de permisso de acesso dos arquivos. Opes
-c -R u g o

Descrio
Modo verbose, mostrando apenas as alteraes feitas. Aplica a recursividade na execuo do comando. Usurio. Grupo. Outros.

Guia Linux Professional Clayton Lobato

62 Opes Descrio

a Todas as camadas. Tabela 16 Detalhamento de Opes do comando chmod

Modo Decimal
4 2 1 6 5 3 7 Leitura Escrita Execuo Leitura e Escrita Leitura e Execuo Escrita e Execuo Leitura, Escrita e Execuo

Descrio

Tabela 16. Comando chmod, nveis de permisso modo decimal Modo Simblico
r w x rw rx wx rwx Leitura Escrita Execuo Leitura e Escrita Leitura e Execuo Escrita e Execuo Leitura, Escrita e Execuo

Descrio

Tabela 16 Comando chmod, nveis de permisso modo simblico Modos Especiais


1 2 4 Stick Bit Set group ID Set User ID

Descrio

Tabela 16 Comando chmod, nveis de permisso modos especiais Exemplos: #chmod 777 texto.txt #chmod u+x texto.txt #chmod u=rw,g-x texto.txt #chmod 2777 texto.txt

17. chown
Descrio: Define dono e grupo do arquivo. Opes
-c -R

Descrio
Modo verbose, mostrando apenas as alteraes feitas. Aplica a recursividade na execuo do comando.

Guia Linux Professional Clayton Lobato

63 Opes
-f --preserve-root -v

Descrio
No exibe mensagem caso haja erro na execuo do comando. No aplica a recursividade no diretrio / Exibe detalhes da execuo do comando. Modo verbose.

Tabela 17 Detalhamento de Opes do comando chown Exemplos: #chown root teste #chown root:teste base_dados #chown -R root /base/postgres

Guia Linux Professional Clayton Lobato

64

Guia Linux Professional Clayton Lobato

65

Captulo 5 Comandos GNU/Linux


Interagir com um sistema a capacidade que teremos de efetuar certas aes junto ao mesmo. Para isso, precisamos conhecer os comandos que possibilitam esta interao, o que faremos nesse captulo. Sem mais delongas, vamos aos comandos....

Guia Linux Professional Clayton Lobato

66

Guia Linux Professional Clayton Lobato

67

1. cat
Descrio: Imprime em sada padro o contedo de um arquivo.

Mapa 1. Detalhamento de Opes do comando cat Exemplos: $cat teste $cat -n teste $cat -b teste $cat >> arquivo.txt

2. tac
Descrio: Imprime em sada padro o contedo de um arquivo em ordem inversa.

Mapa 2 Detalhamento de Opes do comando tac

Exemplos: $tac teste

Guia Linux Professional Clayton Lobato

68

3. cut
Descrio: Remove sees de um arquivo.

Mapa 3 Detalhamento de Opes do comando cut Exemplos: $cut -c-4 teste (exibe do primeiro ao quarto caractere) $cut -c4 teste (exibe o quarto caractere do arquivo) $cut -c4- teste (exibe do quarto caractere em diante) $cut -b4-9 teste (exibe do quarto ao nono bytes)

4. expand
Descrio: Converte TABs para espaos.

Mapa 4 Detalhamento de Opes do comando expand Exemplos: $expand teste $expand -i teste $expand -t 6 teste

Guia Linux Professional Clayton Lobato

69

5. fmt
Descrio: Opes simples de formatao de textos.

Mapa 5 Detalhamento de Opes do comando fmt Exemplos:


$fmt teste

$fmt -c teste $fmt -p/ teste $fmt -w150 -p/ teste

6. head
Descrio: Exibe as 10 primeiras linhas do arquivo.

Mapa 6 Detalhamento de Opes do comando head

Guia Linux Professional Clayton Lobato

70 Exemplos: $head teste $head -c20 teste $head -n20 teste $head -20 teste $head -v teste

7. tail
Descrio: Exibe as 10 ultimas linhas do arquivo.

Opes
-c, --bytes=[-]N -n, --lines=[-]N -f, --follow[={name|descriptor}] -q, --quiet, --silent -v, --verbose

Descrio
Exibe os ltimos N bytes do arquivo.. Exibe as ultimas N linhas do arquivo. Exibe continuamente o arquivo, exibindo novas linhas inseridas no arquivo. No imprime cabealhos com o nome do arquivo. Exibe cabealho do arquivo contendo nome.

Tabela 7 Detalhamento de Opes do comando tail Exemplos: $tail teste $tail -c20 teste $tail -n20 teste $tail -20 teste $tail -v teste

8. hexdump
Descrio: Exibe arquivos em ascii, decimal, hexadecimal, octal dump.
Exemplo: $hexdump teste

9. join
Descrio: Une as linhas de arquivos com ndices comuns.
Opes -j1 -j2 -j nmero Descrio Define o campo ndice para o arquivo 1. Define o campo ndice para o arquivo 2. Define o campo ndice para ambos os arquivos.

Tabela 9 Detalhamento de Opes do comando join Exemplos: $join -j1 2 teste teste1

Guia Linux Professional Clayton Lobato

71 $join teste teste1 $join -j2 1 teste1 teste

10. split
Descrio: Divide um arquivo em pedaos.
Opes -a, --suffix-length=N -b, --bytes=SIZE -C, --line-bytes=SIZE -d, --numeric-suffixes -l, --lines=NUMBER --verbose Descrio Define o tamanho do sufixo do nome dos arquivos gerados. Define o tamanho de cada arquivo que ser gerado, em bytes. Define o tamanho de cada linha do arquivo. Uso de sufixos numricos. Define o nmero de linhas de cada arquivo. Imprime o detalhamento da execuo do comando.

Tabela 10. Detalhamento de Opes do comando split Exemplos: $split -b 2k base.txt bas $split -l 1000 base.txt bas

11. tr
Descrio: Substitui ou Apaga caracteres.
Parmetros -d, --delete -s, --squeeze-repeats Opes \NNN \\ \a \b \f \n \r \t \v CHAR1-CHAR2 [CHAR*] [CHAR*REPEAT] [:alnum:] [:alpha:] [:blank:] Valor octal do caractere NNN Barra invertida Sinal sonoro Backspace Formulrio Nova linha Retorno (enter) Tab horizontal Tab vertical Todos os caracteres de CHAR1 a CHAR2 em ordem ascendente no SET2, cpias de CHAR at o tamanho do SET1 REPETE cpias de CHAR, REPETE octal se comear com 0 Todas as letras e dgitos Todas as letras Todos espaos em branco na horizontal Descrio Apaga caractere do na exibio do arquivo. Suprime as ocorrncias da varivel de busca. Descrio

Guia Linux Professional Clayton Lobato

72
Parmetros [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] [=CHAR=] Todos caracteres de controle Todos dgitos Todos caracteres imprimveis, no incluindo espao. Todas letras em caixa baixa Todos os caracteres imprimveis, incluindo espao Todos caracteres de pontuao Todos os espaos em branco na horizontal ou vertical Todas letras em caixa alta Todos os dgitos hexadecimais Todos os caracteres que so equivalentes ao CHAR Descrio

Tabela 11. Detalhamento de Opes do comando tr Exemplos: $cat base.txt | tr [a-c] [A-C] $cat base.txt | tr -d a

12. nl
Descrio: Numera linhas de um arquivo.
Opes -b,--body-numbering=STYLE -f,--footer-numbering=STYLE -h,--header-numbering=STYLE -s,--number-separator=STRING -v, --first-page=NUMBER -w, --number-width=NUMBER Descrio Seleciona um estilo (`a`, `t`, `n`) para numerao das linhas. Numera o rodap da pgina. Numera o cabealho da pgina. Insere um separador STRING aps a numerao da pgina. Define o primeiro nmero da contagem. Define o nmero de colunas que antecede o nmero da linha.

Tabela 12 Detalhamento de Opes do comando nl Exemplos: $nl teste $nl -bt teste $nl -s@ teste $nl -v1000 teste $nl -w20 teste

13. paste
Descrio: Exibe as linhas de arquivos lateralmente.

Guia Linux Professional Clayton Lobato

73
Opes -d, --delimiters=LIST -s, --serial Define um delimitador. Mostra de forma contnua os contedos, apresentando-o linearmente. Descrio

Tabela 13 Detalhamento de Opes do comando paste Exemplos: $paste teste teste1 $paste -d@ teste teste1 $paste -s teste teste1

14. pr
Descrio: Formata um arquivo texto para impresso.
Opes -a, --across Descrio Dimensiona o nmero de colunas. Caso a linha seja muito grande, esta ser truncada. Define um espao duplo para sada do arquivo. Usa o cabealho centralizado. Define a margem esquerda da pgina. Define a margem direita da pgina. Define a largura da pgina. Define o tamanho truncando linhas. da pgina,

-d, --double-space -h HEADER, --header=HEADER -o MARGIN, --indent=MARGIN -l PAGE_LENGTH,--length=PAGE_LENGTH -w PAGE_WIDTH, --width=PAGE_WIDTH -W PAGE_WIDTH, --page-width=PAGE_WIDTH

Tabela 14 Detalhamento de Opes do comando pr Exemplos: $pr -a teste $pr -d teste $pr -h Linux Professional Administrator teste $pr -o20 -l20 teste

15. sort
Descrio: Ordena o arquivo em ordem crescente ou decrescente.
Opes -r, --reverse -n, --numeric-sort Descrio Ordena de forma reversa o arquivo Ordena pela definio numrica, com um limite de preciso de 16 valores decimais. Usa o cabealho centralizado. Define a pgina. margem esquerda da

-m -o MARGIN, --indent=MARGIN

Guia Linux Professional Clayton Lobato

74
Opes -l PAGE_LENGTH,--length=PAGE_LENGTH -w PAGE_WIDTH, --width=PAGE_WIDTH -W PAGE_WIDTH, --page-width=PAGE_WIDTH Descrio Define a margem direita da pgina. Define a largura da pgina. Define o tamanho truncando linhas. da pgina,

Tabela 15 Detalhamento de Opes do comando sort Exemplos: $sort teste $sort -r teste

16. wc
Descrio: Conta as linhas, palavras e caracteres de um arquivo.

Opes
-c, --bytes -m, --chars -l, --lines -L, --max-line-length -w, --words

Descrio
Retorna o nmero de bytes. Retorna o nmero de caracteres. Retorna o nmero de linhas. Retorna o tamanho da maior linha. Retorna o nmero de palavras.

Tabela 16 Detalhamento de Opes do comando wc Exemplos: $wc -l base.txt $wc -L base.txt $wc -l base.txt

18. uniq
Descrio: Reporta ou omite linhas repetidas.
Opes -c, --count -d, --repeated -D, --all-repeated[=delimit-method] -f, --skip-fields=N -u, --unique -w, --check-chars=N Descrio Exibe o nmero de ocorrncias da linha. Exibe apenas as linhas duplicadas. Exibe todas as linhas duplicadas. Ignora a comparao de N campos de cada linha. Exibe apenas linhas nicas. Compara no mais que N caracteres por linha.

Tabela 18 Detalhamento de Opes do comando uniq Exemplos: $uniq -D arquivo.txt

Guia Linux Professional Clayton Lobato

75

19. sed
Descrio: Editor para filtrar ou alterar textos. Por ser um pouco complexo, veremos o sed baseado em alguns exemplos. O abaixo. Substituindo palavras em um arquivo. #sed s/clayton/alice/g /etc/registro.txt Substituindo palavras em determinadas linhas de um arquivo $sed 10,20s/luis/eduardo/ registro.txt Inserindo linhas em um arquivo. $sed 7a\ Insere texto aps a linha de nmero 15 do arquivo. $sed 15i Agora vamos inserir antes da linha de nmero 15. $sed 15c Apagamos as linhas 15, 16, 17 e 18 do arquivo. $sed 15,18d registros.txt Para apagarmos todas as linhas de um arquivo exceto as 13, 14, 15 e 16 usaremos $sed 13,16!d Para apagarmos todas as linhas que contm uma determinada palavra usaremos $sed /clayton/d registros.txt use Para apagarmos as linhas que esto entre a primeira ocorrncia de clayton at alice, $sed /clayton/,/alice/d registros.txt

20. cp
Descrio: Copia arquivos e diretrios.
Opes -a, --archive --backup[=CONTROL] -b -d -f, --force -i, --interactive -p --preserve[=ATTR_LIST] Descrio Ao similar ao uso de dpR. Cria cpia de backup, caso o arquivo exista no destino. O mesmo que --backup, porm no aceita argumento. Mesmo que --no-dereference preserve=link Fora a cpia mesmo que o destino, sendo um arquivo existente no possua permisso para ser sobrescrito. Modo interativo. Antes de sobrescrever um arquivo perguntado se confirma a ao. Preserva o nvel de permisso de acesso dos arquivos copiados. Preserva os valores especificados como (default:

Guia Linux Professional Clayton Lobato

76
Opes --no-preserve=ATTR_LIST -R, -r, --recursive Descrio mode,ownership,timestamps). No preserva os valores especificados. Copia diretrios recursivamente.

Tabela 20 Detalhamento de Opes do comando cp Exemplos: $cp -rp /etc/ ~./

21. find
Descrio: Localiza arquivos na estrutura de diretrio. O comando find para mim um dos coringas do sistema. Com ele podemos simplesmente desenvolver quase tudo, inclusive a chamada de execuo de um comando. Como o manual grande demais ( cerca de umas 20 pginas ) resolvi colocar aqui algumas situaes que acho bem interessantes para analisarmos o comportamento deste comando. Para mais detalhes, use o manual do comando $man find. Exemplos: $find / -type f -name x* -exec rm -f {} \; $find / -user clayton -size 20 k $find / -user clayton -size +20k -perm /u=w,g+x $find / -perm 446 ! -perm a+w $find / -size +20 K $find / -size -20 k $find / -type d -name docs -group administracao $find / -group suporte -type f -atime +1 (aceso - horas) $find / -group suporte -type f -mtime +1 (modificao horas) $find / -uid 1002 -amin 30 (acessado minutos) $find / -gid 1003 -mmin 45 (modificado - minutos) Acima usei alguns exemplos que demonstram o poder de busca e execues do comando find. Usei exemplos com execues de comandos, com busca por tipo de arquivo, por nomes, tamanhos, datas de acesse e criao. Existem outros comandos para localizar arquivos no GNU/Linux. Veremos alguns em exemplos bem prticos. Apesar de uma resposta um pouco mais rpido, nada muito significativo na grande maioria das vezes, usar o comando locate pode ser um tanto limitador. Para que seja eficiente, o comando locate precisa que sempre seja atualizado o arquivo /var/lib/mlocate/mlocate.db, que tratado pelo comando updatedb. Assim, teremos.. #updatedb #locate teste.conf O grande problema nos depararmos com a seguinte situao #updatedb

Guia Linux Professional Clayton Lobato

77 #touch teste.conf #locate teste.conf O resultado aqui no ser satisfatrio. O locate em sua pesquisa pelo arquivo mlocate.db, no ser encontrada nenhuma referncia do arquivo teste.conf. Para isso, precisaramos executar novamente o updatedb para atualizar a base de pesquisas. Temos ainda duas possibilidades especficas. A de buscarmos por arquivos binrios, fontes e pginas de manuais de comandos do sistema e obtermos o caminho absoluto de um comando. Veja os exemplos abaixo. $whereis bash Teremos como resultado.. bash: /bin/bash /usr/share/man/man1/bash.1.gz Para o comando which, teramos... $which bash Teremos o resultado... /bin/bash

22. mv
Descrio: Move ou renomeia arquivo.
Opes --backup[=CONTROL] -b -f, --force -i, --interactive Descrio Gera um backup caso exista um arquivo destino. Mesma ao do backup, porm no aceita argumentos. Fora a ao para questionamentos. sobrescrever um arquivo sem

Aguarda uma confirmao do usurio antes da execuo do comando.

Tabela 22 Detalhamento de Opes do comando mv. Exemplos: #mv arquivo.txt novo_nome.txt

23. ls
Descrio: Exibe o contedo de um arquivo. Seguindo o modelo que usei para o find, o comando ls possui muitas opes de execuo. Usarei exemplos para verificarmos as suas possibilidades. Exemplos: $ls -li $ls -lh / $ls -a

Guia Linux Professional Clayton Lobato

78 $ls -A $ls --color=auto $ls -ld /home $ls -lG /home $ls -lR / Existem alguns coringas que podero ser usados para auxiliar os comandos em algumas tarefas. Dentre vrios deles, destacaremos a ao dos redirecionadores de sada. Na execuo normal da maior parte dos comandos existentes no GNU/Linux, existir duas possibilidades de sada STDOUT e STDERR, ambos exibindo em tela o resultado do processamento. Para alterar o comportamento de sada desses comandos usamos os redirecionadores > (grava em um arquivo, substituindo-o caso o mesmo exista) >> (grava um arquivo, concatenando o resultado da sada ao arquivo existente, caso o mesmo exista). Veja os exemplos abaixo. $ls / > arquivo.txt $ls /etc >> arquivo.txt Nos exemplos acima, fizemos redirecionamentos da porta stdout. redirecionarmos a porta sdterr, usaremos comando como no exemplo abaixo. $ls -l / 2 > erros.txt Redirecionamos as mensagens de erro para o arquivo erros.txt. No exemplo seguinte, iremos tratar tanto das mensagens em stdout quanto as mensagens em stderr $ls -lR / > arquivo.txt 2>&1 Algo importante para se perceber zerar os arquivos sem que sejam apagados. Para isso usaremos o /dev/null, veja o exemplo. $cat /dev/null > arquivo.txt Uma forma de usarmos os comandos e os coringas do sistema seria por meio de shell scripts. Vejamos alguns exemplos. $vim teste.sh #! /bin/bash echo "Temos os seguintes browsers no sistema:" cat << navegadores mozilla links lynx konqueror opera netscape navegadores echo -n "Qual o seu navegador favorito? " read navegador Para

Guia Linux Professional Clayton Lobato

79 echo "Iniciando $navegador, aguarde..." $navegador No exemplo acima, usamos comandos comuns para escrever um script-shell. Observe o uso dos comandos cat, echo, read, e $ para chamar uma execuo. O comando echo exibir uma mensagem em tela e o read aguardar a digitao de algo pelo usurio. No somente uma forma de se usar os comandos do sistema, podemos desenvolver outras atividades envolvendo operadores aritmticos e lgicos. Vamos verificar o comportamento desses elementos.
Operadores var++, var-++var, --var !~ ** */% +<< >> <= >= < > != == & ^ | && || Outros operadores -eq -ne -gt -ge -lt [ -a arquivo ] [ -d arquivo ] [ -f arquivo ] [ -h arquivo ] [ -k arquivo ] [ -s arquivo ] [ -u arquivo ] Descrio Ps-Incremento e Ps-decremento. Pr-Incremento, Pr-decremento Negao Exponencial Multiplicao, Diviso e Resto Adio, Subtrao Deslocamento de bit para a esquerda e direita. Menor igual, Maior igual, menor, maior Diferente, igual Operador and Operador or exclusivo Operador or and lgico or lgico Descries igual a diferente de maior que maior ou igual a menor que Verdade se o arquivo existir. Verdade se o arquivo existe e um diretrio. Verdade se o arquivo existe e um arquivo regular. Verdade se o arquivo existe e um linksimblico. Verdade se o arquivo existe e est com o stickbit ativo. Verdade se o arquivo existe e se o tamanho maior que zero. Verdade se o arquivo existe e est com o Set User ID ativo.

Guia Linux Professional Clayton Lobato

80
[ -w arquivo ] [ -S arquivo ] [ arquivo1 -nt arquivo2 ] Verdade se o arquivo existe e tem nvel acesso de escrita. Verdade se o arquivo existir e for um socket. Verdade se o arquivo1 for mais recente que o arquivo2 ou se o arquivo1 existir e o arquivo2 no. Verdade se o arquivo1 for mais antigo que o arquivo2 ou se o arquivo2 existir e arquivo1 no.

[ arquivo1 -ot arquivo2 ]

Antes de vermos exemplos prticos, vamos estudar os modelos de condicionadores e loops if, for, while e case. O primeiro que veremos ser o if. A estrutura dele bem simples, nada de muito complexo. if [ condio ]; then comandos; fi observe no detalhe do encerramento da estrutura, temos o fi fechando-na. J o while se apresenta da seguinte maneira. while [ condio ]; do comandos; done O padro do for seguiria o seguinte modelo. for i in <instruo>; do comandos; done Finalizando, teremos o modelo de instruo do case, veja como tambm simples. case $var in $var) comandos ;; $var) comandos ;; $var) comandos

Guia Linux Professional Clayton Lobato

81 ;; esac Note que o grau de dificuldade das estruturas baixo. Veremos agora como desenvolver shell-scripts de uma forma simples, objetiva e tentando usar o maior relacionamento entre os comandos e os controles de loop. Importante lembrar que a maior parte da utilizao e desenvolvimento de shell para auxiliar na administrao do sistema. Por isso, tentarmos desenvolver sistemas comerciais nesse ambiente seria realmente complicado e pouso produtivo. Vamos aos exemplos de script-shell #!/bin/bash LIMIT=19 echo echo "exibindo ate 20, retirando os numeros 3 e 11." a=0 while [ $a -le "$LIMIT" ]; do a=$(($a+1)) if [ "$a" -eq 3 ] || [ "$a" -eq 11 ]; then continue fi echo "$a " done No exemplo acima foram usados o while e o if para exibir os valores de 1 20, exceto os nmeros 3 e 11. Note que basicamente o comando echo foi usado. Vejamos outro exemplo um pouco mais interessante. $vim teste_case.sh #!/bin/bash echo; echo "Digite algo:" read entrada case "$entrada" in [[:lower:]] [0-9] * esac ) echo "Letra Minuscula";; ) echo "Entrada em forma de Valor Numerico";; ) echo "Valor desconhecido";; [[:upper:]] ) echo "Letra Maiuscula";;

Guia Linux Professional Clayton Lobato

82 exit 0 Novamente, foi usado o comando echo para exibio de informaes na tela, em seguida, o read aguarda a digitao de algo pelo usurio e o case, faz a verificao do valor digitado pelo usurio. Os valores [[:lower:]] e [[:upper:]] verificam se a entrada digitada uma letra maiscula ou minscula, da mesma forma que o comando tr.

24. rm
Descrio: Remove arquivos ou diretrios.
Opes -d, --directory Descrio Remove diretrios com unlink(2) no lugar de rmdir(2), e no exige que um diretrio esteja vazio antes de tentar um unlink. Somente funciona se voc tiver privilgios apropriados. Porque ao desvincular um diretrio faz qualquer arquivo no diretrio apagado se tornar inacessvel, recomendado passar o fsck(8) no sistema de arquivos depois de fazer isto. Fora a remoo de um arquivo. Apaga o arquivo sem questionar. Questiona sobre a ao tomada para a remoo de um arquivo. Remove diretrios e todos o contedo recursivamente. Demonstra a execuo do comando.

-f, --force -i, --interactive -r, -R, --recursive -v, --verbose

Tabela 24 Detalhamento de Opes do comando rm. Exemplos: #rm -R teste/ $rm -fr base/ $rm -ir base/ $rm -fr base/

25. mkdir
Descrio: Cria novos diretrios
Opes -Z, --context=CONTEXT (SELinux) -m, --mode=MODE -p, --parents -v, --verbose Descrio Indica o contexto de segurana. Indica o nvel de permisso de acesso. Cria uma cadeia de dependncias de diretrios quando necessrio.

Imprime detalhes de execuo do comando. Tabela 25 Detalhamento de Opes do comando mkdir.

Guia Linux Professional Clayton Lobato

83 Exemplos: #mkdir -p {work/{rh,financeiro,suporte/{virus,compacta}},\ colaboradores/{clayton,eduardo}} $mkdir -p work/{rh,financeiro,suporte/{virus,compacta},\ colaboradores/{clayton,eduardo}}

26. rmdir
Descrio: Remove diretrios vazios.
Opes -p, --parents -v, --verbose Descrio Remove diretrios e sub-diretrios.

Mostra a execuo do comando. Tabela 26 Detalhamento de Opes do comando rmdir.

Exemplos: #rmdir base/ $rmdir -p base/testes/sistema

27. man
Descrio: Exibe o manual de comandos e servios.
Opes -C fich_config Descrio Indica o ficheiro de configurao a usar; por omisso ser usado /etc/man.config. (Veja man.conf(5).) Indica a lista de directrios onde procurar manuais. Sem esta opo, ser consultada a varivel MANPATH. Se tambm esta varivel estiver definida, uma lista ser obtida por consulta de /etc/man.config. Um directrio vazio em MANPATH representa a lista anterior.

-M path

-P paginador

Indica qual o paginador/visualisador a usar. Sem esta opo tentar consultar a varivel PAGER. Normalmente, man usar /usr/bin/less -is. Fornece a lista de seces (separadas onde procurar e por que ordem. opo substitui o que indicado varivel MANSECT quando esta definida por ,) Esta pela est

-S lista_sec

-a

Normalmente man mostra o primeiro manual que encontrar. Esta opo faz com que mostre todas as pginas de manuais encontradas para a entrada nome. No mostra o manual, imprimindo vria informao para debug.

-d

Guia Linux Professional Clayton Lobato

84
-f -k

Equivalente a whatis. Equivalente a apropos. Tabela 27 Detalhamento de Opes do comando man. Exemplos: #man -f samba #man -k samba

Existem mais dois comandos que podemos usar para verificar manuais. Vamos verificar os comandos apropos e whatis #whatis bash

#apropos bash

Tanto apropos quanto whatis precisam que seja sempre atualizado o banco de pesquisa, podendo ser feito com o comando #makewhatis.

28 info
Descrio: Exibe o manual de comandos e servios. O info outro comando usado para exibir ajuda para determinados comandos. Dois exemplos abaixo so suficientes para fazermos comparaes. Exemplos:

Guia Linux Professional Clayton Lobato

85 #info --show-options samba #info samba

29 tar
Descrio: Empacota arquivos em um arquivo tarball.
Opes -A, --catenate, --concatenate -c, --create -d, --diff, --compare -r, --append -t, --list -u, --update -x, --extract, --get --delete -C, --directory DIR -f, --file [HOSTNAME:]F -j, --bzip2 -p, --preserve-permissions -v, --verbose -z, --gzip, --ungzip ALL OPTIONS --owner USER -p, --same-permissions, --preserve-permissions Define o usurio na extrao do arquivo. Mantm arquivos os nveis de acesso dos Descrio Insere novo arquivo em um pacote. Cria um novo pacote. Verifica diferenas entre arquivos. Insere arquivo ao final de um arquivo tarball. Lista o contedo de um arquivo tarball. Apenda arquivos que foram alterados e fazem parte do pacote tarball. Extrai arquivos do um pacote tarball. Deleta um arquivo de um pacote tarball. COMMON OPTIONS Muda o diretrio. Define o arquivo de sado do comando. Usa o bzip2 para compactar um arquivo tarball e o bunzip2 para descompact-lo. Preserva os nveis de permisso de acesso. Executa em modo verbose. Detalhes de execuo do sistema. Usa o gzip para compactar um arquivo tarball e o gunzip para descompact-lo.

Tabela 29 Detalhamento de Opes do comando tar Exemplos: #tar -xzf cadastro.tar.gz nomes.txt

30 gzip
Descrio: Comprime ou expande arquivos.

Guia Linux Professional Clayton Lobato

86
Opes -d --decompress --uncompress -r --recursive -t --test -v verbose -# --fast best Descompacta o arquivo. Preserva a estrutura de diretrio, usando a recursividade. Verifica a integridade do arquivo compactado. Detalha a execuo do comando Determina o nvel de compresso. -1 ou - - fast executa com uma taxa de compresso menor, determinando uma ao mais rpida do comando e -9 ou - - best determina ao mais demorada, com taxa de compresso maior. Descrio

Tabela 30 Detalhamento do comando gzip Exemplos: #gzip -c teste > base.gz Para descomprimir um arquivo gz, usamos o comando gunzip.

31 bzip2
Descrio: a block-sorting file compressor, v1.0.3.
Opes -c --stdout -d --decompress -t --test -f --force Descrio Comprime e descomprime para sada padro. Fora a descompresso de arquivos bz2. Checa a integridade dos arquivos bz2. Fora a gravao de arquivos caso existam. Normalmente, se um arquivo bz2 existir, no poder ser reescrito. Determina a taxa de compresso para a execuo do comando. -1 ou - -fast com uma taxa de compresso menor e ao mais rpida e -9 ou - -best com ao mais lenta e taxa mais alta.

-1 (or --fast) to -9 (or --best)

Tabela 31 Detalhamento de Opes do comando crontab Exemplos: #bzip2 base.tar Para descomprimir um arquivo bz2, usamos o comando bunzip2.

32 crontab
Descrio: Agendamento de execues no sistema.
Opes -l -r Descrio Lista os agendamentos dos usurios Remove agendamentos do crontab.

Guia Linux Professional Clayton Lobato

87
Opes -e Descrio Edita base de agendamentos do crontab. Cada usurio ter um arquivo com seu nome de login no diretrio /var/spool/cron. Sempre que usado, essa opo abrir esse arquivo. Administra o crontab do usurio especificado, ao invs do usurio que o invocou.

-u

Tabela 32 Detalhamento de Opes do comando crontab Para que um usurio tenha acesso ao crontab, o mesmo dever ser inserido no arquivo /etc/cron.allow, caso este exista. Caso contrrio, existindo o arquivo /etc/cron.deny, todos os usurios que no devem ter acesso ao servio devem ser includos no mesmo. No arquivo /etc/crontab, podemos incluir alguns agendamentos de sistema. Todos os usurios no cadastrados no arquivo /etc/cron.deny poder agendar uma tarefa no crond. Os agendamentos sero armazenados no diretrio /var/spool/cron, em arquivos com o nome do usurio. Cada usurio ter um arquivo registrado no diretrio, desde que use o comando $crontab -e. Exemplos: #crontab -e -u clayton

33 ps
Descrio: Exibe os processos em execuo no sistema.
Seleo Simples de Processo. Opes -A -N T -a Descrio Seleo simples de processos. Seleciona todos os processos exceto aqueles especificados na condio. Seleciona todos os processos associados a um terminal. Seleciona todos os processos associados, a no ser lderes de processos e processos no relacionados com um terminal. Seleciona todos os processos exceto lderes de sees. Seleciona todos os processos, idntico ao -A. Restringi a seleo apenas para processos que esto em execuo. Exibe os processos em execuo. Seleciona por linha de comando. Exibe processos por grupo. Seleciona os processos por usurio. Aqui voc notar a linha completa de execuo do processo. Seleciona os processos por usurio. Aqui teremos uma forma mais resumida de exibio. Seleciona os processos por grupo. Seleciona o processo por PID. Ao idntica ao -p and - -pid.

-d -e r x -C cmdlist -G grplist U userlist -U userlist -g grplist p pidlist

Guia Linux Professional Clayton Lobato

88
Seleo Simples de Processo. t ttylist D R S T W X Z Seleciona o processo por terminal. Ao idntica ao -t and tty. Processo aguardando para continuar a execuo Processo em execuo. Processo em sleep, aguardando para continuar a execuo. Processo parado. Paginao Processo morto. Processo zumbi.

Tabela 33 Detalhamento de Opes do comando ps Exemplos: #ps -eLf #ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

34 kill
Descrio: Mata um processo.
Opes n -1 -n commandname -s signal -l -a Descrio Informa o valor do PID do processo. Todos os processos maiores que 1 sero sinalizados. Todos os processos do grupo de -n sero sinalizados. Todos os processos chamados pela linha de comando sero sinalizados. Especifica a ao da sinalizao. Imprime a lista de aes do kill. Podemos encontrar a lista completa em /usr/include/linux/signal.h Sinaliza todos os processos de um determinado UID.

Tabela 34 Detalhamento de Opes do comando kill Exemplos: #kill -9 2134 2543

35 killall
Descrio: Mata um processo pelo nome.
Opes -e, --exact -I, --ignore-case Descrio Requer o nome exato para examinar nomes de comandos maiores que 15 caracteres. No diferencia letras em maisculo e minsculo.

Guia Linux Professional Clayton Lobato

89
Opes -i, --interactive -l, --list -q, --quiet -r, --regexp -s, --signal -u, --user -v, --verbose Descrio Modo interativo. Questiona se o processo ser morto. Exibe todos os sinais conhecidos. No exibe se o processo foi morto. Interpreta processos com meta caracteres no nome. Envia um sinal para o processo. Mata somente os processos de um determinado usurio. Mostra detalhamentos da execuo do processo.

Tabela 35 Detalhamento de Opes do comando killall Exemplos: #killall -u clayton

36 nice
Descrio: Define um nvel de prioridade de execuo para um processo .

Opes
-n, --adjustment=N --help --version

Descrio
Adiciona o n inteiro como prioridade. Como padro teremos o 10. Exibe o help

Exibe a verso do sistema Tabela 36 Detalhamento de Opes do comando nice

Exemplos: #nice -n -6 script.sh

37 renice
Descrio: Altera a prioridade de um processo em execuo.

Opes
-g -u

Descrio
Determina o gid do processo.

Determina o nome do usurio. Tabela 37 Detalhamento de Opes do comando renice

Exemplos: #renice +1 987 -u daemon root -p 32 De uma forma geral, gerenciar processos est relacionado com a capacidade de determinar o que estar rodando em seu sistema. Os comando visto acima, so os mais comuns para gerenciamento de processos, porm no nicos. Imagine o seguinte. Acabamos de escrever um script, que chamaremos de base.sh. Precisamos colocar este em ao para garantir o funcionamento de uma aplicao maior que aguarda o resultado do processamento do base.sh. Primeira ao que vem em mente.. Rodar o base.sh, o que faremos com a linha abaixo. #./base.sh

Guia Linux Professional Clayton Lobato

90 Parabns, script em execuo e sua console est locada pelo processamento do mesmo. Para liberarmos a tela da console, precisamos colocar o script rodando em background, o que faremos de uma forma diferente apenas para adiantar um pouco alguns novos comandos. Em primeiro lugar, iremos gerar um processo em segundo plano, em estado de stop. Para isso use as teclas <ctrl> z. Observe que sua tela no est mais locada com o processo. Com o auxlio do comando jobs, podemos visualizar os processos que esto em segundo plano, como demonstro abaixo. #jobs Colocaremos o processo rodando em segundo plano. Para isso, use o comando bg. A sintaxe do comando bg est relacionada com o nmero de identificao do processo em relao ao job, a fila de processamento em segundo plano. Ento, para definirmos a execuo do processo que est identificado no jobs com o nmero 3, use o comando abaixo. #bg 3 Startamos o processo em segundo plano. Para coloc-lo em primeiro plano, basta se seja usado a linha abaixo, com o comando fg. #fg 3 Para resumirmos um pouco. Vamos rodar um processo em segundo plano, permitindo que o mesmo continue rodando mesmo que seja efetuado logout na console. #nohup teste.sh & Trocando em midos... nohup ----- > libera o processo da console. &-----> coloca o processo em segundo plano.

38 mount / umount
Descrio: Monta / desmonta um dispositivo. Antes de descrevermos o comando mount, precisamos entender o conceito de ponto de montagem e sua relao com os dispositivos. Na busca por definir um ponto de montagem, ler vrios livros a respeito de file system alm de conversar com muitos tcnicos, chego a seguinte concluso. Ponto de montagem qualquer diretrio do sistema. Isso mesmo. Podemos usar qualquer diretrio como ponto de montagem. Claro que alguns daro um pouco de trabalho usar, por serem de uso do prprio sistema. Porm, qualquer diretrio criado por um usurio ou que no possuam informaes necessrias para o funcionamento do sistema um ponto de montagem. Os pontos de montagem servem para nos dar acesso aos dados armazenados em um volume, seja um cd, seja um disco SCSI. Todo e qualquer dado armazenado em disco ser disposto ao usurio pelo ponto de montagem, porm, alguns volumes s podero ser retirados do sistema aps serem

Guia Linux Professional Clayton Lobato

91 desmontados. Vejamos um exemplo para ficar mais fcil o entendimento. Sempre que colocado um cd no driver, o sistema ir reconhecer o montar o volume para dar acesso aos dados armazenados nele. Para retir-lo, do driver, desmonte-o antes, at porque a gaveta no abrir se o dispositivo estiver montado. Hoje em dia, no nos preocupamos mais com as montagens e desmontagens do cd, pen drivers, e afins... Antigamente as coisas funcionavam mais ou menos assim. #mount /dev/cdrom /mnt/cdrom #umount /mnt/cdrom Observe que montei o dispositivo de cd no /mnt ( o /mnt sempre foi colocado como o ponto onde estariam todas montagens secundrias do sistema, como os dispositivos de cd, disquetes, outros hds com dados como msicas por exemplo ) e para retirar o disco da gaveta, precisarei desmontar, o segundo comando demonstra essa ao. Observe ainda que para montar o cd, foi necessrio especificar a origem (ou seja, o dispositivo - /dev/cdrom) e o ponto de montagem ( aqui o /mnt/cdrom ) . Para otimizar essa ao, podemos configurar as relaes de montagem no arquivo /etc/fstab. O seu formato padro demonstro abaixo. /dev/sda1 devpts tmpfs /dev/sda2 proc sysfs / /dev/pts /dev/shm /home /proc /sys ext3 devpts tmpfs ext3 proc sysfs defaults gid=5,mode=620 defaults defaults defaults defaults 11 00 00 12 00 00

Vamos ordena-lo da esquerda para a direita. Na primeira coluna, teremos os dispositivos que iremos montar. Na segunda o ponto de montagem no sistema. A terceira coluna informa o tipo de file system usado, a quarta o comportamento da ao desmontar, a quinta nos dar a prioridade de montagem dos dispositivos. Durante o processo de boot do sistema, o fstab ser lido para informar quais parties sero montadas durante esse processo. Todos os que possurem defaults sero montados automaticamente ou com o comando mount -a. Para sabermos o que est montado no sistema, basta usarmos o comando mount ou exibir o contedo do arquivo /proc/mounts. Aproveitando que estamos falando de volumes, veremos os comando df e du e os mecanismos de quota em discos. Muitos alunos questionam como verificar a volumetria dos discos no GNU/Linux e como determinar uma cota de armazenamento para grupos e usurios. Podemos acompanhar o consumo de disco usando o comando df, como demonstrado abaixo. #df -h Sist. Arq. /dev/sda1 Tam 6,7G Usada 4,2G 2,2G Disp 66% Uso% / Montado em

Guia Linux Professional Clayton Lobato

92 tmpfs /dev/sda2 /dev/sdb1 501M 48G 244M 0 52M 501M 192M 0% 1% 22% /dev/shm /home /media/Pen

277M 45G

Teremos um pequeno relatrio com o sistema de arquivo (volume), o tamanho total do disco, o que est sendo realmente usado, o que est disponvel, o percentual usado do disco e o ponto de montagem. O comando du, nos dar o tamanho de um arquivo ou diretrio. Veja o exemplo. #du -sh /etc Ser exibido apenas o total, ao conhecida como summarize. #du -h /etc/samba/smb.conf Ser exibido o tamanho do arquivo smb.conf. Mas tem algo que realmente deixa meus alunos muito estranhos... O poder das quotas em discos Determinar as quotas informar ao kernel do sistema que determinado usurio ou um determinado grupo ter uma capacidade limitada de armazenamento em disco . As quotas esto relacionadas ao volume. Cada disco ou partio de disco poder ter uma quota diferente para cada usurio. Vamos determinar algumas quotas para o disco hda3. O primeiro passo alterar o arquivo fstab e informar ao sistema que a partio em questo ter o mecanismo de quota ativo. Veja como ficaria no exemplo abaixo. /dev/hda3 /dados ext3 defaults,usrquota,grpquota 11

Para o disco hda3 que est montado em /dados, sero configuradas quotas para usurios e grupos. Seguindo o processo, necessrio carregar as novas informaes. Para isso, vamos reiniciar o computador ou podemos simplesmente desmontar e montar novamente o volume. O passo seguinte criarmos os arquivos onde estaro as informaes de quotas dos usurios e grupos. Para isso, execute o comando abaixo. #quotacheck -mcug /dados Observe que no diretrio /dados sero criados dois arquivos, aquota.user e aquota.group, neles encontraremos as quotas configuradas no sistema. Feito isso, precisamos ativar o sistema de quotas. #quotaon -a Agora, o que nos resta configurar as quotas para usurios e grupos. Usaremos o comando edquota, veja #edquota -u clayton #edquota -g suporte Para ambos encontraremos a seguinte situao.

Guia Linux Professional Clayton Lobato

93

Edite os parmetros soft e hard para definir uma taxa lgica e um limitador fsico. Aqui vale ressaltar que saudvel que se coloque o soft sempre menor que o hard. Sempre que atingir o limite soft, o sistema de quotas ativa o grace period, uma espcie de contador de tolerncia para usurios e grupos. Assim que atingido o limite soft, o tempo contado e caso haja necessidade de apagar alguns arquivos para retornar a um estado tolervel de uso de disco, abaixo do soft, o sistema o far. O parmetro hard o ponto limite do espao em disco. Assim que atingido, nenhum arquivo poder ser gravado pelo usurio. Para alterarmos o grace period, use o comando #edquota -ut para grace de usurios e #edquota -gt para grupos e altere os parmetros como demonstrado abaixo.

Mude os valores do grace period para reduzir o tempo de tolerncia. Para obter informaes sobre as quotas de usurios e grupos execute os comandos #quota -u <usurio> #quota -g <grupo> #repquota -a

Guia Linux Professional Clayton Lobato

94

Guia Linux Professional Clayton Lobato

95

Captulo 6 - Instalao e compilao de programas e compilao do Kernel.


Algo que certamente diferenciar um bom administrador de sistema de um administrador mediano o conhecimento de mecanismos de instalao dos programas. No universo GNU/Linux, precisamos conhecer os dois padres mais usados ( .deb e .rpm) e os processos para instalar um programa a partir do seu cdigo fonte, mtodo esse muito usado para personalizar o funcionamento de programa.

Guia Linux Professional Clayton Lobato

96

Guia Linux Professional Clayton Lobato

97

Processo de compilao de programas.


Dentre todas as formas de instalao, a compilao a que mais trs transtornos para grande parte dos usurios do sistema. Pensando em facilitar o entendimento desse processo, seguiremos os passos demonstrados abaixo. Para compilarmos um programa, necessrio termos algumas ferramentas instaladas no GNU/Linux, preparando assim o ambiente de trabalho. O primeiro passo para pensarmos em compilar um programa no GNU/Linux termos os fontes do kernel no diretrio /usr/src. Feito isso, certifique-se que todos os tpicos da listagem abaixo estejam cumpridos. 1. gcc 2. glibc 3. make 4. tar 5. bzip2 6. bunzip2 7. kernel-source Aps termos criado o ambiente necessrio para a compilao, passamos ento para o tratamento do arquivo fonte. Aqui demonstraremos a instalao do SQUID com algumas particularidades. Primeiro vamos desempacotar e descompactar o cdigo fonte. [root@clayton ~]# ls squid-2.6.STABLE3-20060916.tar.gz squid-2.6.STABLE3-20060916.tar.gz Observe o que o nosso pacote do tipo tar.gz o que nos obriga a utilizar a linha de comando abaixo. [root@clayton ~]# tar -zxvf squid-2.6.STABLE3-20060916.tar.gz importante observarmos esses detalhes para que no faamos confuso no hora de trabalhar. Existe a possibilidade de termos cdigos fonte do tipo tar.bz2, nesse caso usaramos os parmetros -jxvf junto ao comando tar. Aps desempacotar e descompactar o arquivo fonte, precisamos compilar o programa. Veja abaixo:
[root@clayton squid-2.6.STABLE3-20060916]#./configure prefix=/usr --sysconfdir=/etc/squid -libexecdir=/usr/lib/squid --infodir=/usr/share/info --mandir=/usr/share/man enable-delay-pools -enable-useragent-log --enable-cachemgr-hostname=clayton enable-arp-acl --enable-default-errlanguage="Portuguese" --enable-underscores --disable-htcp disable-internal-dns --enable-cachedigests

checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes

Guia Linux Professional Clayton Lobato

98 checking whether to enable maintainer-specific portions of Makefiles... no checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking whether gcc and cc understand -c and -o together... yes checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for pkg-config... /usr/bin/pkg-config Store modules built: ufs Removal policies built: lru Delay pools enabled User-Agent logging enabled Cachemgr default hostname set to clayton . . . config.status: creating helpers/ntlm_auth/fakeauth/Makefile config.status: creating helpers/ntlm_auth/mswin_sspi/Makefile10 config.status: creating helpers/ntlm_auth/no_check/Makefile config.status: creating helpers/ntlm_auth/SMB/Makefile config.status: creating helpers/ntlm_auth/SMB/smbval/Makefile config.status: creating helpers/negotiate_auth/Makefile config.status: creating helpers/negotiate_auth/mswin_sspi/Makefile config.status: creating helpers/external_acl/Makefile config.status: creating helpers/external_acl/ip_user/Makefile config.status: creating helpers/external_acl/ldap_group/Makefile config.status: creating helpers/external_acl/mswin_lm_group/Makefile config.status: creating helpers/external_acl/session/Makefile

Guia Linux Professional Clayton Lobato

99 config.status: creating helpers/external_acl/unix_group/Makefile config.status: creating helpers/external_acl/wbinfo_group/Makefile config.status: creating tools/Makefile config.status: creating include/autoconf.h config.status: executing depfiles commands [root@clayton squid-2.6.STABLE3-20060916]# make Making all in lib make[1]: Entering directory `/root/squid-2.6.STABLE3-20060916/lib' if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include Array.o -MD -MP -MF ".deps/Array.Tpo" -c -o Array.o Array.c; \ if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include base64.o -MD -MP -MF ".deps/base64.Tpo" -c -o base64.o base64.c; \ 1; fi -Wall -g -O2 -MT

then mv -f ".deps/Array.Tpo" ".deps/Array.Po"; else rm -f ".deps/Array.Tpo"; exit 1; fi -Wall -g -O2 -MT

then mv -f ".deps/base64.Tpo" ".deps/base64.Po"; else rm -f ".deps/base64.Tpo"; exit

if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include -Wall -g -O2 -MT getfullhostname.o -MD -MP -MF ".deps/getfullhostname.Tpo" -c -o getfullhostname.o getfullhostname.c; \ then mv -f ".deps/getfullhostname.Tpo" ".deps/getfullhostname.Po"; else rm -f ".deps/getfullhostname.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include hash.o -MD -MP -MF ".deps/hash.Tpo" -c -o hash.o hash.c; \ if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include heap.o -MD -MP -MF ".deps/heap.Tpo" -c -o heap.o heap.c; \ -Wall -g -O2 -MT

then mv -f ".deps/hash.Tpo" ".deps/hash.Po"; else rm -f ".deps/hash.Tpo"; exit 1; fi -Wall -g -O2 -MT

then mv -f ".deps/heap.Tpo" ".deps/heap.Po"; else rm -f ".deps/heap.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include -Wall -g -O2 -MT html_quote.o -MD -MP -MF ".deps/html_quote.Tpo" -c -o html_quote.o html_quote.c; \ then mv -f ".deps/html_quote.Tpo" ".deps/html_quote.Tpo"; exit 1; fi ".deps/html_quote.Po"; else rm -f

if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include iso3307.o -MD -MP -MF ".deps/iso3307.Tpo" -c -o iso3307.o iso3307.c; \

-Wall -g -O2 -MT

then mv -f ".deps/iso3307.Tpo" ".deps/iso3307.Po"; else rm -f ".deps/iso3307.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I../include -I../include -I../include md5.o -MD -MP -MF ".deps/md5.Tpo" -c -o md5.o md5.c; \ . . . -Wall -g -O2 -MT

Guia Linux Professional Clayton Lobato

100 gcc -Wall -g -O2 -lmiscutil -lm -lbsd -lnsl -g -o cachemgr.cgi cachemgr__CGIEXT_-cachemgr.o -L../lib

make[2]: Leaving directory `/root/squid-2.6.STABLE3-20060916/tools' make[1]: Leaving directory `/root/squid-2.6.STABLE3-20060916/tools' make[1]: Entering directory `/root/squid-2.6.STABLE3-20060916' make[1]: Nada a ser feito para `all-am'. make[1]: Leaving directory `/root/squid-2.6.STABLE3-20060916' [root@clayton squid-2.6.STABLE3-20060916]# make install /usr/bin/install -c 'cachemgr.cgi' '/usr/lib/squid/cachemgr.cgi' /usr/bin/install -c -m 644 ./cachemgr.conf /etc/squid/cachemgr.conf make[3]: Leaving directory `/root/squid-2.6.STABLE3-20060916/tools' make[2]: Leaving directory `/root/squid-2.6.STABLE3-20060916/tools' make[1]: Leaving directory `/root/squid-2.6.STABLE3-20060916/tools' make[1]: Entering directory `/root/squid-2.6.STABLE3-20060916' make[2]: Entering directory `/root/squid-2.6.STABLE3-20060916' make[2]: Nada a ser feito para `install-exec-am'. make[2]: Nada a ser feito para `install-data-am'. make[2]: Leaving directory `/root/squid-2.6.STABLE3-20060916' make[1]: Leaving directory `/root/squid-2.6.STABLE3-20060916' [root@clayton squid-2.6.STABLE3-20060916]# Caso todos os passos acima tenham sido executados com sucesso, parabns, voc acaba de compilar o squid. Agora basta configurar o servio e coloc-lo em ao! Basicamente o processo de compilao se faz em trs etapas. O ./configure, caso haja junto ao fonte, o make e o make install. Nunca devemos esquecer das bibliotecas e requisitos necessrios, a ausncia delas te tomar um bom tempo de trabalho e alguns erros. Algo importante lembrar da necessidade de informar ao ./configure o local onde sero colocados os arquivos, caso contrrio, ser criada uma estrutura no /usr/local com o nome do pacote em uso. No caso de nosso exemplo o squid.

Guia Linux Professional Clayton Lobato

101

Pacotes RPM
Criado pela Red Hat, o Red Hat Package Manager (rpm) o mais popular de todos os gerenciadores de pacotes. Us-lo bem simples e um grande nmero de distribuies adotou o como sendo o gerenciador de pacotes. Dentre outras informaes, temos nos pacotes rpm: 1. Arquivos da aplicao compactados 2. Nome e verso do pacote 3. Data de criao 4. Descrio do pacote e da aplicao 5. Informaes de quem criou o pacote 6. MD5 checksum para verificao de integridade do pacote 7. Outros pacotes requeridos (dependncias) Entendendo o nome de pacote rpm, termos ethereal-0.8.9-1.i386.rpm
ethereal = Nome do pacote -0.8.9 -1 .i386 .rpm = Verso = Patch = Arquitetura = Extenso rpm

Trocando em midos ... O pacote acima est na verso 0.8.9 e este a primeira compilao do mesmo, sendo que foi compilado para a arquitetura i386, padro intel. Vantagens e desvantagens do formato As vantagens de utilizar os pacotes RPM em com relao a outro mtodos de adquirir e instalar software so:

Um mtodo uniforme para o usurio instalar programas. Maior simplicidade para desinstalar os programas.

Popularidade: muitos pacotes disponveis, mesmo que eles comumente precisem de uma recompilao para funcionarem em uma outra distribuio.

Instalao no-interativa: facilita uma instalao automtica. Cdigo-fonte original includo (.tar.gz, .tar.bz2): fcil de verificar. Verificao criptogrfica com o GPG e o md5.

As desvantagens citadas incluem:


Comumente tem mudanas no formato de pacote incompatveis com verses anteriores.

Documentao incomplete e desatualizada. Pouca aprendizagem sobre os pacotes.

Guia Linux Professional Clayton Lobato

102 O RPM tambm vem sendo criticado pela falta de consistncia no nome e contedo dos pacotes, o que pode dificultar o manejo automtico de dependncias. Entretanto, este problema no ocorre apenas no formato RPM, mas um problema na maioria das distribuies que usam os pacotes RPM tais como o Red Hat, SuSE e Mandrake (Mandriva) Linux. Base de dados RPM Atrs do gerenciador de pacotes est o banco de dados rpm. Ele consiste de uma lista duplamente ligada que contm todas as informaes de todos os rpm instalados. O banco da dados lista todos os arquivos que so criados ou modificados quando um usurio instala um programa e facilita a remoo destes mesmos arquivos. Se o banco de dados fica corrompido (o que acontece facilmente se o cliente de rpm fechado subitamente), as ligaes duplas garantem que eles possa ser reconstrudo sem nenhum problema. No computadores com o sistema operacional RedHat instalado, este banco da dados se encontra em /var/lib/rpm. Agora que fomos apresentados aos pacotes rpm, vamos entender o comando rpm.

RPM
Descrio: RPM Gerenciador de Pacotes .rpm

Opes Opes Gerais


--quiet -v -vv --rcfile FILELIST

Descrio
Normalmente somente as mensagens de erro sero apresentadas. Mostra o comando. detalhamento da execuo do

Imprime informaes de debug da execuo do comando. Informaes de configurao de instalao do pacote RPM. O padro ter as informaes separadas por dois pontos como no exemplo. /usr/lib/rpm/rpmrc:/usr/lib/rpm/redhat/rpmrc:/etc/r pmrc:~/.rpmrc. Informa o caminho para normalmente em /var/lib/rpm a base RPM,

--dbpath DIRECTORY --root DIRECTORY

Informa o diretrio usado, no qual encontraremos a base para verificao de dependncias dos pacotes. Opes de Instalao e upgrade Adiciona pacotes ajustando as necessidades de operao. Instala ou atualiza todos os arquivos do pacote mesmo que existam. No instala arquivo de manuais. O mesmo que --replacepkgs, --replacefiles, e oldpackage.

--aid --allfiles --excludedocs --force

Guia Linux Professional Clayton Lobato

103

Opes
-h, --hash

Descrio
Imprime o hash durante o processo de instalao. Usado pelo modo verbose para acompanhamento do processo. No checa se h espaos para instalao do pacote. Permite a instalao de pacotes mesmo se a arquitetura dos binrios e da mquina no sejam combinantes. Permite a instalao ou atualizao de pacotes mesmo que o sistema operacional dos binrios e do pacote no forem combinantes. Instala a documentao do pacote. Atualiza o banco de pacotes mas no o sistema. No verifica cabealhos do pacote ao ler. No verifica pacotes. assinaturas de cabealhos de

--ignoresize --ignorearch

--ignoreos

--includedocs --justdb --nodigest --nosignature --nodeps --noorder

No verifica dependncias aps instalao ou atualizao de pacotes. No reordena os pacotes para a instalao. A lista de pacotes normalmente ser reordenada para satisfazer dependncias. Redefine o caminho caminha dos pacotes no processo de instalao. No instala os pacotes, apenas checa o nvel de conflito do mesmo. ERASE OPTIONS Remove todas as verses de um pacote. Em caso de mltiplos pacotes, uma mensagem de erro exibida. No checa dependncias na desinstalao de um pacote. QUERY OPTIONS

--prefix NEWPATH --test

--allmatches

--nodeps

--qf|--queryformat QUERYFMT -a, --all -f, --file FILE -c, --configfiles -d, --docfiles --filesbypkg -i, --info Pesquisa por todos os pacotes instalados. Pesquisa pelos arquivos de um pacote instalado. PACKAGE QUERY OPTIONS: Lista somente os arquivos de configurao de um pacote. Lista somente os arquivo de manuais de um pacote. Lista todos os arquivos relacionados a um pacote. Lista informaes do pacote.

Guia Linux Professional Clayton Lobato

104

Opes
--last -l, --list -R, --requires --scripts -s, --state

Descrio
Ordena a exibio dos pacotes, mostrando quais foram os ltimos instalados aos primeiros. Lista todos os arquivo de um pacote. Lista as dependncias de um pacote. Lista os scripts usados desinstalao de um pacote. na instalao e

Mostra informaes dos arquivos de um pacote, informando se o mesmo est instalado, desinstalado ou reinstalado.

Tabela 1 Detalhamento de Opes do comando rpm Exemplos: #rpm -qial samba #rpm -ivh samba-3.0.9-1.i386.rpm #rpm -e samba*.rpm

Pacotes DEB
Um outro padro de pacotes existente no mundo linux o desenvolvido pela distribuio DEBIAN, os famosos pacotes .deb. Estudaremos nesse captulo o comando dpkg . O primeiro passo que daremos ser a localizao das informaes dos pacotes. O dpkg mantm as informaes basicamente em dois arquivos, /var/lib/dpkg/avliable e /usr/lib/dpkg/status. O primeiro possui a lista de pacotes disponveis e o segundo o status dos pacotes.

DPKG
Descrio: Debian Gerenciador de Pacotes .deb

Opes
-E -G -R -i -l No substitui verso.

Descrio
um pacote de mesma

Sobrescreve um pacote existente, mesmo de verses antigas. Processa um conjunto de pacotes dentro de um diretrio. Instala um pacote Usa a chave de busca para lista os pacotes que contenham referncia a essa chave. Lista os arquivos instalados por um pacote Lista um conjunto relacionadas ao pacote de informaes

-L --print-avail nomepacote

Guia Linux Professional Clayton Lobato

105

Opes
--purge -r -s -S --unpack --configure

Descrio
Remove todo o pacote Remove todos os arquivos do pacote menos os de configurao Mostra o status do pacote Procura por um arquivo nos pacotes instalados. Desempacota instala um pacote, porm no

Configura um pacote no instalado.

Tabela 5.1 Detalhamento de Opes do comando dpkg Exemplos: #dpkg -s samba #dpkg -i samba*.deb #dpkg purge samba #dpkg -r samba

Guia Linux Professional Clayton Lobato

106

Kernel do Linux
No novidade para ningum que sou um apaixonado pelo kernel. Estudar as possibilidades de tunning do kernel realmente desafiador. Aqui terei que ser realmente bem objetivos seno nunca terminarei esse material, o que realmente est acontecendo. Nessa etapa, vamos avaliar os mecanismos bsicos para compilar o kernel, gerenciamento dos mdulos, e atualizao de um path do kernel. O primeiro passo ser efetuar o download da ltima verso estvel do kernel no site www.kernel.org. Feito isso .. Vamos ao que realmente interessa. Algumas regras devem ser seguidas. Em primeiro lugar, devemos colocar o fonte do kernel no diretrio /usr/src/linux, isso pode ser feito seguindo os passos abaixo. #mv linux-2.6.21.5.tar.bz2 /usr/src/ #tar -jxvf linux-2.6.21.5.tar.bz2 #ln -s linux-2.6.21.5 linux Verifique se o pacote ncurses est instalado, ele ser usado quando solicitarmos ao make que execute o menuconfig o qual ser usado para configurarmos de uma forma mais amigvel o kernel. Precisamos definir como ser o comportamento do kernel. de extrema importncia determinarmos o que ser colocado na parte monoltica e o que ser colocado na parte modular. No existe uma receita de bolo que ir ensinar o que deve ser feito nessa etapa, para cada sistema, cada hardware usado existir um estudo de como preparar o kernel para atender de forma satisfatria a suas necessidades. Usando uma o comando make configuradores. Vejamos mais sobre eles. podemos fazer chamada por um dos 4

1. config Menu de configurao basicamente texto. Ser exibido linha a linha as opes do kernel. 2. menuconfig Ambiente mais amigvel de configurao. Aqui existir uma tela simples, em ambiente console, que nos dar a possibilidade de escolhas de cada opo do kernel. 3. xconfig Aqui, necessitamos do ambiente grfico. Ser criado uma tela bem amigvel de configurao, com o uso do mouse. 4. oldconfig Esse um dos coringas do sistema. Com ele podemos aproveitar as configuraes feitas em verses anteriores do kernel, evitando assim a perda de otimizaes e simplificando a utilizao de novas verses do kernel. Usaremos o menuconfig para prepararmos o sistema para compilao. Veja os passos abaixo para configurao do sistema. Configurado, tudo o que fizermos nessa etapa ser gravado no arquivo .config, o qual ser lido pelo processo de compilao para poder determinar o que ser feito com o cdigo. Vamos a configurao do kernel ento. Use os passos descritos abaixo. #cd /usr/src/linux

Guia Linux Professional Clayton Lobato

107 #make menuconfig A tela abaixo a tela de configurao do kernel. Entre nas categorias e defina o comportamento de cada uma das opes. Super importante determinar com exatido o que ser realmente usado. Sua escolha poder onerar o sistema inteiro, torn-lo lento ou mesmo inutilizado. Entenda como monoltico tudo aquilo que ser compilado junto ao ncleo do kernel e modular o que ser compilado em separado e chamado quando necessrio. Veja a tela de configurao do kernel.

Tela inicial de configurao do kernel. No existem receitas de bolo para desenvolver um processo de compilao do kernel do sistema. Sempre coloco apenas duas regras para um kernel mais interessante. Se o sistema estiver sendo usado para um servidor em produo, retire o kernel hacking este conjunto do kernel usado para debugar o sistema, muito usado por desenvolvedores do kernel. Retire ainda os pacotes que possuem descrio como experimental, eles no oferecem muitas garantias. Se o sistema estiver sendo usado para usarmos como base de estudos, interessante que sejam colocados todo e qualquer recurso que se queira testar. Fica ao critrio de cada administrador.

Guia Linux Professional Clayton Lobato

108

Interessante tambm habilitarmos em General Setup a opo Kernel .config support. Aps configurar o kernel, salve o que foi feito e vamos adiante.

Execute os comandos abaixo para compilar o kernel. #make clean Essa etapa limpar as ligaes desnecessrias. #make bzImage Aqui realmente ser a compilao do nosso kernel. Ao final da compilao ser criado o arquivo /usr/src/linux/arch/i386/boot/bzImage, este a imagem do kernel compilada,

Guia Linux Professional Clayton Lobato

109 a parte monoltica. Mais adiante retornaremos a este arquivo para coloc-lo me ao junto ao grub. #make modules Compilaremos aqui os mdulos do sistema. Tudo o que foi marcado para ser modular ser tratado de forma mais especfica nessa etapa do processo. Todos os binrios dos mdulos sero criados nessa etapa. #make modules_install Com modules_install ser criado um diretrio referente aos mdulos compilados para essa verso do kernel, em /lib/modules. Os mdulos sero copiados para o diretrio criado, mantendo a ordem do sistema. Se tudo deu certo execute o comando mkinitrd para gerar um arquivo em /boot com as informaes dos mdulos que sero usados para a carga do sistema. Veja abaixo #mkinitrd /boot/initrd-2.6.21.5.img 2.6.21.5 importante sabermos exatamente o nome do diretrio criado durante o processo de instalao dos mdulos no passo #make modules_install, ele ser usado aqui para passar a fonte de pesquisa para o mkinitrd. Agora basta copiar o arquivo gerado pelo make bzImage para dentro do /boot com o nome vmlinuz-<verso_kernel>. Todos os passos acima feitos, configure seu boot loader e boa sorte. Precisamos conhecer como gerenciar os mdulos do kernel, haja vista que precisamos deles para podermos colocar nosso sistema em funcionamento. Conceitualmente podemos ligar e desligar os mdulos a qualquer momento, mas para isso, precisamos conhecer o que est sendo ou no usado e como determinar a ao sobre os mdulos. Vermos abaixo um conjunto de comandos usados para a administrao especfica dos mdulos do sistema, usados pelos dispositivos, por aplicaes e o prprio kernel. Se usarmos o comando lspci, veremos os dispositivos identificados pelo kernel durante o boot do sistema, na etapa de exploso em memria. Mais uma vez chamo a ateno para o fato de um dispositivo ter sido identificado, no significa que o kernel ter interao com o mesmo, isso se dar com o uso dos mdulos do sistema. No podemos nos esquecer ainda que podemos onerar o sistema com o uso indevido de mdulos. As discusses a cerca deste assunto nos levar a dias e dias de filosofia livresca versos necessidades cotidianas, por isso, s voc poder determinar como usar as informaes contidas. Como primeira etapa, vamos conhecer os mdulos que esto carregados no sistema neste momento. Use o comando lsmod, como demonstrado abaixo. #lsmod Ser exibida uma tela como a abaixo. Observe que a grande maioria dos mdulos esto relacionados aos dispositivos instalados.

Guia Linux Professional Clayton Lobato

110

Para carregarmos um mdulo, fazendo as ligaes necessrias entre o ncleo do kernel e o mdulo, usaremos o comando insmod. #insmod fat Caso o caminho absoluto no seja passado, insmod ler o arquivo /etc/modules para buscar suas referncias. Para descarregarmos um mdulo, use a linha abaixo #rmmod ieee1394 Se precisarmos saber informaes sobre um mdulo, usar o comando modinfo uma boa opo. #modinfo fat

Guia Linux Professional Clayton Lobato

111

Captulo 7 - Sistema X Window


At aqui, nosso ambiente de trabalho foi a console e linhas de comando, porm , no processo de administrao do sistema GNU/Linux, importante sabermos interagir com o processo de instalao e configurao do servidor X, o ambiente grfico. Veremos nessa etapa os mecanismos de instalao e configurao do Servidor X window, configurao do teclado dentre outros parmetros relacionados com o assunto. Vamos ao contedo ...

Guia Linux Professional Clayton Lobato

112

Guia Linux Professional Clayton Lobato

113 Trabalhar com o servidor X realmente bem complicado a primeira vista pelo volume de informaes divergentes para cada distribuio. O primeiro passo saber que sem o servidor X nenhum gerenciador de janelas como o KDE e GNOME, por exemplo, poder ser usado. O servidor X responsvel por prover o ambiente responsvel para o ambiente grfico. O Xorg o responsvel por todo o ambiente grfico do sistema. Vamos instalar o sistema e X e configur-lo.

Instalao do Servidor X11.


Antes de instalarmos o Servidor X, interessante que se conhea o hardware instalado para podemos configurar o servidor. Para cada verso do Xfree, podemos nos deparar com um modo de instalao. O pacote do Xfree86 pode ser baixo do site em pacote tarball, e em pacotes .rpm e .deb, alm de podermos baixar os pacotes no ftp oficial do projeto e buscarmos os fontes necessrios ftp://ftp.xfree86.org/pub/XFree86/4.7.0/binaries. Para a instalao usaremos o script Xinstall.sh, o qual nos ajudar muito durante essa etapa. Baixe o pacote do site ftp usando o comando
#wget ftp://ftp.xfree86.org/pub/XFree86/4.7.0/binaries/Common/Xinstall.sh /root

Em seguida, execute o script como na linha abaixo #sh Xinstall.sh Devemos declarar no PATH do sistema o diretrio /usr/X11R6, para que possamos trabalhar com o servidor X. Aps instalao, o processo de configurao dever ser feito atravs de uma das ferramentas: 1. XFree86 2. cf86cfg 3. xf86config 4. X -config 5. xorgcfg 6. xorgconfig Existe ainda a /etc/X11/XF86config. possibilidade de usarmos o arquivo de configurao

Abaixo coloco dois modelos do arquivo. Um no padro Fedora e outro do Debian. Vamos compar-los. # Xorg configuration created by pyxf86config Section "ServerLayout" Identifier Screen 0 InputDevice InputDevice EndSection "Default Layout" "Screen0" 0 0 "Keyboard0" "CoreKeyboard" "Synaptics" "CorePointer"

Guia Linux Professional Clayton Lobato

114 Section "InputDevice" Identifier Driver Option Option Option EndSection Section "InputDevice" Identifier Driver Option Option Option EndSection Section "Device" Identifier Driver EndSection Section "Screen" Identifier Device "Screen0" "Videocard0" 24 00 24 "Videocard0" "intel" "Synaptics" "synaptics" "Device" "/dev/input/mice" "Protocol" "auto-dev" "Emulate3Buttons" "yes" "Keyboard0" "kbd" "XkbModel" "pc105" "XkbLayout" "us" "XkbVariant" "intl"

DefaultDepth Viewport Depth EndSubSection EndSection

SubSection "Display"

Observe que o arquivo est dividido em Section. Nelas configuraremos os dispositivos como monitor, teclado, interface de vdeo. Note tambm que no padro fedora no to claro as informamos de layout de teclado e resoluo de vdeo.

Guia Linux Professional Clayton Lobato

115 No sistema debian, teremos um modelo de arquivo como o seguinte.


# /etc/X11/xorg.conf (xorg X Window System server configuration file) # # This file was generated by dexconf, the Debian X Configuration tool, using # values from the debconf database. # # Edit this file with caution, and see the /etc/X11/xorg.conf manual page. # (Type "man /etc/X11/xorg.conf" at the shell prompt.) # # This file is automatically updated on xserver-xorg package upgrades *only* # if it has not been modified since the last upgrade of the xserver-xorg # package. # # If you have edited this file but would like it to be automatically updated # again, run the following command: # sudo dpkg-reconfigure -phigh xserver-xorg

Section "Files" FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath EndSection Section "Module" Load "i2c" "/usr/share/fonts/X11/misc" "/usr/X11R6/lib/X11/fonts/misc" "/usr/share/fonts/X11/cyrillic" "/usr/X11R6/lib/X11/fonts/cyrillic" "/usr/share/fonts/X11/100dpi/:unscaled" "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" "/usr/share/fonts/X11/75dpi/:unscaled" "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" "/usr/share/fonts/X11/Type1" "/usr/X11R6/lib/X11/fonts/Type1" "/usr/share/fonts/X11/100dpi" "/usr/X11R6/lib/X11/fonts/100dpi" "/usr/share/fonts/X11/75dpi" "/usr/X11R6/lib/X11/fonts/75dpi" "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"

# path to defoma fonts

Guia Linux Professional Clayton Lobato

116 Load "bitmap" Load "ddc" Load "dri" Load "extmod" Load "freetype" Load "glx" Load "int10" Load "vbe" EndSection Section "InputDevice" Identifier Driver Option Option Option Option EndSection Section "InputDevice" Identifier Driver Option Option Option Option EndSection Section "Device" Identifier "Intel Corporation Integrated Graphics Controller" Driver BusID EndSection Section "Monitor" Identifier "Monitor Genrico" "i810" "PCI:0:2:0" Mobile 945GM/GMS/940GML Express "Configured Mouse" "mouse" "CorePointer" "Device" "Protocol" "Emulate3Buttons" "/dev/input/mice" "ImPS/2" "true" "Generic Keyboard" "kbd" "CoreKeyboard" "XkbRules" "xorg" "XkbModel" "pc104" "XkbLayout" "us"

Guia Linux Professional Clayton Lobato

117 Option HorizSync VertRefresh EndSection Section "Screen" Identifier "Default Screen" Device "Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller" Monitor DefaultDepth Depth Modes EndSubSection SubSection "Display" Depth Modes EndSubSection SubSection "Display" Depth Modes EndSubSection SubSection "Display" Depth Modes EndSubSection SubSection "Display" Depth Modes EndSubSection SubSection "Display" Depth Modes EndSubSection EndSection 24 "1280x800" 16 "1280x800" 15 "1280x800" 8 "1280x800" 4 "1280x800" "Monitor Genrico" 24 1 "1280x800" "DPMS" 28-64 43-60

SubSection "Display"

Guia Linux Professional Clayton Lobato

118 Section "ServerLayout" Identifier Screen "Default Layout" "Default Screen" "Generic Keyboard" "Configured Mouse"

InputDevice InputDevice EndSection Section "DRI" Mode 0666 EndSection

J o arquivo do debian, temos de forma clara as informaes de teclado, freqncia do monitor, resoluo do vdeo. Isso torna mais simples a configurao do sistema. Para finalizarmos a instalao instalaremos da fontes. Para isso copie os arquivos para o diretrio /usr/share/fonts, ou para /usr/X11R6/lib/X11/lib/fonts/* ou .fonts no home do usurio.

Guia Linux Professional Clayton Lobato

119

Captulo 8 Conceitos Bsicos de Protocolos TCP/IP


Entender redes de computadores entender os conceitos e funcionalidades dos protocolos usados para prover a comunicao entre os dispositivos. No existe comunicao entre hosts em uma rede, sem que todos os hosts estejam usando o mesmo protocolo de comunicao. Nessa etapa, abordaremos alguns dos protocolos mais importantes para prover a comunicao e a troca de informaes entre hosts. Estudaremos os protocolos TCP/IP, protocolos associados e novas formas desenvolvidas por mim de uso dos mecanismos de endereamentos IP. No veremos nenhum tipo de aplicao servidor aqui, isso ficar para outro momentos.

Guia Linux Professional Clayton Lobato

120

Guia Linux Professional Clayton Lobato

121

Histrico
Nos anos 60, o principal setor estratgico americano, Department of Defense DoD se interessou em um protocolo que estava sendo desenvolvido/utilizado pelas universidades para interligao dos seus sistemas computacionais e que utilizava a tecnologia de chaveamento de pacotes. O interesse do DoD estava no desejo de manter a comunicao entre os diversos sistemas espalhados pelo mundo, no caso de um desastre nuclear. O problema maior estava na compatibilidade entre os sistemas computacionais de diferentes fabricantes que possuam diferentes sistemas operacionais, topologias e protocolos. A integrao e compartilhamento dos dados passou a ser um problema de difcil resoluo. Foi atribudo assim Advanced Research Projects Agency ARPA a tarefa de encontrar uma soluo para este problema de tratar com diferentes equipamentos e diferentes caractersticas computacionais. Foi feita ento uma aliana entre universidades e fabricantes para o desenvolvimento de padres de comunicao. Esta aliana especificou e construiu uma rede de teste de quatro ns, chamada ARPANET, e que acabou sendo a origem da Internet hoje. No final dos anos 70, esta rede inicial evoluiu, teve seu protocolo principal desenvolvido e transformado na base para o TCP/IP (Transmition Control Protocol / Internet Protocol). A aceitao mundial do conjunto de protocolos TCP/IP deveu-se principalmente a verso UNIX da Berkeley que alm de incluir estes protocolos, colocavaos em uma situao de domnio pblico, onde qualquer organizao, atravs de sua equipe tcnica poderia modific-los e assim garantir seu desenvolvimento. Dentre as vrias organizaes e comits que participaram deste desenvolvimento e divulgao, podemos destacar Internet Engineering Task Force IETF (http://www.ietf.org) cuja principal funo atual a manuteno e apoio aos padres da Internet e TCP/IP principalmente atravs da srie de documentos Request for Comments - RFC. Estes documentos descrevem as diversas tecnologias envolvidas e servem de base para as novas tecnologias que devero manter a compatibilidade com as anteriores dentro do possvel. Em resumo, o maior trunfo do TCP/IP o fato destes protocolos apresentarem a interoperabilidade de comunicao entre todos os tipos de hardware e todos os tipos de sistemas operacionais. Sendo assim, o impacto positivo da comunicao computacional aumenta com o nmero de tipos computadores que participam da grande rede Internet.

Modelo de Referncia ISO/OSI


Dentro deste cenrio de grande variedade de sistemas operacionais, CPUs, interfaces de rede, tecnologias e vrias outras variveis, e a necessidade de interconexo entre os diversos sistemas computacionais, em 1977, a International Organization for Standardization ISO, criou um sub-comit para o desenvolvimento de padres de comunicao para promover a interoperabilidade entre as diversas plataformas. Foi ento desenvolvido o modelo de referncia Open Systems Interconnection OSI. importante observar que o modelo OSI simplesmente um modelo que especifica as funes a serem implementadas pelos diversos fabricantes em suas redes. Este modelo no detalha como estas funes devem ser implementadas, deixando isto para que cada empresa/organizao tenha liberdade para desenvolver. O comit ISO assumiu o mtodo dividir para conquistar, dividindo o processo complexo de comunicao em pequenas sub-tarefas (camadas), de maneira que os

Guia Linux Professional Clayton Lobato

122 problemas passem a ser mais fceis de tratar e as sub-tarefas melhor otimizadas. O modelo ISO/OSI constitudo por sete camadas, descritas sucintamente a seguir da camada mais superior a mais inferior: Aplicao 7 Apresentao 6 5 4 3 2 Fsica 1 Rede Enlace Sesso Transporte Esta camada funciona como uma interface de ligao entre os processos de comunicao de rede e as aplicaes utilizadas pelo usurio. Aqui os dados so convertidos e garantidos em um formato universal. Estabelece e encerra os enlaces de comunicao. Efetua os processos de sequenciamento e, em alguns casos, confirmao de recebimento dos pacotes de dados. O roteamento implementado aqui. dos dados atravs da rede

Aqui a informao formatada em quadros (frames). Um quadro representa a exata estrutura dos dados fisicamente transmitidos atravs do fio ou outro meio. Define a conexo fsica entre o sistema computacional e a rede. Especifica o conector, a pinagem, nveis de tenso, dimenses fsicas,caractersticas mecnicas e eltricas, etc.

Cada camada se comunica com sua semelhante em outro computador. Quando a informao passada de uma camada para outra inferior, um cabealho adicionado aos dados para indicar de onde a informao vem e para onde vai. O bloco de cabealho+dados de uma camada o dado da prxima camada. Observe a figura abaixo que esquematiza isto.

A unidade de informao muda de nome ao longo das camadas de maneira que podemos saber sobre qual camada se est referindo pelo nome destas unidades. Antes do desenvolvimento do modelo de camadas ISO/OSI, o DoD definiu seu prprio modelo de rede conhecido como modelo DoD de rede ou tambm modelo Internet de rede. Posteriormente este modelo passou a ser conhecido como modelo de camadas TCP/IP, que ser descrito a seguir.

Guia Linux Professional Clayton Lobato

123

Modelo TCP/IP
O modelo de camadas ISO/OSI acabou se tornando apenas uma base para praticamente todos os protocolos desenvolvidos pela indstria. Cada desenvolvedor tem uma arquitetura que difere em detalhes as vezes fundamentais no seu desenvolvimento. Sendo assim, de se esperar uma variao nas descries do conjunto de protocolos TCP/IP. Organizado em 4 camadas, a implementao sobre o protocolo TCP/IP se torna mais simples e eficiente. Vejamos como esto organizadas as camadas do TCP/IP em relao ao modelo OSI
Camada Aplicao Camada Apresentao Camada Sesso Camada Transporte Camada Network Camada Data Link Camada Network Camada Fsica Camada Transporte Camada Internet Camada Aplicao

Observe que as 3 primeiras camada do modelo OSI, tornaram-se a primeira do TCP/IP e que as 2 ltimas do OSI, a ltima camada do TCP/IP. Para entendermos melhor o comportamento do protocolo TCP/IP, veja a funo de cada camada. Camada Network Oferece interface com a rede fsica; Formata os dados para o meio de transmisso e os enderea para a sub-rede com base no endereo de hardware fsico; Verifica erros para os dados entregues na rede fsica; Camada Internet Endereamento Lgico; Roteamento; Reduo de trfego; Suporte para interligao de redes; Relacionamento de endereos fsicos com endereos lgicos; Camada Transport

Guia Linux Professional Clayton Lobato

124 Controle de fluxo; Verificao de erros; Confirmao para a interligao de redes; Interface para as aplicaes de rede; Camada Application Diagnstico de rede Transferncia de Arquivos Controle remoto e atividades da Internet Suporte para APIs da rede O TCP/IP no faz distino entre as camadas superiores. As trs camadas superiores so estritamente equivalentes aos protocolos de processos da Internet. Os processos possuem o nome do prprio protocolo utilizado, porm importante no confundir o protocolo em si com a aplicao que geralmente apresenta uma interface com usurio amigvel para utilizao do protocolo. No modelo ISO/OSI, a camada de transporte (4) responsvel pela liberao dos dados para o destino. No TCP/IP isto feito pelos protocolos ponto a ponto TCP e UDP que sero descritos posteriormente. Por fim, o protocolo IP o responsvel pela conexo entre os sistemas que esto se comunicando. Basicamente este protocolo se relaciona com a camada de rede (3) do modelo ISO/OSI. Este protocolo o responsvel principal do movimento da informao na rede. nesta camada/protocolo que a informao fragmentada no sistema fonte e reagrupada no sistema alvo. Cada um destes fragmentos podem ter caminhos diferentes pela rede de forma que os fragmentos podem chegar fora de ordem. Se, por exemplo, o fragmento posterior chegar antes do anterior, o protocolo IP no sistema destino reagrupa os pacotes na seqncia correta. A camada superior, camada de aplicao responsvel por permitir que aplicaes possam se comunicar atravs de hardware e software de diferentes sistemas operacionais e plataformas. Muitas vezes este processo chamado de cliente-servidor. A aplicao cliente em geral est em um equipamento mais simples e com uma boa interface com usurio. Esta aplicao envia requisies aplicao servidor que normalmente est em uma plataforma mais robusta e que tem capacidade para atender vrias requisies diferentes de clientes diferentes. A camada de Transporte tem a funo principal de comear e terminar uma conexo e ainda controlar o fluxo de dados e de efetuar processos de correo e verificao de erros. A camada de rede a responsvel pelo roteamento. Comparativamente ela corresponde no modelo ISO/OSI a camada de Rede (3) e parte da camada Enlace (2). Esta camada usada para atribuir endereo de rede (IP) ao sistema e rotear a informao para a rede correta. Tem ainda a funo de ligao entre as camadas superiores e os protocolos de hardware. Em essncia podemos afirmar que sem esta camada, as aplicaes teriam que ser desenvolvidas para cada tipo de arquitetura de rede como por exemplo Ethernet ou Token Ring. A primeira camada, camada Fsica, no definida pelo TCP/IP, porm ntida sua importncia em relao parte fsica da mdia de comunicao, de bits, de quadros, de

Guia Linux Professional Clayton Lobato

125 endereos MAC, etc.

Endereamento IP e Classes
Identificador nico, atravs do qual os hosts executam servios de roteamento que basicamente definem o caminho disponvel naquele momento para comunicao entre a fonte e o destino. O endereo IP est descrito em 4 octetos (bytes), separados por pontos, que definiro um nico endereo dividido em uma parte que representa a rede a qual pertence, o endereo da subrede e por fim o identificador do host. Antes de detalharmos como funcionam os endereamentos IP, importante observarmos que alguns endereos tem funo especial. Vamos aos detalhes de alguns deles. Endereo 0: Significa a prpria rede ou sistema. O endereo 0.0.0.35 referencia a estao 35 da rede local. O endereo 127.0.0.0 referencia a estao em anlise. O endereo 152.84.40.0 referencia a subrede 40 inteira da rede local. Endereo 127: conhecido como loopback e utilizado em processos de diagnose. O endereo 127.0.0.1 o prprio loopback da estao em anlise. Endereo 255: Este endereo muito utilizado em mensagens broadcast e servios de anncio generalizados. Uma mensagem enviada para o endereo 152.84.255.255 ir atingir todos os 255 sistemas de cada uma das 255 subredes da rede local do CBPF. Organizado em classes, os endereos IP podem assumir valores diversos e o que determinar a que classe pertence, e a ordenao dos endereos so os bits de mais alta ordem. Para entendermos melhor, vamos observar as relaes entre os endereos, bits de mais alta ordem e nmero de subredes e hosts para cada classe. Classe A Bit de alta ordem 0xxxxxxx Intervalo de Endereos 1.0.0.0 126.0.0.0 Bits de redes/hosts 7/24 Mximo de Hosts 16.777.214 Classe B Bit de alta ordem 10xxxxxx Intervalo de Endereos 128.1.0.0.0 191.254.0.0 Bits de redes/hosts

Guia Linux Professional Clayton Lobato

126 14/16 Mximo de Hosts 65.534 Classe C Bit de alta ordem 110xxxxx Intervalo de Endereos 192.0.1.0 223.255.254.0 Bits de redes/hosts 22/8 Mximo de Hosts 254 No existe nenhuma regra prtica que o proba de usar os endereos de qualquer classe a qualquer momento em sua rede ethernet, porm, como tudo que nos cerca, existem regras para uso dos endereos em redes globais, vejamos as regras. Os endereos Classe A so usados para redes muito grandes normalmente ligada a funes educacionais e cientficas. Os endereos Classe B so usados em redes muito grandes, normalmente atribudas a instituies que possuam um perfil disseminador de tecnologia e assim pudessem de alguma forma distribuir suas redes entre instituies e empresas contribuindo assim para o desenvolvimento de uma grande rede mundial. Os endereos Classe C so os mais difundidos pois permitem redes de 256 IPs o que parece ser um nmero conveniente para gerenciamento e implantao de sistemas de informao. Os de Classe D so reservados para Multicast utilizado nas aplicaes de Videoconferncia, Multimdia, dentre outras, e por fim, os endereos Classe E so reservados para experimentao e desenvolvimento. Graficamente, os endereos IP esto organizados da seguinte forma.

netid

hostid

1 0

netid

hostid

1 1 0

netid

hostid

Mas definir um endereo IP nada significa para o processo de comunicao entre mquinas. Quem determinar em qual das subredes o host estar, ser a netmask,

Guia Linux Professional Clayton Lobato

127 mscara de subrede.

Subredes
A criao de subredes a partir de uma rede primria um procedimento tpico na rea de redes. O objetivo desta segmentao permitir uma melhor performance da rede em termos organizacionais, estruturais e funcionais.

A idia bsica acrescentar alguns bits identificador de rede do endereo IP. Os endereos permitidos so aqueles formados pelos bits restantes do octeto, isso se dar com o uso da netmask.

Netmask - Mscara de Subredes


Conforme descrito na figura anterior, o identificador de redes e subredes, a mscara de subrede, tambm composta por 4 octetos. A mscara formada por bits 1 nos campos que caracterizam o endereo de rede, e bits 0 nos campos relativos ao host. Veremos mais tarde que o conceito inicial nos far entender como funciona todo o mecanismo de endereamento mas pode ser alterado. Considere uma Classe C com cada posio representada por um nico bit de um endereo de 32bits: N-> Rede H -> Mquina (Hot) NNNNNNNN.NNNNNNNN.NNNNNNNN.HHHHHHHH Se esta Classe C for dividida em 8 subredes com 32 endereos teremos ento 2 endereos especiais que determinam o incio e o final da subrede. Estes endereos so o endereo da rede, normalmente o primeiro do range e o endereo de broadcast, o ltimo do range. Nossa rede estaria ento definida da seguinte maneira. 32 - 2(rede e broadcast)=30 hosts em cada uma delas, a mscara de subrede ser 255.255.255.224 ou ainda /27 e sua representao fica: NNNNNNNN.NNNNNNNN.NNNNNNNN.NNNHHHHH 11111111.11111111.11111111.11100000 Em um outro exemplo queremos fazer 64 subredes com 4-2=2 hosts permitidos por subrede. Neste caso a mscara seria 255.255.255.252 ou ainda /30 com a seguinte representao: NNNNNNNN.NNNNNNNN.NNNNNNNN.NNNNNNHH 11111111.11111111.11111111.11111100 O mesmo raciocnio pode ser empregado em uma Classe B ou Classe A, mudando somente a relao entre bits 1 e bits 0, ou em outras palavras muda o octeto em anlise. No caso de 2 subredes na Classe B teremos 255.255.128.0 ou /17 representadas por: NNNNNNNN.NNNNNNNN.NHHHHHHH.HHHHHHHH 11111111.11111111.10000000.00000000

Guia Linux Professional Clayton Lobato

128 Vale ressaltar aqui uma operao simples implementada por todos algoritmos de roteamento que o AND lgico entre a mscara de subrede e o endereo do host. Se o endereo tiver os mesmos bits 1 da mscara ento este endereo pertence a subrede em anlise e portanto o pacote pode ser enviado atravs de broadcast na subrede. Se diferir, ento o pacote deve ser enviado ao gateway, pois certamente pertence a outra subrede. veja no exemplo abaixo. Aplicamos uma mscara de sub-rede padro classe B para realizar a subdiviso da rede por um endereo IP. IP : 140.179.240.200 (10001100.10110011.11110000.11001000) Aplicaremos a mscara de sub-rede default da classe B 255.255.0.0 (11111111.11111111.00000000.00000000) Em virtude disto, teremos 10001100.10110011.11110000.11001000(Endereo IP) 11111111.11111111.00000000.00000000(Netmask default) --------------------------------- AND LGICO ---------------------------------------------10001100.10110011.00000000.00000000 (Endereo de rede) Observe que aplico um operao lgica AND entre os endereos IP e mscara de subrede para determinarmos o endereo da rede. De uma forma geral, o endereo IP foi dividido em 2 partes, como vimos anteriormente, uma seria o netid e a outra o hostid. Com a aplicao da netmask, a parte do hostid foi dividida em mais duas partes. Uma sendo a identificao de subrede e outra a identificao do host. Graficamente representada como na figura abaixo. 1 0 netid Nmero da sub-rede Nmero do host 00000000

11111111 11111111 11111111

Existe uma relao entre as classes de endereos IP e as descries de classes das mscaras de subrede. Veja na figura abaixo como se comportam essas relaes. Classe de endereo IP Classe A Classe B Classe C Mscara de subrede(hexa) FF.0.0.0 FF.FF.0.0 FF.FF.FF.0 Mscara de sub-rede (decimal) 255.0.0.0 255.255.0.0 255.255.255.0

Note que temos um netmask para cada classe de endereos IP. Usando o and lgico podemos agora definir o comportamento padro para cada endereo ip em cada classe. Analise as tabelas abaixo, elas descrevem os endereos de cada classe com sua respectiva netmask.

Guia Linux Professional Clayton Lobato

129

Na tabela acima, iniciamos a observao do comportamento de cada classe com suas netmask, nmero de subredes possveis e hosts para cada subrede em classe A .

Guia Linux Professional Clayton Lobato

130

Vejamos a classe B como se comporta.

Para finalizarmos, vamos classe C.

Guia Linux Professional Clayton Lobato

131

Note que em todas as tabelas chegamos ao ponto de termos os endereos de subrede iguais. Isso nos mostra que podemos ter endereos tipicamente de classe C, sendo usados com mscaras de subrede classe C. O que determinar todo o comportamento dos endereos em sua rede sua necessidade. Nada o impede de adequar seus endereos para satisfazer as necessidades de sua empresa. Se observarmos as tabelas, veremos que em algum momento teremos endereos de classe A, por exemplo, com netmask tipicamente em classe C ou classe B. Isso demonstra que o simples fato de vermos um endereo no significar nada a nvel prtico, teremos que analisar o contexto em que este endereo est inserido. Um outro detalhe que deve ser observado o fato de em uma estrutura padro de endereos, toda indicao de endereo de rede par e os endereos de broadcast sero mpares. Isso se d pela forma como os endereos so determinados, vamos lembrar isso. A frmula base para o clculo de um endereo ip 2^n -2, onde n o nmero de bits 0 encontrados na descrio binria do endereo. Veja o exemplo, tomando como base os endereos descritos anteriormente. IP : 140.179.240.200 (10001100.10110011.11110000.11001000) Aplicaremos a mscara de sub-rede default da classe B 255.255.255.0 (11111111.11111111.11111111.00000000) Faremos o and lgico para determinarmos a qual subrede o endereo ip informado faz parte e podermos determinar tambm quantos hosts teremos na subrede. 10001100.10110011.11110000.11001000(Endereo IP) 11111111.11111111.11111111.00000000(Netmask default) --------------------------------- AND LGICO ----------------------------------------------

Guia Linux Professional Clayton Lobato

132 10001100.10110011.11110000.00000000 (Endereo de rede) Quem determinar todo o comportamento para estas relaes ser a netmask. No exemplo acima observamos um tpico endereamento usando classe C em sua netmask, teremos ento 8 bits do endereo ip livres, justamente os 8 bits do ltimo octeto que esto relacionados com o ltimo octeto da netmask. Como temos 8 bits 0 na netmask, teremos 8 bits livres para endereos ip. Levando em conta que dois endereos sero usados para endereo de subrede e broadcast, teremos 254 hosts. Veja o como calcular abaixo. 2^n 2 = hosts, logo, 2^8 -2 = 254 hosts Os endereo 0 e 255 sero reservados para endereo da subrede e broadcast, respectivamente. Se mantivermos o mesmo endereo ip e mudarmos a netmask, toda a relao ser alterada. Veja o exemplo. 10001100.10110011.11110000.11001000(Endereo IP) 11111111.11111111.11111111.11111100(Netmask default) --------------------------------- AND LGICO ---------------------------------------------10001100.10110011.11110000.11001000 (Endereo de rede) Assim, teremos 2^n -2 = hosts, logo, 2^2 -2 = 2 hosts Por esse motivo, um endereo 255.255.255.248 nos dar um total de 6 hosts, um endereo 255.255.255.240 nos dar 30 hosts e assim por diante. Veja nas tabelas de relaes de endereos apresentada anteriormente o nmero de hosts para cada possibilidade padro de uso de endereos IP. Colocando em prtica... Se precisarmos ento de uma subrede com 10 mquinas, usaremos a netmask 255.255.255.240, o que possibilita 14 hosts. Teremos 10 usados e 4 sobrando. Assim vamos ajustando as possibilidades de uso dos endereos para nossas necessidades. A verdade que na maior parte das vezes que pensarmos em usar subredes, algum tipo de sobra de ip acontecer. Pensando nisso, desenvolvi uma nova maneira de endereamento e clculo de hosts para subredes. Vamos a esta maneira alternativa. Tudo comeou quando resolvi desenvolver um mecanismo que fosse mais rpido e prtico para determinar o nmero de hosts de uma subrede. Se pensarmos em um endereo com uma netmask 255.255.255.252, teremos 2 hosts, ok? Vimos este exemplo anteriormente. Bom se pegarmos o ltimo octeto do endereo de netmask (252) e subtrairmos de 254 (que o ltimo endereos de hosts, teremos 2, exatamente o nmero de hosts calculado pela frmula tradicional. Se fizermos para todos os endereos descritos nos padres tcp/ip teremos os mesmos resultados. Vamos aos exemplos, tomando como base a classe C.
Netmask Hosts pelo mtodo Clssico (2^n-2) 62 30 Hosts pelo mtodo alternativo desenvolvido por mim (254netmask) 62 30

255.255.255.192 255.255.255.224

Guia Linux Professional Clayton Lobato

133 255.255.255.240 255.255.255.248 255.255.255.252


14 6 2 14 6 2

Intrigado com essa base de clculos para o nmero de hosts de uma subrede, me perguntei se no poderia ento determinar com exatido uma netmask que evitasse sobras de Ips. Tive a necessidade de determinar em uma rede, subredes com 15 mquinas. Pelo padro usaria o netmask 255.255.255.224 e sobrariam 15 Ips para esta subrede. Consequncia disso. Qualquer usurio poderia colocar uma nova mquina sem que eu soubesse, usando tentativa e erro at conseguir determinar um dos endereos livros em sua estao. O meu problema era evitar isso, mas no existe, ao menos no consegui nada nem com professores, nem livros que me dessem condies para faz-lo. Desenvolvi ento um mtodo alternativo de endereamento. A base de todo o mtodo determinar o nmero de hosts para a sua subrede e a partir dele, determinar a netmask da sua rede. Vamos a prtica... 254 - 15 hosts = 239, com isso teremos a netmask em classe C 255.255.255.239. O primeiro problema est resolvido. Porm tenho mais um ... Como determinar esse endereo para os hosts de minha rede, haja vista que nenhuma ferramenta de configurao me permitir faz-lo. O segundo passo foi alterar o comportamento do DHCP para poder informar aos clientes seus novos endereos. No demonstrarei como fiz as alteraes por questes lgicas, estou desenvolvendo um artigo que ser publicado com todos os detalhes sobre o assunto. mas na figura abaixo mostro uma estao windows XP com o endereo alternativo provando sua funcionalidade.

Guia Linux Professional Clayton Lobato

134 Endereamento entendido, vamos entender os protocolos que promovem a integrao entre sistemas.

Protocolos e Aplicaes
Agora abordaremos os principais protocolos que compem o conjunto TCP/IP de protocolos. Alguns destes protocolos so confundidos pela prpria aplicao que os utiliza. Sendo assim, adiante haver uma seo de Protocolos de Aplicao.

Protocolo Internet - IP
O protocolo Internet definido na camada 3 do modelo ISO/OSI. Esta camada responsvel pelo endereamento dos pacotes de informao dos dispositivos origem e destino e possvel roteamento entre as respectivas redes, se diferentes. Este roteamento executado atravs do IP. Como visto anteriormente, o endereo IP composto de 4 octetos, que so divididos em parte rede e parte dispositivo, chamados de identificadores de rede e de host, de acordo com o tipo de classe definido pelos primeiros bytes do primeiro octeto, e/ou subrede, definida pelo nmero de mscara. Este protocolo, usando a parte rede do endereo ou identificador de rede, pode definir a melhor rota atravs de uma tabela de roteamento mantida e atualizada pelos roteadores. Este protocolo recebe os dados da camada superior (transporte) na forma de segmentos. Ocorre ento o processo de fragmentao e os conjuntos de dados passam a se chamar datagramas. Estes datagramas so ento codificados para envio camada inferior (fsica) para encaminhamento no meio fsico. Na tabela abaixo relacionamos as diversas partes (9) constituintes de um data grama, o nmero de bits e funo ou descrio. O primeiro campo, Cabealho, contm informao sobre a verso do nmero IP (ipv4 ou ipv6) e o tipo de servio (ToS), muito usado em aplicaes que necessitem de Qualidade de Servio (QoS). O segundo campo, Comprimento, informa o comprimento do data grama incluindo dados e cabealho. O terceiro campo, Fragmentao, instrui ao protocolo, como reagrupar datagramas quando chegam aps um processo de fragmentao muito comum em interfaces defeituosas e trfego intenso. O quarto campo, Time to Live TTL, informa o nmero de roteadores que podem redirecionar o data grama. O valor decrementado at zero a cada roteador quando ento o data grama descartado, impedindo a criao de loops e assim garantindo estabilidade ao processo de roteamento. O quinto campo, informa qual protocolo dever receber o data grama na prxima camada. Se o valor deste campo for 6, TCP, se 7, UDP. Estes protocolos sero descritos posteriormente.

Guia Linux Professional Clayton Lobato

135

O sexto campo, Verificao de Erro, seleciona que processo ser utilizado na deteco de erros: Cyclical Redundance Check CRC ou Frame Check Sequence FCS. Os prximos campos, stimo e oitavo, Endereo Fonte e Endereo Destino, 32 bits cada, caracterizam por completo toda informao sobre endereamento necessria ao processo de roteamento. O ltimo campo contm os dados, a informao na realidade, e tem tamanho livre porm definido pelo tipo de rede sendo o MTU igual a 1500kbytes. Todas as informaes necessrias para que o IP possa se comunicar com o resto da rede esto distribudas nestes campos, principalmente naqueles relativos ao endereamento. importante observar que a camada de rede utiliza estes endereos lgicos de 4x8bits, para definir as redes existentes e como conseguir obter informao delas. Entretanto, para que os dados cheguem aos hosts necessrio um outro tipo de endereo: endereo Media Access Control - MAC ou Ethernet. O TCP/IP define um protocolo, ARP, que caracteriza e relao entre o endereo IP e o endereo MAC. Falaremos a seguir sobre este protocolo.

Address Resolution Protocol - ARP


Na realidade, a troca de dados entre dispositivos IP efetuada atravs do endereo MAC - Media Access Control, ou endereo Ethernet ou ainda endereo Fsico. De maneira bem simplificada, podemos considerar o protocolo ARP como sendo um broadcast no segmento de rede perguntando qual o endereo MAC do dispositivo que tem um certo IP. Vamos considerar a figura abaixo atravs de dois exemplos tpicos: 1. comunicao no mesmo segmento de rede e em redes distintas. Vamos considerar primeiramente uma aplicao no computador A enviando dados para o computador B, considere por simplicidade um servio PING de A para B. O primeiro passo determinar se A e B pertencem ao mesmo segmento de rede. Isto feito atravs do simples algoritmo que compara o resultado de uma operao AND lgico entre os IP e a sua respectiva mscara: mesmo resultado mesma rede, resultados diferentes redes diferentes. No caso A e B so vizinhos de um mesmo segmento.

Guia Linux Professional Clayton Lobato

136

Na construo do data grama, a aplicao sabe os endereos MAC e IP da fonte A e somente o endereo IP do destino B. Para descobrir o endereo MAC de B o protocolo ARP envia um broadcast a todos os dispositivos do segmento perguntando ao dono do IP B o seu endereo MAC. Por sua vez, o dispositivo dono do IP, envia tambm por broadcast, ou seja, para todos, o seu endereo MAC. Todos os dispositivos do segmento acrescentam na sua tabela ARP (IPxMAC), tambm chamada de proxycache ARP, este registro relativo ao B, que permanece durante um certo tempo. Finalmente, o dispositivo A envia o quadro (frame) destinado ao dispositivo B. Neste exemplo mesmo quadro enviado para B e a interface do roteador deste segmento, porm somente o dispositivo B ir abrir o quadro at a ltima camada pois somente ele tem o endereo MAC destino. Observe que se houvesse outros dispositivos no segmento, eles passariam a conhecer tambm o endereo MAC de B de maneira que se quiserem enviar algo B posteriormente, no seria mais necessrio um broadcast ARP. Vamos agora considerar que a comunicao seja entre os dispositivos A e C. Primeiramente o dispositivo A determina que C pertence a outro segmento atravs do algoritmo comparativo de operaes AND. O dispositivo A ento envia os dados para o gateway que a interface do roteador. Para isto o protocolo ARP utilizado para descobrir o endereo MAC da interface da mesma maneira que no caso anterior. Observe que o endereo MAC destino do roteador porm o IP destino continua sendo do dispositivo C. Quando o roteador recebe os dados, ele procura pela rede qual pertence o IP destino na sua tabela de roteamento e assim roteia para interface deste segmento. O roteador ir utilizar o protocolo ARP para determinar o endereo MAC do dispositivo C que ser anexado ao cabealho da camada de enlace, como MAC destino e o seu prprio como MAC origem. importante observar que os Ips origem (A) e destino (C) permanecem inalterados durante todo o processo. Quando o dispositivo C finalmente recebe a mensagem oriunda de A, o processo de volta simplificado pois os diversos endereos MAC continuam nas tabelas dos dispositivos envolvidos (C, roteador e A). Estes dois exemplos simples mostram o funcionamento e importncia do protocolo ARP que na realidade s usado para manter a tabela IP/MAC de cada dispositivo atualizada.

Internet Control Message Protocol - ICMP


O ICMP um protocolo de mensagens de controle usado para informar outros dispositivos de importantes situaes das quais podemos citar como exemplo: fluxo de mensagens maior que a capacidade de processamento de um dispositivo; parmetro Time To Live TTL; e mensagens de redirecionamento. Abordaremos rpida e separadamente cada um destes trs exemplos. Eventualmente um roteador pode estar recebendo mais informao do que pode processar, sendo assim ele passa a contar com controle de fluxo, enviando uma mensagem source quench para o dispositivo origem para que ele pare ou diminua o fluxo de dados. Esta mensagem enviada pelo protocolo ICMP. O segundo caso evolve o parmetro TTL que basicamente o nmero de hops

Guia Linux Professional Clayton Lobato

137 (roteadores) total que uma informao pode percorrer. Ele decrementado a cada hop e quando chega a zero, o roteador descarta o data grama e envia uma mensagem fonte informando que a informao no chegou ao seu destino, utilizando o ICMP. O terceiro caso a mensagem de redirecionamento ICMP, que utilizada quando o roteador determina que um caminho melhor existe para o pacote que acabou de ser enviado assim mesmo. Neste caso a implementao do protocolo de roteamento pode definir um novo caminho de acordo com este melhor caminho. Alguns sistemas operacionais de roteamento no consideram esta mensagem e continuam enviando dados pelo pior caminho. Uma aplicao tpica deste protocolo o PING, muito utilizado para determinar se um determinado dispositivo est ativo em uma rede, j que esta aplicao testa o sistema de transporte do TCP/IP.

Transmission Control Protocol - TCP


O protocolo IP, camada de rede (3), envia dados para rede sem a preocupao de verificar a chegada dos respectivos datagramas. Os protocolos da camada acima, hosthost ou transporte (4), especificamente TCP, definem a maneira para tratar datagramas perdidos ou corruptos. Alm disto, TCP responsvel pela segurana na transmisso/chegada dos dados ao destino e tambm define todo o processo de incio de conexo e multiplexao de mltiplos protocolos da camada de aplicao (7) em uma nica conexo, otimizando assim a conexo mltipla de aplicaes com o mesmo destino. O protocolo TCP orientado a conexo sendo isto claramente observado no processo de inicializao da conexo. O TCP aplica o algoritmo three-way handshake ou three-fold nesta inicializao. Este algoritmo pode ser comparado com o ato de telefonar onde em um primeiro momento um nmero discado, posteriormente algum atende dizendo al e por fim a pessoa que ligou comea a falar, enviando dados. Na realidade, o dispositivo fonte envia uma seqncia de nmeros que iniciar o envio de segmentos (vide final da seo 2), incio de uma conexo SYN. Sendo assim o dispositivo destino passa a conhecer esta seqncia. O dispositivo destino responde com sua prpria segundai de nmeros e portanto o dispositivo fonte passa por sua vez, a conhecer a seqncia do destino, viabilizando assim a conexo pois os dispositivos envolvidos, fonte e destino, sabem as respectivas seqncias numricas. Esta segunda etapa conhecida como acknowledgment ou ACK. Na terceira e ltima etapa, o dispositivo fonte emite o seu sinal ACK informando que comear a enviar dados. Assim como o IP, o TCP precisa saber qual o protocolo de aplicao da ltima camada que receber os dados. Isto feito atravs da codificao das portas. Ao todo so 65.535 (64k) portas, sendo que de 0 1024 so portas definidas e portanto s podem ser usadas por aplicaes que utilizem os respectivos protocolos. As portas de 1024 65535 so atribudas dinamicamente. Existem excees que podem ser ignoradas nesta discusso.

User Datagram Protocol - UDP


Existem situaes em que o dispositivo origem no precisa da garantia de chegada dos dados no dispositivo destino, como exemplo podemos citar alguns tipos de Videoconferncia. Nestes casos, o TCP substitudo pelo UDP que um protocolo que no orientado a conexo, ou seja, no necessita estabelecer uma conexo entre origem e destino antes de enviar os dados. Este protocolo no verifica nem se o dispositivo destino est on line. Na realidade o protocolo UDP empacota os dados e os envia para camada inferior

Guia Linux Professional Clayton Lobato

138 (rede 3) para que o protocolo IP d prosseguimento ao envio dos dados. Estes pacotes, segmentos, apesar de serem numerados antes de serem enviados, no sofrem nenhuma verificao de chegada ao destino. Assim como fizemos um paralelo entre TCP e o telefone, podemos comparar o UDP com o correio regular. Preparamos uma carta, envelopamos, selamos e colocamos no correio na esperana de que chegue ao seu destino. Assim como o TCP, o UDP tambm um protocolo da camada de transporte (4), porm diferentemente no gera mensagens ICMP.

Protocolos da Camada de Aplicao


Como foi visto anteriormente, o conjunto de protocolos TCP/IP esto distribudos ao longo das camadas superiores se comparados com o modelo ISO/OSI. Dentre estes, existem muitos protocolos que atuam na ltima camada (Aplicao). Abordaremos a seguir os mais utilizados pela comunidade.

File Transfer Protocol - FTP


A aplicao FTP foi uma das primeiras aplicaes na hoje chamada Internet. A base o protocolo FTP que tem como principal funo a transferncia de arquivos entre dispositivos nos formatos ASCII e Binrio. uma aplicao do tipo cliente/servidor e em uma situao tpica a aplicao cliente FTP utiliza o protocolo TCP para estabelecer uma conexo com o servidor remoto. Os servidores podem disponibilizar reas s de leitura para download de arquivos compartilhveis ou leitura/escrita para reas pblicas sem restrio. Normalmente estes servidores permitem conexo autenticada, login/senha, com usurios cadastrados para acesso em reas do servidor restritas ou ainda usurio anonymous ou mesmo ftp, com senha livre, normalmente o e-mail, para posterior contato. importante observar que neste processo de autenticao o login/senha trafegam pela rede sem criptografia facilitando assim eventuais infortnios como a utilizao de analisadores de trfego. Normalmente nos casos onde a autenticao necessria se emprega servidores de FTP criptografados, sendo o Security Shell - SSH um dos mais populares. Quando um cliente comea a negociar uma conexo com um servidor FTP, uma porta escolhida e enviada para posterior conexo. O servidor, por sua vez, recebe a requisio pela porta padro 20. A resposta do servidor enviada pela porta 21 endereada pela porta escolhida pelo cliente. A utilizao do conceito de portas permite desta forma, que um mesmo servidor receba vrias requisies pois a resposta endereada diferentes portas escolhidas por cada cliente.

Trivial File Transfer Protocol - TFTP


Este protocolo utilizado principalmente para transferir arquivos de configurao ou mesmo do sistema operacional entre um computador e um equipamento, roteadores, comutadores, bridges, impressoras, etc. A aplicao tambm do tipo cliente/servidor sendo normalmente o equipamento o cliente e o computador o servidor. Ao invs de TCP, este protocolo utiliza UDP pois apresenta a possibilidade de acesso, normalmente para configurao, equipamentos importantes em situaes crticas como por exemplo quando um roteador fica inacessvel por no suportar mais conexes TCP no caso de um ataque externo. Servidores de TFTP no possuem autenticao sendo normalmente utilizados atravs

Guia Linux Professional Clayton Lobato

139 de uma conexo direta na porta serial ou auxiliar do equipamento para garantir confiabilidade e segurana na transferncia dos arquivos. Existem vrias aplicaes TFTP disponibilizadas de maneira compartilhada na Internet.

Telnet
Esta aplicao tambm do tipo cliente/servidor utiliza o protocolo TCP. utilizada para conexo remota em computadores para execuo de aplicaes especficas muitas das vezes desenvolvidas pelo prprio usurio. Tambm usada para configurao e monitoramento remoto de equipamentos, como roteadores por exemplo. Como no transfere arquivos, comum a utilizao de aplicaes FTP ou TFTP em conjunto. Da mesma forma que o FTP, existe a necessidade de autenticao e portanto todos os problemas relativos a segurana tambm esto presentes. Da mesma forma, existem aplicaes Telnet criptografadas compartilhadas na Internet.

Simple Network Management Protocol - SNMP


Este protocolo utiliza UDP para fazer gerncia de equipamentos, sendo o protocolo base de todas as principais plataformas de gerenciamento, CiscoWorks - CISCO, HPOpenView - HP, SunNetManager - SUN, Transcend 3COM, SCOTTY TU Braunschweig, MRTG, dentre outras. Sua primeira verso possua muitas falhas relativas a segurana e portanto era alvo certo dos hackers para invaso s redes. Apesar disto, sua utilizao cresceu a ponto de se tornar o protocolo padro das principais plataformas. O funcionamento das aplicaes est vinculado ao envio/recebimento peridico de mensagens, equipamentos/computadores respectivamente, que contm valores de parmetros relevantes para monitoramento, anlise e posterior configurao por parte dos equipamentos. Estas informaes so armazenadas em forma de base de dados chamada Management Information Base MIB. possvel configurar as aplicaes para que enviem avisos atravs de e-mails, de sinais visuais e sonoros, Tc, aos gerentes de rede quando situaes crticas ocorrerem, como por exemplo a mudana de estado de uma porta de um roteador, nvel de trfego fora dos limites, percentagem de processamento perto do limite, dentre outras.

Outros Protocolos e Aplicaes


Existem vrios outros protocolos que pertencem ao grupo TCP/IP dos quais podemos citar: SMTP, DNS, NFS, HTTP, RIP, Rlogin, X Windows, Packet Internet Groper PING, Traceroute. Abordaremos rapidamente alguns deles. Domain Name Server DNS: tambm chamada de Name Service, esta aplicao relaciona endereos IP com os seus respectivos nomes atribudos a dispositivos da rede. Simple Mail Transfer Protocol SMTP: este protocolo utilizado nos servios bsicos de envio de mensagens. Network File System NFS: este sistema foi desenvolvido pela Sun Microsystems e permite que computadores possam montar discos ou parte deles (diretrios) de dispositivos remotos e oper-los como se fossem locais. HyperText Transfer Protocol HTTP: este protocolo a base do ambiente World Wide Web que basicamente permite a leitura dinmica e interativa de documentos constitudos de texto, imagens e som. Routing Information Protocol RIP: o conceito de roteamento uma

Guia Linux Professional Clayton Lobato

140 caracterstica presente nos protocolos TCP/IP. O protocolo RIP utilizado pelos dispositivos da rede, principalmente roteadores, para troca de informaes de roteamento. Dentre aqueles citados, importante observar que os dois ltimos, PING e Traceroute, so muito utilizados no monitoramento de conectividade entre dispositivos TCP/IP. No primeiro possvel o envio de pacotes em nmero e tamanho variveis e o recebimento de sua respectiva estatstica. O segundo revela o caminho percorrido por um pacote entre os dispositivos origem e destino parametrizado pelo tempo de resposta. Resumindo ... TCP/IP no um protocolo nico, uma coleo de protocolos com arquitetura distribuda em 4 camadas que se distribuem sobre as camadas do modelo OSI: aplicao, host-host, rede e fsica. A camada fsica no descrita na arquitetura TCP/IP apesar de ser a base para a comunicao entre a aplicao e a rede. O protocolo IP a base da arquitetura pois atribui endereos lgicos aos dispositivos e s redes e assim consegue definir o caminho para levar os pacotes da origem ao destino. TCP e UDP so protocolos da camada de transporte e tem como funo principal a entrega de dados (segmentos) aos dispositivos destinos. O TCP um protocolo orientado conexo e assim garante que os dados cheguem na ordem certa ao seu destino. O UDP ao contrrio, no orientado a conexo e no garante a chegada dos dados ao destino. A importncia do conjunto de protocolos TCP/IP est totalmente ligada ao sucesso da Internet. Estes protocolos, apesar de suas limitaes em termos de roteamento, cada vez mais, esto se tornando a base de aplicaes que so disponibilizadas e necessrias Internet. O sucesso deste conjunto de protocolos implica inclusive no sucesso ou no da aplicao de outras tecnologias de comunicao. Atualmente podemos citar a tecnologia ATM como sendo uma das tecnologias que necessitam de artifcios de software para suportar aplicaes IP. O grande e crescente nmero de aplicaes IP garante uma sobrevida ainda sem previso de trmino este conjunto de protocolos que j entraram para a histria das comunicaes. Atualmente, falar TCP/IP condio bsica para que um dispositivo entre na grande rede.

Guia Linux Professional Clayton Lobato

141

Captulo 9 - Comandos e arquivos bsicos de configurao e administrao de interfaces ethernet


Entendidos os conceitos do protocolo TCP/IP, iniciaremos o estudo de comando e arquivos usados para a configurao das interfaces de redes. Nesse captulo, trataremos da configurao da interface ethernet, usando basicamente o editor de textos vi. Por isso, d uma olhadinha em modos de edio no Vi para facilitar o desenvolvimento dos exerccios.

Guia Linux Professional Clayton Lobato

142

Guia Linux Professional Clayton Lobato

143

Linux e interface ethernet.


No sistema GNU/Linux, configurar uma rede bem simples, porm trabalhoso. Para que uma estao possa ter acesso a todos os servios de rede, precisamos definir um ip, seja este esttico ou no, informarmos para a estao quem so os servidores DNS e quais rotas deveram ser tomadas para termos acesso a nossa prpria rede e redes externas. Para entendermos melhor isso tudo, montei um roteiro de configurao. Dividido em etapas partiremos do seguinte cenrio: Um host cujo endereo IP esttico 135.23.44.56 e mscara de sub-rede 255.255.255.0. O DNS dessa rede ser o servidor 135.23.44.254 sendo este tambm o router de sada. Para configurarmos um dispositivo ethernet no GNU/Linux, vamos editar o arquivo /etc/sysconfig/network-scripts/ifcfg-eth?. Observe que termino o nome do arquivo com um ? (ponto de interrogao) para que seja observado o nmero do dispositivo no sistema. Caso tenha apenas uma placa ethernet no sistema, essa ser chamada de eth0 e seu arquivo ser descrito como ifcfg-eth0. Caso tenhamos duas interfaces, teremos ento eth0 e eth1, sendo seus arquivos ifcfg-eth0 e ifcfg-eth1, respectivamente. Editando o arquivo, teremos :

DEVICE=eth0 ( aqui configuramos qual dispositivo ser usado. Note que o dispositivo exatamente o mesmo descrito no nome do arquivo. Ou seja, ifcfg-eth0, DEVICE=eth0 ) BOOTPROTO=static ( por ser um endereo fixo, esttico, o protocolo aqui ser static ) BROADCAST=135.23.44.255 ( endereo de broad da rede ) HWADDR=00:0F:20:1E:4C:FB ( endereo MAC do dispositivo ethernet ) IPADDR=135.23.44.56 ( Aqui definiremos o endereo IP do dispositivo. Esse parmetro s ser lido caso o BOOTPROTO esteja static ) NETMASK=255.255.255.0 ( aqui informamos qual mscara de sub-rede ser usada ) NETWORK=135.23.44.0 ( a sub-rede da qual o host faz parte ) ONBOOT=yes ( determinamos aqui se a placa ser inicializada a cada boot do sistema. ) Na prtica, podemos usar apenas 5 ( cinco ) dos parmetros acima. Enxugando o arquivo teremos...

Guia Linux Professional Clayton Lobato

144

Agora basta reinicializar o dispositivo para que as alteraes sejam carregadas, para isso, edite o comando :

Em um segundo momento se faz necessrio que este dispositivo tenha seus endereos carregados via servidor DHCP. Para isso, basta retirar o BOOTPROTO=static e inserir o BOOTPROTO=dhcp. Quando o BOOTPROTO for igual a dhcp, os parmetros IPADDR e NETMASK sero ignorados. O arquivo ter ento o formato

Retirando o que no necessrio, teremos ...

Apenas configurar o ifcfg-eth? No significa que o trabalho acabou. Precisamos ainda definir quem ser o DNS responsvel. Para isso vamos ao arquivo /etc/resolv.conf. Veja como fica o arquivo.

Guia Linux Professional Clayton Lobato

145 No resolv.conf basta determinarmos o search com um domnio de rede e nameserver com o IP do servidor DNS. o

Para finalizarmos essa etapa, vamos determinar o GATEWAY da rede. Para isso, uma editada no arquivo /etc/sysconfig/network.

Aqui teremos o parmetro NETWORK, que determinar se nosso sistema ter ou no o dispositivo de rede ativado, em seguida o HOSTNAME que o nome da mquina e o GATEWAY que servir de router para o host. Antes de continuarmos, vamos entender um pouco do conceito de GATEWAY. Gateway um computador que estar ligado fisicamente a duas ou mais redes, interligando as. Observe que na figura acima, temos trs subredes diferentes com trs gateways ligados a uma subrede que chamarei de Backbone de interligao. Qualquer mquina da rede 2.0 que queira trocar algum tipo de informao com mquinas da rede 4.0, ter que solicitar ao gateway como chegar a outra subrede.

Feito isso, reinicie o servio de rede do sistema. Pronto sua mquina est na rede. Configurar uma interface realmente simples, mas como administrarmos e quais comando poderemos usar para trabalharmos com redes no GNU/Linux ? Passe para a prxima etapa. Para resolvermos nomes de hosts locais, configuramos o arquivo /etc/hosts. Nele

Guia Linux Professional Clayton Lobato

146 informamos o IP, Hostname e Apelido para os hosts locais. Veja como fica

Porm, para que hosts seja lido, precisamos definir em /etc/host.conf a ordem de busca de resoluo de nomes. Veja um modelo de /etc/host.conf, primeiro buscando no arquivo /etc/hosts e depois atravs de um DNS o nome de hosts.

Uma forma de customizar a procura de nomes, usar p modelo melhorado de host.conf, o arquivo nsswitch.conf. Nele poderemos configurar um mecanismo de busca para cada servio. Veja um modelo para o mesmo caso do host.conf.

Comandos de redes GNU/Linux.


Nesse captulo estaremos estudando os comandos mais comuns para a administrao de rede no GNU/Linux, dando condies para o aluno administrar o sistema sem grandes transtornos. Vamos comear ento.

ifconfig
Descrio: O ifconfig usado para configurar, ativar ou desativar um dispositivo de redes.
Parmetros add up down hw netmask Descrio Adiciona um novo endereo IP ao dispositivo. Ativa o dispositivo ethernet Desativa o dispositivo ethernet Define um dispositivo. novo endereo MAC para o

Define o netmask do dispositivo.

Exemplos: #ifconfig eth0 10.22.3.1 netmask 255.255.255.0 up #ifconfig eth0 add 192.168.1.1 netmask 255.255.255.0

Guia Linux Professional Clayton Lobato

147 #ifconfig eth0 down #ifconfig eth0 up #ifconfig eth0 hw ether 00:00:00:00:00:00

arp
Descrio: Manipula o cache ARP do sistema
Parmetros -v -n Descrio Mostrar de forma detalhada ao usurio o que est acontecendo Mostra endereos numricos. No tenta determinar os nomes de de mquina, porta e usurio. Informa ao arp que classe de entradas devem ser verificadas. Os tipos de classe podem ser ether, ARCnet (arcnet) , PROnet (pronet) , AX.25 (ax25) e NET/ROM (netrom) Mostra as entradas dos hosts especificados. Caso no seja informado um host, sero mostradas todas as entradas. Remove qualquer especificado. entrada para o host

-H type, --hw-type type

-a [host], --display [host]

-d [host], --delete host -D, --device -i, --use-device -s host MAC, --set mquina -f arquivo, --file arquivo

Usa o MAC do dispositivo. Especifica uma interface. Cria manualmente a entrada ARP para o host atravs MAC. Tem o mesmo efeito da opo -s, porm as informaes de endereos so obtidas de um arquivo.

Exemplos: #arp -v #arp -a ip

Guia Linux Professional Clayton Lobato

148

dig
Descrio: Consulta servidores DNS.
Argumentos servidor nome tipo classe Descries Nome ou IP do servidor DNS Nome do host a ser resolvido Tipo de consulta a ser executada. Classe da consulta. Podemos ter IN ( Default ), INTERNET, CS, CSNET, CH, CHAOS, HS, HESIOD, ANY, * Descries IP do DNS Arquivo com listagem de consultas. O arquivo ter em cada linha uma nova entrada. Posta de consulta Padro 53 Consultas atravs do reverso do DNS, ou seja, Ips para nomes.

Opes -b endereo -f arquivo -p -x

Exemplos: #dig www.x25.com.br #dig -f arquivo_lista

ifup
Descrio: Carrega um dispositivo ethernet. Exemplos: #ifup eth0

ifdown
Descrio: Derruba um dispositivo ethernet Exemplos: #ifdown eth0

route
Descrio: Manipula a tabela de roteamento.
Opes -n -e Descrio Mostra os endereos numricos. Usa o formato netstat de apresentao. Com o -ee, temos uma linha com todas as informaes da tabela de roteamento. Define a rede alvo de roteamento.

-net

Guia Linux Professional Clayton Lobato

149
-host del add host/network netmask gw Define um host como alvo de roteamento. Remove uma rota Adiciona uma rota Mquina ou rede alvo da rota Mscara de sub-rede do alvo Define o GATEWAY da rede. Todos os pacotes para a rede destino ( alvo ) sero roteados pelo gw. Instala uma rota de de bloqueio.

reject

Exemplos: #route add -net 192.168.1.1 #route add -net 199.43.76.0 netmask 255.255.255.0 dev eth0 #route add -net 192.130.0.0 netmask 255.255.0.0 dev eth0

dhclient
Descrio: Configura um endereo ip via servidor dhcp Exemplos: #dhclient

Guia Linux Professional Clayton Lobato

150

hostname
Descrio: Configura / mostra corretamente o nome do host.
Opes -a, --alias -d, --domain Descrio Mostra o alias da mquina, se usado. Mostra o nome do domnio. No use o domainname para obter o domnio do host. Ele trar o nome do domnio NIS. O nome do host ser lido a partir de um arquivo. Mostra o endereo ip do host Mostra o nome curto do host. Sada com execuo. informaes detalhadas da

-F, --file -i, --ip-address -s, --short -v, --verbose

Exemplos: #hostname alias #hostname -f #hostname -i #hostname -s #hostname -sv #hostname -siv

netstat
Descrio: Mostra as conexes de rede, assim como tabelas de roteamento, estatstica de interfaces e conexes mascaradas.
Opes -r, --route -i, --interface Descrio Mostra informaes da tabela de roteamento, no mesmo formato usado pelo route -e Mostrar informaes interface especificada formato ifconfig -e. das interfaces ser mostrada ou no

-M, --masquerade -s, --statistics

Exibir todas as sesses mascaradas. Mostra estatsticas de rede do Linux. As informaes sero lidas a partir de /proc/net/snmp. Mostra de forma acontecendo. detalhada o que est

-v, --verbose -n, --numeric

Mostra endereos numricos.

Guia Linux Professional Clayton Lobato

151
-A, --af Usa mtodos diferentes para configurar a famlia de endereos. Podemos ter, separados por vrgula, inet, unix, ipx, ax25, netrom e ddp. O mesmo que usar --inet, --unix, --ipx, --ax25, -netrom e ddp.

Exemplos: #netstat -s #netstat -n

ping
Descrio: Envia ICMP echo_request para hosts de uma rede.
Opes -a -b -s -t -v Descrio Soa um bip a cada pacote pingado Permite o ping em um endereo de broadcast Especifica o tamanho do pacote em um ping. Especifica a ttl do pacote. Roda em modo verbose, execuo para o usurio. detalhando a

Exemplos: #ping -s 1024 192.169.1.4

traceroute2.
Descrio: Imprime a rota de um pacote.
Opes -f -i -m -p Descrio Especifica com qual ttl ser usada para iniciar o servio. O padro 1. Especifica qual interface ser usada para execuo. Especifica o mximo de saltos que sero exibidos. Especifica a porta execuo do trace. que ser usada para

Exemplos: #traceroute -m 4 www.x25.com.br #traceroute -f 4 www.x25.com.br

Guia Linux Professional Clayton Lobato

152

Comandos de redes GNU/Linux.


Existem algumas maneiras de melhorar o comportamento da rede. Vamos ver algumas maneiras de, por exemplo, o ping e rejeitar algumas rotas, usando comandos simples como o route e arquivos no /proc/sys.

Eliminando rotas
Um forma interessante de trabalharmos com o roteamento do sistema eliminando a possibilidade de acesso de rotas no desejadas. No exemplo abaixo, a rede 192.43.224.0 / 24 ser negada pela rede 192.43.0.0/16. #route add -net 192.43.224.0 netmask 255.255.255.0 reject atravs do comando route podemos visualizar como ficou a tabela de roteamento.
Destino Iface 192.43.224.0 192.43.0.0 Roteador 192.43.1.4 MscaraGen Opes 255.255.255.0 255.255.0.0 UG ! 0 Mtricas 0 0 0 Ref 0 eth0 Uso -

Observe que a rota para a 192.43.224.0 est negada.

Negando pacotes ...


Outra forma de usarmos o prprio sistema para gerar algumas regras usar o /proc/sys/net/ipv4. Veja os exemplos : #echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all Aqui, negamos os pings para essa estao. #echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts Aqui negamos os pings de broadcast da rede. Essas so situaes que podem ajudar a melhorar o comportamento do sistema.

Alguns servios de redes


Uma da grandes vantagens do GNU/Linux, em minha opinio, a facilidade de acessarmos arquivos remotamente. Vejamos alguns exemplos. #wget www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.4.tar.bz2 No exemplo acima, faremos um download de um arquivo usando o wget. Para copiarmos um arquivo de uma estao Linux para outra podemos usar o scp. Este comando dependo do ssh ativo na estao onde esto os arquivos. #scp root@192.169.1.1:/root/pai.sh . Entre com a senha de root para autenticar e pronto... arquivo copiado. Outra possibilidade usarmos o servio NFS para montarmos parties de uma estao para outra. Aqui sim estaremos compartilhando arquivos. Para configurarmo um compartilhamento, editamos o arquivo /etc/exports, veja o

Guia Linux Professional Clayton Lobato

153 exemplo. /desenvolvimento (rw,no_root_squash) Nele determinamos qual o diretrio a ser exportado ( compartilhado ), quem e qual o nvel de acesso aos arquivos. Em outra estao GNU/Linux, monte o compartilhamento da primeira estao da seguinte forma #mount -t nfs <host:/compartilhamento> <ponto_de_montagem_local> Depois de montado, bom trabalho. Durante muito tempo percebi que a maioria de meus alunos tem a necessidade de resultados imediatos. Durante os primeiros mdulos do curso de Linux, aquela parte de administrao de sistemas, comandos que do dores de cabea s em pensar neles, conceitos de protocolos, arquivos para configurar isso e aquilo, poucos conseguem entender a importncia dessa etapa. Antes de irmos aos servios, vamos tentar imaginar essas aplicaes muito bem configuradas, com o que h de mais interessante e complexo em sua utilizao. Seria o grande momento de um administrador, concordam ? Agora imaginem essa mesma aplicao, configurada com o que h de mais interessante instalado em um GNU/Linux com o kernel instvel e pouco confivel, seria o inferno na vida de quem estiver administrando esse servio. Se pensarmos em servidores como aplicaes que sero usadas para dispor de algo para um conjunto de mquinas, o primeiro passo para coloc-lo no ar pensar em termos um sistema estvel e totalmente confivel. Ou seja, vamos ter que pensar primeiro no kernel, na instalao e preparao do sistema voltado para a aplicao que iremos dispor. Nessa etapa do curso adotaremos essa linha de pensamento. Iremos nos preocupar com o funcionamento dos servios que iremos configurar. Portas e mdulos usados sero nosso foco, as configuraes necessrias ser o apenas o mecanismo que usaremos para fazer funcionar de acordo com nossas necessidades. Ento vamos l, comear estudando alguns servidores necessrios para a maioria das empresa.

Guia Linux Professional Clayton Lobato

154

Guia Linux Professional Clayton Lobato

155

Captulo 10 - Servidor DNS ( Domain Name Server )


O servio de resoluo de nomes acredito ser um dos mais intrigantes pela sua organizao e atuao em quase 100 % dos mecanismos de interao existentes hoje em dia. Imagine querer acessar seu sistema bancrio ou seu e-mail sem este servio. Ou imagine querer apenas ver as fotos das frias passadas que esto no site pessoal da famlia. Seria realmente algo bem complicado. Precisaramos de uma agenda bem grande e organizada para termos todos os endereos IP e ao lado deles a descrio ou o nome relacionado com este endereo. Para isso foi criado o DNS Domain Name Server. Ele nossa agenda mundial onde encontraremos os endereos para acesso aos sites publicados. Nesse captulo, nosso foco ser o entendimento do servio. Entendo que s conseguimos determinar o funcionamento de algo que entendemos. Por isso estudaremos o funcionamento, requisitos e algumas dicas para configurar o servio de resoluo de nomes. Ento vamos ao que interessa !!!!

Guia Linux Professional Clayton Lobato

156

Guia Linux Professional Clayton Lobato

157

O Servio de Resoluo de Nomes DNS


Veremos aqui o funcionamento do pacote BIND, o servio de resoluo de nomes e sua relao com este pacote.

Fundamentos do DNS
Existem vrias maneiras para converses de nomes em endereos. Uma delas configurar o arquivo /etc/hosts, muito til em redes pequenas, mantidas por uma equipe realmente organizada ou uma nica pessoa e no mantm necessidade de sada para o mundo exterior. Outra sada a utilizao de um servidor BIND Servidor DNS da Berkeley. Com ele podemos mapear nomes dos servidores para endereos IP. Como tudo, podemos enfrentar certa dificuldade para configurar o nosso primeiro servidor, porm, depois de feito as alteraes ficam simples. O Domain name server uma hierarquia distribuda de estaro armazenadas mapeamentos de nome de hosts com versa, informaes de rotas de e-mail e outras informaes Internet. Os clientes enviaro uma pesquisa por biblioteca servidores DNS e interpretar a resposta. base de informao. Nela seus endereos IP e viceusadas por aplicativos de resolv para um ou mais

Requisitos de sistema.
Para configurarmos um servidor DNS no precisamos de muito, observe os requisitos necessrios abaixo.

Hardware
No precisamos de muito para rodar o servio DNS, uma mquina modesta poder nos atender plenamente para configuraes mais simples at configuraes mais personalizadas do servio.

Processador
Um i486-class pode servir para um servidor com zonas estticas sem caching.

Memria RAM
DNS. A opo max-cache-size pode ser usado para limitar o uso de memria no servio

Sistemas operacionais suportados


IBM AIX 4.3 Compaq Digital/Tru64 UNIX 4.0D Compaq Digital/Tru64 UNIX 5 (with IPv6 EAK) HP HP-UX 11 IRIX64 6.5 Sun Solaris 2.6, 7, 8

Guia Linux Professional Clayton Lobato

158 NetBSD 1.5 (with unproven-pthreads 0.17) FreeBSD 3.4-STABLE, 3.5, 4.0, 4.1 e posteriores Red Hat Linux 6.0, 6.1, 6.2, 7.0 e posteriores

Instalao do BIND
Para instalarmos o pacote BIND, podemos usar algumas das etapas abaixo. #apt-get install bind* #yum install bind* #rpm -ivh bind*.rpm #dpkg -i bind*.deb Configurando o Nameserver Sendo o servio responsvel pelo famoso servidor DNS, Domain Name Server, o named est dividido em duas etapas. 1. Declarao dos domnios que sero resolvidos por ele (Arquivo /etc/named.conf); 2. Configurao dos domnios declarados, (Arquivos encontrados em /var/named/chroot/var/named ou somente /var/named). Vimos anteriormente que necessrio ainda um conjunto de configuraes para fazermos nossa mquina resolver nomes. Isso tambm necessrio no servidor. Configuraes do /etc/resolv.conf e /etc/host.conf so necessrias aqui, alm do hostname da mquina. Vamos aos arquivos ento. /etc/named.conf neste arquivo que definimos os domnios que sero resolvidos pelo nosso servidor. O mesmo dividido em 3 partes, o options { < configurao > }, zone domnio IN { < configurao > } e zone "reverso.in-addr.arpa." IN { < configurao > }. A primeira parte, responsvel por informaes sobre o funcionamento do sistema, locais onde os arquivos dos domnios sero gravados, dentre outras informaes. A segunda parte, onde declaramos o domnio e seu arquivo de referncia e a terceira a configurao do reverso do domnio.

Guia Linux Professional Clayton Lobato

159 #vim /etc/named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; query-source address * port 53; max-cache-size 200 }; zone "lps.com.br" IN { type master; file "lps.zone"; allow-update { none; }; }; zone "241.200.10.in-addr.arpa." IN { type master; file "lps.rev"; allow-update { none; }; }; include "/etc/rndc.key"; #vim /var/named/lpn.zone $TTL @ 86400 IN SOA nsrv.lps.com.br. root.nsrv.lps.com.br. ( 42 8H 2H 1W 1D ) IN NS IN MX 10 IN MX 5 ; Serial ; Atualizar ; Tentativas ; Expirao ; TTL mnimo

nsrv.lps.com.br. ; servidor responsvel pelo Name Server. mail.lps.com.br. ; servidor de e-mail do domnio. mail2.lps.com.br. ;servidor de e-mail do domnio.

nsrv IN A 10.200.241.122 ; aqui declaramos os endereos ip para cada mquina que responda por algo no domnio. mail IN A 10.200.241.123

Guia Linux Professional Clayton Lobato

160 mail2 web IN A IN A 10.200.241.124 10.200.241.125

www IN CNAME web.lps.com.br. ; CNAME nos permite resultados de busca como www.domnio.com.br. #vim /var/named/lpn.rev $TTL @ 86400 IN SOA nsrv.lps.com.br. root.nsrv.lps.com.br. ( 42 8H 2H 1W 1D ) IN NS ; Serial ; Atualizar ; Tentativas ; Expirao ; TTL mnimo

nsrv.lps.com.br.

122 IN PTR nsrv.lps.com.br. ; Aqui informamos os endereos IP de cada estao usada para responder por algo no domnio. 123 124 125 IN IN IN PTR PTR PTR mail.lps.com.br. mail2.lps.com.br. web.lps.com.br.

No deixa de colocar os pontos ao final de cada linha, como demonstrado acima. Elas fecham a informao do domnio, impedindo resultados do tipo www.dominio.com.br.dominio.com.br, ou seja duplicao do domnio. Aps configurar, levante o servio, como demonstrado abaixo. #/etc/rc.d/init.d/named restart Para testarmos nossa configurao, o comando dig ou o nslookup nos sero teis. Vamos aos exemplos. #nslookup >set q=any >www.uol.com.br

Guia Linux Professional Clayton Lobato

161

Captulo 11 - O SAMBA Servidor Compartilhamento GNU/Linux Windows


Um dos mecanismos mais usados para estruturar redes MS-Windows, o servio samba se demonstra eficaz em suas atribuies. Usando os protocolos SMB e NMB e sobre as portas nos servios NetBIOS sobre a porta TCP 139, SMB sobre TCP/IP porta TCP 445 para sesses de servios e compatvel com os servios ONC DCE RPC sobre a porta TCP 135. Para melhor entendimento, vamos partir para a configurao do servidor, assim poderemos discutir melhor alguns conceitos. Vamos buscar algumas particularidades de situaes cotidianas.

Guia Linux Professional Clayton Lobato

162

Guia Linux Professional Clayton Lobato

163

Instalao
O processo de instalao do samba bem simples, veja nas linhas de comando abaixo como o faramos usando os pacotes .rpm e .deb. #rpm -ivh samba-verso.rpm #dpkg -i samba-verso.deb #yum install samba* #apt-get install samba* Respeitadas as dependncias, o sistema dever ser instalado corretamente.

Configurao
O arquivo de configurao do samba est dividido em duas partes. A primeira, est identificada como [global], nela definimos o comportamento do servio. A segunda, [share], onde definimos os compartilhamentos do servidor. Observe o arquivo abaixo. [ global ] O parmetro workgroup determina o domnio da rede local. workgroup = intralps A linha server string, conter uma descrio do servidor. server string = Servidor Samba (descrio do servidor) O parmetro os level, determina a procedncia do servidor no processo de eleio de navegao. Trocando em midos, garante que o servidor seja prioritrio em relao aos outros servidores da rede. os level = 33 As prximas 3 linhas definem o servidor como master do domnio. A opo preferred master fora a eleio do servidor como master do domnio. Caso no queira que o servidor samba seja o master da rede, defina no na opo local master. Caso tenha um servidor windows como controlador do domnio, defina no na opo domain master. preferred master = yes domain master = yes local master = yes A linha security determina o comportamento do servidor em relao ao acesso de usurios. A opo user obriga o usurio a logar se no sistema para ter acesso aos compartilhamentos. Se for informado ao sistema a opo share, o sistema ir compartilhar arquivos sem a necessidade de log do usurio. security = user Caso existam estaes windows 95, use a opo domain logons. domain logons = yes

Guia Linux Professional Clayton Lobato

164 Especifique com a opo logon script, qual o formato de nome do script de log do usurio. No exemplo abaixo, determino que para cada usurio existir um script com seu login. logon script = %U.bat Compartilhar arquivos no samba simples. Veja o exemplo abaixo. A linha [desenv] determina o nome do compartilhamento. Muito cuidado com os nomes de compartilhamentos, nomes muito grande podem causar problemas. [ desenv ] path recebe o caminho do diretrio que ser compartilhado. path=/empresa/compartilhamentos/desenvolvimento read only determina se no compartilhamento poder ou no ser gravado arquivos. read only = yes valid users determina quais usurios podero acessar o compartilhamento. Note que uso o @ para determinar um grupo. valid users = @desenv Note que o arquivo possui apenas as informaes necessrias para torn-lo master da rede. Para o funcionamento do servidor, basta alterar o parmetro workgroup, definindo o domnio da rede. Outra forma de configurar o servidor samba est descrita abaixo, aqui usaremos apenas a possibilidade de compartilhamento, sem a necessidade de login de rede. [global] workgroup = intralps security = share printing = CUPS printcap name = CUPS disable spoolss = Yes show add printer wizard = Nowins support = yes [rh] comment = RH Compartilhamento Filespath = /data/rh read only = No Note que temos aqui a opo force group. Nela determinamos qual o grupo de referncia de cada um dos arquivos criados no compartilhamento, garantindo o acesso de todos os membros do grupo ao mesmo. force group = rh

Guia Linux Professional Clayton Lobato

165 [base] comment = Reposiorio da BD path = /data/dbrepositorio read only = No force user = clayton force group = db [printers] comment = Print Temporary Spool Configuration path = /var/spool/samba printable = Yes guest ok = Yes use client driver = Yes browseable = No Nesse caso apresentado, no h muitas regras de acesso, o samba foi configurado apenas para compartilhar arquivos, definido pelo uso do share no parmetro security. Um arquivo geral do samba seria descrito como abaixo. Segundo os criadores do servio, o samba foi projetado para ter o melhor da performance, por isso devemos alterar o mnimo possvel as configuraes. # Global parameters [global] workgroup = lpsnet netbios name = PDC-SRV security = user Algo que devemos ter muito cuidado durante o processo de configurao do servidor samba na determinao de qual interface aceitar solicitaes de clientes. Caso no seja especificado, o servidor aceitar de qualquer interface nele configurado solicitaes clientes, fazendo com que o controle de acesso seja prejudicado. interfaces = 192.168.5.11 #username map = /etc/samba/smbusers server string = Samba Server %v #security = ads encrypt passwords = Yes min passwd length = 3 Na linha acima informo qual o nmero mnimo de caracteres por senha. #pam password change = no #obey pam restrictions = No #ldap passwd sync = Yes

Guia Linux Professional Clayton Lobato

166 unix password sync = Yes passwd program = /opt/IDEALX/sbin/smbldap-passwd -u %u passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n" #passwd chat debug = Yes log level = 0 syslog = 0 log file = /var/log/samba/log.%m max log size = 100000 time server = Yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 mangling method = hash2 Dos charset = 850 Unix charset = ISO8859-1 logon script = logon.bat logon drive = H: logon home = logon path = domain logons = Yes domain master = Yes os level = 65 preferred master = Yes wins support = yes Abaixo teremos as configuraes para autenticao no servidor LDAP. Como no escopo deste treinamento, no entraremos em detalhes a respeito dos mecanismos de integrao entre o LDAP e o Samba. passdb backend = ldapsam:ldap://127.0.0.1/ ldap admin dn = cn=Manager,dc=idealx,dc=org ldap suffix = dc=idealx,dc=org ldap group suffix = ou=Groups ldap user suffix = ou=Users ldap machine suffix = ou=Computers add user script = /opt/IDEALX/sbin/smbldap-useradd -m "%u" #ldap delete dn = Yes delete user script = /opt/IDEALX/sbin/smbldap-userdel "%u" add machine script = /opt/IDEALX/sbin/smbldap-useradd -t 0 -w "%u" add group script = /opt/IDEALX/sbin/smbldap-groupadd -p "%g"

Guia Linux Professional Clayton Lobato

167 #delete group script = /opt/IDEALX/sbin/smbldap-groupdel "%g" add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g '%g' '%u' # printers configuration printer admin = @"Print Operators" load printers = Yes create mask = 0640 directory mask = 0750 #force create mode = 0640 #force directory mode = 0750 nt acl support = No printing = cups printcap name = cups deadtime = 10 guest account = nobody map to guest = Bad User dont descend = /proc,/dev,/etc,/lib,/lost+found,/initrd show add printer wizard = yes ; to maintain capital letters in shortcuts in any of the profile folders: preserve case = yes short preserve case = yes case sensitive = no A partir daqui teremos os compartilhamentos do servidor. O padro seria o mesmo que apresentado nos exemplos anteriores. [netlogon] path = /home/netlogon/ browseable = No read only = yes [profiles] path = /home/profiles read only = no create mask = 0600 directory mask = 0700 browseable = No guest ok = Yes

Guia Linux Professional Clayton Lobato

168 profile acls = yes csc policy = disable # next line is a great way to secure the profiles #force user = %U # next line allows administrator to access all profiles #valid users = %U "Domain Admins" [printers] comment = Network Printers printer admin = @"Print Operators" guest ok = yes printable = yes path = /home/spool/ browseable = No read only = Yes printable = Yes print command = /usr/bin/lpr -P%p -r %s lpq command = /usr/bin/lpq -P%p lprm command = /usr/bin/lprm -P%p %j # print command = /usr/bin/lpr -U%U@%M -P%p -r %s # lpq command = /usr/bin/lpq -U%U@%M -P%p # lprm command = /usr/bin/lprm -U%U@%M -P%p %j # lppause command = /usr/sbin/lpc -U%U@%M hold %p %j # lpresume command = /usr/sbin/lpc -U%U@%M release %p %j # queuepause command = /usr/sbin/lpc -U%U@%M stop %p # queueresume command = /usr/sbin/lpc -U%U@%M start %p [print$] path = /home/printers guest ok = No browseable = Yes read only = Yes valid users = @"Print Operators" write list = @"Print Operators" create mask = 0664 directory mask = 0775

Guia Linux Professional Clayton Lobato

169

Aps configurado, basta criarmos os usurios do sistema samba, para isso... #useradd -s /bin/false -d /work/usuarios/clayton clayton #smbpasswd -a clayton 4. Arquivos .bat - NETLOGON. Agora crie o arquivo de netlogon para os usurios, com esse arquivo, ser montado na mquina cliente os compartilhamentos definidos para o usurio. Sempre interessante que aps edio dos arquivos .bat, em ambiente linux, que se use o comando unix2dos arquivo.bat, convertendo o mesmo para o padro do windows. Assim, evitamos problemas com a execuo das montagens do sistema. Veja o exemplo abaixo... #vim /netlogon/clayton.bat @echo off echo Empresa LPS echo Logon script padrao para a rede. echo net time \\servidor /set /yes if %OS%.==Windows_NT. goto WinNT :WinNT # net use drive_no_cliente: \\servidor\compartilhamento net use m: \\200.241.1.138\treinamento /persistent:no net use y: \\200.241.1.138\linux /persistent:no net use n: \\200.241.1.138\informatica /persistent:no if errorlevel<>0 pause :end Tudo configurado e nada funcionando. Essa uma dura realidade do samba. Enquanto muitos administradores se preocupam com as configuraes do arquivo /etc/smb.conf, esquecem-se que nada funcionar corretamente se as relaes entre usurios, grupos e arquivos no estiverem corretas. Note que nos compartilhamentos definimos com o parmetro valid users quem teria acesso ao compartilhamento e ser usado normalmente um grupo, descrito com o prefixo @, como no exemplo valid users = @suporte. Durante o processo de solicitaes dos usurios ao servidor samba, o servio ir questionar junto ao sistema se o usurio membro do grupo de referncia do arquivo. Por isso, s conseguimos criar um usurio para o servidor samba, se o mesmo existir de alguma forma como usurio do sistema, mesmo que este no tenha acesso a uma console ou qualquer outro mecanismo de interao que no seja o servidor samba. Concluso de tudo... No basta conhecer a fundo cada opo do arquivo de configurao do samba se no definir corretamente a relao dos usurios, seus grupos e o acesso aos arquivos. Por isso, antes de pensar em configurar o samba, preocupe-se em organizar corretamente sua estrutura de arquivos.

Guia Linux Professional Clayton Lobato

170

Guia Linux Professional Clayton Lobato

171

Captulo 12 - SQUID Proxy Firewall em Layer 7 ?


Durante muito tempo o servidor squid foi considerado um mero proxy para a grande maioria das pessoas. Respondendo na porta 3128, como padro, o sistema ir restringir de forma mais simples o acesso a contedos na internet, atravs de recursos como bloqueios de palavras, sites, domnios. Estudaremos o squid em duas etapas. Na primeira, iremos determinar uma configurao simples do servio, com alguns poucos bloqueios e nenhuma preocupao com o uso da banda de internet. No segundo momento, um modelo de aquivo para o uso de recurso de bloqueios e controles de banda, taxas de download dentre outras configuraes ser apresentado.

Guia Linux Professional Clayton Lobato

172

Guia Linux Professional Clayton Lobato

173

Instalao do Squid
Podemos instalar o pacote de vrias maneiras. As mais comuns seriam o uso de pacotes rpm, deb ou as ferramentas apt-get ou yum, como demonstrado abaixo. #rpm -ivh squid*.rpm #dpkg -i squid*.deb #yum install squid* #apt-get install squid* Existe ainda a possibilidade da instalao ser feita a partir do cdigo fonte da aplicao - processo chamado de compilao - algo nem sempre simples e nem to pouco de fcil entendimento. O grande problema determinar a necessidade de compilao, haja vista que o sistema estar pronto para atender mais de 90% das necessidades da maioria dos usurios. Se pensarmos em squid como apenas um filtro de acesso a contedos, a simples instalao via pacotes ser suficiente. Porm, se pensarmos em squid como um controlador de uso de recursos, restringindo acessos e checando requisies atravs de mac-address, por exemplo, a sada ser a compilao. Para compilarmos o servio, baixe o fonte do site www.squid-cache.org, descompacte e compile como demonstrado abaixo. #links www.squid-cache.org #tar -zxvf squid-*.tar.gz #cd squid-* #./configure --prefix=/usr sysconfdir=/etc/squid\ --libexecdir=/usr/lib/squid infodir=/usr/share/info\ --mandir=/usr/share/man enable-delay-pools\ --enable-useragent-log enable-cachemgr-hostname=clayton\ --enable-arp-acl enable-default-err-language="Portuguese"\ --enable-underscores --disable-htcp disable-internal-dns\ --enable-cache-digests #make #make install Para maiores informaes sobre as possibilidades de compilao, use o ./configure help. Aps a compilao, devemos verificar se os pacotes foram realmente gravados nos locais definidos pelos parmetros prefix, sysconfdir, infodir, libexecdir, mandir. Caso esses parmetros no sejam usados, ser criado uma estrutura para o squid em /usr/local. Aps a instalao do sistema, importante conhecer o equipamento que estamos usando para poder determinar configuraes refinadas para prover melhores performances.

Guia Linux Professional Clayton Lobato

174 Arquivo de configurao Squid limitando acesso por arquivo reject, segmentando banda por delay_pools e restringindo o volume de download com reply_body_max_size 500 allow all # Squid normally listens to port 3128 O primeiro passo determinarmos a porta na qual o servidor ir responder. Observe que mantive o padro 3128, porm , poderamos ter alterado para outros valores como 8080, por exemplo. http_port 3128 Aqui determinamos o quanto de memria ser usado para cache do servidor. sempre interessante termos um volume alto para cache em memria, quanto mais memria, em tese, melhor ser a performance na resposta da aplicao para o cliente. cache_mem 1000 MB Neste momento determinamos os valores de cache considerados baixo e alto. No exemplo abaixo mantenho novamente o padro de 90% para cache baixo e 95% para cache alto. cache_swap_low 90 cache_swap_high 95 As linhas seguintes geram um pouco de dvida para as pessoas que esto iniciando no processo de administrao do sistema. Aqui determinamos o tamanho mximo e mnimos que poderemos fazer cache no servidor e quanto ser o volume mximo de um objeto em memria. maximum_object_size 4096 KB minimum_object_size 0 KB maximum_object_size_in_memory 8 KB ipcache_size 1024 ipcache_low 90 ipcache_high 95 Na linha abaixo, temos toda a estrutura dos diretrios que sero usados para cache do sistema. Determinamos aqui que teremos o diretrio onde ser criada a estrutura de cache </var/spool/squid>, o espao mximo em disco que ser usado para cache. Havendo um estouro desse espao, os objetos sero repostos. Em seguida temos o nmero de diretrios e subdiretrios que sero criados para montar a estrutura de cache em disco. Se passarmos com parmetro o valor max-size, determinaremos o tamanho mximo de objeto na estrutura. cache_dir ufs /var/spool/squid 100 16 256 access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log Nessa etapa declaramos os endereos das subredes tratadas pelo servidor, horrios de acesso, listas de acesso ou negao. Note que falei declarao. No na estrutura de acl que determinamos se determinado endereo ter ou no acesso . Isso feito pelo http_access, as acls apenas declaram uma informao para que o servidor tenha como interpretar no momento de negao ou aceitao de uma determinada conexo.

Guia Linux Professional Clayton Lobato

175 O padro de declarao de uma acl bem simples. Teremos a estrutura iniciada por acl, palavra reservada, em seguida o nome da acl, o qual ser usado para referenciar valores ao servidor, aps o nome teremos o tipo de acl que iremos usar. Existe uma lista bem vasta de acls que podem ser usadas, para conhecer mais sobre os tipos leia o arquivo de configurao do squid. Por ltimo, temos o valor da acl declarada. Em grande parte dos servidores instalados teremos algumas acls como a base de configurao dos mesmos, so elas. src determina um endereo de host ou subrede no padro ip/netmask time determina a hora url_regex -i usada para determinar o tratamento de palavras, principalmente em um arquivo, passado com o uso do caminho absoluto. No exemplo usamos duas acls, uma para determinar a rede e outra para informarmos um arquivo que ser usado como base de pesquisa para o squid. acl all src 0.0.0.0/0.0.0.0 acl rede 192.168.1.0/255.255.255.0 acl recusados url_regex -i "/etc/squid/recusados" acl comercialm time MTWHF 8-11:59 acl comercialt time MTWHF 13:59-18 Na linha seguinte determinamos o nmero mximo permitido por usurio. acl maxconn 1 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 70 acl Safe_ports port 210 acl Safe_ports port 1025-65535 acl Safe_ports port 280 acl Safe_ports port 488 acl Safe_ports port 591 acl Safe_ports port 777 acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports # http # ftp # gopher # wais # unregistered ports # http-mgmt # gss-http # filemaker # multiling http

acl Safe_ports port 443 563 # https, snews

Guia Linux Professional Clayton Lobato

176 Falei anteriormente que o responsvel pelas negaes do servio o http_access. Abaixo temos o tratamento das acls criadas. Note que por padro o valor all, padro do sistema, sempre negando o acesso a redes no declaradas. A rede que criamos est com seu acesso aceito, exceto para materiais com contedos que contenham uma das palavras ou sites da acl recusados. http_access allow localhost http_access deny comercialm rede http_access deny comercialt rede http_access allow rede !recusados http_access deny all http_reply_access allow all icp_access allow all Na linha abaixo determinamos o valor mximo permitido para download. reply_body_max_size 500 allow all Aqui comea realmente o que h de interessante no squid. Iremos us-lo como segmentador de banda, para isso usaremos o valor delay_pools. No esquea de compilar o squid e habilitar os valores para delay_pools. Vamos determinar 3 situaes tpicas de uma rede empresarial. 1. Precisamos determinar uma largura para acesso de uma subrede da empresa, sem afetar o comportamento do restante da empresa; 2. Precisamos determinar valores individuais para acessos; 3. Determinaremos valores para uma determinada subrede e nesta, valores individuais para hosts que a compe. Essas so as informaes necessrias para configurarmos o comportamento das bandas pelo squid. chamamos esses comportamentos de classes e as dividimos em classe 1, classe 2 e classe 3 , como descrito no pargrafo anterior. Como primeira tarefa, determine o valor em bytes para a banda. Ou seja, converta de kb/s para b/s. Vamos determinar nossa banda de 380 kb/s, isso nos dar o valor 47500 bytes/s. Determine o nmero de pools que teremos. De acordo com o nmero de pools poderemos ter configuraes mais completas do sistemas. Como definiremos um nico pools, s poderemos passar um valor ao sistema. delay_pools 1 Definiremos a relao entre o pools declarado e a classe que usaremos com o mesmo. No esquea que temos 3 classes e cada uma nos dar um resultado bem especfico, por isso, cuidado ao declarar a classe do pools. delay_class 1 1 Definiremos os valores de banda no parmetro delay_parameters. Note que aqui foi informado o valor da banda e que a relacionamos com o pools declarado anteriormente. delay_parameters 1 47500/47500 Agora basta definirmos a relao das regras de pools criada com uma subrede

Guia Linux Professional Clayton Lobato

177 declara nas acls, como no exemplo abaixo. delay_access 1 allow rede Seguindo os mesmos valores, para uma delay_class 2, com uma taxa individual de 200kb/s para cada conexo, teremos. delay_pools 1 delay_class 1 2 delay_parameters 1 47500/47500 2500/2500 delay_access 1 allow rede Observe que um valor novo apareceu. O Max, logo aps o Replace. Aqui determinamos o comportamento das conexes em relao a banda, desde que no exceda o valor de replace. Usando o delay_class 3, precisamos de mais algumas informaes, haja vista que determinaremos valores para a subrede e para cada host desta subrede. Vamos determinar nossos valores em bytes. Largura total = 520 kb/s (65000 bytes/s) Largura por subrede = 255 kb/s (31875 bytes/s) Largura por host = 40 kb/s (5000 bytes/s) Com isso, teremos no arquivo squid.conf a seguinte configurao. delay_pools 1 delay_class 1 3 delay_parameters 1 65000/65000 31875/31875 5000/5000 delay_access 1 allow rede Um detalhe importante aqui que a classe 3 s poder ser usada para endereos ip em classe C. Configuraes feitas, reinicie o servio e boa sorte.

Guia Linux Professional Clayton Lobato

178

Guia Linux Professional Clayton Lobato

179

Captulo 13 - Servidor DHCP


Vamos definir a configurao do servidor DHCP, nele usaremos dois momentos. O primeiro ser simples e ser configurado um range de IP para distribuir dinamicamente para as mquinas solicitantes. No outro, usaremos informaes de MAC Address para determinarmos o endereo IP de nossas mquinas.

Guia Linux Professional Clayton Lobato

180

Guia Linux Professional Clayton Lobato

181

1. DHCP simples.
Veja no exemplo abaixo como simples definirmos um range de IP para distribuir dinamicamente. #vim /etc/dhcpd.conf ddns-update-style interim; ignore client-updates; Declaramos a subrede que ser gerenciada pelo servidor DHCP. Observe a estrutura das informaes, informamos a subnet e em seguida a netmask, iniciando o bloco por uma { subnet 192.168.0.0 netmask 255.255.255.0 { Definimos a estrutura de servidores para esta subrede. Option routers seria o gateway da rede, subnetmask do servidor, o domain-name domnio da rede e por fim o domain-name-servers, endereo ip do servidor dns. # --- default gateway option routers option subnet-mask option nis-domain option domain-name option domain-name-servers option time-offset # # option ntp-servers 192.168.0.1; 255.255.255.0; "domain.org"; "domain.org"; 192.168.1.1;

-18000; # Eastern Standard Time 192.168.1.1; 192.168.1.1;

option netbios-name-servers

# --- Selects point-to-point node (default is hybrid). Don't change this unless # -- you understand Netbios very well # option netbios-node-type 2; range dynamic-bootp 192.168.0.128 192.168.0.254; default-lease-time 21600; max-lease-time 43200; } No exemplo abaixo, uso as mesmas referncias usadas anteriormente, porm associo um endereo ip ao mac-address pelo parmetro host. Determinamos os ips que sero distribudos dinamicamente.

Guia Linux Professional Clayton Lobato

182

2. IP fixo usando DHCP .


default-lease-time 86400; max-lease-time 172800; option ntp-servers 10.0.0.138; option domain-name "intra"; option domain-name-servers 10.0.0.138; option netbios-name-servers 10.0.0.138; option netbios-node-type 8; ddns-updates on; ddns-update-style interim; subnet 10.42.225.12 netmask 255.255.255.252 { } #sala 1 subnet 10.42.228.0 netmask 255.255.255.248 { option routers option subnet-mask host maq01_01 { hardware ethernet 00:0F:EA:DD:1A:A6; fixed-address 10.42.228.1; option subnet-mask 255.255.255.248; } host maq02-01 { hardware ethernet 00:0F:EA:DA:04:9B; fixed-address 10.42.228.2; option subnet-mask 255.255.255.248; } host maq03-01 { hardware ethernet 00:0F:EA:DD:B1:18; fixed-address 10.42.228.3; option subnet-mask 255.255.255.248; } host maq04-01 { hardware ethernet 00:0F:EA:DD:21:30; fixed-address 10.42.228.4; 10.0.0.138; 255.0.0.0;

Guia Linux Professional Clayton Lobato

183 option subnet-mask 255.255.255.248; } host maq05-01 { hardware ethernet 00:0F:EA:DC:1E:6E; fixed-address 10.42.228.5; option subnet-mask 255.255.255.248; } host maq06-01 { hardware ethernet 00:0F:EA:DD:50:AA; fixed-address 10.42.228.6; option subnet-mask 255.255.255.248; }

Observe que usei endereos IP relacionados com os MACs das estaes.

Guia Linux Professional Clayton Lobato

184

Guia Linux Professional Clayton Lobato

185

Captulo 14 - Servidor Postfix / Dovecot


Responsvel pelo processo de troca de mail entre usurios de mesmo domnio e de domnios diferentes, o postfix um servidor de mail, substituto do sendmail pela facilidade de configurao e rpido entendimento do arquivo de configurao. A sensao de enviarmos um arquivo para outra pessoa, no outro lado do mundo fascinante realmente, e pensar em como tudo isso funciona pode ser realmente complicado. Veremos nessa etapa como configurar o servidor de mail postfix e o dovecot, que o responsvel pelos servios de pop e smtp, alm de entendermos qual a relao do servidor de mail com o servidor DNS.

Guia Linux Professional Clayton Lobato

186

Guia Linux Professional Clayton Lobato

187 Este um dos servidores mais simples de ser configurado. Desde que saibamos algumas poucas informaes o servidor de mail est em pleno funcionamento. No devemos ignorar sua relao com o servidor DNS. Lembre-se que durante a configurao do named, informamos atravs do parmetro MX quem seria o responsvel pelos e-mail do domnio declarado. Muitos alunos durante o processo de aprendizado acabam me ligando por terem esquecido do relacionamento direto entre o DNS e o Mail Server, no nosso caso, o PostFix. Para instalar o postfix, usaremos o padro de pacotes. #rpm -ivh postfix*.rpm #dpkg -i postfix*.deb #yum install postfix* #apt-get install postfix* Uma vez instalado e o DNS apontando corretamente para ele, vamos configur-lo. Seu arquivo de configuraes o /etc/postfix/main.cf, de fcil leitura e entendimento. #vim /etc/postfix/main.cf # Global Postfix configuration file. This file lists only a subset # of all parameters. For the syntax, and for a complete parameter # list, see the postconf(5) manual page (command: "man 5 postconf"). # # For common configuration examples, see BASIC_CONFIGURATION_README # and STANDARD_CONFIGURATION_README. To find these documents, use # the command "postconf html_directory readme_directory", or go to # http://www.postfix.org/. # # For best results, change no more than 2-3 parameters at a time, # and test if Postfix still works after every change. # SOFT BOUNCE # # The soft_bounce parameter provides a limited safety net for # testing. When soft_bounce is enabled, mail will remain queued that # would otherwise bounce. This parameter disables locally-generated # bounces, and prevents the SMTP server from rejecting mail permanently # (by changing 5xx replies into 4xx replies). However, soft_bounce # is no cure for address rewriting mistakes or mail routing mistakes. #

Guia Linux Professional Clayton Lobato

188 #soft_bounce = no # LOCAL PATHNAME INFORMATION # # The queue_directory specifies the location of the Postfix queue. # This is also the root directory of Postfix daemons that run chrooted. # See the files in examples/chroot-setup for setting up Postfix chroot # environments on different UNIX systems. # Na linha abaixo informamos ao servidor onde ser o diretrio de spools de mail. queue_directory = /var/spool/postfix # The command_directory parameter specifies the location of all # postXXX commands. # command_directory = /usr/sbin # The daemon_directory parameter specifies the location of all Postfix # daemon programs (i.e. programs listed in the master.cf file). This # directory must be owned by root. # daemon_directory = /usr/libexec/postfix # QUEUE AND PROCESS OWNERSHIP # # The mail_owner parameter specifies the owner of the Postfix queue # and of most Postfix daemon processes. Specify the name of a user # account THAT DOES NOT SHARE ITS USER OR GROUP ID WITH OTHER ACCOUNTS # AND THAT OWNS NO OTHER FILES OR PROCESSES ON THE SYSTEM. In # particular, don't specify nobody or daemon. PLEASE USE A DEDICATED # USER. # Observe que desde o incio deste material afirmo que tudo no sistema est relacionado de alguma forma com um usurio. Com o servidor postfix no diferente. Durante o processo de instalao com o uso de pacotes, foi criado um usurio de sistema para o servidor, chamado postfix. Na linha mail_owner definiremos qual usurio ser responsvel pelo servio.

Guia Linux Professional Clayton Lobato

189 mail_owner = postfix # The default_privs parameter specifies the default rights used by # the local delivery agent for delivery to external file or command. # These rights are used in the absence of a recipient user context. # DO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER. # #default_privs = nobody # INTERNET HOST AND DOMAIN NAMES # # The myhostname parameter specifies the internet hostname of this # mail system. The default is to use the fully-qualified domain name # from gethostname(). $myhostname is used as a default value for many # other configuration parameters. # #myhostname = host.domain.tld Na linha abaixo informamos quem o servidor de e-mail. Observe que uso o nome completo da mquina. myhostname = server.clayton.com # The mydomain parameter specifies the local internet domain name. # The default is to use $myhostname minus the first component. # $mydomain is used as a default value for many other configuration # parameters. # Informaremos na opo mydomain o nome do domnio do servidor de mail . mydomain = clayton.com # SENDING MAIL # # The myorigin parameter specifies the domain that locally-posted # mail appears to come from. The default is to append $myhostname, # which is fine for small sites. If you run a domain with multiple # machines, you should (1) change this to $mydomain and (2) set up # a domain-wide alias database that aliases each user to # user@that.users.mailhost.

Guia Linux Professional Clayton Lobato

190 # # For the sake of consistency between sender and recipient addresses, # myorigin also specifies the default domain name that is appended # to recipient addresses that have no @domain part. # #myorigin = $myhostname myorigin = $mydomain # RECEIVING MAIL # The inet_interfaces parameter specifies the network interface # addresses that this mail system receives mail on. By default, # the software claims all active interfaces on the machine. The # parameter also controls delivery of mail to user@[ip.address]. # # See also the proxy_interfaces parameter, for network addresses that # are forwarded to us via a proxy or network address translator. # # Note: you need to stop/start Postfix when this parameter changes. # inet_interfaces = all #inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost #inet_interfaces = localhost # The proxy_interfaces parameter specifies the network interface # addresses that this mail system receives mail on by way of a # proxy or network address translation unit. This setting extends # the address list specified with the inet_interfaces parameter. # # You must specify your proxy/NAT addresses when your system is a # backup MX host for other domains, otherwise mail delivery loops # will happen when the primary MX host is down. # #proxy_interfaces = #proxy_interfaces = 1.2.3.4

Guia Linux Professional Clayton Lobato

191

# The mydestination parameter specifies the list of domains that this # machine considers itself the final destination for. # # These domains are routed to the delivery agent specified with the # local_transport parameter setting. By default, that is the UNIX # compatible delivery agent that lookups all recipients in /etc/passwd # and /etc/aliases or their equivalent. # # The default is $myhostname + localhost.$mydomain. On a mail domain # gateway, you should also include $mydomain. # # Do not specify the names of virtual domains - those domains are # specified elsewhere (see VIRTUAL_README). # # Do not specify the names of domains that this machine is backup MX # host for. Specify those names via the relay_domains settings for # the SMTP server, or use permit_mx_backup if you are lazy (see # STANDARD_CONFIGURATION_README). # # The local machine is always the final destination for mail addressed # to user@[the.net.work.address] of an interface that the mail system # receives mail on (see the inet_interfaces parameter). # # Specify a list of host or domain names, /file/name or type:table # patterns, separated by commas and/or whitespace. A /file/name # pattern is replaced by its contents; a type:table is matched when # a name matches a lookup key (the right-hand side is ignored). # Continue long lines by starting the next line with whitespace. # # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS". # #mydestination = $myhostname, localhost.$mydomain, localhost #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mydestination = $myhostname, localhost.$mydomain, localhost, mail.$mydomain, www.$mydomain, ftp.$mydomain, /etc/postfix/domains $mydomain,

Guia Linux Professional Clayton Lobato

192 # REJECTING MAIL FOR UNKNOWN LOCAL USERS # # The local_recipient_maps parameter specifies optional lookup tables # with all names or addresses of users that are local with respect # to $mydestination, $inet_interfaces or $proxy_interfaces. # # If this parameter is defined, then the SMTP server will reject # mail for unknown local users. This parameter is defined by default. # # To turn off local recipient checking in the SMTP server, specify # local_recipient_maps = (i.e. empty). # # The default setting assumes that you use the default Postfix local # delivery agent for local delivery. You need to update the # local_recipient_maps setting if: # # - You define $mydestination domain recipients in files other than # /etc/passwd, /etc/aliases, or the $virtual_alias_maps files. # For example, you define $mydestination domain recipients in # the $virtual_mailbox_maps files. # # - You redefine the local delivery agent in master.cf. # # - You redefine the "local_transport" setting in main.cf. # # - You use the "luser_relay", "mailbox_transport", or "fallback_transport" # feature of the Postfix local delivery agent (see local(8)). # # Details are described in the LOCAL_RECIPIENT_README file. # # Beware: if the Postfix SMTP server runs chrooted, you probably have # to access the passwd file via the proxymap service, in order to # overcome chroot restrictions. The alternative, having a copy of # the system passwd file in the chroot jail is just not practical. # # The right-hand side of the lookup tables is conveniently ignored.

Guia Linux Professional Clayton Lobato

193 # In the left-hand side, specify a bare username, an @domain.tld # wild-card, or specify a user@domain.tld address. # #local_recipient_maps = unix:passwd.byname $alias_maps #local_recipient_maps = proxy:unix:passwd.byname $alias_maps #local_recipient_maps = # The unknown_local_recipient_reject_code specifies the SMTP server # response code when a recipient domain matches $mydestination or # ${proxy,inet}_interfaces, while $local_recipient_maps is non-empty # and the recipient address or address local-part is not found. # # The default setting is 550 (reject mail) but it is safer to start # with 450 (try again later) until you are certain that your # local_recipient_maps settings are OK. # unknown_local_recipient_reject_code = 550 # TRUST AND RELAY CONTROL # The mynetworks parameter specifies the list of "trusted" SMTP # clients that have more privileges than "strangers". # # In particular, "trusted" SMTP clients are allowed to relay mail # through Postfix. See the smtpd_recipient_restrictions parameter # in postconf(5). # # You can specify the list of "trusted" network addresses by hand # or you can let Postfix do it for you (which is the default). # # By default (mynetworks_style = subnet), Postfix "trusts" SMTP # clients in the same IP subnetworks as the local machine. # On Linux, this does works correctly only with interfaces specified # with the "ifconfig" command. # # Specify "mynetworks_style = class" when Postfix should "trust" SMTP

Guia Linux Professional Clayton Lobato

194 # clients in the same IP class A/B/C networks as the local machine. # Don't do this with a dialup site - it would cause Postfix to "trust" # your entire provider's network. Instead, specify an explicit # mynetworks list by hand, as described below. # # Specify "mynetworks_style = host" when Postfix should "trust" # only the local machine. # #mynetworks_style = class mynetworks_style = subnet #mynetworks_style = host # Alternatively, you can specify the mynetworks list by hand, in # which case Postfix ignores the mynetworks_style setting. # # Specify an explicit list of network/netmask patterns, where the # mask specifies the number of bits in the network part of a host # address. # # You can also specify the absolute pathname of a pattern file instead # of listing the patterns here. Specify type:table for table-based lookups # (the value on the table right-hand side is not used). # Precisamos informar quais as redes que o servidor est operando. Use como no exemplo abaixo. mynetworks = 192.168.1.0/24, 127.0.0.0/8 #mynetworks = $config_directory/mynetworks #mynetworks = hash:/etc/postfix/network_table # The relay_domains parameter restricts what destinations this system will # relay mail to. See the smtpd_recipient_restrictions description in # postconf(5) for detailed information. # # By default, Postfix relays mail # - from "trusted" clients (IP address matches $mynetworks) to any destination, # - from "untrusted" clients to destinations that match $relay_domains or # subdomains thereof, except addresses with sender-specified routing.

Guia Linux Professional Clayton Lobato

195 # The default relay_domains value is $mydestination. # # In addition to the above, the Postfix SMTP server by default accepts mail # that Postfix is final destination for: # - destinations that match $inet_interfaces or $proxy_interfaces, # - destinations that match $mydestination # - destinations that match $virtual_alias_domains, # - destinations that match $virtual_mailbox_domains. # These destinations do not need to be listed in $relay_domains. # # Specify a list of hosts or domains, /file/name patterns or type:name # lookup tables, separated by commas and/or whitespace. Continue # long lines by starting the next line with whitespace. A file name # is replaced by its contents; a type:name table is matched when a # (parent) domain appears as lookup key. # # NOTE: Postfix will not automatically forward mail for domains that # list this system as their primary or backup MX host. See the # permit_mx_backup restriction description in postconf(5). # relay_domains = $mydestination # INTERNET OR INTRANET # The relayhost parameter specifies the default host to send mail to # when no entry is matched in the optional transport(5) table. When # no relayhost is given, mail is routed directly to the destination. # # On an intranet, specify the organizational domain name. If your # internal DNS uses no MX records, specify the name of the intranet # gateway host instead. # # In the case of SMTP, specify a domain, host, host:port, [host]:port, # [address] or [address]:port; the form [host] turns off MX lookups. # # If you're connected via UUCP, see also the default_transport parameter.

Guia Linux Professional Clayton Lobato

196 # #relayhost = $mydomain #relayhost = [gateway.my.domain] #relayhost = [mailserver.isp.tld] #relayhost = uucphost #relayhost = [an.ip.add.ress] # REJECTING UNKNOWN RELAY USERS # # The relay_recipient_maps parameter specifies optional lookup tables # with all addresses in the domains that match $relay_domains. # # If this parameter is defined, then the SMTP server will reject # mail for unknown relay users. This feature is off by default. # # The right-hand side of the lookup tables is conveniently ignored. # In the left-hand side, specify an @domain.tld wild-card, or specify # a user@domain.tld address. # #relay_recipient_maps = hash:/etc/postfix/relay_recipients # INPUT RATE CONTROL # # The in_flow_delay configuration parameter implements mail input # flow control. This feature is turned on by default, although it # still needs further development (it's disabled on SCO UNIX due # to an SCO bug). # # A Postfix process will pause for $in_flow_delay seconds before # accepting a new message, when the message arrival rate exceeds the # message delivery rate. With the default 100 SMTP server process # limit, this limits the mail inflow to 100 messages a second more # than the number of messages delivered per second. # # Specify 0 to disable the feature. Valid delays are 0..10. #

Guia Linux Professional Clayton Lobato

197 #in_flow_delay = 1s # ADDRESS REWRITING # # The ADDRESS_REWRITING_README document gives information about # address masquerading or other forms of address rewriting including # username->Firstname.Lastname mapping. # ADDRESS REDIRECTION (VIRTUAL DOMAIN) # # The VIRTUAL_README document gives information about the many forms # of domain hosting that Postfix supports. # "USER HAS MOVED" BOUNCE MESSAGES # # See the discussion in the ADDRESS_REWRITING_README document. # TRANSPORT MAP # # See the discussion in the ADDRESS_REWRITING_README document. # ALIAS DATABASE # # The alias_maps parameter specifies the list of alias databases used # by the local delivery agent. The default list is system dependent. # # On systems with NIS, the default is to search the local alias # database, then the NIS alias database. See aliases(5) for syntax # details. # # If you change the alias database, run "postalias /etc/aliases" (or # wherever your system stores the mail alias file), or simply run # "newaliases" to build the necessary DBM or DB file. # # It will take a minute or so before changes become visible. Use # "postfix reload" to eliminate the delay.

Guia Linux Professional Clayton Lobato

198 # #alias_maps = dbm:/etc/aliases alias_maps = hash:/etc/aliases #alias_maps = hash:/etc/aliases, nis:mail.aliases #alias_maps = netinfo:/aliases # The alias_database parameter specifies the alias database(s) that # are built with "newaliases" or "sendmail -bi". This is a separate # configuration parameter, because alias_maps (see above) may specify # tables that are not necessarily all under control by Postfix. # #alias_database = dbm:/etc/aliases #alias_database = dbm:/etc/mail/aliases alias_database = hash:/etc/aliases #alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases # ADDRESS EXTENSIONS (e.g., user+foo) # # The recipient_delimiter parameter specifies the separator between # user names and address extensions (user+foo). See canonical(5), # local(8), relocated(5) and virtual(5) for the effects this has on # aliases, canonical, virtual, relocated and .forward file lookups. # Basically, the software tries user+foo and .forward+foo before # trying user and .forward. # #recipient_delimiter = + # DELIVERY TO MAILBOX # # The home_mailbox parameter specifies the optional pathname of a # mailbox file relative to a user's home directory. The default # mailbox file is /var/spool/mail/user or /var/mail/user. Specify # "Maildir/" for qmail-style delivery (the / is required). # #home_mailbox = Mailbox #home_mailbox = Maildir/

Guia Linux Professional Clayton Lobato

199

# The mail_spool_directory parameter specifies the directory where # UNIX-style mailboxes are kept. The default setting depends on the # system type. # #mail_spool_directory = /var/mail #mail_spool_directory = /var/spool/mail # The mailbox_command parameter specifies the optional external # command to use instead of mailbox delivery. The command is run as # the recipient with proper HOME, SHELL and LOGNAME environment settings. # Exception: delivery for root is done as $default_user. # # Other environment variables of interest: USER (recipient username), # EXTENSION (address extension), DOMAIN (domain part of address), # and LOCAL (the address localpart). # # Unlike other Postfix configuration parameters, the mailbox_command # parameter is not subjected to $parameter substitutions. This is to # make it easier to specify shell syntax (see example below). # # Avoid shell meta characters because they will force Postfix to run # an expensive shell process. Procmail alone is expensive enough. # # IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN # ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER. # #mailbox_command = /some/where/procmail #mailbox_command = /some/where/procmail -a "$EXTENSION" # The mailbox_transport specifies the optional transport in master.cf # to use after processing aliases and .forward files. This parameter # has precedence over the mailbox_command, fallback_transport and # luser_relay parameters. # # Specify a string of the form transport:nexthop, where transport is

Guia Linux Professional Clayton Lobato

200 # the name of a mail delivery transport defined in master.cf. The # :nexthop part is optional. For more details see the sample transport # configuration file. # # NOTE: if you use this feature for accounts not in the UNIX password # file, then you must update the "local_recipient_maps" setting in # the main.cf file, otherwise the SMTP server will reject mail for # non-UNIX accounts with "User unknown in local recipient table". # #mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp # If using the cyrus-imapd IMAP server deliver local mail to the IMAP # server using LMTP (Local Mail Transport Protocol), this is prefered # over the older cyrus deliver program by setting the # mailbox_transport as below: # # mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp # # The efficiency of LMTP delivery for cyrus-imapd can be enhanced via # these settings. # # local_destination_recipient_limit = 300 # local_destination_concurrency_limit = 5 # # Of course you should adjust these settings as appropriate for the # capacity of the hardware you are using. The recipient limit setting # can be used to take advantage of the single instance message store # capability of Cyrus. The concurrency limit can be used to control # how many simultaneous LMTP sessions will be permitted to the Cyrus # message store. # # To use the old cyrus deliver program you have to set: #mailbox_transport = cyrus # The fallback_transport specifies the optional transport in master.cf # to use for recipients that are not found in the UNIX passwd database.

Guia Linux Professional Clayton Lobato

201 # This parameter has precedence over the luser_relay parameter. # # Specify a string of the form transport:nexthop, where transport is # the name of a mail delivery transport defined in master.cf. The # :nexthop part is optional. For more details see the sample transport # configuration file. # # NOTE: if you use this feature for accounts not in the UNIX password # file, then you must update the "local_recipient_maps" setting in # the main.cf file, otherwise the SMTP server will reject mail for # non-UNIX accounts with "User unknown in local recipient table". # #fallback_transport = lmtp:unix:/var/lib/imap/socket/lmtp #fallback_transport = # The luser_relay parameter specifies an optional destination address # for unknown recipients. By default, mail for unknown@$mydestination, # unknown@[$inet_interfaces] or unknown@[$proxy_interfaces] is returned # as undeliverable. # # The following expansions are done on luser_relay: $user (recipient # username), $shell (recipient shell), $home (recipient home directory), # $recipient (full recipient address), $extension (recipient address # extension), $domain (recipient domain), $local (entire recipient # localpart), $recipient_delimiter. Specify ${name?value} or # ${name:value} to expand value only when $name does (does not) exist. # # luser_relay works only for the default Postfix local delivery agent. # # NOTE: if you use this feature for accounts not in the UNIX password # file, then you must specify "local_recipient_maps =" (i.e. empty) in # the main.cf file, otherwise the SMTP server will reject mail for # non-UNIX accounts with "User unknown in local recipient table". # #luser_relay = $user@other.host #luser_relay = $local@other.host

Guia Linux Professional Clayton Lobato

202 #luser_relay = admin+$local # JUNK MAIL CONTROLS # # The controls listed here are only a very small subset. The file # SMTPD_ACCESS_README provides an overview. # The header_checks parameter specifies an optional table with patterns # that each logical message header is matched against, including # headers that span multiple physical lines. # # By default, these patterns also apply to MIME headers and to the # headers of attached messages. With older Postfix versions, MIME and # attached message headers were treated as body text. # # For details, see "man header_checks". # #header_checks = regexp:/etc/postfix/header_checks # FAST ETRN SERVICE # # Postfix maintains per-destination logfiles with information about # deferred mail, so that mail can be flushed quickly with the SMTP # "ETRN domain.tld" command, or by executing "sendmail -qRdomain.tld". # See the ETRN_README document for a detailed description. # # The fast_flush_domains parameter controls what destinations are # eligible for this service. By default, they are all domains that # this server is willing to relay mail to. # #fast_flush_domains = $relay_domains # SHOW SOFTWARE VERSION OR NOT # # The smtpd_banner parameter specifies the text that follows the 220 # code in the SMTP server's greeting banner. Some people like to see

Guia Linux Professional Clayton Lobato

203 # the mail version advertised. By default, Postfix shows no version. # # You MUST specify $myhostname at the start of the text. That is an # RFC requirement. Postfix itself does not care. # #smtpd_banner = $myhostname ESMTP $mail_name #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) # PARALLEL DELIVERY TO THE SAME DESTINATION # # How many parallel deliveries to the same user or domain? With local # delivery, it does not make sense to do massively parallel delivery # to the same user, because mailbox updates must happen sequentially, # and expensive pipelines in .forward files can cause disasters when # too many are run at the same time. With SMTP deliveries, 10 # simultaneous connections to the same domain could be sufficient to # raise eyebrows. # # Each message delivery transport has its XXX_destination_concurrency_limit # parameter. The default is $default_destination_concurrency_limit for # most delivery transports. For the local delivery agent the default is 2. #local_destination_concurrency_limit = 2 #default_destination_concurrency_limit = 20 # DEBUGGING CONTROL # # The debug_peer_level parameter specifies the increment in verbose # logging level when an SMTP client or server host name or address # matches a pattern in the debug_peer_list parameter. # debug_peer_level = 2 # The debug_peer_list parameter specifies an optional list of domain # or network patterns, /file/name patterns or type:name tables. When # an SMTP client or server host name or address matches a pattern,

Guia Linux Professional Clayton Lobato

204 # increase the verbose logging level by the amount specified in the # debug_peer_level parameter. # #debug_peer_list = 127.0.0.1 #debug_peer_list = some.domain # The debugger_command specifies the external command that is executed # when a Postfix daemon program is run with the -D option. # # Use "command .. & sleep 5" so that the debugger can attach before # the process marches on. If you use an X-based debugger, be sure to # set up your XAUTHORITY environment variable before starting Postfix. # debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 # If you can't use X, use this to capture the call stack when a # daemon crashes. The result is in a file in the configuration # directory, and is named after the process name and the process ID. # # debugger_command = # # # # # Another possibility is to run gdb under a detached screen session. # To attach to the screen sesssion, su root and run "screen -r # <id_string>" where <id_string> uniquely matches one of the detached # sessions (from "screen -list"). # # debugger_command = # # # PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH; screen -dmS $process_name gdb $daemon_directory/$process_name $process_id & sleep 1 PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont; echo where) | gdb $daemon_directory/$process_name $process_id 2>&1 >$config_directory/$process_name.$process_id.log & sleep 5

Guia Linux Professional Clayton Lobato

205 # INSTALL-TIME CONFIGURATION INFORMATION # # The following parameters are used when installing a new Postfix version. # # sendmail_path: The full pathname of the Postfix sendmail command. # This is the Sendmail-compatible mail posting interface. # sendmail_path = /usr/sbin/sendmail.postfix # newaliases_path: The full pathname of the Postfix newaliases command. # This is the Sendmail-compatible command to build alias databases. # newaliases_path = /usr/bin/newaliases.postfix # mailq_path: The full pathname of the Postfix mailq command. This # is the Sendmail-compatible mail queue listing command. # mailq_path = /usr/bin/mailq.postfix # setgid_group: The group for mail submission and queue management # commands. This must be a group name with a numerical group ID that # is not shared with other accounts, not even with the Postfix account. # setgid_group = postdrop # html_directory: The location of the Postfix HTML documentation. # html_directory = no # manpage_directory: The location of the Postfix on-line manual pages. # manpage_directory = /usr/share/man # sample_directory: The location of the Postfix sample configuration files. # This parameter is obsolete as of Postfix 2.1. #

Guia Linux Professional Clayton Lobato

206 sample_directory = /usr/share/doc/postfix-2.3.3/samples # readme_directory: The location of the Postfix README files. # readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES Observe que alteramos meia dzia de parmetros para colocar o Postfix rodando, agora, vamos ao dovecot. O servidor dovecot a pea da engrenagem responsvel pelo envio e recebimento de e-mail com os clientes. Para instalarmos o servidor dovecot, seguiremos o padro de instalao do postfix. #apt-get install dovecot #yum install dovecot #rpm -ivh dovecot*.rpm #dpkg -i dovecot*.deb Para confiur-lo siga os passos abaixo. #vim /etc/dovecot.conf ## Dovecot configuration file # If you're in a hurry, see http://wiki.dovecot.org/QuickConfiguration # "dovecot -n" command gives a clean output of the changed settings. Use it # instead of copy&pasting this file when posting to the Dovecot mailing list. # '#' character and everything after it is treated as comments. Extra spaces # and tabs are ignored. If you want to use either of these explicitly, put the # value inside quotes, eg.: key = "# char and trailing whitespace " # Default values are shown for each setting, it's not required to uncomment # any of the lines. # Base directory where to store runtime data. #base_dir = /var/run/dovecot/ # Protocols we want to be serving: imap imaps pop3 pop3s # If you only want to use dovecot-auth, you can set this to "none". Basicamente defina o comportamento dos protocolos com os quais o dovecot ir trabalhar. protocols = imap pop3

Guia Linux Professional Clayton Lobato

207

# IP or host address where to listen in for connections. It's not currently # possible to specify multiple addresses. "*" listens in all IPv4 interfaces. # "[::]" listens in all IPv6 interfaces, but may also listen in all IPv4 # interfaces depending on the operating system. # # If you want to specify ports for each service, you will need to configure # these settings inside the protocol imap/pop3 { ... } section, so you can # specify different ports for IMAP/POP3. For example: # # # # # # # # # protocol imap { listen = *:10143 ssl_listen = *:10943 .. } protocol pop3 { listen = *:10100 .. }

Determine para cada protocolo uma porta e um comportamento para ouvir as requisies dos clientes. listen = [*] # Disable LOGIN command and all other plaintext authentications unless # SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP # matches the local IP (ie. you're connecting from the same computer), the # connection is considered secure and plaintext authentication is allowed. #disable_plaintext_auth = no # Should all IMAP and POP3 processes be killed when Dovecot master process # shuts down. Setting this to "no" means that Dovecot can be upgraded without # forcing existing client connections to close (although that could also be # a problem if the upgrade is eg. because of a security fix). This however # means that after master process has died, the client processes can't write # to log files anymore.

Guia Linux Professional Clayton Lobato

208 #shutdown_clients = yes ## ## Logging ## # Log file to use for error messages, instead of sending them to syslog. # /dev/stderr can be used to log into stderr. #log_path = # Log file to use for informational and debug messages. # Default is the same as log_path. #info_log_path = # Prefix for each line written to log file. % codes are in strftime(3) # format. #log_timestamp = "%b %d %H:%M:%S " # Syslog facility to use if you're logging to syslog. Usually if you don't # want to use "mail", you'll use local0..local7. Also other standard # facilities are supported. #syslog_facility = mail ## ## SSL settings ## # IP or host address where to listen in for SSL connections. Defaults # to above if not specified. #ssl_listen = # Disable SSL/TLS support. #ssl_disable = no # PEM encoded X.509 SSL/TLS certificate and private key. They're opened before # dropping root privileges, so keep the key file unreadable by anyone but

Guia Linux Professional Clayton Lobato

209 # root. Included doc/mkcert.sh can be used to easily generate self-signed # certificate, just make sure to update the domains in dovecot-openssl.cnf #ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem #ssl_key_file = /etc/pki/dovecot/private/dovecot.pem # If key file is password protected, give the password here. Alternatively # give it when starting dovecot with -p parameter. #ssl_key_password = # File containing trusted SSL certificate authorities. Usually not needed. # The CAfile should contain the CA-certificate(s) followed by the matching # CRL(s). CRL checking is new in dovecot .rc1 #ssl_ca_file = # Request client to send a certificate. If you also want to require it, set # ssl_require_client_cert=yes in auth section. #ssl_verify_client_cert = no # How often to regenerate the SSL parameters file. Generation is quite CPU # intensive operation. The value is in hours, 0 disables regeneration # entirely. #ssl_parameters_regenerate = 168 # SSL ciphers to use #ssl_cipher_list = ALL:!LOW # Show protocol level SSL errors. #verbose_ssl = no ## ## Login processes ## # <doc/wiki/LoginProcess.txt> # Directory where authentication process places authentication UNIX sockets

Guia Linux Professional Clayton Lobato

210 # which login needs to be able to connect to. The sockets are created when # running as root, so you don't have to worry about permissions. Note that # everything in this directory is deleted when Dovecot is started. #login_dir = /var/run/dovecot/login # chroot login process to the login_dir. Only reason not to do this is if you # wish to run the whole Dovecot without roots. <doc/wiki/Rootless.txt> #login_chroot = yes # User to use for the login process. Create a completely new user for this, # and don't use it anywhere else. The user must also belong to a group where # only it has access, it's used to control access for authentication process. # Note that this user is NOT used to access mails. <doc/wiki/UserIds.txt> #login_user = dovecot # Set max. process size in megabytes. If you don't use # login_process_per_connection you might need to grow this. #login_process_size = 32 # Should each login be processed in it's own process (yes), or should one # login process be allowed to process multiple connections (no)? Yes is more # secure, espcially with SSL/TLS enabled. No is faster since there's no need # to create processes all the time. #login_process_per_connection = yes # Number of login processes to keep for listening new connections. #login_processes_count = 3 # Maximum number of login processes to create. The listening process count # usually stays at login_processes_count, but when multiple users start logging # in at the same time more extra processes are created. To prevent forkbombing # we check only once in a second if new processes should be created - if all # of them are used at the time, we double their amount until the limit set

Guia Linux Professional Clayton Lobato

211 by # this setting is reached. #login_max_processes_count = 128 # Maximum number of connections allowed per each login process. This setting # is used only if login_process_per_connection=no. Once the limit is reached, # the process notifies master so that it can create a new login process. # You should make sure that the process has at least # 16 + login_max_connections * 2 available file descriptors. #login_max_connections = 256 # Greeting message for clients. #login_greeting = Dovecot ready. # Space-separated list of elements we want to log. The elements which have # a non-empty variable value are joined together to form a commaseparated # string. #login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c # Login log format. %$ contains login_log_format_elements string, %s contains # the data we want to log. #login_log_format = %$: %s ## ## Mailbox locations and namespaces ## # Location default_mail_env for users' mailboxes. This is the same as the old

# setting. The default is empty, which means that Dovecot tries to find the # mailboxes automatically. This won't work if the user doesn't have any mail # yet, so you should explicitly tell Dovecot the full location.

Guia Linux Professional Clayton Lobato

212 # # If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u) are # isn't enough. You'll also need to tell Dovecot where the other mailboxes # kept. This is called the "root mail directory", and it must be the first # path given in the mail_location setting. # # There are a few special variables you can use, eg.: # # # # # # # See doc/wiki/Variables.txt for full list. Some examples: # # # mail_location = maildir:~/Maildir mail_location = mbox:~/mail:INBOX=/var/mail/%u = %u - username %n - user part in user@domain, same as %u if there's no domain %d - domain part in user@domain, empty if there's no domain %h - home directory

# mail_location mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n # # <doc/wiki/MailLocation.txt> # #mail_location = # If you need to set multiple mailbox locations or want to change default # namespace settings, you can do it by defining namespace sections.

# NOTE: Namespaces currently work ONLY with IMAP! POP3 and LDA currently ignore # namespaces completely, they use only the mail_location setting. # # You can have private, shared and public namespaces. The only difference # between them is how Dovecot announces them to client via NAMESPACE # extension. Shared namespaces are meant for user-owned mailboxes which are # shared to other users, while public namespaces are for more globally # accessible mailboxes.

Guia Linux Professional Clayton Lobato

213 # # REMEMBER: If you add any namespaces, the default namespace must be added # explicitly, ie. mail_location does nothing unless you have a namespace # without a location setting. Default namespace is simply done by having a # namespace with empty prefix. #namespace private { # Hierarchy separator to use. You should use the same separator for all # namespaces or some clients get confused. '/' is usually a good one. # The default however depends on the underlying mail storage format. #separator = # Prefix required to access this namespace. This needs to be different for # all namespaces. For example "Public/". #prefix = # Physical location of the mailbox. This is in same format as # mail_location, which is also the default for it. #location = # There can be only one INBOX, and this setting defines which namespace # has it. #inbox = yes # If namespace is hidden, it's not advertised to clients via NAMESPACE # extension or shown in LIST replies. This is mostly useful when converting # from another server with different namespaces which you want to depricate # but still keep working. For example you can create hidden namespaces with # prefixes "~/mail/", "~%u/mail/" and "mail/". #hidden = yes #} # Grant access to these extra groups for mail processes. Typical use would be # to give "mail" group write access to /var/mail to be able to create

Guia Linux Professional Clayton Lobato

214 dotlocks. #mail_extra_groups = # Allow full filesystem access to clients. There's no access checks other than # what the operating system does for the active UID/GID. It works with both # maildir and mboxes, allowing you to prefix mailboxes names with eg. /path/ # or ~user/. #mail_full_filesystem_access = no ## ## Mail processes ## # Enable mail process debugging. This can help you figure out why Dovecot # isn't finding your mails. #mail_debug = no # Log prefix for mail processes. See doc/wiki/Variables.txt for list of # possible variables you can use. #mail_log_prefix = "%Us(%u): " # Max. number of lines a mail process is allowed to log per second before it's # throttled. 0 means unlimited. Typically there's no need to change this # unless you're using mail_log plugin, which may log a lot. #mail_log_max_lines_per_sec = 10 # Don't use mmap() at all. This is required if you store indexes to shared # filesystems (NFS or clustered filesystem). #mmap_disable = no # Don't write() to mmaped files. This is required for some operating systems # which use separate caches for them, such as OpenBSD. #mmap_no_write = no

Guia Linux Professional Clayton Lobato

215

# Rely on O_EXCL to work when creating dotlock files. The default is to use # hard linking. O_EXCL makes the dotlocking faster, but it doesn't always # work with NFS. #dotlock_use_excl = no # Don't use fsync() or fdatasync() calls. This makes the performance better # at the cost of potential data loss if the server (or the file server) # goes down. #fsync_disable = no # Locking method for index files. Alternatives are fcntl, flock and dotlock. # Dotlocking uses some tricks which may create more disk I/O than other locking # methods. mmap_disable. NFS users: flock doesn't work, remember to change

#lock_method = fcntl # Drop all privileges before exec()ing the mail process. This is mostly # meant for debugging, otherwise you don't get core dumps. It could be a small # security risk if you use single UID for multiple users, as the users could # ptrace() each others processes then. #mail_drop_priv_before_exec = no # Show more verbose process titles (in ps). Currently shows user name and # IP address. Useful for seeing who are actually using the IMAP processes # (eg. shared mailboxes or if same uid is used for multiple accounts). #verbose_proctitle = no # Valid UID range for users, defaults to 500 and above. This is mostly # to make sure that users can't log in as daemons or other system users. # Note that denying root logins is hardcoded to dovecot binary and can't # be done even if first_valid_uid is set to 0. #first_valid_uid = 500 #last_valid_uid = 0

Guia Linux Professional Clayton Lobato

216 # Valid GID range for users, defaults to non-root/wheel. Users having # non-valid GID as primary group ID aren't allowed to log in. If user # belongs to supplementary groups with non-valid GIDs, those groups are # not set. #first_valid_gid = 1 #last_valid_gid = 0 # Maximum number of running mail processes. When this limit is reached, # new users aren't allowed to log in. #max_mail_processes = 1024 # Set max. process size in megabytes. Most of the memory goes to mmap()ing # files, so it shouldn't harm much even if this limit is set pretty high. #mail_process_size = 256 # Maximum allowed length for mail keyword name. It's only forced when trying # to create new keywords. #mail_max_keyword_length = 50 # ':' separated list of directories under which chrooting is allowed for mail # processes (ie. /var/mail will allow chrooting to /var/mail/foo/bar too). # This setting doesn't affect login_chroot or auth chroot variables. # WARNING: Never add directories here which local users can modify, that # may lead to root exploit. Usually this should be done only if you don't # allow shell access for users. <doc/wiki/Chrooting.txt> #valid_chroot_dirs = # Default chroot directory for mail processes. This can be overridden for # specific users in user database by giving /./ in user's home directory # (eg. /home/./user chroots into /home). Note that usually there is no real # need to do chrooting, Dovecot doesn't allow users to access files outside # their mail directory anyway. <doc/wiki/Chrooting.txt> #mail_chroot = ##

Guia Linux Professional Clayton Lobato

217 ## Mailbox handling optimizations ## # Space-separated list of fields to initially save into cache file. Currently # these fields are allowed: # # flags, date.sent, date.received, size.virtual, size.physical # mime.parts, imap.body, imap.bodystructure # # Different IMAP clients work in different ways, so they benefit from # different cached fields. Some do not benefit from them at all. Caching more # than necessary generates useless disk I/O, so you don't want to do that # either. # # Dovecot attempts to automatically figure out what client wants and it keeps # only that. However the first few times a mailbox is opened, Dovecot hasn't # yet figured out what client needs, so it may not perform optimally. If you # know what fields the majority of your clients need, it may be useful to set # these fields by hand. If client doesn't actually use them, Dovecot will # eventually drop them. # # Usually you should just leave this field alone. The potential benefits are # typically unnoticeable. #mail_cache_fields = # Space-separated list of fields that Dovecot should never save to cache

file.

# Useful if you want to save disk space at the cost of more I/O when the fields # needed. #mail_never_cache_fields = # The minimum number of mails in a mailbox before updates are done to cache # file. This allows optimizing Dovecot's behavior to do less disk writes at

Guia Linux Professional Clayton Lobato

218 # the cost of more disk reads. #mail_cache_min_mail_count = 0 # When IDLE command is running, mailbox is checked once in a while to see if # there are any new mails or other changes. This setting defines the minimum # time to wait between those checks. Dovecot is however able to use dnotify # and inotify with Linux to reply immediately after the change occurs. #mailbox_idle_check_interval = 30 # Save mails with CR+LF instead of plain LF This makes sending those . mails # take less CPU, especially with sendfile() syscall with Linux and FreeBSD. # But it also creates a bit more disk I/O which may just make it slower. # Also note that if other software reads the mboxes/maildirs, they may handle # the extra CRs wrong and cause problems. #mail_save_crlf = no ## ## Maildir-specific settings ## # By default LIST command returns all entries in maildir beginning with a dot. # Enabling this option makes Dovecot return only entries which are directories. # This is done by stat()ing each entry, so it causes more disk I/O. # (For systems setting struct dirent->d_type, this check is free and it's # done always regardless of this setting) #maildir_stat_dirs = no # When copying a message, do it with hard links whenever possible. This makes # the performance much better, and it's unlikely to have any side effects. #maildir_copy_with_hardlinks = no

Guia Linux Professional Clayton Lobato

219 # When copying a message, try to preserve the base filename. Only if the # destination mailbox already contains the same name (ie. the mail is being is # copied there twice), a new name is given. The destination filename check # done only by looking at dovecot-uidlist file, so if something outside # Dovecot does similar filename preserving copies, you may run into problems. # NOTE: This setting requires maildir_copy_with_hardlinks = yes to work. #maildir_copy_preserve_filename = no ## ## mbox-specific settings ## # Which locking methods to use for locking mbox. There are four available: # dotlock: Create <mailbox>.lock file. This is the oldest and most NFS-safe # # solution. If you want to use /var/mail/ like directory, the users will need write access to that directory.

# fcntl : Use this if possible. Works with NFS too if lockd is used. # flock : May not exist in all systems. Doesn't work with NFS. # lockf : May not exist in all systems. Doesn't work with NFS. # # You can use multiple locking methods; if you do the order they're declared # in is important to avoid deadlocks if other MTAs/MUAs are using multiple # locking methods as well. Some operating systems don't allow using some of # them simultaneously. #mbox_read_locks = fcntl #mbox_write_locks = fcntl # Maximum time in seconds to wait for lock (all of them) before aborting. #mbox_lock_timeout = 300 # If dotlock exists but the mailbox isn't modified in any way, override the # lock file after this many seconds. #mbox_dotlock_change_timeout = 120

Guia Linux Professional Clayton Lobato

220

# When mbox changes unexpectedly we have to fully read it to find out what # changed. If the mbox is large this can take a long time. Since the change # is usually just a newly appended mail, it'd be faster to simply read the # new mails. If this setting is enabled, Dovecot does this but still safely isn't # fallbacks to re-reading the whole mbox file whenever something in mbox # how it's expected to be. The only real downside to this setting is that if # some other MUA changes message flags, Dovecot doesn't notice it immediately. # Note that a full sync is done with SELECT, EXAMINE, EXPUNGE and CHECK # commands. #mbox_dirty_syncs = yes # Like mbox_dirty_syncs, but don't do full syncs even with SELECT, EXAMINE, # EXPUNGE or CHECK commands. If this is set, mbox_dirty_syncs is ignored. #mbox_very_dirty_syncs = no # Delay writing mbox headers until doing a full write sync (EXPUNGE and CHECK # commands and when closing the mailbox). This is especially useful for POP3 # where clients often delete all mails. The downside is that our changes # aren't immediately visible to other MUAs. #mbox_lazy_writes = yes # If mbox size is smaller than this (in kilobytes), don't write index files. # If an index file already exists it's still read, just not updated. #mbox_min_index_size = 0 ## ## dbox-specific settings ## # Maximum dbox file size in kilobytes until it's rotated. #dbox_rotate_size = 2048

Guia Linux Professional Clayton Lobato

221

# Minimum dbox file size in kilobytes before it's rotated # (overrides dbox_rotate_days) #dbox_rotate_min_size = 16 # Maximum dbox file age in days until it's rotated. Day always begins from # midnight, so 1 = today, 2 = yesterday, etc. 0 = check disabled. #dbox_rotate_days = 0 ## ## IMAP specific settings ## protocol imap { # Login executable location. #login_executable = /usr/libexec/dovecot/imap-login # IMAP executable location. Changing this allows you to execute other # binaries before the imap process is executed. # # This would write rawlogs into ~/dovecot.rawlog/ directory: # mail_executable /usr/libexec/dovecot/imap # # This would attach gdb into the imap process and write backtraces into # /tmp/gdbhelper.* files: # mail_executable /usr/libexec/dovecot/imap # #mail_executable = /usr/libexec/dovecot/imap # Maximum IMAP command line length in bytes. Some clients generate very long # command lines with huge mailboxes, so you may need to raise this if you get # "Too long argument" or "IMAP command line too large" errors often. #imap_max_line_length = 65536 = /usr/libexec/dovecot/gdbhelper = /usr/libexec/dovecot/rawlog

Guia Linux Professional Clayton Lobato

222

# Support for dynamically loadable plugins. mail_plugins is a space separated # list of plugins to load. #mail_plugins = #mail_plugin_dir = /usr/lib/dovecot/imap # Send IMAP capabilities in greeting message. This makes it unnecessary for # clients to request it with CAPABILITY command, so it saves one roundtrip. # Many clients however don't understand it and ask the CAPABILITY anyway. #login_greeting_capability = no # Override the IMAP CAPABILITY response. #imap_capability = # Workarounds for various client bugs: # NOOP # delay-newmail: Send EXISTS/RECENT new mail notifications only when replying to

# and CHECK commands. Some clients ignore them otherwise, for example OSX it still # # # # # # # # # # # "end of # Mail (<v2.1). Outlook Express breaks more badly though, without this may show user "Message no longer in server" errors. Note that OE6 breaks even with this workaround if synchronization is set to "Headers Only". outlook-idle: Outlook and Outlook Express never abort IDLE command, so if no mail arrives in half a hour, Dovecot closes the connection. This is still fine, except Outlook doesn't connect back so you don't see if new mail arrives. netscape-eoh: Netscape 4.x breaks if message headers don't end with the empty headers" line. Normally all messages have this, but setting this

Guia Linux Professional Clayton Lobato

223 # # # # workaround makes sure that Netscape never breaks by adding the it doesn't exist. This is done only for FETCH BODY[HEADER.FIELDS..] commands. Note that RFC says this shouldn't be done. tb-extra-mailbox-sep: With mbox storage a mailbox can contain either mails or

line if

# submailboxes, # #

but not both. Thunderbird separates these two by forcing server to accept '/' suffix in mailbox names in subscriptions list.

# The list is space-separated. #imap_client_workarounds = outlook-idle } ## ## POP3 specific settings ## protocol pop3 { # Login executable location. #login_executable = /usr/libexec/dovecot/pop3-login # POP3 executable location. See IMAP's mail_executable above for examples # how this could be changed. #mail_executable = /usr/libexec/dovecot/pop3 # Don't try to set mails non-recent or seen with POP3 sessions. This is # mostly intended to reduce disk I/O. With maildir it doesn't move files # from new/ to cur/, with mbox it doesn't write Status-header. #pop3_no_flag_updates = no # Support LAST command which exists in old POP3 specs, but has been removed # from new ones. Some clients still wish to use this though. Enabling this # makes RSET command clear all \Seen flags from messages. #pop3_enable_last = no

Guia Linux Professional Clayton Lobato

224 # If mail has X-UIDL header, use it as the mail's UIDL. #pop3_reuse_xuidl = no # Keep the mailbox locked for the entire POP3 session. #pop3_lock_session = no # POP3 UIDL (unique mail identifier) format to use. You can use following # variables: # # %v - Mailbox's IMAP UIDVALIDITY # %u - Mail's IMAP UID # %m - MD5 sum of the mailbox headers in hex (mbox only) # %f - filename (maildir only) # # If you want UIDL compatibility with other POP3 servers, use: # UW's ipop3d # Courier version 0 # Courier version 1 # Courier version 2 # Cyrus (<= 2.1.3) # Cyrus (>= 2.1.4) # Older Dovecots # tpop3d # # Note that Outlook 2003 seems to have problems with %v.%u format which was # Dovecot's default, so if you're building a new server it would be a good # idea to change this. %08Xu%08Xv should be pretty fail-safe. # # NOTE: Nowadays this is required to be set explicitly, since the old # default was bad but it couldn't be changed without breaking existing # installations. %08Xu%08Xv will be the new default, so use it for new # installations. # #pop3_uidl_format = %08Xu%08Xv # POP3 logout format string: : %08Xv%08Xu : %f : %u : %v-%u : %u : %v.%u : %v.%u : %Mf

Guia Linux Professional Clayton Lobato

225 # %t - number of TOP commands # %p - number of bytes sent to client as a result of TOP command # %r - number of RETR commands # %b - number of bytes sent to client as a result of RETR command # %d - number of deleted messages # %m - number of messages (before deletion) # %s - mailbox size in bytes (before deletion) #pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s # Support for dynamically loadable plugins. mail_plugins is a space separated # list of plugins to load. #mail_plugins = #mail_plugin_dir = /usr/lib/dovecot/pop3 # Workarounds for various client bugs: # # # # # # outlook-no-nuls: Outlook and Outlook Express hang if mails contain NUL characters. This setting replaces them with 0x80 character. oe-ns-eoh: Outlook Express and Netscape Mail breaks if end of headers-line is missing. This option simply sends it if it's missing.

# The list is space-separated. #pop3_client_workarounds = } ## ## LDA specific settings ## protocol lda { # Address to use when sending rejection mails. postmaster_address = postmaster@example.com # Hostname to use in various parts of sent mails, eg. in Message-Id. # Default is the system's real hostname. #hostname =

Guia Linux Professional Clayton Lobato

226

# Support for dynamically loadable plugins. mail_plugins is a space separated # list of plugins to load. #mail_plugins = #mail_plugin_dir = /usr/lib/dovecot/lda # Binary to use for sending mails. #sendmail_path = /usr/lib/sendmail # UNIX socket path to master authentication server to find users. #auth_socket_path = /var/run/dovecot/auth-master } ## ## Authentication processes ## # Executable location #auth_executable = /usr/libexec/dovecot/dovecot-auth # Set max. process size in megabytes. #auth_process_size = 256 # Authentication cache size in kilobytes. 0 means it's disabled. # Note that bsdauth, PAM and vpopmail require cache_key to be set for caching # to be used. #auth_cache_size = 0 # Time to live in seconds for cached data. After this many seconds the cached # record is no longer used, *except* if the main database lookup returns # internal failure. We also try to handle password changes automatically: If # user's previous authentication was successful, but this one wasn't, the # cache isn't used. For now this works only with plaintext authentication. #auth_cache_ttl = 3600

Guia Linux Professional Clayton Lobato

227 # Space separated list of realms for SASL authentication mechanisms that need # them. You can leave it empty if you don't want to support multiple realms. # Many clients simply use the first one listed here, so keep the default realm # first. #auth_realms = # Default realm/domain to use if none was specified. This is used for both # SASL realms and appending @domain to username in plaintext logins. #auth_default_realm = # List of allowed characters in username. If the user-given username contains # a character not listed in here, the login automatically fails. This is just # an extra check to make sure user can't exploit any potential quote escaping # vulnerabilities with SQL/LDAP databases. If you want to allow all characters, # set this value to empty. #auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890._@ # Username character translations before it's looked up from databases. The # value contains series of from -> to characters. For example "#@/@" means # that '#' and '/' characters are translated to '@'. #auth_username_translation = # Username formatting before it's looked up from databases. You can use # the standard variables here, eg. %Lu would lowercase the username, %n would into # drop away the domain if it was given, or "%n-AT-%d" would change the '@' # "-AT-". This translation is done after auth_username_translation changes. #auth_username_format = # If you want to allow master users to log in by specifying the master

Guia Linux Professional Clayton Lobato

228 # username within the normal username string (ie. not using SASL mechanism's # support for it), you can specify the separator character here. The format # is then <username><separator><master username>. UW-IMAP uses "*" as the # separator, so that could be a good choice. #auth_master_user_separator = # Username to use for users logging in with ANONYMOUS SASL mechanism #auth_anonymous_username = anonymous # More verbose logging. Useful for figuring out why authentication isn't # working. #auth_verbose = no # Even more verbose logging for debugging purposes. Shows for example SQL # queries. #auth_debug = no # In case of password mismatches, log the passwords and used scheme so # problem can be debugged. Requires auth_debug=yes to be set. #auth_debug_passwords = no # Maximum number of dovecot-auth worker processes. They're used to execute # blocking passdb and userdb queries (eg. MySQL and PAM). They're # automatically created and destroyed as needed. #auth_worker_max_count = 30 # Host name to use in GSSAPI principal names. The default is to use the # name returned by gethostname(). #auth_gssapi_hostname = # Kerberos keytab to use for the GSSAPI mechanism. Will use the system # default (usually /etc/krb5.keytab) if not specified. #auth_krb5_keytab =

the

Guia Linux Professional Clayton Lobato

229

auth default { # Space separated list of wanted authentication mechanisms: # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi # NOTE: See also disable_plaintext_auth setting. mechanisms = plain # more). # Password database is used to verify user's password (and nothing

# You can have multiple passdbs and userdbs. This is useful if you want to # allow both system users (/etc/passwd) and virtual users to login without # duplicating the system users into virtual database. # # <doc/wiki/PasswordDatabase.txt> # list PAM, # By adding master=yes setting inside a passdb you make the passdb a # of "master users", who can log in as anyone else. Unless you're using # you probably still want the destination user to be looked up from passdb # that it really exists. This can be done by adding pass=yes setting to the # master passdb. <doc/wiki/Authentication.MasterUsers.txt> # Users can be temporarily disabled by adding a passdb with deny=yes. # If the user is found from that database, authentication will fail. # The deny passdb should always be specified before others, so it gets # checked first. Here's an example: #passdb passwd-file { # File contains a list of usernames, one per line #args = /etc/dovecot.deny #deny = yes #} # PAM authentication. Preferred nowadays by most systems. # Note that PAM can only be used to verify if user's password is correct,

Guia Linux Professional Clayton Lobato

230 # so it can't be used as userdb. If you don't want to use a separate user # database (passwd usually), you can use static userdb. # REMEMBER: You'll need /etc/pam.d/dovecot file created for PAM # authentication to actually work. <doc/wiki/PasswordDatabase.PAM.txt> passdb pam { # [blocking=yes] [session=yes] [setcred=yes] # [cache_key=<key>] [<service name>] # lookup. # By default a new process is forked from dovecot-auth for each PAM

# Setting blocking=yes uses the alternative way: dovecot-auth worker # processes do the PAM lookups. # # session=yes makes Dovecot open and immediately close PAM session. Some # PAM plugins need this to work, such as pam_mkhomedir. # # setcred=yes makes Dovecot establish PAM credentials if some PAM plugins # need that. They aren't ever deleted though, so this isn't enabled by # default. # # cache_key can be used to enable authentication caching for PAM # (auth_cache_size also needs to be set). It isn't enabled by default # because PAM modules can do all kinds of checks besides checking password, # such as checking IP address. Dovecot can't know about these checks # without some help. cache_key is simply a list of variables (see used. # # # # # If service name is "*", it means the authenticating service name # is used, eg. pop3 or imap (/etc/pam.d/pop3, /etc/pam.d/imap). # # doc/wiki/Variables.txt) which must match for the cached data to be # Here are some examples: %u - Username must match. Probably sufficient for most uses. %u%r - Username and remote IP address must match. %u%s - Username and service (ie. IMAP POP3) must match. ,

Guia Linux Professional Clayton Lobato

231 # Some examples: # # } # System users (NSS, /etc/passwd, or similiar) # In many systems nowadays this uses Name Service Switch, which is # configured in /etc/nsswitch.conf. <doc/wiki/AuthDatabase.Passwd.txt> #passdb passwd { # [blocking=yes] - See userdb passwd for explanation #args = #} # Shadow passwords for system users (NSS, /etc/shadow or similiar). # Deprecated by PAM nowadays. # <doc/wiki/PasswordDatabase.Shadow.txt> #passdb shadow { # [blocking=yes] - See userdb passwd for explanation #args = #} # PAM-like authentication for OpenBSD. # <doc/wiki/PasswordDatabase.BSDAuth.txt> #passdb bsdauth { # [cache_key=<key>] - See cache_key in PAM for explanation. #args = #} # passwd-like file with specified location # <doc/wiki/AuthDatabase.PasswdFile.txt> #passdb passwd-file { # Path for passwd-file #args = #} args = session=yes * args = cache_key=%u dovecot

#args = dovecot

Guia Linux Professional Clayton Lobato

232 # checkpassword executable authentication # NOTE: You will probably want to use "userdb prefetch" with this. # <doc/wiki/PasswordDatabase.CheckPassword.txt> #passdb checkpassword { # Path for checkpassword binary #args = #} # SQL database <doc/wiki/AuthDatabase.SQL.txt> #passdb sql { # Path for SQL configuration file, see doc/dovecot-sql-example.conf #args = #} # LDAP database <doc/wiki/AuthDatabase.LDAP .txt> #passdb ldap { # Path for LDAP configuration file, see doc/dovecot-ldap-example.conf #args = #} # vpopmail authentication <doc/wiki/AuthDatabase.VPopMail.txt> #passdb vpopmail { # [cache_key=<key>] - See cache_key in PAM for explanation. #args = #} # # User database specifies where mails are located and what user/group IDs # own them. For single-UID configuration use "static". # # <doc/wiki/UserDatabase.txt> # # System users (NSS, /etc/passwd, or similiar). In many systems nowadays # uses Name Service Switch, which is configured in /etc/nsswitch.conf.

this

Guia Linux Professional Clayton Lobato

233 # <doc/wiki/AuthDatabase.Passwd.txt> userdb passwd { auth # [blocking=yes] - By default the lookups are done in the main dovecot# process. This setting causes the lookups to be done in auth worker # proceses. Useful with remote NSS lookups that may block. # NOTE: Be sure to use this setting with nss_ldap or users might get # logged in as each others! #args = } # passwd-like file with specified location # <doc/wiki/AuthDatabase.PasswdFile.txt> #userdb passwd-file { # Path for passwd-file #args = #} # static settings <doc/wiki/UserDatabase.Static.txt> #userdb static { # Template for the fields. Can return anything a userdb could normally # return. For example: # # args = uid=500 gid=500 home=/var/mail/%u # # If you use deliver, it needs to look up users only from the userdb. This # of course doesn't work with static because there is no list of users. works do # Normally static userdb handles this by doing a passdb lookup. This # with most passdbs, with PAM being the most notable exception. If you # the user verification another way, you can add allow_all_users=yes to # the args in which case the passdb lookup is skipped. # #args = #} generated from template

Guia Linux Professional Clayton Lobato

234

# SQL database <doc/wiki/AuthDatabase.SQL.txt> #userdb sql { # Path for SQL configuration file, see doc/dovecot-sql-example.conf #args = #} # LDAP database <doc/wiki/AuthDatabase.LDAP .txt> #userdb ldap { # Path for LDAP configuration file, see doc/dovecot-ldap-example.conf #args = #} # vpopmail <doc/wiki/AuthDatabase.VPopMail.txt> #userdb vpopmail { #} # "prefetch" user database means that the passdb already provided the # needed information and there's no need to do a separate userdb lookup. # This can be made to work with SQL and LDAP databases, see their example # configuration files for more information how to do it. # <doc/wiki/UserDatabase.Prefetch.txt> #userdb prefetch { #} # User to use for the process. This user needs access to only user and # password databases, nothing else. Only shadow and pam authentication # requires roots, so use something else if possible. Note that passwd # authentication with BSDs internally accesses shadow files, which also # requires roots. Note that this user is NOT used to access mails. # That user is specified by userdb above. user = root # Directory where to chroot the process. Most authentication backends # work if this is set, and there's no point chrooting if auth_user is root.

don't

Guia Linux Professional Clayton Lobato

235 # Note that valid_chroot_dirs isn't needed to use this setting. #chroot = # Number of authentication processes to create #count = 1 # Require a valid SSL client certificate or the authentication fails. #ssl_require_client_cert = no # Take the username from client's SSL certificate, using # X509_NAME_get_text_by_NID() which returns the subject's DN's # CommonName. #ssl_username_from_cert = no # It's possible to export the authentication interface to other programs: #socket listen { #master { # Master socket provides access to userdb information. It's typically # used to give Dovecot's local delivery agent access to userdb so it # can find mailbox locations. #path = /var/run/dovecot/auth-master #mode = 0600 # Default user/group is the one who started dovecot-auth (root) #user = #group = #} #client { # The client socket is generally safe to export to everyone. Typical use # is to export it to your SMTP server so it can do SMTP AUTH lookups # using it. #path = /var/run/dovecot/auth-client #mode = 0660 #} #} }

Guia Linux Professional Clayton Lobato

236 # If you wish to use another authentication server than dovecot-auth, you

can

# use connect sockets. They are assumed to be already running, Dovecot's master # process only tries to connect to them. They don't need any other settings # than the path for the master socket, as the configuration is done elsewhere. # Note that the client sockets must exist in the login_dir. #auth external { # socket connect { # # # #} ## ## Dictionary server settings ## # Dictionary can be used by some plugins to store key=value lists. # Currently this is only used by dict quota backend. The dictionary can be # used either directly or though a dictionary server. The following dict block # maps dictionary names to URIs when the server is used. These can then be # referenced using URIs in format "proxy:<name>". dict { #quota = mysql:/etc/dovecot-dict-quota.conf } ## ## Plugin settings ## plugin { # Here you can give some extra environment variables to mail processes. # } master { path = /var/run/dovecot/auth-master }

Guia Linux Professional Clayton Lobato

237 # This is mostly meant for passing parameters to plugins. %variable # expansion is done for all values. # Quota plugin. Multiple backends are supported: # # # # # dirsize: Find and sum all the files found from mail directory. Extremely SLOW with Maildir. It'll eat your CPU and disk I/O. dict: Keep quota stored in dictionary (eg. SQL) maildir: Maildir++ quota fs: Read-only support for filesystem quota

#quota = maildir # ACL plugin. vfile backend reads ACLs from "dovecot-acl" file from maildir # directory. You can also optionally give a global ACL directory path where # ACLs are applied to all users' mailboxes. The global ACL directory contains # one file for each mailbox, eg. INBOX or sub.mailbox. #acl = vfile:/etc/dovecot-acls # Convert plugin. If set, specifies the source storage path which is # converted to destination storage (mail_location) when the user logs in. # The existing mail directory is renamed to <dir>-converted. #convert_mail = mbox:%h/mail # Skip mailboxes which we can't open successfully instead of aborting. #convert_skip_broken_mailboxes = no # Trash plugin. When saving a message would make user go over quota, this # plugin automatically deletes the oldest mails from configured mailboxes file # until the message can be saved within quota limits. The configuration # is a text file where each line is in format: <priority> <mailbox name> # Mails are first deleted in lowest -> highest priority number order #trash = /etc/dovecot-trash.conf # Lazy expunge plugin. Currently works only with maildirs. When a user # expunges mails, the mails are moved to a mailbox in another namespace # (1st). When a mailbox is deleted, the mailbox is moved to another

Guia Linux Professional Clayton Lobato

238 namespace # (2nd) as well. Also if the deleted mailbox had any expunged messages, # they're moved to a 3rd namespace. The mails won't be counted in quota, # and they're not deleted automatically (use a cronjob or something). #lazy_expunge = .EXPUNGED/ .DELETED/ .DELETED/.EXPUNGED/ } De forma geral, simples colocar o dovecot funcionando. Basta alterarmos as linhas acima marcadas e pronto, tudo est funcionando.

Guia Linux Professional Clayton Lobato

239

Captulo 15 . Servidor WWW


Essa uma etapa interessante. Para configurarmos o servidor apache, uma das primeiras coisas que devemos fazer configurar a base de funcionamento deste servidor. Nunca devemos esquecer de checar a tabela de roteamento e se o nosso servidor DNS est conseguindo resolver corretamente o endereo do servidor destinado ao servio www. A configurao do servidor apache no requer um grande esforo, deste que saibamos exatamente o que queremos e como solicitar ao apache nossas necessidades. Vamos analisar o arquivo de configurao.

Guia Linux Professional Clayton Lobato

240

Guia Linux Professional Clayton Lobato

241

Instalao
Antes de irmos ao arquivo de configurao, vamos entender como instalar o servidor www. Vamos comear pelo mais complexo, compilando os fontes do sistema.Para que possamos faz-lo, devemos ter : 1. Os fontes do apache necessitam de aproximadamente 50 M de espao em disco e aps instalado, o sistema requer cerca de 10 M de espao livre em disco. 2. Compilador ANSI-C, make e glibc 3. Baixar pacote do site do apache, isso pode ser feito com o comando #links http://http.apache.org/download.cgi, certifique-se de estar com a verso estvel do programa. O primeiro passo descompactar do arquivo tarball. Usaremos o comando #tar -zxvf httpd-verso.tar.gz para descompactar o pacote. Acesse o diretrio criado pelo processo de descompactao e siga as instrues abaixo. #./configure #make #make install Existe uma diferena considervel entre instalarmos o apache usando os pacotes .deb ou .rpm e compilando os fontes do sistema. Uma das mais notveis est ligada a localizao dos arquivos. No processo de compilao precisamos passar exatamente onde queremos que os arquivos sejam colocados, usando as opes do #./configure (para mais insformaes a respeitos use o comando #./configure help), caso contrrio, todos os arquivos sero gravados em um subdiretrio em /usr/local. Por padro, os arquivos de configurao podem ser encontrados em /etc/httpd/conf/httpd.conf Existe ainda a possibilidade de instalarmos os httpd atravs de seus pacotes .deb (padro debian) e .rpm (padro redhat). Existem basicamente duas maneiras de instalao do servidor. 1. Usando os pacotes, sejam .deb ou rpm. 2. Compilando o sistema a partir dos fontes. #apt-get install httpd #yum install httpd #rpm -ivh httpd*.rpm #dpkg -i httpd*.deb Caso queira instal-lo a partir dos fontes, o processo bsico ests descrito a seguir, porm, devemos observar alguns detalhes. Pacote instalado, vamos a configurao do servidor. #vim /etc/httpd/conf/httpd.conf

Guia Linux Professional Clayton Lobato

242

### Section 1: Global Environment ServerTokens OS ServerRoot "/etc/httpd" PidFile run/httpd.pid Timeout 120 KeepAlive Off MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 8 5 20 MinSpareServers MaxSpareServers ServerLimit MaxClients </IfModule> <IfModule worker.c> StartServers MaxClients MinSpareThreads MaxSpareThreads ThreadsPerChild </IfModule> #Listen 12.34.56.78:80 Determine a porta que estar sendo usada pelo servidor. Listen 80 Configure os mdulos usados pelo servidor. Caso queiram trabalhar com o php. por exemplo, o mdulos dever constar aqui na lista do apache. # LoadModule foo_module modules/mod_foo.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so 2 150 25 75 25 256 256

MaxRequestsPerChild 4000

MaxRequestsPerChild 0

Guia Linux Professional Clayton Lobato

243 LoadModule authn_alias_module modules/mod_authn_alias.so LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_default_module modules/mod_authz_default.so LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule ext_filter_module modules/mod_ext_filter.so LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so

Guia Linux Professional Clayton Lobato

244 LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule cache_module modules/mod_cache.so LoadModule suexec_module modules/mod_suexec.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule file_cache_module modules/mod_file_cache.so LoadModule mem_cache_module modules/mod_mem_cache.so LoadModule cgi_module modules/mod_cgi.so #LoadModule cern_meta_module modules/mod_cern_meta.so #LoadModule asis_module modules/mod_asis.so Include conf.d/*.conf ExtendedStatus On Determine o usurio e grupo responsveis pelo servio. User apache Group apache Podemos configurar o comportamento do servidor, o mail do administrador, caso algo acontea e este precise receber um mail, o uso do www definido pelo dns, e o local onde os arquivo devero constar. ServerAdmin root@localhost ServerName www.example.com:80 UseCanonicalName Off DocumentRoot "/var/www/html" <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny

Guia Linux Professional Clayton Lobato

245 Allow from all </Directory> <IfModule mod_userdir.c> UserDir disable #UserDir public_html </IfModule> #<Directory /home/*/public_html> # # # # # # # # # # AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept>

#</Directory> Aqui definimos por quais pginas iniciais o servidor dever buscar. DirectoryIndex index.html index.html.var index.php AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> TypesConfig /etc/mime.types DefaultType text/plain <IfModule mod_mime_magic.c> # MIMEMagicFile /usr/share/magic.mime MIMEMagicFile conf/magic </IfModule> HostnameLookups Off #EnableMMAP off #EnableSendfile off

Guia Linux Professional Clayton Lobato

246

ErrorLog logs/error_log LogLevel warn LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{UserAgent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent # "combinedio" includes actual counts of actual bytes received (%I) and sent (%O); this # requires the mod_logio module to be loaded. #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{UserAgent}i\" %I %O" combinedio #CustomLog logs/access_log common #CustomLog logs/referer_log referer #CustomLog logs/agent_log agent CustomLog logs/access_log combined ServerSignature On Alias /icons/ "/var/www/icons/" <Directory "/var/www/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> <IfModule mod_dav_fs.c> # Location of the WebDAV lock database. DAVLockDB /var/lib/dav/lockdb </IfModule> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>

Guia Linux Professional Clayton Lobato

247

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable AddIconByEncoding (CMP ,/icons/compressed.gif) x-compress x-gzip AddIconByType (TXT,/icons/text.gif) text/* AddIconByType (IMG,/icons/image2.gif) image/* AddIconByType (SND,/icons/sound2.gif) audio/* AddIconByType (VID,/icons/movie.gif) video/* AddIcon /icons/binary.gif .bin .exe AddIcon /icons/binhex.gif .hqx AddIcon /icons/tar.gif .tar AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip AddIcon /icons/a.gif .ps .ai .eps AddIcon /icons/layout.gif .html .shtml .htm .pdf AddIcon /icons/text.gif .txt AddIcon /icons/c.gif .c AddIcon /icons/p.gif .pl .py AddIcon /icons/f.gif .for AddIcon /icons/dvi.gif .dvi AddIcon /icons/uuencoded.gif .uu AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl AddIcon /icons/tex.gif .tex AddIcon /icons/bomb.gif core AddIcon /icons/back.gif .. AddIcon /icons/hand.right.gif README AddIcon /icons/folder.gif ^^DIRECTORY^^ AddIcon /icons/blank.gif ^^BLANKICON^^ # # DefaultIcon is which icon to show for files which do not have an icon # explicitly set. # DefaultIcon /icons/unknown.gif #

Guia Linux Professional Clayton Lobato

248 # AddDescription allows you to place a short description after a file in # server-generated indexes. These are only displayed for FancyIndexed # directories. # Format: AddDescription "description" filename # #AddDescription "GZIP compressed document" .gz #AddDescription "tar archive" .tar #AddDescription "GZIP compressed tar archive" .tgz # # ReadmeName is the name of the README file the server will look for by # default, and append to directory listings. # # HeaderName is the name of a file which should be prepended to # directory indexes. ReadmeName README.html HeaderName HEADER.html # # IndexIgnore is a set of filenames which directory indexing should ignore # and not include in the listing. Shell-style wildcarding is permitted. # IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t # # DefaultLanguage and AddLanguage allows you to specify the language of # a document. You can then use content negotiation to give a browser a # file in a language the user can understand. # # Specify a default language. This means that all data # going out without a specific language tag (see below) will # be marked with this one. You probably do NOT want to set # this unless you are sure it is correct for all cases. # # * It is generally better to not mark a page as # * being a certain language than marking it with the wrong

Guia Linux Professional Clayton Lobato

249 # * language! # # DefaultLanguage nl # # Note 1: The suffix does not have to be the same as the language # keyword --- those with documents in Polish (whose net-standard # language code is pl) may wish to use "AddLanguage pl .po" to # avoid the ambiguity with the common suffix for perl scripts. # # Note 2: The example entries below illustrate that in some cases # the two character 'Language' abbreviation is not identical to # the two character 'Country' code for its country, # E.g. 'Danmark/dk' versus 'Danish/da'. # # Note 3: In the case of 'ltz' we violate the RFC by using a three char # specifier. There is 'work in progress' to fix this and get # the reference data for rfc1766 cleaned up. # # Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl) # English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de) # Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja) # Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn) # Norwegian (no) - Polish (pl) - Portugese (pt) # Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv) # Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW) # AddLanguage ca .ca AddLanguage cs .cz .cs AddLanguage da .dk AddLanguage de .de AddLanguage el .el AddLanguage en .en AddLanguage eo .eo AddLanguage es .es AddLanguage et .et AddLanguage fr .fr

Guia Linux Professional Clayton Lobato

250 AddLanguage he .he AddLanguage hr .hr AddLanguage it .it AddLanguage ja .ja AddLanguage ko .ko AddLanguage ltz .ltz AddLanguage nl .nl AddLanguage nn .nn AddLanguage no .no AddLanguage pl .po AddLanguage pt .pt AddLanguage pt-BR .pt-br AddLanguage ru .ru AddLanguage sv .sv AddLanguage zh-CN .zh-cn AddLanguage zh-TW .zh-tw # # LanguagePriority allows you to give precedence to some languages # in case of a tie during content negotiation. # # Just list the languages in decreasing order of preference. We have # more or less alphabetized them here. You probably want to change this. # LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW # # ForceLanguagePriority allows you to serve a result page rather than # MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback) # [in case no accepted languages matched the available variants] # ForceLanguagePriority Prefer Fallback # # Specify a default charset for all content served; this enables

Guia Linux Professional Clayton Lobato

251 # interpretation of all content as UTF-8 by default. To use the # default browser choice (ISO-8859-1), or to allow the META tags # in HTML content to override this choice, comment out this # directive: # AddDefaultCharset UTF-8 # # AddType allows you to add to or override the MIME configuration # file mime.types for specific file types. # #AddType application/x-tar .tgz # # AddEncoding allows you to have certain browsers uncompress # information on the fly. Note: Not all browsers support this. # Despite the name similarity, the following Add* directives have nothing # to do with the FancyIndexing customization directives above. # #AddEncoding x-compress .Z #AddEncoding x-gzip .gz .tgz # If the AddEncoding directives above are commented-out, then you # probably should define those extensions to indicate media types: # AddType application/x-compress .Z AddType application/x-gzip .gz .tgz # # AddHandler allows you to map certain file extensions to "handlers": # actions unrelated to filetype. These can be either built into the server # or added with the Action directive (see below) # # To use CGI scripts outside of ScriptAliased directories: # (You will also need to add "ExecCGI" to the "Options" directive.) #

Guia Linux Professional Clayton Lobato

252 #AddHandler cgi-script .cgi # # For files that include their own HTTP headers: # #AddHandler send-as-is asis # # For type maps (negotiated resources): # (This is enabled by default to allow the Apache "It Worked" page # to be distributed in multiple languages.) # AddHandler type-map var # # Filters allow you to process content before it is sent to the client. # # To parse .shtml files for server-side includes (SSI): # (You will also need to add "Includes" to the "Options" directive.) # AddType text/html .shtml AddOutputFilter INCLUDES .shtml # # Action lets you define media types that will execute a script whenever # a matching file is called. This eliminates the need for repeated URL # pathnames for oft-used CGI file processors. # Format: Action media/type /cgi-script/location # Format: Action handler-name /cgi-script/location # # # Customizable error responses come in three flavors: # 1) plain text 2) local redirects 3) external redirects # # Some examples:

Guia Linux Professional Clayton Lobato

253 #ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html # # # Putting this all together, we can internationalize error responses. # # We use Alias to redirect any /error/HTTP_<error>.html.var response to # our collection of by-error message multi-language collections. We use # includes to substitute the appropriate text. # # You can modify the messages' appearance without changing any of the # default HTTP_<error>.html.var files by adding the line: # # # # which allows you to create your own set of files by starting with the # /var/www/error/include/ files and # copying them to /your/include/path/, even on a per-VirtualHost basis. # Alias /error/ "/var/www/error/" <IfModule mod_negotiation.c> <IfModule mod_include.c> <Directory "/var/www/error"> AllowOverride None Options IncludesNoExec AddOutputFilter Includes html AddHandler type-map var Order allow,deny Allow from all LanguagePriority en es de fr ForceLanguagePriority Prefer Fallback Alias /error/include/ "/your/include/path/"

Guia Linux Professional Clayton Lobato

254 </Directory> # # # # # # # # # # # # # # # # # ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var ErrorDocument 410 /error/HTTP_GONE.html.var ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

</IfModule> </IfModule> # # The following directives modify normal HTTP response behavior to # handle known problems with browser implementations. # BrowserMatch "Mozilla/2" nokeepalive 1.0 BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-responseBrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0 # # The following directive disables redirects on non-GET requests for # a directory that does not include the trailing slash. This fixes a

Guia Linux Professional Clayton Lobato

255 # problem with Microsoft WebFolders which does not appropriately handle # redirects for folders with DAV methods. # Same deal with Apple's DAV filesystem and Gnome VFS support for DAV. # BrowserMatch redirect-carefully "Microsoft Data Access Internet Publishing Provider"

BrowserMatch "MS FrontPage" redirect-carefully BrowserMatch "^WebDrive" redirect-carefully BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully BrowserMatch "^gnome-vfs/1.0" redirect-carefully BrowserMatch "^XML Spy" redirect-carefully BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully # # Allow server status reports generated by mod_status, # with the URL of http://server name/server-status # Change the ".example.com" to match your domain to enable. # #<Location /server-status> # # # # SetHandler server-status Order deny,allow Deny from all Allow from .example.com oliveira.advogado@uol.com.br

#</Location> # # Allow remote server configuration reports, with the URL of # http://servername/server-info (requires that mod_info.c be loaded). # Change the ".example.com" to match your domain to enable. # #<Location /server-info> # # # # SetHandler server-info Order deny,allow Deny from all Allow from .example.com

#</Location>

Guia Linux Professional Clayton Lobato

256

# # Proxy Server directives. Uncomment the following lines to # enable the proxy server: # #<IfModule mod_proxy.c> #ProxyRequests On # #<Proxy *> # # # Order deny,allow Deny from all Allow from .example.com

#</Proxy> # # Enable/disable the handling of HTTP/1.1 "Via:" headers. # ("Full" adds the server version; "Block" removes all outgoing Via: headers) # Set to one of: Off | On | Full | Block # #ProxyVia On # # To enable a cache of proxied content, uncomment the following lines. # See details. # #<IfModule mod_disk_cache.c> # # # #</IfModule> # End of proxy directives. ### Section 3: Virtual Hosts CacheEnable disk / CacheRoot "/var/cache/mod_proxy" http://httpd.apache.org/docs/2.2/mod/mod_cache.html for more

#</IfModule>

Guia Linux Professional Clayton Lobato

257 # # VirtualHost: If you want to maintain multiple domains/hostnames on your # machine configurations you can setup VirtualHost containers for them. Most

# use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs/2.2/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # # Use name-based virtual hosting. # #NameVirtualHost *:80 # NOTE: NameVirtualHost cannot be used without a port specifier # (e.g. :80) if mod_ssl is being used, due to the nature of the # SSL protocol. # # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for requests without a known # server name. # Um mesmo servidor pode conter mais de uma pgina de domnios diferentes. Para que possamos abrir ambos, devemos configurar o VirtualHost. No esquea que o direcionamento de mais de um domnio ser feito pelo DNS. <VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot /www/docs/dummy-host.example.com ServerName dummy-host.example.com ErrorLog logs/dummy-host.example.com-error_log

Guia Linux Professional Clayton Lobato

258 CustomLog logs/dummy-host.example.com-access_log common </VirtualHost> Definidas as configuraes do servidor, tente acessar o mesmo atravs de um browser. Antes... #/etc/rc.d/init.d/httpd restart Agora podemos testar... #lynx localhost #lynx ip_servidor_apache

Guia Linux Professional Clayton Lobato

259

Captulo 16 - Compartilhando arquivos no GNU/Linux


Sabemos que compartilhar arquivos no entre estaes windows simples e podemos ter acesso a esses compartilhamentos atravs de estaes GNU/Linux. A pergunta .. .como compartilharmos arquivos no GNU/Linux, para que outra estao GNU/Linux tenha acesso ? o que veremos nessa etapa.

Guia Linux Professional Clayton Lobato

260

Guia Linux Professional Clayton Lobato

261 Para compartilharmos arquivos no GNU/Linux, basta configurarmos o arquivo /etc/exports, o qual est relacionado com o servio NFS Network File System. O grande questionamento existente hoje ... Quando se torna vivel compartilhamento de arquivos entre estaes em uma rede, fora do padro SMB? o

Restringiremos o compartilhamento a estaes GNU/Linux, estes Windows no tero acesso ao arquivos. Em um processo de instalao remota, troca de informaes entre servidores, mecanismos de backup isso poder ser muito til. O processo simples, veja o exemplo do arquivo exports. #vim /etc/exports /aula /projects base(rw) aluno(rw,no_root_squash) desenvolv*.local.domain(rw)

Carregue o servio nfs (/etc/rc.d/init.d/nfs restart) e acesse via cliente montando a partio. Para montarmos uma compartilhamento de outra estao GNU/Linux, usamos a linha mount -t nfs <mquina>:<caminho remoto> <ponto de montagem> #clayton@clayton ~]#mount -t nfs 192.162.4.21:/home /mnt/home

Guia Linux Professional Clayton Lobato

262

Guia Linux Professional Clayton Lobato

263

Captulo 17 - Servio OpenSSH


Servio usado para acessos remotos aos sistema, o ssh uma forma segura de administrao remota. Sempre que pensarmos em ter qualquer tipo de acesso remoto ao sistema, garantir que o sistema no fique vulnervel fundamental. Usar recursos como o ssh importante para que possamos desenvolver a administrao do sistema com tranquilidade e o que veremos nessa etapa.

Guia Linux Professional Clayton Lobato

264

Guia Linux Professional Clayton Lobato

265 Antes de mais nada, vamos pensar em instalar o ssh. Podemos usar os mecanismos tradicionais de instalao, usando pacotes deb ou rpm. Eles sero suficientes. #rpm -ivh ssh #yum-install ssh #apt-get install ssh Instalado, vamos configurar o servio. Os arquivos base /etc/ssh/sshd_config. # de configurao do servidor ssh esto localizados em

$OpenBSD: sshd_config,v 1.73 2005/12/06 22:38:28 reyk Exp $

# This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options change a # default value. #Port 22 #Protocol 2,1 Definiremos o protocolo que ser usado para prover a comunicao. Sempre interessante usarmos o nvel 2 para garantir um pouco menos de insegurana. Protocol 2 #AddressFamily any #ListenAddress 0.0.0.0 Definiremos na linha seguinte qual ou quais estaes podero se conectar com o servidor ssh. #ListenAddress :: # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key # Lifetime and size of ephemeral version 1 server key

Guia Linux Professional Clayton Lobato

266 #KeyRegenerationInterval 1h #ServerKeyBits 768 # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: #LoginGraceTime 2m Limitamos na linha seguinte a ao do login do root, ou liberamos o login de root. PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication yes # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes

Guia Linux Professional Clayton Lobato

267 #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no GSSAPIAuthentication yes #GSSAPICleanupCredentials yes GSSAPICleanupCredentials yes # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication mechanism. # Depending on your PAM configuration, this may bypass the setting of # PasswordAuthentication, PermitEmptyPasswords, and # "PermitRootLogin without-password". If you just want the PAM account and # session checks to run without PAM authentication, then enable this but set # ChallengeResponseAuthentication=no #UsePAM no UsePAM yes # Accept locale-related environment variables AcceptEnv LC_MESSAGES LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3

Guia Linux Professional Clayton Lobato

268 #ShowPatchLevel no #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10 #PermitTunnel no # no default banner path #Banner /some/path # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server

Configurado o servio, acesse o servio por outro sistema. Podemos ainda usar o scp, como no exemplo de sala.

Guia Linux Professional Clayton Lobato

269

Captulo 18 - Referncias Bibliogrficas


www.samba.org www.tldp.org http://www.tldp.org/docs.html#howto http://www.tldp.org/guides.html http://www.tldp.org/docs.html#man www.squid-cache.org www.kernel.org
www.postfix.org http://www.isc.org/index.pl?/sw/dhcp/ http://www.isc.org/sw/bind/arm94/

Advanced Bash-Scripting Guide, Mendel Cooper Bash Guide for Beginners, Machtelt Garrels The Linux Kernel Module Programming Guide, Peter Jay Salzman, Michael Burian, Ori Pomerantz The Linux System Administrators' Guide,Lars Wirzenius, Joanna Oja, Stephen Stafford, and Alex Weeks Linux Filesystem Hierarchy, Binh Nguyen
The Linux Network Administrator's Guide, Second Edition,Olaf Kirch and Terry Dawson GNU/Linux Command-Line Tools Summary, Gareth Anderson http://www.x.org/wiki/ Linux Shadow Password HOWTO, Michael H. Jackson

Guia Linux Professional Clayton Lobato

S-ar putea să vă placă și