Apostila completa linux
Transcrição
Apostila completa linux
PROGRAMA TÉCNICO CIDADÃO Índice GNU/LINUX BÁSICO Introdução ao Linux......................................................................................... 14 Origem do Linux................................................................................................................ 14 Licenciamento e Versões do kernel do Linux...................................................................15 Distribuições Linux............................................................................................................ 16 Linux Standard Base (LSB)................................................................................................ 17 Visão geral do Sistema Operacional Linux.........................................................................17 Vantagens do Linux...........................................................................................................17 Conceitos Unix...................................................................................................................18 Tudo é Arquivo..................................................................................................................... 18 Case Sensitive...................................................................................................................... 18 Comandos............................................................................................................................ 19 Primeiros Passos................................................................................................................19 Prompt de Login................................................................................................................... bash..................................................................................................................................... logout................................................................................................................................... shutdown............................................................................................................................. reboot.................................................................................................................................. 19 19 21 22 23 Instalação do Debian GNU/Linux....................................................................... 24 Um pouco sobre o Debian................................................................................................. 24 Curiosidades......................................................................................................................... 24 De onde surgiu o nome “Debian”?................................................................................................... 24 Como se pronuncia “Debian”?..........................................................................................................25 Estrutura do sistema Debian................................................................................................ 25 Qual o significado dos codinomes das distribuições Debian?...........................................................25 Como funciona o sistema de versões do Debian?............................................................................ 25 A distribuição stable......................................................................................................................................25 A distribuição testing.....................................................................................................................................26 A distribuição unstable..................................................................................................................................26 Iniciando a Instalação........................................................................................................27 Inicializando o instalador...................................................................................................... 27 Gerenciamento de Pacotes...............................................................................42 O gerenciador de pacotes do Debian................................................................................ 42 dpkg..................................................................................................................................... 43 Listando os pacotes instalados no sistema.......................................................................................44 Obtendo detalhes sobre um pacote Debian..................................................................................... 45 Exibindo status dos pacotes do sistema........................................................................................................48 Instalando e atualizando pacotes binários do Debian...................................................................... 49 Padrão de nomes dos arquivos binários do Debian.......................................................................................50 Removendo pacotes binários Debian............................................................................................... 50 O Advanced Package Tool (APT)........................................................................................... 51 Repositórios de pacotes do Debian.................................................................................................. 52 1 PROGRAMA TÉCNICO CIDADÃO O arquivos /etc/apt/sources.list.....................................................................................................................52 Adicionando um cdrom no sources.list..........................................................................................................53 Adicionando repositórios web no sources.list................................................................................................54 Utilizando o apt-get para gerenciar pacotes.....................................................................................54 Programas auxiliares........................................................................................................................ 57 aptitude.........................................................................................................................................................57 apt-show-versions..........................................................................................................................................58 apt-cache.......................................................................................................................................................58 O gerenciador de pacotes RedHat (RPM)...........................................................................60 Consulta de pacotes RPM..................................................................................................... 61 Instalação, desinstalação e atualização de pacotes RPM...................................................... 63 Instalação/Atualização...................................................................................................................... 64 Desinstalação................................................................................................................................... 65 Estrutura de Diretórios.....................................................................................66 Hierarquia..........................................................................................................................66 Caminho Absoluto................................................................................................................ 66 Caminho Relativo................................................................................................................. 67 Localização na Estrutura de Diretórios................................................................................. 67 pwd...................................................................................................................................................67 ls.......................................................................................................................................................68 cd......................................................................................................................................................69 $PATH............................................................................................................................................... 71 Histórico de Comandos.....................................................................................................................72 Teclas de Atalho............................................................................................................................... 74 Tecla [TAB]....................................................................................................................................................75 Filesystem Hierarchy Standard............................................................................................. 75 /bin................................................................................................................................................... 76 /boot................................................................................................................................................. 77 /dev...................................................................................................................................................77 Portas Seriais e Paralelas...............................................................................................................................78 /etc....................................................................................................................................................78 /home............................................................................................................................................... 79 /root.................................................................................................................................................. 79 /lib.....................................................................................................................................................79 /mnt.................................................................................................................................................. 79 /opt................................................................................................................................................... 80 /sbin..................................................................................................................................................80 /tmp.................................................................................................................................................. 80 /usr................................................................................................................................................... 80 /var................................................................................................................................................... 81 /proc................................................................................................................................................. 81 Manipulação de arquivos e diretórios................................................................85 mkdir................................................................................................................................. 85 tree....................................................................................................................................86 rmdir..................................................................................................................................87 rm......................................................................................................................................88 2 PROGRAMA TÉCNICO CIDADÃO touch................................................................................................................................. 89 cp.......................................................................................................................................90 mv..................................................................................................................................... 93 cat..................................................................................................................................... 94 tac..................................................................................................................................... 95 ln....................................................................................................................................... 96 Inodes.................................................................................................................................. 96 Links Simbólicos................................................................................................................... 97 Hardlinks.............................................................................................................................. 98 Gerenciamento de usuários e grupos.............................................................. 100 Identificadores de Usuários e Grupos (UID e GID)........................................................... 100 /etc/passwd........................................................................................................................ /etc/shadow........................................................................................................................ /etc/group........................................................................................................................... /etc/gshadow...................................................................................................................... 100 101 102 102 Gerenciamento de usuários.............................................................................................103 Adicionando usuários com useradd.................................................................................... 103 Definindo senhas com passwd........................................................................................... 105 Troca de Senhas................................................................................................................. 106 Removendo usuários com userdel...................................................................................... 108 Aumentando a segurança com o comando chage.............................................................. 109 Gerenciando informações de usuários com chfn e finger................................................... 111 Modificando o shell do usuário com chsh........................................................................... 113 Verificando integridade dos arquivos de senhas com pwck................................................ 114 Convertendo/Revertendo o sistema de senhas shadow..................................................... 115 Modificando contas de usuários com usermod................................................................... 115 Gerenciamento de grupos............................................................................................... 117 Obtendo Informações com o comando id........................................................................... 117 Adicionando grupos com groupadd.................................................................................... 118 Removendo grupos com groupdel...................................................................................... 119 Adicionando usuários aos grupos....................................................................................... 119 Removendo usuários dos grupos........................................................................................ 120 Modificando informações sobre grupos.............................................................................. 120 Definindo administradores de grupos com gpasswd.......................................................... 121 Trocando o grupo principal temporariamente com newgrp................................................ 122 Verificando Integridade dos arquivos de grupos com grpck............................................... 123 Permissões de arquivos e diretórios................................................................125 Entendendo as permissões..............................................................................................125 Definindo Permissões com chmod...................................................................................127 Modo Simbólico de Permissões........................................................................................... 128 Modo octal de permissões.................................................................................................. 130 Máscara de usuário (umask)............................................................................................... 132 3 PROGRAMA TÉCNICO CIDADÃO O shell bash (Bourne Again Shell)................................................................... 135 Redirecionamento........................................................................................................... 135 Entrada de dados padrão (/dev/stdin)................................................................................ 136 Saída de dados padrão (/dev/stdout).................................................................................. 136 Saída de erros padrão (/dev/stderr).................................................................................... 137 Operadores de Redirecionamento...................................................................................... 137 Operadores de Saída de dados padrão (stdout): “>” e “>>” ....................................................... 137 Operadores de entrada de dados padrão: “<” e “<<”.................................................................. 140 Redirecionando a saída de erros padrão (stderr)........................................................................... 141 Redirecionamento com pipes: “|”...................................................................................................142 Diferenças entre o “|” e o “>”........................................................................................................ 144 Comando tee.................................................................................................................................. 144 Tabela de Redirecionamentos........................................................................................................ 146 Paginadores....................................................................................................................................147 Caracteres especiais do bash (Metacaracteres).............................................................. 147 Executando múltiplos comandos em ordem determinada ................................................. 150 Operadores de controle lógico: && e || (AND e OR)........................................................................152 Configuração do shell bash..............................................................................................153 Arquivo /etc/profile............................................................................................................. Arquivo ~/.bash_profile...................................................................................................... Arquivo /etc/bash.bashrc ou /etc/bashrc............................................................................ Arquivo ~/.bashrc............................................................................................................... Arquivo ~/.bash_logout...................................................................................................... Arquivo ~/.bash_history..................................................................................................... Aliases de shell................................................................................................................... Escape de Comandos no bash............................................................................................ 155 155 156 157 158 159 159 160 Documentação .............................................................................................. 162 Páginas de manual.......................................................................................................... 162 Man pages.......................................................................................................................... 162 Info Pages........................................................................................................................... 165 Sistema de buscas na documentação do sistema.......................................................................... 166 Criando a base de dados.............................................................................................................................166 Efetuando pesquisas na documentação......................................................................................................166 Localizando arquivos no sistema.....................................................................168 Comando find.................................................................................................................. 168 Comando whereis............................................................................................................172 Comando locate...............................................................................................................173 Editores de Texto...........................................................................................174 Vi..................................................................................................................................... 174 Modo Modo Modo Dicas de comando.............................................................................................................. de Edição.................................................................................................................. de linha..................................................................................................................... preciosas do Vim...................................................................................................... 175 179 180 181 4 PROGRAMA TÉCNICO CIDADÃO Arquitetura de hardware................................................................................ 183 setserial...........................................................................................................................185 Particionamento e sistemas de arquivos......................................................... 188 Particionamento.............................................................................................................. 188 A tabela de partições......................................................................................................... 188 Partições primárias......................................................................................................................... 189 A partição extendida...................................................................................................................... 189 As partições lógicas........................................................................................................................ 189 Endereçamento e geometria dos discos rígidos................................................................. 190 Modo LBA de endereçamento.........................................................................................................191 Modo CHS de geometria................................................................................................................. 191 Particionando o disco rígido com fdisk............................................................................... 192 Sistemas de arquivos......................................................................................................... 196 O sistema de arquivos ext2: O início de tudo................................................................................. 197 O sistema de arquivos ext3: A revolução....................................................................................... 197 Funcionamento do journaling......................................................................................................................197 O sistema de arquivos reiserfs: Nascido para ser rápido............................................................... 198 Criando um sistema de arquivos........................................................................................ 198 Definindo um ponto de montagem..................................................................................... 199 O arquivo /etc/fstab........................................................................................................................ 201 Verificando a integridade de sistemas de arquivos............................................................ 202 Gerenciando quotas de sistemas de arquivos.................................................................... 202 Habilitando as quotas..................................................................................................................... 203 Configurando quotas p/ usuários e grupos.....................................................................................204 Verificando as quotas..................................................................................................................... 204 Adicionando uma nova swap.............................................................................................. 205 Compactadores e arquivadores.......................................................................207 Compactadores............................................................................................................... 207 A ferramenta gzip............................................................................................................... 207 A ferramenta bzip2............................................................................................................. 209 Arquivadores................................................................................................................... 211 A ferramenta tar................................................................................................................. 211 As famosas tarballs.........................................................................................................................213 Processo de Inicialização................................................................................215 Gerenciadores de boot.................................................................................................... 215 LILO.................................................................................................................................... 216 Configurando o lilo..........................................................................................................................216 Restaurando o setor de boot.......................................................................................................... 218 GRUB.................................................................................................................................. 218 Instalando o GRUB no MBR.............................................................................................................221 O processo de init............................................................................................................221 O que são runlevels (Níveis de execução)?......................................................................... 222 O arquivo /etc/inittab......................................................................................................... 223 Estrutura de inicialização de serviços................................................................................. 225 5 PROGRAMA TÉCNICO CIDADÃO O script /etc/init.d/rc....................................................................................................................... 225 Os diretórios de inicialização de serviços....................................................................................... 225 Servidor Gráfico X-Window............................................................................. 227 Funcionamento................................................................................................................227 Configurando o XFree86..................................................................................................... 227 Inicializando o XFree86...................................................................................................... 230 Acessando o XFree86 através da rede............................................................................... 230 Agendamento de Tarefas................................................................................232 Cron.................................................................................................................................232 O arquivo /etc/crontab........................................................................................................ 232 Diretórios de agendamento do cron................................................................................... 233 O diretório /etc/cron.d.................................................................................................................... 234 Agendamentos definidos pelos usuários............................................................................ 234 Controle de acesso ao cron................................................................................................ 235 Bibliotecas Compartilhadas.............................................................................237 Trabalhando com bibliotecas compartilhadas.................................................................... 237 Listando Bibliotecas disponíveis..................................................................................................... 237 Descobrindo quais bibliotecas um binário utiliza........................................................................... 238 Adicionando novas bibliotecas ao sistema..................................................................................... 239 Gerenciamento de processos.......................................................................... 240 Lidando com processos................................................................................................... 240 Listando processos............................................................................................................. 240 O comando ps.................................................................................................................................240 Significado das colunas na saída do comando ps........................................................................................243 O comando top............................................................................................................................... 244 Níveis de processos............................................................................................................ 245 Sinalizando processos........................................................................................................ 247 O comando kill................................................................................................................................247 O comando killall............................................................................................................................ 248 O comando killall5.......................................................................................................................... 249 Gerenciando prioridades dos processos............................................................................. 249 Definindo prioridades com o comando nice................................................................................... 249 Modificando prioridades com o comando renice............................................................................ 250 GNU/LINUX AVANÇADO Os serviços de rede no Linux.......................................................................... 254 Instalando um Servidor DNS no Linux............................................................................. 254 Servidor de nomes somente para cache............................................................................ 255 Configuração de um servidor de nomes autoritativo.......................................................... 255 Definição de zonas para o domínio................................................................................................ 256 Criação dos mapas de zonas.......................................................................................................... 257 Criação de mapas de resolução reversa.........................................................................................261 Encaminhando requisições de pesquisas........................................................................... 264 Como testar a configuração............................................................................................... 265 Validando a configuração do bind.................................................................................................. 265 6 PROGRAMA TÉCNICO CIDADÃO Validando mapas de zonas.............................................................................................................266 Testando a resolução de nomes..................................................................................................... 267 Sistemas de Resolução de Nomes................................................................... 271 Sistema de resolução hosts.............................................................................................271 Problemas do sistema de hosts...................................................................................................... 271 Sistema de resolução DNS...............................................................................................272 Nomes e Domínios.............................................................................................................. 272 Processo de resolução DNS................................................................................................ 273 Sistemas de e-mail.........................................................................................276 Transações de e-mail.......................................................................................................276 MUA - Mail User Agent........................................................................................................ SMTP – Simple Mail Transfer Protocol................................................................................. MTA – Mail Transfer Agent.................................................................................................. POP3 e IMAP....................................................................................................................... 277 278 278 278 Sendmail..........................................................................................................................279 Instalando o sendmail no Debian....................................................................................... Configurando o Sendmail no Debian.................................................................................. Testando sua configuração................................................................................................ Fila de mensagens no Sendmail......................................................................................... Aliases de e-mail................................................................................................................ 279 281 284 288 290 O arquivo ~/.forward...................................................................................................................... 291 Listas de destinatários....................................................................................................................291 Domínios virtuais no Sendmail........................................................................................... 292 Configuração.................................................................................................................................. 292 Enviando emails com telnet............................................................................................... 294 Postfix..............................................................................................................................295 Instalação e configuração básica do Postfix....................................................................... 296 Controlando o daemon do Postfix....................................................................................... 299 Configurações específicas do Postfix.................................................................................. 299 Gerenciamento das configurações................................................................................................. 299 Consultando parâmetros.............................................................................................................................300 Modificando parâmetros..............................................................................................................................301 Para quais endereços IP ou redes permitir RELAY?........................................................................ 302 O hostname totalmente qualificado (FQDN) do servidor Postfix.................................................... 302 Em quais interfaces de rede permitir conexões SMTP....................................................................304 Configuração para caixas-postais no estilo Maildir.........................................................................305 Encaminhando mensagens para outro MTA................................................................................... 306 Definindo aliases............................................................................................................................ 306 Definindo um alias para o postmaster.........................................................................................................307 Definindo um alias para o root....................................................................................................................308 Domínios Virtuais no Postfix............................................................................................... 309 Servidores POP3 e IMAP...................................................................................................310 Instalando o Courier....................................................................................................................... 311 Configurando o Courier...................................................................................................................311 7 PROGRAMA TÉCNICO CIDADÃO Testando o funcionamento............................................................................................................. 314 Network Information Services (NIS)................................................................ 318 Autenticação centralizada com NIS................................................................................. 318 Instalação dos serviços NIS................................................................................................ 319 Configuração do servidor NIS............................................................................................. 320 Configuração do cliente NIS............................................................................................... 323 Entidades do Sistema..................................................................................................................... 324 O arquivo /etc/nsswitch.conf........................................................................................................................325 Testando suas configurações............................................................................................. 326 Modificando as senhas dos usuários................................................................................... 326 Servidores de Arquivos...................................................................................328 Network File System – NFS.............................................................................................. 328 Instalando o NFS no Debian............................................................................................... 328 Configurando o servidor NFS.............................................................................................. 329 Montando compartilhamentos remotos.............................................................................. 331 SAMBA............................................................................................................................. 332 Curiosidade........................................................................................................................ 332 Instalação do Samba no Debian......................................................................................... 332 Caminhos de instalação..................................................................................................................334 Configuração do Samba..................................................................................................... 335 O Samba como PDC da rede...........................................................................................................335 Domínio padrão.............................................................................................................................. 335 Nome NetBIOS do servidor Samba................................................................................................. 335 Nível de segurança......................................................................................................................... 336 Encriptação de senhas....................................................................................................................340 Habilitar logons em domínio...........................................................................................................340 Definindo um Master Browser........................................................................................................ 341 Precedência na eleição de Master Browsers...................................................................................342 Configuração do Samba como "domain master"............................................................................342 Forçando uma eleição de "Master Browser" local...........................................................................342 Configuração para um servidor de horas....................................................................................... 343 Corrigindo problemas com caracteres estranhos........................................................................... 344 Usuários inválidos para login..........................................................................................................345 Definindo usuários administradores............................................................................................... 345 Liberação/Restrição de acesso por hosts........................................................................................346 Arquivos de logs do Samba............................................................................................................ 347 Tamanho máximo dos arquivos de logs......................................................................................................348 Não enviar logs para o syslog......................................................................................................................348 Suporte a WINS...............................................................................................................................349 Habilitando o servidor WINS no Samba.......................................................................................................349 Indicando ao Samba qual o servidor WINS da rede.....................................................................................349 Encaminhar pesquisas de nomes não satisfeitas no WINS para o DNS....................................................... 350 Performance................................................................................................................................... 350 Melhorando a performance com opções de sockets....................................................................................350 Suporte a impressão.......................................................................................................................352 Carregar as filas de impressão configuradas...............................................................................................352 8 PROGRAMA TÉCNICO CIDADÃO Onde encontrar as configurações das filas de impressão............................................................................352 Qual sistema de impressão utilizar?............................................................................................................353 Perfis ambulantes, scripts de logon e contas de máquinas............................................................353 Habilitando suporte a perfis ambulantes.....................................................................................................353 Habilitando o suporte a scripts de logon.....................................................................................................354 Criação automática de contas de máquinas................................................................................................357 Compartilhamentos............................................................................................................ 359 Compartilhamentos públicos.......................................................................................................... 359 Compartilhamentos de grupos (departamentais)...........................................................................361 Compartilhamento para perfis ambulantes.................................................................................... 362 Compartilhamento Netlogon...........................................................................................................363 Compartilhamento homes.............................................................................................................. 364 Compartilhamento para impressoras............................................................................................. 365 Usuários e grupos no Samba.............................................................................................. 366 Criação de grupo comum entre os usuários Samba....................................................................... 367 Verificando a configuração a procura de erros................................................................... 368 Segurança do Sistema....................................................................................370 Suíte de aplicativos OpenSSH..........................................................................................370 ssh..................................................................................................................................... 371 scp..................................................................................................................................... 371 Enviando Arquivos.......................................................................................................................... 372 Recebendo arquivos....................................................................................................................... 372 sftp..................................................................................................................................... 373 O arquivo /etc/ssh/sshd_config........................................................................................... 374 Controle de acesso a serviços......................................................................................... 375 TCP Wrappers..................................................................................................................... 376 Como ocorre o controle de acesso................................................................................................. 377 Formato das Regras de acesso.......................................................................................................378 inetd e xinetd..................................................................................................................... 379 Funcionamento...............................................................................................................................379 Instalação e Configuração do inetd................................................................................................ 380 Instalação e configuração do xinetd...............................................................................................381 O arquivo /etc/xinetd.conf...........................................................................................................................381 Definindo controle de acesso no xinetd..........................................................................................382 Definições globais...........................................................................................................................383 Firewalls no Linux............................................................................................................383 ipchains.......................................................................................................................................... 384 Habilitando o ipchains em Kernels 2.4 e 2.6................................................................................................385 Listando regras no ipchains.........................................................................................................................385 Definindo a política padrão do ipchains.......................................................................................................385 Adicionando regras no ipchains...................................................................................................................386 Removendo regras no ipchains...................................................................................................................387 iptables...........................................................................................................................................388 listando regras no iptables..........................................................................................................................389 Definindo a política padrão do iptables.......................................................................................................390 Adicionando regras no iptables...................................................................................................................390 Removendo regras no iptables....................................................................................................................391 9 PROGRAMA TÉCNICO CIDADÃO Compartilhando uma conexão com a internet............................................................................... 391 Funcionamento do NAT................................................................................................................................393 OpenOffice.org Introdução ao openoffice................................................................................396 O que é o OpenOffice?.....................................................................................................396 Histórico.......................................................................................................................... 396 OpenOffice texto............................................................................................398 Abrindo, salvando e imprimindo......................................................................................... 398 Tabulação e parágrafos...................................................................................................... 404 Formatando o texto............................................................................................................ 409 Configuração da página..................................................................................................... 413 Como funcionam os estilos do OpenOffice......................................................................... 416 O navegador....................................................................................................................... 418 Localizando e substituindo................................................................................................. 422 Como utilizar a auto correção e a auto-formatação............................................................ 425 Como utilizar o auto texto.................................................................................................. 428 Molduras e letras especiais................................................................................................ 433 Uso de tabela e formatação............................................................................................... 435 Corrigir erros datilográficos................................................................................................ 438 Utilizando Objetos de Desenho........................................................................................... 439 Fonte de Dados: como elaborar consultas a um banco de dados e como gerar relatórios a partir de consultas a bancos de dados............................................................................... 440 Avaliação dos tópicos aplicados......................................................................................... 443 OpenOffice planilha........................................................................................445 Utilizando Fórmulas............................................................................................................ 446 Trabalhando com células, textos, números, data e hora.................................................... 450 Anotações.......................................................................................................................... 456 Referências relativas e referências absolutas..................................................................... 457 Preenchimento automático................................................................................................ 457 Formatando células, números e planilhas.......................................................................... 458 Imprimir planilhas.............................................................................................................. 467 Base de dados com o OpenOffice Planilha.......................................................................... 471 Definindo e classificando uma área de banco de dados..................................................... 471 Filtrar, agrupar dados e calcular sub totais........................................................................ 473 Importando dados de um banco de dados para uma planilha ........................................... 475 Gráficos.............................................................................................................................. 476 Estruturando uma planilha................................................................................................. 478 Inserindo tabelas em documentos de texto........................................................................ 480 Avaliação dos tópicos aplicados......................................................................................... 482 OpenOffice apresentação............................................................................... 484 O que é uma Apresentação?.............................................................................................. 484 Cuidados a serem tomados................................................................................................ 485 10 PROGRAMA TÉCNICO CIDADÃO Criando uma apresentação simples.................................................................................... 485 Criando uma apresentação a partir do modelo.................................................................. 488 Mesa de slides.................................................................................................................... 489 Introduzindo efeitos na exibição de slides.......................................................................... 491 Projeção da apresentação.................................................................................................. 494 Personalizando a apresentação.......................................................................................... 501 Modificar o estilo da página................................................................................................ 503 Estilos de objetos de apresentação.................................................................................... 506 Transição de slides, efeitos e animação............................................................................. 510 Apresentação – exportando e imprimindo.......................................................................... 516 Avaliação dos tópicos aplicados......................................................................................... 520 Navegador Internet Conhecendo o navegador Mozilla Firefox.........................................................523 Abas.................................................................................................................................523 Utilizando as abas ..........................................................................................................................523 Métodos para abrir uma aba.......................................................................................................... 523 Adicione o botão “Nova aba” na barra de ferramentas..................................................................524 Como abrir links sempre em abas em vez de abrir janelas?.......................................................... 524 Troque de aba utilizando o teclado................................................................................................ 525 Navegação.......................................................................................................................525 Palavras acentuadas.......................................................................................................................525 Navegue por páginas web usando o teclado.................................................................................. 526 Endereços que não possuem links................................................................................................. 526 Utilize Ctrl para selecionar células de tabelas................................................................................ 526 Congelando imagens...................................................................................................................... 527 Favoritos..........................................................................................................................527 Conheça o sistema de favoritos do Firefox.....................................................................................527 Adicionando uma página ao menu Favoritos..................................................................................528 Outras dicas....................................................................................................................................529 Arrastando pastas no menu Favoritos........................................................................................... 529 Faça um backup dos seus favoritos................................................................................................529 O que são os favoritos dinâmicos?................................................................................................. 530 Crie favoritos dinâmicos manualmente.......................................................................................... 531 Interface.......................................................................................................................... 531 Impeça que páginas web mexam na barra de status.....................................................................531 Como excluir um mecanismo do campo de pesquisa?................................................................... 532 Remoção manual............................................................................................................................532 Ganhe espaço ocultando os menus que você não usa................................................................... 533 Coloque o botão “Pesquisar” no campo de pesquisa..................................................................... 533 Use imagens da web como papel de parede.................................................................................. 533 Extensões e Plugins.........................................................................................................534 O que são “plugins”?...................................................................................................................... 534 Dúvidas freqüentes........................................................................................................................ 534 Qual é a diferença entre plugin e extensão?.................................................................................. 535 11 PROGRAMA TÉCNICO CIDADÃO Como Como Como Como Como instalar uma extensão?........................................................................................................ 535 salvar uma extensão?...........................................................................................................535 acelerar o abertura de páginas PDF?................................................................................... 536 instalar um tema salvo no computador?.............................................................................. 536 salvar um tema?...................................................................................................................537 12 PROGRAMA TÉCNICO CIDADÃO GNU/LINUX BÁSICO Os profissionais envolvidos em TI, que queiram conhecer o ambiente linux e aprofundar seus conhecimentos técnicos e também aos profissionais que desejam iniciar carreira em segurança de TI. O sistema operacional Linux está crescendo a cada dia e conseqüentemente cresce também a demanda por profissionais especializados para este mercado. As empresas estão conhecendo a importância do Linux não somente como redutor de custo, mas também, por estabilidade e segurança. O aluno que fizer o curso ganha conhecimento de administração do sistema Linux. O aluno terá noções de como atuar com as duas distribuições matrizes do mundo ( Debian e Red Hat) podendo após o treinamento optar com qual delas trabalhar. 13 PROGRAMA TÉCNICO CIDADÃO INTRODUÇÃO AO LINUX Origem do Linux Linux é um sistema operacional clone do Unix, viabilizando uma alternativa barata e funcional de se rodar um sistema operacional amplamente compatível com Unix sem ter que pagar os altos custos de licenciamento. No ano de 1983, Richard Stallman fundou uma organização chamada Free Software Fundation (Fundação de Software Livre), cujo projeto denominado “projeto GNU” (GNU Is not Unix) tinha por finalidade criar um clone melhorado do sistema operacional Unix, mas que fosse desenvolvido a partir do zero, sem utilizar o código-fonte do Unix. Para alcançar tal objetivo, era necessário desenvolver o kernel (coração do sistema operacional) e os aplicativos (comandos) que compôe um sistema operacional completo. Porém, no final da década de 80, o projeto havia fracassado, pois os programadores não haviam conseguido criar o kernel do sistema, somente os aplicativos essenciais estavam prontos. Na mesma época, vários esforços alternativos para se atingir o mesmo objetivo proposto pelo projeto GNU estavam em andamento. Um desses projetos foi o projeto Minix, liderado pelo Dr. Andrew Tenenbaum desenvolveu o minix como instrumento de ensino, que na verdade era um sistema operacional Unix portado para arquitetura x86 (até 80386 na época), o que possibilitava que os universitários pudessem dar continuidade aos seus estudos no PC de casa. Nessa mesma época, um aluno da Universidade de Helsinque, na Finlândia, chamado Linus Benedict Torvalds percebeu que o 80386 era o único processador na época capaz de executar um clone de Unix, mesmo não sendo uma alternativa barata p/ a época. Linus então se dispôs a criar um kernel clone do Unix que fosse capaz de lidar com memória virtual, multitarefa e multiusuário. Era um trabalho gigantesco para apenas uma pessoa. Na primavera de 1991, Linus iniciou seu projeto particular inspirado no Minix. Ele limitou-se a criar 14 PROGRAMA TÉCNICO CIDADÃO um “Minix melhor que o Minix”. Após algum tempo de trabalho, Linus conseguiu criar um kernel capaz de executar utilitários de programação e comandos padrão do Unix já previamente clonados pelo projeto GNU. Percebendo a grandiosidade do projeto, e que não conseguiria dar continuidade sozinho, ele enviou a seguinte mensagem para a lista de discussão comp.os.minix: “Você suspira por melhores dias do Minix-1.1, quando homens serão homens e escreverão seus próprios drivers de dispositivos? Você está sem um bom projeto e está morrendo para colocar as mãos em um S.O. no 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 correto? Então essa mensagem pode ser exatamente para você. Como eu mencionei há um mês, estou trabalhando em um sistema operacional similar ao Minix para computadores AT-386. Ele está, finalmente, próximo do estágio em que poderá ser utilizado (embora não possa ser o que você esteja esperando), e eu estou disposto a colocar os fontes para ampla distribuição. Ele está na versão 0.02... contudo, obtive êxito rodando bash, gcc, gnu-make, gnu-sed, compress, etc nele”. A primeira versão oficial do Linux foi lançada em 5 de outubro de 1991 (versão 0.02). A partir daí, diversos programadores ao redor do mundo têm colaborado com esse sistema operacional de código aberto até chegar no que é hoje. Curiosidade: O nome Linux foi escolhido por seu criador através de uma mistura de seu próprio nome com Unix (Linus + Unix = Linux). Licenciamento e Versões do kernel do Linux O Linux não é um software de domínio público, mas licenciado sob uma licença chamada GPL (General Public License – Licença Pública Geral). Essa licença diz que o código-fonte deve permanecer livremente disponível, nada pode impedir a distribuição do software. As pessoas 15 PROGRAMA TÉCNICO CIDADÃO podem cobrar por uma cópia do Linux, se assim desejarem, desde que, com isso, não limitem sua distribuição. Na época do desenvolvimento deste material, a versão mais atual do Kernel do Linux disponível era a 2.6.8. O versionamento é dividido em 2 partes, no exemplo da versão 2.6.8, o número 2.6 é a versão principal do kernel, já a versão 2.6.8 é o patch level do kernel, ou seja, sempre que há alguma mudança do código não muito significativa, é elevado o número do patch level. Se ocorrerem mudanças significativas, o número da versão principal é elevado, e patch level retorna a 0 (zero). Outra característica importante sobre versionamento do Kernel é que sempre que a versão principal termina com um número par, trata-se de uma versão considerada estável pelo time de desenvolvimento. Quando este número é ímpar, o kernel ainda está em estágio instável, em desenvolvimento. Distribuições Linux No início da década de 90, começaram a surgir as primeiras distribuições Linux. A Idéia de distribuições se tornou necessária devido as dificuldades na época em se obter todas as partes que compunham o sistema operacional completo (Kernel e aplicativos), pois as partes em questão ficavam espelhadas pelo mundo, e diversos downloads e compilações eram necessários para que fosse possível utilizar o sistema operacional. Essas dificuldades contribuíram para dar a fama de “Sistema Operacional de Hackers” ao Linux, pois somente quem detinha um bom conhecimento conseguia instalar o sistema. A “Distribuição” simplesmente faz todo esse “trabalho sujo” e empacota tudo em um meio comum de distribuição, que pode ser um cdrom já gravado, um disquete, um arquivo compactado, etc. Atualmente existem mais de 300 distribuições diferentes, dentre elas se destacam algumas como: Debian, RedHat, Conectiva, Slackware, Mandrake, Suse, Gentoo e Fedora. 16 PROGRAMA TÉCNICO CIDADÃO Linux Standard Base (LSB) O Linux Standard Base (LSB) viabiliza a compatibilizar e padronizar as distribuições Linux, de modo que os softwares desenvolvidos para “Linux em Geral” possam rodar em qualquer distribuição. Para que tal fato seja possível, é necessário que a distribuição e o aplicativo sejam compatíveis com o LSB. Nos dias de hoje, a esmagadora maioria dos aplicativos disponíveis para Linux é compatível com LSB. Visão geral do Sistema Operacional Linux Linux é um sistema operacional multi-camadas, como podemos ver no gráfico seguinte: Usuário Interpretador de Comandos Kernel Hardware Nesse arranjo, o kernel desempenha a função principal de intermediar acessos ao hardware e interfacear com o usuário através do interpretador de comandos. Vantagens do Linux O Linux é um sistema operacional que se destaca por diversos fatores como Multiplataforma, Multiusuário, Multitarefa, Portabilidade e Escalabilidade. Multiplataforma é a capacidade do 17 PROGRAMA TÉCNICO CIDADÃO mesmo sistema rodar em diferentes plataformas de hardware, geralmente mantendo os softwares inalterados, com pouca mudança nos fontes do kernel. Multiusuário e Multitarefa denota, respectivamente, a capacidade do sistema de Lidar com múltiplos usuários rodando múltiplos aplicativos simultaneamente. Portabilidade e Escalabilidade é a capacidade do sistema de ser facilmente portável e compatível com diversas plataformas de Hardware existentes. Conceitos Unix Existem algumas características do sistema operacional Linux que foram herdadas do Unix. AS principais características são listadas adiante: Tudo é Arquivo Um arquivo no UNIX é uma seqüência de 0 ou mais bytes contendo qualquer tipo de informação. Não existe nenhuma distinção entre um arquivo texto em ASCII, arquivos binários ou qualquer outro tipo de arquivo. Um diretório é um arquivo que contém informações a respeito de um conjunto de arquivos. Essas informações consistem basicamente em nome e localização do mesmo. Um dos arquivos “contidos” em um diretório pode ser também um diretório, permitindo que estes se organizem de forma hierárquica. Case Sensitive O Linux difere letras maiúsculas e minúsculas, portanto ROOT, Root e root, são três formas diferentes de se escrever, e o Linux entende que são três comandos diferentes. Portanto, para que sejam compreendidos pelo Interpretador de Comandos (shell), todos os comandos devem ser digitados exatamente da forma que são, distinguindo maiúsculas de minúsculas. 18 PROGRAMA TÉCNICO CIDADÃO Comandos A maioria dos comandos são geralmente seguido de um parâmetro e pode se utilizado de três maneiras diferentes: # comando -parâmetro # comando --parâmetro # comando parâmetro Primeiros Passos Precisamos nos familiarizar com o ambiente de linhas de comando. Portanto, iremos conhecer cada uma das partes envolvidas. Prompt de Login Como já visto anteriormente, o bash é um dos shells disponíveis no Linux. É no ambiente do shell que passaremos a maior parte do curso. Para que o sistema nos libera acesso a um shell texto, antes é preciso autenticar-se no prompt de login, como abaixo: host login: root password: Essa é a tela de login texto, onde host é o nome da máquina. Por ser de uma hierarquia Unix, ao digitar a senha, nenhum caractere aparece e o cursor não se move mas as informações do teclado estão sendo enviadas. bash O bash é apenas um dentre os diversos interpretadores de comandos (shell's) disponíveis no Linux, tais como csh, zsh, sh, tcsh, etc. Futuramente faremos um estudo mais profundo sobre o 19 PROGRAMA TÉCNICO CIDADÃO shell bash, mas agora iremos apenas nos familiarizar com esse componente tão importante do sistema. [root@host root]# Este é o prompt do Shell, que aparece depois que você esta logado. Este formato de prompt é geralmente utilizado nas distribuições RedHat e Conectiva. A linha acima significa o seguinte: root é o nome do usuário @ significa at (em), ou seja, onde o usuário esta logado host nome da máquina root é o diretório corrente Portanto essa linha significa: usuário root logado na máquina host no diretório root. O # é o símbolo de que o root está logado, caso fosse um usuário comum, o símbolo seria $. No caso do Debian, por exemplo, a linha do prompt costuma se parecer com o seguinte: host:/var/tmp# Nesse caso, é mostrado o nome da máquinas, seguido de “:” (dois-pontos), o caminho completo do diretório atual mais o símbolo de quem está logado. O prompt de login pode facilmente ser configurado através da variável de ambiente $PS1. Exemplo: host:/var/tmp# echo $PS1 \h:\w$ host:/var/tmp# PS1="[\u@\h \W]\$ " [root@host tmp]# echo $PS1 [\u@\h \W]\$ [root@host tmp]# No exemplo acima, primeiro foi mostrado o conteúdo da variável $PS1 (comando “echo $PS1”); logo depois o conteúdo dessa variável foi modificada com base nos valores especiais descritos 20 PROGRAMA TÉCNICO CIDADÃO na tabela abaixo, tornando o prompt padrão do debian parecido com o prompt padrão do RedHat. Caracteres de escape para customização do shell usando $PS1: \e Quebra de linha. \h Nome curto do Host (Exemplo: host). \H Nome longo do Host (Exemplo: host.utah.com.br). \j O número de trabalhos atualmente sob controle do shell. \t Hora atual no formato de 24horas. \u Usuário logado atualmente. \W Nome do diretório de trabalho atual. \w Caminho completo do diretório atual. \$ Símbolo de Usuário. Para qualquer usuário com UID=0 (root por exemplo) aparecerá um sinal de #, ou um sinal de $ para os outros usuários do sistema. DICAS + MAIS Você pode ter mais de um terminal ao mesmo tempo, sendo possível manter terminais texto e gráficos. Para alternar entre os terminais texto, pressione [ALT]+[F1](F1 até o F6). O próximo terminal logo após o último terminal texto (Geralmente o F6) é o terminal gráfico, se estiver em uso; Nesse caso, para acessar o terminal gráfico, pressione [ALT]+[F7]. Para sair do terminal gráfico e voltar a um terminal texto, pressione [CONTROL]+[ALT]+[F1] (Até o [F6] nesse caso). logout Para sair do shell atual, digite o seguinte comando: $ logout 21 PROGRAMA TÉCNICO CIDADÃO shutdown Utilizamos o comando shutdown para interromper de alguma forma o funcionamento do sistema (Desligar ou reiniciar, por exemplo). Sintaxe: shutdown [-akrhfnc] [-t secs] tempo [mensagem] Tabela de Parâmetros -a Utiliza o arquivo /etc/shutdown.allow para definir quem tem permissão para desligar/reiniciar o sistema. -k Somente “testa” o desligamento. -r Reinicia o sistema. -h Desliga o sistema. -f Reinicia o sistema em modo rápido (Não executa o fsck durante o boot). -F Força a execução do fsck durante a inicialização. -n Força desligamento rápido (sem terminar os programas em execução). -c Cancela um shutdown agendado. -t Especifica o tempo, em segundos, entre a notificação e a finalização dos processos. Exemplos: # shutdown -h now “O sistema será reinicializado agora” Reinicia o sistema Imediatamente e exibe a mensagem “O sistema será reinicializado agora” p/ os usuários conectados atualmente. # shutdown -r -t secs 20 10 “Reboot em 10 minutos” halt 22 PROGRAMA TÉCNICO CIDADÃO O comando halt tem o mesmo efeito que o comando “shutdown -h now”. reboot Tem o mesmo efeito que o comando “shutdown -r now”. 23 PROGRAMA TÉCNICO CIDADÃO INSTALAÇÃO DO DEBIAN GNU/LINUX Abranger de uma forma geral a instalação “do Sistema Operacional Linux” é redundante, pois existem diversas distribuições, e cada uma delas utiliza um método próprio ou parecido para fazer a mesma coisa: Instalar o sistema. A instalação do sistema consiste em ter um espaço particionado, com no mínimo 1 partição de dados e 1 swap + 1 kernel com um gestor de boot + utilitários que tornam o sistema operacional útil (pacotes). É justamente esse o objetivo dos programas de instalação presentes nas distribuições, os instaladores. Um ótimo documento referente ao mesmo assunto pode ser encontrado em: http://www.nl.debian.org/releases/stable/i386/install Um pouco sobre o Debian Debian é atualmente a maior distribuição Linux “não comercial” do mundo. Não existe nenhuma empresa por trás do projeto Debian, que é mantido por cerca de 1000 voluntários ao redor do mundo. Além de ser uma das mais antigas distribuições Linux do mundo (Das “famosas” ela é a mais antiga, seguida de perto pelo Slackware), o Debian possui toda uma estrutura colaborativa de desenvolvimento e manutenção que torna o software muito robusto e estável. Curiosidades De onde surgiu o nome “Debian”? O nome Debian teve origem de uma junção entre os nomes dos fundadores do sistema operacional, em 1993: Debra e Ian Murdock, 24 PROGRAMA TÉCNICO CIDADÃO Como se pronuncia “Debian”? Pena eu não conseguir expressar com texto as formas que já ouvi pronunciarem o nome desta distribuição... O formato correto seria “Deb'-ee-en”, mas eu mesmo não o chamo assim, e conheço poucos que o fazem. Estrutura do sistema Debian Qual o significado dos codinomes das distribuições Debian? Essa é bem simples. Os nomes dados as distribuições Debian Até hoje são baseados nos personagens do desenho animado Toy Story®, da Pixar©. Woody é o cowboy, potato é o homem-batata, buzz (o nome da primeira versão) é o nome do “homem do espaço”. Como funciona o sistema de versões do Debian? O Debian possui um robusto sistema de controle de versões, que não há a necessidade de entrar em detalhes, apenas de compreender seu funcionamento básico. No geral, o Debian sempre disponibiliza 3 versões simultâneas, cada uma delas seguindo um caminho no desenvolvimento do projeto. A distribuição stable Um dos “sabores” que o Debian costuma ser disponibilizado é o stable. A distribuição stable é a versão do Debian considerada mais estável no momento. Os pacotes têm que passar pelas outras distribuições, unstable e testing, antes de chegar aqui. Esse processo é necessário para garantir que os softwares disponibilizados nessa distribuição são estáveis, pois foram testados por um longo período. 25 PROGRAMA TÉCNICO CIDADÃO Atualmente a versão stable recebe o nome de woody, e numericamente é a versão 3.0. É a distribuição mais recomendada para servidores de produção e estações de trabalho de alta disponibilidade. O problema é que se paga um preço um tanto amargo pela estabilidade dos pacotes, a versão dos mesmos. Devido ao fato que cada pacote passa por um processo que pode levar até 2 anos para ir da distribuição unstable até a stable, a distribuição stable sempre contará com softwares antigos para a época. A distribuição testing Essa distribuição existe para que testes possam ser efetuados nos pacotes que já passaram pela distribuição unstable mas ainda não são considerados maduros o suficiente para fazerem parte da distribuição stable. A testing é sempre uma distribuição indicada para desktop's e workstations que não sejam de missão crítica, pois trazem softwares mais recentes. A versão atual da testing tem o codinome sarge, e a versão é 3.1. Quando o sarge se tornar maduro o bastante, ele passará a ser a distribuição stable, entrará uma outra no lugar dele e o woody estará obsoleto. A distribuição unstable Essa distribuição serve de porta de entrada para novas tecnologias no Debian. Tudo que é novo é considerado instável pelo Debian, e com razão, pois é justamente isso que cria um grande diferencial entre o Debian e outras distribuições. Tudo que há de mais novo para Debian está nessa distribuição, inclusive aquele desktop “bonitinho” que todos adoram. Geralmente essa distribuição só é utilizada por entusiastas e malucos de plantão, que gostam de viver emoções fortes por ter o seu sistema quebrado a qualquer momento. 26 PROGRAMA TÉCNICO CIDADÃO Seu codinome é e sempre será sid e ela não conta com uma versão numérica. Sid é o nome da “criança da casa ao lado” que destruía os brinquedos no desenho animado Toy Story®. Iniciando a Instalação O primeiro passo para iniciar a instalação do Debian é verificar se o seu Hardware ao menos “aparenta” ser compatível com ele. procure saber com o fabricante do equipamento (que nem sempre vê com bons olhos a utilização de Linux...) ou pesquisar na Internet. Esse passo evita dores de cabeça que degradam a reputação do sistema Debian GNU/Linux. Inicializando o instalador É preciso definir qual será o método utilizado para se inicializar o instalador do sistema, o debian-installer. A maneira mais simples, e utilizada em mais de 95% das instalações, é através de um cdrom inicializável de instalação do Debian. Nesse método, basta inserir o cd na unidade de cdrom, configurar a BIOS para inicializar a partir do cd e iniciar o computador. Você deverá ser presenteado com uma tela como com essa: 27 PROGRAMA TÉCNICO CIDADÃO Essa é a tela de boas vindas do cd de instalação do Debian Sarge. O sistema utiliza o kernel 2.4.27 por padrão para a instalação, mas caso queira (E é recomendado) é possível iniciar a instalação utilizando um kernel da série 2.6, com o parâmetro “linux26”. Isso irá aumentar suas chances de funcionamento do hardware. Diversos parâmetros de inicialização podem ser passados nessa tela. Você pode pressionar a tecla [F3] para ver uma lista dos kernels disponíveis nesse cd de instalação. prosseguiremos nessa tela com o seguinte parâmetro a ser passado para o prompt de inicialização: boot : linux26 28 PROGRAMA TÉCNICO CIDADÃO Pressione [ENTER] para prosseguir. Assim que o sistema terminar de inicializar, surgirá a tela de configuração do idioma da instalação. Selecione o idioma e prossiga. A próxima tela leva a configuração do teclado. 29 PROGRAMA TÉCNICO CIDADÃO Com base no idioma selecionado na tela anterior, temos uma lista para os tipos de teclados disponíveis. 30 PROGRAMA TÉCNICO CIDADÃO Se pelo menos uma interface de rede tenha sido detectada ou seu módulo tenha sido carregado significa que nesse momento o kernel já possui suporte completo para comunicação em rede, e podemos configurá-la agora, a instalação tentara resolver a conexão automaticamente por DHCP mas Iremos configurar a rede manualmente, nesta tela selecione “Configurar a rede manualmente”. 31 PROGRAMA TÉCNICO CIDADÃO O endereço IP é baseado na sala de aula. O terceiro octeto define qual sala de aula o aluno se encontra (10 para sala 1, 20 para sala 2 e assim por diante). O quarto octeto é o número da máquina. Exemplos: Sala 1 – 192.168.10.XX Sala 2 – 192.168.20.XX 32 PROGRAMA TÉCNICO CIDADÃO Sala 3 – 192.168.30.XX Sala 4 – 192.168.40.XX O valor padrão de máscara de rede é satisfatório. 33 PROGRAMA TÉCNICO CIDADÃO O gateway para cada sala de aula é o host que termina com 254, o terceiro o octeto é o número referente a sala de aula. Exemplos: Sala 1 – 192.168.10.254 Sala 2 – 192.168.20.254 34 PROGRAMA TÉCNICO CIDADÃO Sala 3 – 192.168.30.254 Sala 4 – 192.168.40.254 Configuração dos servidores DNS. Em sala de aula, utilize o mesmo IP do gateway. 35 PROGRAMA TÉCNICO CIDADÃO O nome dado a cada máquina baseia-se em numeração definida pelo instrutor. 36 PROGRAMA TÉCNICO CIDADÃO Aqui configuramos o domínio a qual o computador irá pertencer. Em sala de aula, o domínio será o que o instrutor definir. 37 PROGRAMA TÉCNICO CIDADÃO Iremos editar manualmente a tabela de partições. 38 PROGRAMA TÉCNICO CIDADÃO Aqui você escolhe o disco a ser instalado seu sistema. Por razões de segurança você pode criar partições separadas para seu /home /tmp /usr /home /var. 39 PROGRAMA TÉCNICO CIDADÃO O espaço para memória swap vai de acordo com a necessidade ou uso da mesma. Sugerimos a mesma quantidade de memória RAM(levando em conta que me um micro com 3Gb de RAM não necessitaria de 3Gb de swap) O sistema Debian estará sendo instalado. 40 PROGRAMA TÉCNICO CIDADÃO Em versões anteriores (Woody) o Inicializador padrão era o LILO, na nova versão (Sarge) temos o GRUB como padrão, ele é bem mais simples e sua interface bem mais amigável. Responda sim para que seu sistema posso iniciar normalmente. 41 PROGRAMA TÉCNICO CIDADÃO GERENCIAMENTO DE PACOTES Um dos assuntos mais relevantes na administração de sistemas Linux é justamente o gerenciamento de pacotes, que resumidamente é o gerenciamento dos programas instalador no sistema. É possível instalar programas de diversas formas no Linux, seja através da compilação códigofonte, da cópia de alguns arquivos ou instalação de pacotes. No mundo Linux, um pacote de software nada mais é do que um programa (ou um conjunto deles) já compilado e pronto para funcionar, que está “empacotado” em um único arquivo, denominado pacote. É como agrupar objetos (programas) em uma caixa (pacote). Cabe ao administrador instalar esse pacote de software para disponibilizar o(s) programa(s) contidos nele para o sistema. Manter o conjunto de softwares de um servidor ou estação de trabalho Linux em pacotes facilita e muito o gerenciamento desses sistemas. As atualizações, por exemplo, são facilitadas, pois basta atualizar o(s) pacote(s) afetado(s) para que o sistema fique em dia. Se os softwares compilados diretamente no sistema, o gerenciamento de atualizações poderia se tornar um caos. Para saber, por exemplo, quais softwares estão ou não instalados no computador, instalar programas sem temer as dependências (nem sempre é tão fácil assim), com um gerenciador de pacotes é muito mais fácil e prático. CURIOSIDADE: O QUE SÃO DEPENDÊNCIAS? As dependências são o calcanhar de acquiles para um gerenciados de pacotes. Quando um pacote precisa que já exista um ou mais pacotes específicos instalados no sistema, ele “depende” desses pacotes e não pode ser instalado sem que esses pacotes já estejam antes instalados no sistema. Existem dois gerenciadores de pacotes principais em uso nas distribuições Linux. O RPM (RedHat Package Manager) e o DPKG (Debian Packager). Outras distribuições, como Slackware e Gentoo, utilizam seus próprios gerenciadores de pacotes, não abordados nesse material. O gerenciador de pacotes do Debian O Debian possui seu próprio gerenciador de pacotes, o dpkg (Debian Packager). O dpkg é amplamente utilizado por distribuições baseadas em Debian, como Knoppix e ubuntu. 42 PROGRAMA TÉCNICO CIDADÃO Os pacotes debian geralmente recebem a extensão .deb, e contém os arquivos e documentação já compilados, assim como informações e scripts que auxiliam no correto dimensionamento do pacote no sistema. dpkg Utilizamos o comando dpkg para o gerenciamento direto dos pacotes no debian. Suas principais funções em relação aos pacotes são: Instalação, Listagem, Remoção e Status. Apesar de ser um comando para lidar com pacotes binários no debian, o dpkg serve como base para outros comandos como o APT e dselect, que servem para “realmente” gerenciar os pacotes, facilitando e arrojando todo o trabalho. Estudaremos o APT logo mais, mas primeiro precisamos conhecer o dpkg. Sintaxe: dpkg parâmetro [pacote[.deb]] 43 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -i pacote.deb -r pacote -P pacote -s pacote -l [pacote] -S /arquivo/no/sistema Instala pacote(s) Desinstalar pacote(s) do sistema, mas mantém arquivos de configuração. Desinstalar pacote(s) do sistema e remove os arquivos de configuração. Mostra o status do pacote. Mostra informações (lista) do(s) pacote(s). Se for utilizado sem um nome de pacote como parâmetro, lista todos os pacotes instalados no sistema. Verifica a qual pacote determinado arquivo no sistema pertence Estas são os principais parâmetros do dpkg. Listando os pacotes instalados no sistema Para obter uma lista dos pacotes instalados no sistema, utilizamos a opção -l do comando dpkg, obtendo a lista dos pacotes instalados, um por linha, conforme a linha abaixo: ii base-config 2.61 Debian base system configurator A primeira coluna existem 2 letras que denotam o estado do respectivo pacote (Estado e erro, respectivamente), cujo nome, versão e descrição abreviada estão nas colunas adjacentes. É possível obter informações para determinado(s) pacote(s) também, utilizando o nome completo ou parcial do pacote. Também é possível utilizar coringas (iguais os do shell, * e ? basicamente). Mas lembre-se de enquadrar o nome do pacote entre aspas para que não sejam 44 PROGRAMA TÉCNICO CIDADÃO confundidos com nomes de arquivos no diretório atual, caso utilize coringas, conforme exemplo abaixo: Exemplo: # # # # dpkg dpkg dpkg dpkg -l -l locales -l "locale*" -l “locale-??” Utilizamos 4 formas diferentes para listar pacotes no sistema. A primeira lista todos os pacotes instalados, a segunda lista somente o pacote locales, as 2 seguintes são listagens com coringas. Obtendo detalhes sobre um pacote Debian Mesmo que determinado pacote não esteja instalado no sistema, é possível obter informações muito importantes sobre o mesmo com a opção -p do comando dpkg. Essa opção mostra na tela o arquivo de controle do pacote. Esse arquivo segue o mesmo padrão para todos os pacotes Debian, e fornece informações muito importantes. # dpkg -l dpkg-doc # dpkg -p dpkg-doc Package: dpkg-doc Priority: optional Section: doc Installed-Size: 44 Origin: debian Maintainer: Dpkg Development <[email protected]> Bugs: debbugs://bugs.debian.org Architecture: all Source: dpkg Version: 1.9.21 Replaces: dpkg-dev (<< 1.4.1.19) Filename: pool/main/d/dpkg/dpkg-doc_1.9.21_all.deb Size: 10724 MD5sum: 130615337b08082c13de3c99b32cd8cc 45 PROGRAMA TÉCNICO CIDADÃO Description: Dpkg Internals Documentation This document describes the internal operations of the dpkg program. It covers building aswell as the internals functions. If you are interested in creating your own packages, then you may be more interested in the packaging-manual documentation package. Utilizamos a opção -l para verificar se o pacote dpkg-doc está instalado no sistema (Não se esqueça que a saída desse comando foi omitida na apostila). Em seguida, a opção -p, que mostrou na tela o conteúdo do arquivo de controle do pacote dpkg-doc. Cada campo que inicia uma linha no arquivo é um respectivo campo de controle. Veja os significados a seguir: 46 PROGRAMA TÉCNICO CIDADÃO Significado dos campos de controle Package Priority Section Installed-Size Mantainer Architeture Source Version Depends Recommends Nome do pacote. Prioridade de Instalação. Pode valer required, important, standard, optional e extra. Que denotam, decrescivamente a importância do pacote no sistema. Os pacote são separados por seções devido ao grande número (Algo como o que é feito com os nomes de municípios, por exemplo). Este é o nome da seção a qual o pacote pertence. Tamanho ocupado pelo pacote após instalado. Exibido em KB. Nome e email do Mantenedor (Empacotador, geralmente também é o criador do pacote). Qual a arquitetura do pacote. Nome do pacote que traz o código-fonte para este pacote binário. Versão do pacote. Qual(is) pacote(s) depende(m) deste, e deve(m) estar instalado(s) antes da instalação do pacote atual. Qual(is) pacote(s) o Mantenedor recomenda serem instalados junto com o pacote atual. Suggests Quase o mesmo que Recommends, porém lista pacotes que costumam agregar funcionalidades ao pacote atual. Pre-Depends Praticamente o mesmo significado que Depends, porém não é necessário que a(s) dependência(s) esteja(m) completamente instalada(s) quando da instalação, basta que esteja(s) descompactada(s) no sistema. Este campo possui 2 propósitos distintos: Qual(is) arquivo(s) ou pacote(s) será(ão) sobrescrito(s) quando da instalação do pacote. Lista qual(is) pacote(s) não podem existir ao instalar o pacote atual, pois um ou mais arquivos podem entrar em conflito. Hash de verificação da integridade do pacote. Execute md5sum pacote.deb e compare o resultado com o mostrado nesse campo. Isso garante que o pacote não tenha sido alterado propositalmente ou corrompido por algum motivo. Caminho completo do pacote no repositório Debian. Replaces Conflicts MD5sum Filename Description Descrição detalhada do pacote. 47 PROGRAMA TÉCNICO CIDADÃO Exibindo status dos pacotes do sistema É possível obter o status de algum pacote com a opção -s do dpkg. A saída é ligeiramente parecida com a opção -p, porém nem todos os campos são baseados no arquivo de controle. É importante observar o campo “Status”, que exibe em palavras simples um ou mais estados em que o pacote se encontra. (Instalado, não-instalado, com ou sem erros de instalação, etc....). Exemplo: # dpkg -s dpkg-doc Package: dpkg-doc Status: purge ok not-installed Priority: optional Section: doc Origin: debian Bugs: debbugs://bugs.debian.org Architecture: all # dpkg -i dpkg-doc_1.10.25_all.deb Selecionando pacote previamente não selecionado dpkg-doc. (Lendo banco de dados ... 107104 arquivos e diretórios atualmente instalados.) Descompactando dpkg-doc (de dpkg-doc_1.10.25_all.deb) ... Instalando dpkg-doc (1.10.25) ... # dpkg -l dpkg-doc # dpkg -s dpkg-doc Package: dpkg-doc Status: install ok installed Priority: optional Section: doc Installed-Size: 72 Origin: debian Maintainer: Dpkg Development <[email protected]> Bugs: debbugs://bugs.debian.org Architecture: all Source: dpkg Version: 1.10.25 Replaces: dpkg-dev (<< 1.4.1.19) Description: Dpkg Internals Documentation This document describes the internal operations of the dpkg program. It 48 PROGRAMA TÉCNICO CIDADÃO covers building as well as the internals functions. If you are interested in creating your own packages, then you may be more interested in the debian-policy package. Repare na saída do comando dpkg -s antes e depois da instalação do pacote. Instalando e atualizando pacotes binários do Debian Embora este não seja a melhor maneira de se instalar pacotes Debian, é preciso ter conhecimento sobre isso, visto que utilitários de gerenciamento de pacotes como o APT internamente utilizam esses comandos. Instalar e Atualizar pacotes Debian é muito simples, basta utilizar a opção -i do dpkg, caso o pacote que esteja tentando instalar já exista no sistema, porém com uma versão anterior, o dpkg cuida de efetuar a atualização do mesmo, substituindo o antecessor. Caso algum pacote necessite de configuração para que venha a funcionar no sistema, logo após a sua instalação, será lançado um programa que ajudará na configuração do mesmo. Para chamar novamente a tela de configuração do pacote, utiliza o comando “dpkg-reconfigure pacote” com o pacote desejado. Antes de prosseguir, para que possamos executar o exercício, é preciso obter pelo menos um pacote Debian (um arquivo .deb, geralmente). Podemos obter o pacote utilizando a ferramenta APT, que será estudada adiante: # dpkg -l dpkg-doc # dpkg -p dpkg-doc # apt-get clean # apt-get -d install dpkg-doc # cd /var/cache/APT/archives/ # ls dpkg-doc_1.10.25_all.deb lock partial # dpkg -i dpkg-doc_1.10.25_all.deb 49 PROGRAMA TÉCNICO CIDADÃO Utilizamos as opções -l e -p para verificar, respectivamente, se o pacote já estava instalado e se possui dependências. O pacote em questão não possui dependências (pelo menos na versão utilizada durante a confecção do material). O comando apt-get clean serve para remover pacotes recentemente baixados no diretório /var/cache/apt/archives, no qual encontraremos o arquivo dpkg-doc_1.10.25_all.deb, que é um pacote binário debian. Padrão de nomes dos arquivos binários do Debian Os arquivos binários do Debian seguem um padrão de nomenclatura para o nome do arquivo que o divide em 3 campos, separados por “_” (underline). O primeiro campo é o nome do pacote, o segundo, a versão do mesmo, e o terceiro é a arquitetura para qual o pacote foi compilado. Quando a arquitetura representa “all”, significa que o pacote pode ser utilizado em qualquer arquitetura de hardware sem problemas. Removendo pacotes binários Debian É possível remover pacotes binários instalados no sistema de duas maneiras: Mantendo arquivos de configuração e outros arquivos modificados pelo usuário no sistema ou apagando quaisquer arquivos pertencentes ao pacote. A opção -r do comando dpkg cuida apenas de desinstalar o pacote em questão, já a opção -P (Significa “Purge”) remove todos os arquivos relacionados ao pacote. É importante compreender como o dpkg lida com dependências nessas situações. Nestes dois casos de remoção de pacotes, caso você tente remover um pacote que possua dependências (Lembre-se que são outros pacotes que também estão instalados no sistema, e precisam deste para funcionar), o dpkg interromperá imediatamente a operação e emitirá um aviso sobre a anormalidade, e qual(is) é(são) o(s) pacote(s) dependente(s). tentar removê-los não costuma ser uma boa prática. Uma boa analogia para isso é o seguinte: Imagine que o seu sistema é um carro na estrada, em plenos 120Km/h, O pacote que está pretendendo remover é um pneu 50 PROGRAMA TÉCNICO CIDADÃO dianteiro..... Todo o resto do carro depende dele para se locomover, e para oferecer segurança aos ocupantes. DICAS Para compreender melhor, procure por pacotes que possuem dependências no sistema e tente removê-los. Analise os resultados. O Advanced Package Tool (APT) No início da era de “pacotes” nas distribuições Linux, só existia o dpkg do Debian, logo depois a RedHat criou o seu próprio gerenciador de pacotes. Mas faltava algo, pois o gerenciamento de pacotes não estava tão fácil assim... Problemas como as dependências e locais onde se encontrar os pacotes precisavam ser resolvidos manualmente. Estes e outros problemas foram solucionados com o Advanced Package Tool, vulgo APT daqui em diante. O APT é uma ferramenta criada por desenvolvedores do Debian para ser a ferramenta oficial de gerenciamento de pacotes, completando as funcionalidades do dpkg, que apesar de ser brilhante, não é fácil de se utilizar e tem os problemas já citados, que o APT soluciona. O APT na verdade é um programa que cuida de solucionar automaticamente as dependências na mesma hora da instalação do(s) pacote(s). O funcionamento é bem simples, devido ao fato do APT manter uma lista de repositórios de pacotes (estudados adiante), o resto ele faz com as informações contidas nos próprios pacotes mantendo-as em cache na máquina local. A mágica ocorre na seguinte situação: Imagine ter que instalar um determinado pacote chamado xyz, que depende dos pacotes abc e 123 para funcionar (malditas dependências...). O APT verifica tal situação, baixa os pacotes do(s) repositório(s) adequado(s), e os instala na ordem que satisfaça as dependências, até conseguir instalar o pacote xyz. Isso tudo pode ocorrer sob confirmação do usuário, de forma interativa. 51 PROGRAMA TÉCNICO CIDADÃO É importante afirmar que atualmente o APT não é uma ferramenta exclusiva do Debian, pois existem algumas versões de APT que foram portadas para outras distribuições Linux que utilizam o gerenciador de pacotes RPM. A brasileira Conectiva® foi a pioneira nesse sentido, criando o apt-rpm (Nome do projeto, apesar dos principais comandos serem praticamente idênticos). Repositórios de pacotes do Debian Para permitir que o APT funcione, é preciso que o sistema conheça ao menos um repositório de pacotes. Um repositório de pacotes dispensa muitas explicações, pois trata-se de uma fonte comum que contenha um ou mais pacotes (geralmente milhares...), o que pode ser um cdrom, um diretório em um servidor http ou ftp, etc. Os repositórios mais utilizados são os que ficam disponíveis pela web (ftp e http), pois isso facilita e muito o gerenciamento de pacotes. Basta, por exemplo, pedir ao apt para que instale determinado pacote que ele irá automaticamente buscá-lo no repositório adequado (graças ao cache de informações que ele mantém localmente), assim como todas as suas dependências. O arquivos /etc/apt/sources.list A lista de repositórios é armazenada no arquivo de configuração /etc/apt/sources.list. As entradas nesse arquivo seguem este padrão: deb http://site.http.org/debian distribuição seção1 seção2 seção3 deb-src http://site.http.org/debian distribuição seção1 seção2 seção3 A primeira palavra das linhas (“deb” e “deb-src”) indicam o tipo de repositório: se guarda pacotes binários (“deb”), ou seja, os pré-compilados que normalmente usamos ou se guarda pacotes fonte (“deb-src”), que contém o código-fonte original do programa mais o arquivo de controle Debian (“.dsc”) e o “diff.gz”, que contém as modificações efetuadas no pacotes que só existem no Debian, não no código-fonte original do programa. 52 PROGRAMA TÉCNICO CIDADÃO Segue um exemplo de um sources.list “real”: deb http://ftp.debian.org/debian/ stable main deb-src http://ftp.debian.org/debian/ stable main deb http://security.debian.org/ stable/updates main O segundo campo de cada linha configura o endereço do repositório (repare nos http://, são repositórios web); Em seguida, temos a versão da distribuição, que segue, basicamente 3 nomes: “stable” para a última distribuição estável, “testing” para a distribuição “intermediária”, que um dia será a “stable”, e unstable, que é a versão mais instável disponível. As distribuições são apenas “versões” disponíveis atualmente do Debian, sempre existem 3 (stable, testing e unstable). No momento em que desenvolvo este material, as versões stable, testing e unstable eram, respectivamente chamadas de: Woody (3.0), Sarge (3.1) e Sid (Esse não tem versão, e também nunca troca de nome, pois sempre contém os pacotes mais instáveis disponíveis). Os últimos campos são as seções (deve haver pelo menos um deles), que ajuda a dividir os pacotes em categorias. No exemplo, main é a categoria principal. Adicionando um cdrom no sources.list Para adicionar um cdrom que contenha pacotes debian já organizados na forma de repositórios (cdroms oficiais do debian, por exemplo), utilizamos o comando apt-cdrom. Sintaxe: apt-cdrom [opções] [comando] 53 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -h -d diretório -r -m -f -a Exibe a ajuda do programa Especifica o ponto de montagem do cdrom Renomeia um cdrom reconhecido previamente Não monta o cdrom Modo rápido. Não atualiza a lista de pacotes Modo Minucioso Os comandos podem ser “add”, para adicionar um cdrom ao sources.list, ou “ident”, para apenas identificar um cdrom na unidade. Exemplos: # apt-cdrom add # apt-cdrom -d /cdrom1 add # apt-cdrom ident Adicionando repositórios web no sources.list Para adicionar repositórios web (http ou ftp) no sources.list, basta adicionar linhas correspondentes para eles no arquivo. Mas para os repositórios oficiais, o Debian conta com um utilitário capaz de configurar corretamente o sources.list através de uma interface amigável. É o apt-setup. Basta digitar apt-setup no shell e seguir as instruções para selecionar o mirror mais apropriado. Utilizando o apt-get para gerenciar pacotes Após configurar o arquivo sources.list com os repositórios desejados, temos tudo preparado para utilizar a principal ferramenta do apt: o apt-get. 54 PROGRAMA TÉCNICO CIDADÃO Ele é o gerenciador de pacotes em si, pois cuida de atualizar a lista de pacotes disponíveis nos repositórios, instalar, atualizar, remover e verificar (entre outros) pacotes debian. Sintaxe: apt-get [opções] comando apt-get [opções] install|remove pacote1 [pacote2 ...] apt-get [opções] source pacote1 [pacote2 ...] Tabela de Opções -h -q -qq -d -s -y -m -u -b -c=arquivo -o=opção Exibe texto de ajuda Saída “logavel”, exceto para erros Nenhuma saída, somente erros Instrui o apt-get para apenas efetuar o download do(s) pacote(s). Os arquivos são baixados no diretório /var/cache/apt/archives Não executa “de verdade” nenhum comando, somente simula. Assume “Yes” como resposta para todas as perguntas e não pede confirmação Tenta continuar mesmo se os arquivos não puderem ser localizados. Mostra uma lista de pacotes atualizados Constrói um pacote-fonte após baixá-lo. Especifica um arquivo de configuração p/ o apt. Define uma opção arbitrária de configuração. 55 PROGRAMA TÉCNICO CIDADÃO Tabela de Comandos do apt-get update upgrade install remove source build-dep dist-upgrade clean autoclean Atualiza a lista de pacotes disponíveis Atualiza todos os pacotes desatualizados do sistema Instala novos pacotes no sistema. (indicar o(s) pacote(s), ex: apt-get install xpdf) Remove pacotes do sistema. Mesma sintaxe utilizada para instalar baixa o código fonte de pacotes Constrói a árvore de dependências compilação de um pacote necessária para permitir a O mesmo que “upgrade”, porém utiliza um mecanismo mais inteligente para lidar com dependências, categorizando as mais importantes. Apaga todos os arquivos de pacotes temporários (em / var/cache/apt/archives, basicamente). Faz o mesmo que “clean”, porém não apaga pacotes que porventura serão utilizados em breve (Um conjunto de dependências de um pacote, por exemplo.) Exemplo A: # apt-get update # apt-get upgrade Esses dois comandos irão, respectivamente, atualizar a lista de pacotes disponíveis nos repositórios listados no arquivo /etc/apt/sources.list e atualizar todos os que não estiverem atualizados. Da forma que o comando foi digitado, o apt irá pedir confirmação do usuário antes de prosseguir com a instalação de algum pacote, se houver. Exemplo B: # apt-get remove nvi # apt-get install vim Removemos o pseudo-vi que costuma vir com o Debian no lugar do vim, e em seguida instalamos o vim, que é o editor VIM “de verdade”. 56 PROGRAMA TÉCNICO CIDADÃO DICA Quando for remover um pacote com o apt-get e quiser remover todos os arquivos pertencentes aquele pacote, utilize a opção --purge, ficando assim: apt-get --purge remove pacote Programas auxiliares Existem alguns programas que completam o super-esquema de gerenciamento de pacotes do Debian. Esses programas geralmente adicionam funcionalidades e/ou facilitam outras ações de outros programas. Os principais são: aptitude Este fantástico gerenciador de pacotes é considerado um apt-get “turbinado”, pios sua sintaxe á praticamente a mesma, além de adicionar outras características únicas, como uma interface amigável para o gerenciamento de pacotes. Para utilizá-lo, instale da seguinte forma: # apt-get install aptitude Após instalado, já podemos contar com o comando aptitude, que aceita os comandos como install, update e upgrade do apt-get, ou abre a interface “gráfica” de gerenciamento se digitarmos aptitude sem nenhum parâmetro. O aptitude é notavelmente mais inteligente que o apt-get. Um exemplo é como ele lida com pacotes obsoletos do sistema (órfãos). Imagine que você instalou o pacote xyz, que de quebra trouxe os pacote abc e 123 como dependências. Só que se removermos o pacote xyz com o apt-get, os pacotes que só serviram de dependência para ele (o abc e o 123) ficarão ocupando espaço no sistema, sem oferecer mais nenhuma dependência para nenhum outro pacote. Já o 57 PROGRAMA TÉCNICO CIDADÃO aptitude é capaz de desinstalar automaticamente esses pacotes ao removermos o “pacote-pai” xyz. O modo “gráfico” do aptitude inicialmente pode parecer confuso, mas logo pegamos a manha. Para atualizar a lista de pacotes (tal como um aptitude update), pressione [U]. Utilize as setas do teclado para navegar pela lista de pacotes categorizada. A tecla [+] marca o pacote para instalação/atualização, a tecla [-] remove. As teclas do teclado numérico não costumam funcionar bem nesses casos. A tecla [G] avança na seleção (Após selecionar os pacotes necessários, por exemplo, vai para a tela de confirmação de instalação) e a tecla [Q] retrocede, e se pressionada na tela inicial do programa, sai dele. apt-show-versions Este é um programa simples, porém direto e funcional. Sua principal função é mostrar as versões dos pacotes disponíveis, mas é amplamente utilizado para mostrar quais pacotes estão pendentes de atualização atualmente no sistema. Ele faz isso comparando as versões dos pacotes instalados com as versões dos pacotes na lista dos repositórios. Instale-o com o comando: # apt-get install apt-show-versions Depois utilize-o com a opção “-u” para descobrir quais pacotes estão desatualizados no sistema: # apt-show-versions -u apt-cache Utilitário da família apt. Serve para buscar informações na lista de pacotes dos repositórios. Ele é muito utilizado para procurar por pacotes cujo nome ou descrição contenha determinada palavra (Útil para encontrar um pacote que lide com determinada funcionalidade) e para exibir 58 PROGRAMA TÉCNICO CIDADÃO informações sobre pacotes que ainda não estejam instalados no sistema, mostrando seu respectivo arquivo de controle. Sintaxe: apt-cache comando pacote [pacote...] Tabela de comandos do apt-cache gencaches showpkg showsrc stats dump dumpavail unmet search show depends pkgnames policy Gera os caches de informações. Mostra informações gerais do pacote Mostra registros fontes Mostra estatísticas básicas Mostra o arquivo inteiro de forma concisa Mostra arquivo de disponíveis Mostra dependências não satisfeitas Procura por pacotes que casem com algum padrão Mostra informações sobre determinado pacote Mostra as dependências de determinado pacote Mostra nomes dos pacotes Mostra configurações de políticas Exemplos: # apt-cache search xpdf # apt-cache show xpdf-utils # apt-cache depends xpdf-utils EXERCÍCIO PROPOSTO: Verifique com o comando dpkg quais desses pacotes não estão instalados e instale os que faltarem: less, discover, read-edid, locales, console-data e mdetect. Verifique também na descrição dos pacotes para que eles servem. 59 PROGRAMA TÉCNICO CIDADÃO O gerenciador de pacotes RedHat (RPM) O RPM é um gerenciador de pacotes criado pela RedHat (Inclusive leva seu nome) e é o gerenciador de pacotes mais amplamente aceito entre as distribuições Linux. As chamadas distribuições “RedHat Like” (como Conectiva, Mandrake, TurboLinux e Suse) são principalmente conhecidas assim porque levam consigo o gerenciador de pacotes RPM. Portanto, conhecer o gerenciador de pacotes RPM automaticamente qualifica o administrador a estar gerenciando softwares em todas essas distribuições que utilizem RPM como o Gerenciador de Pacotes padrão. Mas o RPM não está disponível somente para estas distribuições. Existem distribuições (Debian por exemplo) que por padrão utilizam outro gerenciador de pacotes, mas também podem utilizar o RPM “em segundo plano”. Mas isso não é uma boa prática, pois existirá mais de uma base de dados contendo a lista dos softwares instalados no sistemas isso é péssimo para a administração (Seria como ter conta-corrente em dois bancos). O formato do “nome” de um arquivo RPM segue o padrão: foobar-1.0-1.i386.rpm Onde fica dividido em 4 partes. A primeira parte (foobar) é o nome do pacote (Não confunda com o nome do arquivo!); A segunda (1.0-1) é a versão do pacote; A terceira (i386) representa a arquitetura para qual aquele pacote foi compilado. Alguns pacotes vem com a arquitetura “all”, que é compatível com qualquer arquitetura; A quarta parte é a extensão do arquivo (.rpm). O RPM é relativamente simples de gerenciar. Suas funções básicas são: instalação, desinstalação, atualização e consulta de pacotes. Gerenciamos esses modos através do comando rpm. Sintaxe: rpm -opções [pacote] [pacote...] 60 PROGRAMA TÉCNICO CIDADÃO Consulta de pacotes RPM O modo de consulta do permite fazermos consultas sobre os pacotes instalados no sistema (através da base de dados mantida pelo RPM) ou sobre pacotes que ainda não estão instalados no sistema, consultando diretamente o “arquivo” do pacote. Tabela de Parâmetros Opção obrigatória no modo de consulta. Diz ao rpm que estamos efetuando uma consulta. Todas as outra opções abaixo funcionam em conjunto com essa opção. -qa pacote Refere-se a todos os pacotes instalados. -qc pacote Mostra os arquivos de configuração contidos no(s) pacote(s). -qd pacote Mostra os arquivos de documentação contidos no(s) pacote(s). -ql pacote Lista todos os arquivos contidos no(s) pacote(s). -qlv pacote Mostra mais informações sobre os arquivos contidos nos pacotes. -qi pacote Mostra um cabeçalho de informações sobre o(s) pacote(s) -qf arquivo Verifica qual é o pacote que provê determinado arquivo ao sistema. -qip Diz ao RPM para efetuar a busca diretamente no arquivo RPM e não na arquivo.rpm base de dados do RPM. Funciona também com as opções -c, -d e -l. --whatrequires Mostra qual(is) pacote(s) requer alguma dependência. --whatprovides Mostra qual(is) pacote(s) provê alguma dependência. -q pacote Exemplo A: # rpm -qa mailcap-2.1.9-2 filesystem-2.1.6-2 bzip2-libs-1.0.2-2 ... O exemplo mostra como listar todos os pacotes instalados no sistema. A saída do exemplo foi suprimida por ser muito grande. Repare que o formato da saída é similar ao formato do nome do pacote rpm, porém mostra somente os 2 primeiros campos (Nome do pacote e versão). Exemplo B: 61 PROGRAMA TÉCNICO CIDADÃO # rpm -q kernel kernel-2.4.18-3 Como podem ver, é possível direcionar a consulta para um pacote específico, para isso, basta especificar seu nome na consulta. (A opção -a não é necessária aqui). ATENÇÃO Uma consulta como essa diz que o pacote não está instalado mesmo que o pacote não exista, levando a conclusões erradas sobre a existências de tal pacote. Portanto, um nome de pacote qualquer que o rpm diga não estar instalado não significa que ele exista em algum lugar. Encare a resposta como “Não encontrado na base de dados interna do RPM”. Exemplo C: # rpm -qa "vim-*" vim-common-6.1-2 vim-enhanced-6.1-2 vim-minimal-6.1-2 Podemos efetuar pesquisas utilizando curingas. Nesse caso, lembre-se sempre de enquadrar os argumentos de pesquisa entre aspas duplas. Exemplo D: # rpm -qi kernel Name : kernel Relocations: (not relocateable) Version : 2.4.18 Vendor: Red Hat, Inc. Release :3 Build Date: Qui 18 Abr 2002 09:03:07 GMT+3 Install date: Sex 26 Abr 2002 06:28:03 GMT+3 Build Host: porky.devel.redhat.com Group : System Environment/Kernel Source RPM: kernel-2.4.18-3.src.rpm Size : 30243536 License: GPL Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> Summary : The Linux kernel (the core of the Linux operating system) Description : The kernel package contains the Linux kernel (vmlinuz), the core of your 62 PROGRAMA TÉCNICO CIDADÃO Red Hat Linux operating system. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc. Utilizamos o argumento -i para mostrar mais informações sobre o pacote “kernel”. Da mesma forma, os parâmetros -c, -d, -v e -l são utilizados para listar os arquivos contidos no pacote (Vide tabela de parâmetros anterior). Instalação, desinstalação e atualização de pacotes RPM Com alguns comandos simples podemos instalar, desinstalar e atualizar pacotes no sistema utilizando o rpm. Antes de instalar um pacote rpm, precisamos “obter” o pacote rpm, baixando da internet, copiando de algum cd, disquete, rede, etc. Consulte seu instrutor sobre como conseguir algum pacote para esta aula. Na apostila, partiremos do princípio de que já existe um pacote rpm chamado zebra no diretório atual (zebra-0.92a-3.i386.rpm), mas os exemplos podem ser seguidos para outros pacotes. 63 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros Instala determinado pacote no sistema. Caso ele já esteja instalado, o sistema emitirá um alerta. -U arquivo.rpm Atualiza a versão de um pacote cuja versão antiga já esteja instalada no sistema, ou instala o pacote caso nenhuma versão anterior esteja instalada. --oldpackage Utilizado em conjunto com o -U. Diz ao rpm para substituir o pacote por uma versão mais antiga. --force Força alguma operação que o rpm não esteja permitindo. -e pacote Remove um pacote do sistema. -h Mostra andamento da instalação do(s) pacote(s). Necessita da opção -i. -i arquivo.rpm -v --nodeps Mostra mais informações na saída do comando. (O(s) nome(s) do(s) pacote(s) durante uma instalação, por exemplo) Diz ao RPM para ignorar as dependências (Perigoso !!!). Seria como tentar trocar o pneu de um carro em movimento. Instalação/Atualização Com os dados da tabela acima, podemos concluir que é possível instalar pacotes de duas formas. Com o parâmetro -i ou com o parâmetro -U. Como o parâmetro -U (que serve para atualização) também faz instalação, utilizaremos ele no exemplo, e recomendamos que seja utilizado no dia-a-dia. Outros parâmetros bem-vindos para a instalação são o -h e o -v, que adicionarão mais “verbosidade” a nossa instalação. Exemplo: # rpm -q zebra o pacote zebra não está instalado # rpm -Uvh zebra-0.92a-3.i386.rpm A preparar... ####################################### [100%] 1:zebra ####################################### [100%] # rpm -q zebra zebra-0.92a-3 64 PROGRAMA TÉCNICO CIDADÃO Geralmente é dessa forma que instalamos pacotes rpm no sistema. O mesmo exemplo serviria para atualização caso já existisse um pacote zebra de uma versão inferior instalado. Desinstalação Desinstalar pacotes rpm é ainda mais simples do que instalá-los. basta Utilizar a opção -e seguida do “nome do pacote”. Exemplo: # rpm -q zebra zebra-0.92a-3 # rpm -e zebra # rpm -q zebra erro: o pacote zebra não está instalado 65 PROGRAMA TÉCNICO CIDADÃO ESTRUTURA DE DIRETÓRIOS Hierarquia O Linux tem como principais elementos estruturais arquivos e diretórios, onde arquivos guardam informações e diretórios são os compartimentos que podem conter arquivos e/ou subdiretórios. Estes arquivos e diretórios estão organizados numa estrutura hierárquica na forma de uma árvore invertida, ou seja, possui estrutura hierárquica porque alguns elementos têm ascendência sobre outros. A forma da estrutura de árvore invertida, que assim se chama porque o elemento no topo é raiz, de onde saem o “tronco” e os “galhos” que atingem os demais elementos. De cada diretório partem outros “galhos” que podem atingir os demais elementos. Os nomes de arquivos e diretórios devem ser usados lembrando-se que o Linux é case sensitive, ou seja, diferencia maiúsculas de minúsculas. O diretório no topo da hierarquia é o diretório raiz que é representado por “/”. Aqueles diretórios logo abaixo deles são seus filhos; estes filhos, por sua vez, podem ter outros diretórios filhos e também arquivos. Sempre que um diretório contiver um segundo diretório que vem logo abaixo dele na hierarquia diz-se que este segundo diretório é um subdiretório. Caminho Absoluto Para localizar, de maneira absoluta, um elemento qualquer no sistema de arquivos, deve-se exprimir o seu caminho absoluto, ou seja, seu caminho completo. O caminho absoluto localiza, de maneira inequívoca, um arquivo ou diretório no sistema de arquivos. 66 PROGRAMA TÉCNICO CIDADÃO Exemplo de caminho absoluto: /usr/local/bin Caminho Relativo É possível utilizar caminhos relativos para localizarmos arquivos ou diretórios. O caminho é relativo ao nosso diretório corrente (ou seja, a partir de diretórios diferentes, podemos chegar a lugares diferentes usando um mesmo caminho relativo). Exemplo de caminho relativo: ../spool/mail Podemos utilizar os comandos pwd, ls e cd para auxiliar-nos com a localização na estrutura de diretórios, conforme vemos a seguir. Localização na Estrutura de Diretórios A seguir estudaremos alguns comandos que são essenciais para a nossa localização na estrutura de diretórios. pwd Este comando vai mostrar na tela o seu diretório corrente, ou seja, em que diretório você está no momento. Sempre que um comando necessitar de um nome de arquivo, caso não especifiquemos seu caminho, o comando assumirá que estamos nos referindo a arquivos do nosso diretório corrente. Sintaxe: pwd Exemplo: # pwd /root 67 PROGRAMA TÉCNICO CIDADÃO O comando acima mostra que o diretório atual é “/root”. ls Exibe o conteúdo do diretório ou informações sobre um arquivo. Tabela de Parâmetros Mostra o conteúdo e as informações dos arquivos do diretório corrente de maneira detalhada. -a Mostra o conteúdo do diretório corrente, incluindo os arquivos ocultos (Que iniciam com “.”). -F Adiciona Indicadores. -G Oculta a coluna de grupo dono do arquivo. (Só funciona junto com a opção -l) -h Mostra o tamanho dos arquivos de forma legível para “humanos” (humanreadable). -n Mostra Identificação de Usuários (UID's) e grupos (GID's) ao invés de nomes. -o Listagem longa sem o grupo dono dos arquivos (o mesmo que -lG). -R Lista diretórios e sub-diretórios recursivamente. --full-time Lista datas e horas no formato completo. --color Ativa exibição colorida de arquivos para ajudar na identificação dos mesmos. Por padrão, azul=diretório, verde=executável, azul-claro=link simbólico, vermelho=arquivo compactado, etc. -r Inverte a ordem de classificação. -c Classifica por data de alteração. -X Classifica pela extensão. -l Sintaxe: ls [parâmetro] <arquivo> Exemplo: [root@host root] # ls diversos 68 PROGRAMA TÉCNICO CIDADÃO evolution latex listamp3 material projetolc teste tlm-4.doc.gz.doc O comando acima simplesmente mostra o conteúdo (arquivos) do diretório corrente. É possível mostrar o conteúdo de um ou vários diretórios ao mesmo tempo, basta acrescentar o caminho do(s) diretório(s) a frente do comando, conforme abaixo: # ls /mnt /tmp mnt/: cdrom floppy tmp/: DOCUMENTO cd Significa “Change Directory” (troca de diretório), este comando é usado para trocar de diretório corrente. Sintaxe: cd diretorio Exemplo A: # cd /var/tmp Sai do diretório atual e vai para /var/tmp. Exemplo B: 69 PROGRAMA TÉCNICO CIDADÃO # cd ../ Sai do diretório atual (/var/tmp) e vai para o diretório /var, que fica um diretório acima (antes) do atual. Isso é possível graças a duas entradas especiais que existem em todos os diretórios: “.” e “..”. A entrada “.” refere-se ao próprio diretório, já a entrada “..” refere-se ao diretório logo “acima” do atual, exatamente como no MS-DOS. Exemplo C: # /etc/init.d/networking restart Reconfiguring network interfaces...done. # cd /etc/init.d # ls -l networking -rwxr-xr-x 1 root root 2607 Jun 13 2004 networking # ./networking restart Reconfiguring network interfaces...done. Esse exemplo mostra como executar um comando que esteja no diretório /etc/init.d de duas formas. A primeira utiliza o caminho absoluto (/etc/init.d/networking), o segundo utiliza o caminho relativo (./networking). Ambos levam ao mesmo resultado. Outro caminho relativo especial na estrutura de diretórios é o “~”; Ele refere-se ao diretório HOME do usuário atualmente logado no sistema. Observe o seguinte exemplo, levando em consideração que o diretório home do usuário root é a pasta /root: Exemplo D: # pwd /tmp # cd ~ # pwd /root Outro caminho especial utilizado com freqüência é o “-”. Ele leva de volta para o último diretório visitado. Veja o exemplo. 70 PROGRAMA TÉCNICO CIDADÃO Exemplo E: # pwd /tmp # cd /usr/local # pwd /usr/local # cd # pwd /tmp $PATH A variável $PATH armazena o caminho dos arquivos executáveis, ou seja, diretórios que contém comandos e scripts no sistema. O seguinte comando mostra o conteúdo da variável $PATH. # echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11 Nesse exemplo, existem 7 diretórios do sistema cadastrados na variável $PATH (separados por “:”). Quando um comando qualquer é digitado sem o caminho absoluto (o comando ls, por exemplo), o sistema procura o arquivo ls dentro do diretório /usr/local/sbin, e caso não encontre, continua a busca no diretório /usr/local/bin... seguindo assim até chegar no último diretório (/usr/bin/X11), se não encontrar nesse o sistema avisa que o comando não pode ser localizado. O caminho dos diretórios que contém executáveis costumam já vir configurados após a instalação do Linux (verifique a variável $PATH). Caso seja necessário alterar o conteúdo dessa variável, é recomendável fazer isso editando o campo correspondente no arquivo /etc/profile, que é lido por todos os usuários no sistema no momento do Login. Se quiser alterar somente para um usuário específico, adicione a entrada correspondente no arquivo ~/.bashrc do(s) usuário(s) em questão. Esses e outros arquivos relacionados a configuração do shell bash serão estudados mais a fundo ainda neste treinamento. 71 PROGRAMA TÉCNICO CIDADÃO DICA Para exibir o conteúdo de uma variável no console, execute o comando echo $NOME_DA_VARIAVEL, lembrando que o nome da variável faz distinção entre maiúsculas e minúsculas. Tente um echo $PATH. Histórico de Comandos Você pode executar comandos já digitados pressionando as teclas [Seta para cima] e [Seta para baixo]. Devemos isso ao histórico de comandos, pois conforme digitamos comandos no bash, ele os armazena no chamado “histórico de comandos”, que fica em memória enquanto utilizamos o console, e quando terminamos a sessão normalmente (logout), o bash salva esse histórico no arquivo ~/.bash_history. Para fazer isso manualmente, utilizamos o comando: # history -w ~/.bash_history No próximo login, o bash carrega o arquivo ~/.bash_history para a memória, restaurando o último histórico salvo. O procedimento manual para fazer isso seria: # history -r ~/.bash_history O bash limita o tamanho máximo de comandos que podem ficar no histórico de comandos através da variável de ambiente $HISTSIZE. Tabela de Parâmetros -w -r -c Grava o histórico em um arquivo especificado. Lê o histórico a partir de um arquivo previamente salvo. Limpa o histórico da memória (mas não apaga o ~/.bash_history). Exemplo A: # history ... 530 echo PATH 531 echo $PATH 532 cd ~ 72 PROGRAMA TÉCNICO CIDADÃO 533 534 535 536 537 ls -lA ls -la vi .bashrc vi /etc/profile history O comando history, quando chamado sem argumentos, mostra todas as entradas no histórico. Exemplo B: # history 10 531 echo $PATH 532 cd ~ 533 ls -lA 534 ls -la 535 vi .bashrc 536 vi /etc/profile 537 history 538 history |head 539 history -10 540 history 10 Nesse caso, ele mostra os últimos 10 comandos no histórico. Repare que cada comando no histórico possui um identificador numérico. Podemos utilizar desse identificador para executar novamente o comando em questão. Por exemplo, digamos que seja preciso repetir o comando “echo $PATH” (Número 531 no histórico): Exemplo C: # !531 echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11 Outros comandos como esse podem ser verificados na tabela abaixo: 73 PROGRAMA TÉCNICO CIDADÃO Expansões para o Histórico de Comandos !n !! !-n !exemplo Refere-se a entrada n do histórico. Repete o último comando digitado. Refere-se ao comando atual “menos” n no histórico. Repete o último comando digitado que comece com “exemplo” DICAS MAIS É possível fazer uma pesquisa reversa no histórico de comandos com a seqüência de teclas [CONTROL]+[R]. Nesse modo, basta começar a digitar um comando desejado que o bash preenche com o mais provável conforme digita-se. Teclas de Atalho A tela do console em modo texto pode ser rolada para cima utilizando [SHIFT]+[PAGE UP], ou [SHIFT]+[PAGE DOWN] para rolar a tela para baixo (a tela já deve ter sido rolada p/ cima nesse momento). Isto é útil para visualizar saídas de comandos que ocupam mais de uma tela no console (O Linux tem bastante deles... ). Outra forma de navegar através dos comandos no histórico é com a ajuda de teclas como [SETA P/ CIMA] (volta recursivamente os comandos do histórico, um por um), e [SETA P/ BAIXO] (avança através dos comandos no histórico). As setas são muito utilizadas no dia-a-dia de um administrador de sistemas Linux, pois se tornam muito necessárias conforme digitamos comandos. 74 PROGRAMA TÉCNICO CIDADÃO Tecla [TAB] A tecla [TAB] nos permite completar nomes de arquivos, diretórios, executáveis no $PATH, etc. Exemplo A: # ls /u[TAB]/sh[TAB]/do[TAB] No exemplo, acionamos o comando ls /usr/share/doc utilizando a tecla tab 3 vezes para completar o caminho. Exemplo B: # ifco[TAB] O exemplo acima completa o comando ifconfig logo após digitarmos “ifco” (somente as 4 primeiras letras) seguido da tecla [TAB]. Filesystem Hierarchy Standard O Linux usa um padrão para a estrutura de diretórios, denominado FHS (Filesystem Hierarchy Standard), que visa padronizar o nome e a localização de diretórios e arquivos principais do sistema. Esse padrão tem algumas características muito importantes, como a compatibilidade com outros sistemas e a habilidade na montagem de algumas partições no modo somente de leitura. Quando uma distribuição Linux segue a risca os padrões da FHS, ela está homologada nos padrões FHS, o que proporciona um alto nível de compatibilidade entre aplicativos criados inclusive para outras distribuições, desde que esses aplicativos também sigam o padrão da FHS. Um sistema FHS divide os diretórios em 2 categorias principais: 1) Compartilháveis e Não Compartilháveis: 75 PROGRAMA TÉCNICO CIDADÃO A distinção entre dados Compartilháveis e Não-Compartilháveis é necessária pelos seguintes motivos: A) Em um ambiente de rede com várias máquinas, é uma muito útil poder compartilhar dados entre diferentes hosts para economizar espaço em disco e facilitar as tarefas de manutenção; B) em um mesmo ambiente, certos arquivos contém informações específicas para cada host, portanto, esses dados não podem ser compartilhados para os outros micros da rede; 2) Variáveis e Estáticos. Já a distinção entre os dados Variáveis e Estáticos se torna necessária pelos motivos: A) Devido ao diretório / (raiz) conter tanto dados variáveis quanto estáticos, alguns dados nele contidos precisam ter permissões de leitura e escrita; B) Existem diretórios que recebem modificações constantemente (variáveis), como o /var por exemplo. A correlação entre esses tipos de diretórios forma a FHS, como mostrado na tabela abaixo: Estáticos Variáveis Compartilháveis Não-Compartilháveis /usr /etc /opt /boot /var/mail /var/run /var/spool/news /var/lock Os diretórios contemplados pela FHS são: /bin Contém os comandos que podem ser usados pelo administrador de sistema e pelos usuários, isso o torna necessário durante uma tarefa de manutenção do sistema, e portanto não pode 76 PROGRAMA TÉCNICO CIDADÃO ficar em uma partição separada da partição que contém o / (raiz). Scripts de Inicialização também fazem uso desses comandos aqui presentes, como por exemplo: cat Utilizado para mostrar arquivos na saída padrão. chmod Utilizado para alterar permissões de arquivos e diretórios. chown Utilizado para modificar dono/grupo de arquivos e diretórios. cp Utilizado para copiar arquivos e diretórios. ls Utilizado para listar conteúdo de diretórios e informações sobre arquivos. /boot Este diretório contém arquivos importantes para a Inicialização e carregamento do kernel. É neste diretório que se encontra o Kernel. Também é nesse diretório que ficam localizados os arquivos do Gerenciador de Boot (bootloader). /dev Contém os arquivos de dispositivos suportados pelo Linux, como floppy disk, cdrom, unidades de disco, mouse, portas paralelas e serias, etc... Conforme visto anteriormente, tudo no linux é tido como arquivo, e isso inclui os dispositivos do sistema, como hds, modems, portas, etc. Isso é possível pois o kernel conta com esses “Arquivos Especiais” que ficam no diretório /dev. Esses arquivos especiais podem ser de dois tipos: Dispositivos de Bloco e Dispositivos de Caractere. A diferença entre esses dois tipos de dispositivos é que os dispositivos de bloco são dispositivos geralmente associados “armazenamento de dados” (blocos de dados), pois tratam os dados em formato binário próprio para armazenagem e leitura posterior. Assim, os dados enviados a esses dispositivos são armazenados em dispositivos de armazenamento, como discos-rígidos e 77 PROGRAMA TÉCNICO CIDADÃO disquetes, possibilitando posterior leitura desses dispositivos. Já os dispositivos de caractere tratam o fluxo de dados em um formato de caracteres texto. O próprio terminal texto, por exemplo, utiliza um dispositivo de caractere para interfacear com o kernel. Exemplos de Dispositivos /dev/hda Bloco /dev/fd0 /dev/sdd11 /dev/tty1 Caractere /dev/ttyS0 /dev/zero Portas Seriais e Paralelas No linux, as portas seriais e paralelas tem uma nomenclatura diferente do MSDOS®. Essas diferenças são mostradas na tabela abaixo: DOS LINUX COM1 /dev/ttyS0 COM2 /dev/ttyS1 LPT1 /dev/lp0 LPT2 /dev/lp1 /etc Contém os arquivos e os diretórios de configuração que são específicos ao sistema atual. É nesse diretório que passaremos a maior parte do curso. 78 PROGRAMA TÉCNICO CIDADÃO /home Contém os diretórios de trabalho de todos os usuários do sistema. Neste diretório ficam informações como personalização de desktop, configuração de clientes de e-mail, etc... O propósito principal dessa estrutura é facilitar as tarefas de backup, por exemplo. /root Este é diretório home do administrador de sistema (Usuário root). Segundo a FHS, o root é o único usuário interagível com o sistema (que digita comandos nele) que deve ter seu diretório de trabalho fora da pasta /home. Isso torna possível que o usuário root acesse seus arquivos durante uma tarefa de manutenção no sistema, onde o sistema “deve” ser capaz de funcionar somente com a partição raiz acessível (montada). /lib Contêm as biblioteca compartilhadas necessárias ao carregar o sistema e para executar os comandos localizados na raiz do sistema de arquivos. Os módulos do Kernel também se localizam neste diretório, mais especificamente em /lib/modules/<versão do kernel>/. /mnt Este diretório é fornecido de modo que o administrador de sistema possa temporariamente montar um disquete, cdrom, ou sistema de arquivos quando necessário. Algumas distribuições Linux como a RedHat, Mandrake e Conectiva criam os subdiretórios floppy e cdrom aqui dentro para servir como ponto de montagem para esses tipos de mídias. Outras distribuições como o Debian e Knoppix criam esses diretórios (cdrom e floppy) diretamente na raiz, e os utilizam como padrão para servir como ponto de montagem à essas mídias. 79 PROGRAMA TÉCNICO CIDADÃO /opt É reservado para a instalação de pacotes que estão fora da distribuição utilizada. Estes pacotes fornecidos por terceiros devem ser instalados em diretórios separados. Ex.: / opt/pacote – onde o pacote deve descrever o nome do software a ser instalado. /sbin Contém os binários essenciais para o inicialização, na recuperação e restauração do sistema. Estes binários são usados pelo próprio sistema ou pelo administrador(root). /tmp O diretório tmp é utilizado por alguns programas que requerem arquivos temporários. Recomenda-se que ao inicializar o sistema os arquivos contidos neste diretório sejam apagados. Distribuições como o Debian fazem isso automaticamente. /usr O diretório /usr é a segunda maior seção do sistema de arquivos, nele estão os dados compartilháveis apenas para leitura. Isso significa que não se deve gravar nada “manualmente” neste diretório, toda a informação que for gerada com o tempo deve ser armazenada em outra parte (existem os diretórios apropriados para isso). Encontram-se neste diretório o gerenciador de janelas X, programas de usuários, jogos, etc... Os subdiretórios mais importantes dentro da estrutura /usr são:: bin Binários não inerentes ao sistema. 80 PROGRAMA TÉCNICO CIDADÃO include Arquivos de cabeçalho incluídos por programas em C. lib Bibliotecas do sistema. local Arquivos Não-compartilháveis (Sim, /usr é compartilhável, mas / usr/local não é). sbin Binários Inerentes ao sistema. share Dados compartilháveis entre os programas. DICAS MAIS Repare que a maioria desses diretórios dentro de /usr também existem na raiz do sistema. A diferença entre eles é que os que ficam na raiz contém dados que não podem ser compartilhados pela rede, já os que ficam em /usr sim. /var Contém arquivos de dados de variáveis. Isto inclui diretórios e arquivos de spool, dados administrativos e logs do sistema. Devido a provável grande quantidade de dados e acessos que esse diretório receberá, uma boa prática do administrador é alocar uma partição em um disco separado para receber o diretório / var. Isso garante mais velocidade (menos acessos no mesmo disco que contém o sistema) e facilita as tarefas de backup. /proc O diretório /proc é ligeiramente diferente dos diretórios comuns, pois os dados nele contidos não estão fisicamente em nenhum disco rígido do sistema, mas sim na memória ram. Trata-se de um sistema de arquivos virtual que é criado e gerenciado pelo Kernel em tempo real, e é a forma mais direta que o usuário tem de interagir com o kernel. 81 PROGRAMA TÉCNICO CIDADÃO Os arquivos nele contidos contém basicamente valores de variáveis do kernel. Acompanhe os exemplos: Exemplo A: # cat /proc/cpuinfo processor :0 vendor_id : AuthenticAMD cpu family :6 model :4 model name : AMD Athlon(tm) processor stepping :2 cpu MHz : 950.066 cache size : 256 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level :1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr syscall mmxext 3dnowext 3dnow bogomips : 1893.99 Repare que foi mostrado o conteúdo do arquivo /proc/cpuinfo com o comando cat, e que nesse arquivo estão contidas informações sobre o processador em uso na máquina. O /proc está repleto de arquivos como esses, a existência ou não da maioria deles depende de opções específicas da versão do kernel em uso no sistema. Os arquivos que costumam existir em sistemas atuais com kernel's 2.4 e 2.6 e nos trazem informações importantes, como na tabela a seguir: /proc/cpuinfo Informações sobre a(s) CPU(s) do sistema. /proc/meminfo Informações sobre a memória do sistema. 82 PROGRAMA TÉCNICO CIDADÃO /proc/pci Mostra Informações sobre os dispositivos conectados ao barramento PCI da placa mãe. (Obs.: esse arquivo mostra “todos” os dispositivos que estão interconectados no barramento PCI, não somente as placas plugadas nos slots PCI da placa mãe. A maioria dos dispositivos on-board, como placas de som, usb e modem, aparecem na listagem). A saída desse comando é semelhante ao comando: lspci -v /proc/interrupts Mostra quais dispositivos estão Interrupções do Sistema (IRQs). /proc/ioports Mostra quais portas de entrada e saída (Portas de IO) os dispositivos estão utilizando. /proc/cmdline Mostra a linha de parâmetros que foi passada ao kernel durante a inicialização. /proc/kcore Esse arquivo é exatamente o conteúdo da memória ram em binário, portanto, não é um arquivo legível por nós humanos. utilizando as respectivas Além desses, o diretório /proc contém alguns subdiretórios com funções especiais, começando por diretórios “numéricos” que contém informações sobre os processos rodando na máquina. O diretório /proc/sys contém uma hierarquia de arquivos e diretórios que servem para interagirmos diretamente com o kernel. Geralmente esses arquivos contém um valor de lógica boleano (verdadeiro/falso), valendo 0 (falso) ou 1(verdadeiro). Alguns desses arquivos contém strings que são valores de variáveis passadas diretamente ao kernel. A modificação desses arquivos repercute imediatamente. Exemplo A: # cat /proc/sys/net/ipv4/ip_forward 0 # echo 1 > /proc/sys/net/ipv4/ip_forward # cat /proc/sys/net/ipv4/ip_forward 1 Nesse exemplo, primeiro foi mostrado o conteúdo do arquivo /proc/sys/net/ipv4/ip_forward, que retornou 0 (desabilitado). Esse arquivo habilita/desabilita a repassagem de pacotes ip no 83 PROGRAMA TÉCNICO CIDADÃO kernel, e vem desabilitado por padrão. No próximo comando, o conteúdo do arquivo foi substituído pelo valor 1, o que instantaneamente ativa a repassagem de pacotes ip no kernel. Todas as alterações feitas dessa forma na estrutura do /proc serão perdidas na próxima reinicialização. Para salvá-las, devemos adicionar as entradas no arquivo /etc/sysctl.conf. Para salvar a modificação feita no exemplo acima, adicionaríamos a seguinte linha no arquivo / etc/sysctl.conf (verifique se a linha já não existe): net/ipv4/ip_forward=1 O comando sysctl -p confirma a alteração. 84 PROGRAMA TÉCNICO CIDADÃO MANIPULAÇÃO DE ARQUIVOS E DIRETÓRIOS A seguir veremos alguns comandos utilizados para manipular arquivos e diretórios, tarefa comum no dia-a-dia de um administrador de sistemas Linux. mkdir Utilizamos o comando mkdir com a única finalidade de criar diretórios no sistema. Um diretório nada mais é do que um arquivo especial contendo a lista de outros diretórios e arquivos nele contidos. Ele pode ser entendido como uma pasta onde você guarda seus papéis (arquivos). Como uma pessoa organizada, você utilizará uma pasta para guardar cada tipo de documento, da mesma forma você pode criar um diretório vendas para guardar seus arquivos relacionados com vendas naquele local. Sintaxe: mkdir [parâmetro] <diretorio> [<outro diretorio>] [...] Exemplo A: # mkdir dir1 Cria um diretório chamado dir1 dentro do diretório atual. Exemplo B: # pwd /root # mkdir dir2 # mkdir dir2/gama/beta mkdir: cannot create directory `dir2/gama/beta/teste': No such file or directory # mkdir -p dir2/gama/beta/teste # ls dir2/gama/beta/ teste 85 PROGRAMA TÉCNICO CIDADÃO Primeiro criamos o diretório dir2 dentro da pasta atual (/root). Em seguida tentamos criar o diretório dir2/gama/beta, sem sucesso, pois o mkdir por padrão só cria um diretório se o anterior já existir. Para mudar esse comportamento, utilizamos a opção -p (parentes), que cria os diretórios pais caso eles não existam. DICA Podem ser criados mais de um diretório com um único comando. Exemplo: mkdir /tmp/teste /tmp/teste2 /tmp/teste3 tree Exibe a árvore de diretórios e seu conteúdo em um formato hierárquico. É um comando simplório, porém de grande ajuda. Não possui argumentos Sintaxe: tree [opções] <diretório> Tabela de Parâmetros -a -d -f -i -C -p -u -g Lista todos os arquivos, inclusive ocultos. Lista somente diretórios. Mostra caminho completo dos diretórios e arquivos. Desabilita a Indentação. Habilita saída colorida. Mostra permissões dos arquivos/diretórios. Mostra usuário dono dos arquivos/diretórios. Mostra grupo dono dos arquivos/diretórios. Exemplo: 86 PROGRAMA TÉCNICO CIDADÃO # tree -f . |-- ./Desktop | `-- ./Desktop/starthere.desktop |-- ./dead.letter |-- ./dir2 | `-- ./dir2/gama | `-- ./dir2/gama/beta | `-- ./dir2/gama/beta/teste |-- ./fedora2 | |-- ./fedora2/disc1 | | `-- ./fedora2/disc1/FC2-i386-disc1.iso | |-- ./fedora2/disc2 | | `-- ./fedora2/disc2/FC2-i386-disc2.iso | |-- ./fedora2/disc3 | | `-- ./fedora2/disc3/FC2-i386-disc3.iso | `-- ./fedora2/disc4 | `-- ./fedora2/disc4/FC2-i386-disc4.iso |-- ./historico `-- ./iptraf.log 10 directories, 8 files rmdir Remove um diretório do sistema. O diretório a ser removido deve estar vazio. Sintaxe: rmdir <diretorio> [<outro diretorio>] [...] É necessário estar um nível acima do(s) diretório(s) que será(ão) removido(s). Por exemplo, para remover o diretório /tmp/teste você deve estar fora deste diretório e executar o comando, como no exemplo abaixo: Exemplo: 87 PROGRAMA TÉCNICO CIDADÃO # rmdir /tmp/teste rm Apaga arquivos. Também pode ser usado para apagar diretórios e sub-diretórios. Sintaxe: rm [parâmetro] <arquivo ou diretorio> [<outro arquivo ou diretório> [...] Tabela de Parâmetros -r -i -v -u -f Remove Arquivos e Diretórios recursivamente. Necessário quando se quer remover algum diretório não-vazio. Pergunta antes de remover. Mostra os nomes dos arquivos que estão sendo movidos. Copia somente se o arquivo de origem é mais novo que o arquivo de destino ou quando o arquivo de destino não existe. Força a remoção. Remove arquivo(s) e/ou diretório(s) sem perguntar. (Perigoso se associado com o comando Exemplo A: $ mkdir -p ~/exercicios/rm; cd ~/exercicios/rm $ touch teste.txt $ rm -iv teste.txt rm: remove arquivo comum vazio `teste.txt'? s removed `teste.txt' Apaga o arquivo teste.txt no diretório atual. Exemplo B: $ cd / $ rm -rfv ~/exercicios/rm removed directory: `/home/usuario/exercicios/rm' 88 PROGRAMA TÉCNICO CIDADÃO Remove o diretório rm, criado no Exemplo A. touch Muda a data e hora que um arquivo foi criado. Também pode ser usado para criar arquivos vazios. Sintaxe: touch [parâmetros] <arquivo[s]> Tabela de Parâmetros -t [AA]MMDDhhmm -a -c -m -r arquivo_de_referencia Utiliza a hora especificada (MM=mês, DD=dia, hh=hora, mm=minuto). Os ano com dois dígitos no começo são opcionais (AA). Modifica a data de acesso do arquivo. Não cria um arquivo vazio, caso o arquivo não exista. Modifica a data de modificação do arquivo. Utiliza um arquivo de referencia de data para o arquivo alvo. Exemplo A: # ls # touch arquivo1 arquivo2 arquivo3 # ls -l total 3 -rw-r--r-- 1 emartins utah 0 2004-10-27 17:22 arquivo1 -rw-r--r-- 1 emartins utah 0 2004-10-27 17:22 arquivo2 -rw-r--r-- 1 emartins utah 0 2004-10-27 17:22 arquivo3 Criados 3 arquivos vazios. Observe a data de criação dos arquivos. Exemplo B: # ls -l arquivo1 -rw-r--r-- 1 emartins utah 0 2004-10-27 17:22 arquivo1 # touch -t 0311201245 arquivo1 89 PROGRAMA TÉCNICO CIDADÃO # ls -l arquivo1 -rw-r--r-- 1 emartins utah 0 2003-11-20 12:45 arquivo1 Continuando o exemplo anterior, modificamos a data de criação de arquivo1 para dia 20 de novembro de 2003, às 12:45. Exemplo C: # ls -l -rw-r--r-- 1 emartins utah -rw-r--r-- 1 emartins utah -rw-r--r-- 1 emartins utah # touch -r arquivo1 arquivo3 # ls -l -rw-r--r-- 1 emartins utah -rw-r--r-- 1 emartins utah -rw-r--r-- 1 emartins utah 0 2003-11-20 12:45 arquivo1 0 2004-10-27 17:22 arquivo2 0 2004-10-27 17:22 arquivo3 0 2003-11-20 12:45 arquivo1 0 2004-10-27 17:22 arquivo2 0 2003-11-20 12:45 arquivo3 Agora utilizamos o touch para modificar a data de criação de arquivo3 com base em arquivo1. cp Copia arquivos. Sintaxe: cp [OPÇÃO]... ORIGEM DESTINO cp [OPÇÃO]... ORIGEM... <DIRETÓRIO> cp [OPÇÃO]... --target-directory=DIRETÓRIO ORIGEM... Copia ORIGEM para DESTINO, ou múltiplas ORIGENS para DIRETÓRIO. ORIGEM é o arquivo que será copiado. Podem ser especificados mais de um arquivo para ser copiado e também pode-se usar “Coringas” como ? e *. DESTINO é o caminho ou nome de arquivo onde será copiado. Mesmo que o DESTINO seja a pasta atual, ele deve ser especificado (Lembrete: “.” significa o diretório atual). Se o destino for um diretório, os arquivos de origem serão copiados para dentro do diretório. 90 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -i -r -v -a -s -l -p -u -x Pergunta antes de substituir um arquivo existente. Faz cópia recursiva dos arquivos. Mostra nomes dos arquivos enquanto copia. Copia todos os tipos de arquivos, inclusive links simbólicos. O cp não copia links simbólicos por padrão. Cria link simbólico no destino ao invés copiar o arquivo em si. Cria link (hardlink) no destino ao invés copiar o arquivo em si. Mantém os atributos do arquivo, se possível. Copia somente se o arquivo de origem é mais novo que o arquivo de destino ou quando o arquivo de destino não existe. Cópia de atualização, na verdade. Não copia arquivos que estejam localizados em partições (Pontos de Montagem) diferentes. Antes de prosseguir, vamos criar o ambiente p/ os exercícios: Ambiente: $ mkdir -p ~/exercicios/cp $ cd ~/exercicios/cp $ mkdir /tmp/arquivos $ touch /tmp/arquivos/arquivo{1,2,3} $ ls /tmp/arquivos arquivo1 arquivo2 arquivo3 Exemplo A: $ ls $ cp /tmp/arquivos/arquivo1 . $ ls arquivo1 Efetuada uma simples cópia do arquivo arquivo1 p/ o diretório atual (~/exercicios/cp). Exemplo B: $ mkdir subdir 91 PROGRAMA TÉCNICO CIDADÃO $ cp -var /tmp/arquivos subdir/ `/tmp/arquivos' -> `subdir/arquivos' `/tmp/arquivos/arquivo1' -> `subdir/arquivos/arquivo1' `/tmp/arquivos/arquivo2' -> `subdir/arquivos/arquivo2' `/tmp/arquivos/arquivo3' -> `subdir/arquivos/arquivo3' $ cp -var /tmp/arquivos . `/tmp/arquivos' -> `./arquivos' `/tmp/arquivos/arquivo1' -> `./arquivos/arquivo1' `/tmp/arquivos/arquivo2' -> `./arquivos/arquivo2' `/tmp/arquivos/arquivo3' -> `./arquivos/arquivo3' $ tree . |-- arquivo1 |-- arquivos | |-- arquivo1 | |-- arquivo2 | `-- arquivo3 `-- subdir `-- arquivos |-- arquivo1 |-- arquivo2 `-- arquivo3 3 directories, 7 files Copia recursivamente todo o conteúdo de /tmp/arquivos para subdir/ (recém-criado). Depois faz a mesma cópia, porém com o destino sendo o diretório atual, mas como estamos copiando uma estrutura completa de um diretório, esse diretório também é criado, assim como toda a estrutura anterior, como pode ser visto na saída do comando tree. Exemplo C: $ ls arquivo1 arquivos subdir erika@martins:~/exercicios/cp$ cp -i /tmp/arquivos/arquivo1 . cp: sobrescrever `./arquivo1'? s $ cp /tmp/arquivos/arquivo? . $ ls arquivo1 arquivo2 arquivo3 arquivos subdir 92 PROGRAMA TÉCNICO CIDADÃO $ Copiado o arquivo arquivo1 para o diretório local, porém já existia um arquivo de mesmo nome. A opção -i garante confirmação antes de sobrescrever um arquivo. Depois foi utilizado um coringa (?) para copiar 3 arquivos de uma só vez para o diretório atual, e dessa vez, como não foi especificada a opção -i, o arquivo arquivo1 foi sobrescrito sem pedir confirmação. mv Move ou renomeia arquivos e diretórios. O processo é semelhante ao do comando cp mas o arquivo de origem é movido de seu local original para o novo local. Sintaxe: mv [parâmetro] [origem] [destino] Tabela de Parâmetros -f -i -v -u Substitui o arquivo de destino sem perguntar. Pergunta antes de substituir (padrão). Mostra os nomes dos arquivos que estão sendo movidos. Copia somente se o arquivo de origem é mais novo que o arquivo de destino ou quando o arquivo de destino não existe. Exemplo A: $ mkdir -p ~/exercicios/mv; cd ~/exercicios/mv $ touch teste.txt $ mv teste.txt utah.txt $ ls utah.txt Muda o nome do arquivo teste.txt para utah.txt. Exemplo B: 93 PROGRAMA TÉCNICO CIDADÃO $ mv -v utah.txt /tmp `utah.txt' -> `/tmp/utah.txt' removed `utah.txt' Move arquivo utah.txt para dentro do diretório /tmp. Repare que o comando mv age de forma idêntica ao cp, porém ele remove o arquivo logo após a cópia. cat Concatena e exibe arquivos. Sintaxe: cat [parâmetro] <diretorio ou arquivo> Tabela de Parâmetros -A -b -n -v -t Exibe todos os caracteres especiais. Numera apenas as linhas não-vazias da saída. Numera todas as linhas da saída. Exibe caracteres não-imprimíveis. Exibe caracteres de tabulação. Exemplo: $ mkdir -p ~/exercicios/cat; cd ~/exercicios/cat $ cat > teste1.txt teste1 $ cat > teste2.txt teste2 $ ls teste1.txt teste2.txt $ cat teste1.txt teste1 94 PROGRAMA TÉCNICO CIDADÃO $ cat 1 $ cat 1 2 $ cat 1 2 -n teste1.txt teste1 -n teste1.txt teste2.txt teste1 teste2 -n test* teste1 teste2 O primeiro comando cat redireciona a palavra digitada teste1 para o arquivo teste1.txt. Para que o texto digitado vá definitivamente p/ o arquivo, devemos teclar [CONTROL]+[D] em uma linha abaixo da última contendo texto. O mesmo é feito com teste2.txt. Depois utilizamos o comando cat para visualizar o conteúdo do arquivo teste1.txt. Repare na utilização do parâmetro -n. tac Mostra o conteúdo de um arquivo (como o cat) em ordem inversa, ou seja, as últimas linhas primeiro. Sintaxe: tac [parâmetro] <diretorio ou arquivo> Exemplo: $ mkdir -p ~/exercicios/tac; cd ~/exercicios/tac $ cat > teste.txt linha1 linha2 linha3 $ tac teste.txt linha3 linha2 linha1 95 PROGRAMA TÉCNICO CIDADÃO ln Cria links para arquivos e diretórios no sistema. O link é um mecanismo que faz referência a outro arquivo ou diretório em outra localização (Como os atalhos no Microsoft Windows®). Sintaxe: ln [parâmetro] [origem] [link] ln [parâmetro]... <destino> [link] ln [parâmetro]... <destino>... <diretório> Tabela de Parâmetros -s -v -d Cria Link simbólico. Mostra o nome de cada arquivo ao fazer o link. Cria Hardlink para diretórios. Somente o root pode usar essa opção. Antes de entender os links, devemos compreender um termo sobre os sistemas de arquivos: Inodes. Inodes Todo arquivo criado no sistema de arquivos recebe um número que o identifica unicamente dos demais “no mesmo sistema de arquivos (partição). A esse número damos o nome de inode. É possível saber o inode de um arquivo específico com a opção -i do comando ls. Exemplo: $ ls -i teste1.txt 554844 teste1.txt Nesse exemplo, o inode do arquivo teste1.txt é 554844. 96 PROGRAMA TÉCNICO CIDADÃO Existem 2 tipos de links: Links Simbólicos e Hardlinks. Links Simbólicos O link simbólico cria um arquivo especial no disco (do tipo link) cujo conteúdo é o caminho para chegar até o arquivo alvo (isto pode ser verificado pelo tamanho do arquivo do link, bem menor do que o arquivo de destino). Use a opção -s para criar links simbólicos. Ambiente: $ mkdir ~/exercicios/ln; cd ~/exercicios/ln $ touch arquivo1 $ mkdir -p dir1/sub1/sub2 dir2/ Esses comandos criarão o ambiente necessário para aprendermos sobre links. Exemplo A: $ ln -s arquivo1 link1 $ ls -li total 8 554848 -rw-r--r-- 1 emartins utah 0 2004-10-28 17:29 arquivo1 439830 drwxr-xr-x 3 emartins utah 4096 2004-10-28 17:30 dir1 439833 drwxr-xr-x 2 emartins utah 4096 2004-10-28 17:30 dir2 554850 lrwxrwxrwx 1 emartins utah 8 2004-10-28 17:41 link1 -> arquivo1 Utilizamos o ln para criar um link simbólico (opção -s) do arquivo arquivo1 para link1. Repare que ele aparece referenciado na saída do comando ls -li. Constate também que o número dos inodes dos arquivos “linkados” diferem, o que confirma que são realmente arquivos diferentes. Exemplo B: $ cd dir1/sub1/sub2/ $ ln -s ../../../dir2 $ ls -l total 0 lrwxrwxrwx 1 emartins utah 13 2004-10-29 09:42 dir2 -> ../../../dir2 97 PROGRAMA TÉCNICO CIDADÃO Repare a possibilidade de se criar links utilizando caminhos relativos, inclusive para diretórios. Se movermos o link de lugar, o link pode perder referência (apontar para um arquivo inexistente) e se tornar um “link quebrado”. Hardlinks A grande diferença entre os Links Simbólicos e os Hardlinks é a forma como eles referenciam o arquivo “linkado”. No caso dos Hardlinks, não é criado um arquivo novo no sistema de arquivos como nos links simbólicos, e sim adicionada uma nova referência no diretório atual que aponte o link para o “mesmo inode” do arquivo original. Dessa forma, se fizermos um hardlink de um arquivo, não teremos dois arquivos “diferentes” no sistema, e sim uma nova referência ao mesmo inode do arquivo linkado, o que torna o link exatamente o mesmo arquivo que o original, pois o arquivo só será excluído do sistema de arquivos quando o último link também for. Não é possível criar HardLinks para arquivos que não se encontrem no mesmo sistema de arquivos (partição). Exemplo: $ cd ~/exercicios/ln/ $ ls -li total 8 554848 -rw-r--r-- 1 emartins utah 0 2004-10-28 17:29 arquivo1 439830 drwxr-xr-x 3 emartins utah 4096 2004-10-28 17:30 dir1 439833 drwxr-xr-x 2 emartins utah 4096 2004-10-28 17:30 dir2 554850 lrwxrwxrwx 1 emartins utah 8 2004-10-28 17:41 link1 -> arquivo1 $ ln arquivo1 hardlink1 $ ls -li total 8 554848 -rw-r--r-- 2 emartins utah 0 2004-10-28 17:29 arquivo1 439830 drwxr-xr-x 3 emartins utah 4096 2004-10-28 17:30 dir1 439833 drwxr-xr-x 2 emartins utah 4096 2004-10-28 17:30 dir2 554848 -rw-r--r-- 2 emartins utah 0 2004-10-28 17:29 hardlink1 554850 lrwxrwxrwx 1 emartins utah 8 2004-10-28 17:41 link1 -> arquivo1 98 PROGRAMA TÉCNICO CIDADÃO Criado um link do arquivo arquivo1 para hardlink1. Repare que o inode deles são idênticos (destacados em negrito). Isso significa que são exatamente os mesmos arquivos. 99 PROGRAMA TÉCNICO CIDADÃO GERENCIAMENTO DE USUÁRIOS E GRUPOS Neste capítulo aprenderemos a utilizar as ferramentas para gerenciar usuários e grupos do sistema. Tarefa crucial em um ambiente de administração Linux. Identificadores de Usuários e Grupos (UID e GID) No GNU/Linux, assim como no Unix, os usuários e grupos do sistema possuem um identificador numérico que os diferenciam dos demais. No caso dos usuários, esse número é chamado de UID (User Identificator); No caso dos grupos, esse número recebe o nome de GID (Group Identificator). Esses sistemas utilizam arquivos texto para “traduzir” o UID e GID para um nome inteligével para humanos, além de fornecer outras informações. Para que um usuário seja válido no sistema, é preciso que hajam registros p/ eles nesses arquivos. Esses arquivos são mostrados a seguir. /etc/passwd Esse arquivo contém uma lista em modo texto de todos os usuários cadastrados no sistema, um por linha, onde cada linha se divide em sete campos. O caractere “:” divide os campos de cada linha. Segue um exemplo de uma linha do arquivo /etc/passwd : erika:x:1000:1000:Erika V. Martins,,,:/home/erika:/bin/bash O primeiro campo (erika) é o nome do usuário. O segundo campo (x) é a senha criptografada do usuário. Sempre quando esse campo contiver apenas a letra x, significa que o sistema está utilizando senhas sombreadas (Shadow Passwords), ou seja, não está armazenando as senhas nesse arquivo, e sim no /etc/shadow, visto mais adiante. Os campos 3 e 4 Mostram o UID e GID do usuário, respectivamente. 100 PROGRAMA TÉCNICO CIDADÃO O quinto campo é chamado GECOS, e armazena informações adicionais sobre o usuário, divididas com “,” dentro do campo. Informações que podem ser o Nome Completo do Usuário, telefones, número da sala, etc. O sexto campo define qual será o diretório base do usuário (diretório home). No exemplo, o diretório base do usuário é /home/erika. E finalmente, o sétimo e último campo define qual será o interpretador de comandos (shell) do usuário. Nesse caso o shell do usuário é /bin/bash. Quando o usuário erika efetuar login no sistema, será executado o comando /bin/bash, devido a isso que é aberto um bash logo após o login. /etc/shadow Esse arquivo somente é utilizado quando Senhas Sombreadas (Shadow Passwords) estão um uso no sistema. Senhas Sombreadas são usadas nas distribuições atuais e a muito tempo, pois oferecem mais segurança guardando a senha em um arquivo que não pode ser lido por usuários comuns no sistema (o /etc/passwd pode ser lido por todos). O /etc/shadow segue o mesmo formato de divisão do /etc/passwd, porém contém 9 campos. erika:$1$cTdn0tUz$Ck447Zu3nMzo1bPXWQq3g.:12708:0:99999:7::: Os campos estão divididos da seguinte forma: 1 – Nome do usuário: 2 – Senha criptografada. 3 – Data da última troca de senha (Contada em dias corridos desde 01/01/1970). 4 – Tempo mínimo de dias que a senha deve permanecer inalterada. 5 – Tempo máximo de dias que o usuário pode ficar com a mesma senha. 101 PROGRAMA TÉCNICO CIDADÃO 6 – Com quantos dias de antecedência o sistema deve avisar que a senha irá expirar. 7 – Número de dias de inatividade em que o sistema deve considerar o usuário bloqueado. 8 – Uma data para a expiração automática da conta. Utiliza o mesmo formato do campo 3. 9 – Esse último campo está reservado para uso futuro. /etc/group É neste arquivo que são armazenados todos os grupos armazenados no sistema. Esse arquivo também segue o mesmo formato que o /etc/passwd, mas cada linha contém apenas 4 campos. Conforme abaixo: utah:x:1410:erika,fulano,beltrano O primeiro campo é o nome do grupo, o segundo a senha do grupo, seguido do GID do grupo. O último campo, quase sempre vazio, é a lista, separada por vírgula, dos usuários que também pertencem a esse grupo. /etc/gshadow O arquivo gshadow armazena informações de administradores e senhas de grupos. games:*:: O primeiro campo é o nome do grupo; O segundo é a senha do grupo, como não está definida, recebe o valor de *; O terceiro campo armazena os nomes dos administradores desse grupo (Administradores de grupos serão explicados adiante), separados por vírgula; O último campo te a mesma função do último campo do arquivo /etc/group. 102 PROGRAMA TÉCNICO CIDADÃO Gerenciamento de usuários Existem diversas formas de gerenciarmos usuários do sistema. Em qualquer uma delas, o objetivo é gerenciar as entradas adequadas dos arquivos /etc/passwd, /etc/shadow, / etc/group e /etc/gshadow. Adicionar as entradas manualmente editando esses arquivos é uma tarefa difícil e perigosa, pois está mais propensa a erros. Por isso existem alguns comandos especificamente designados para gerenciar essas entradas dos respectivos arquivos. Veremos esses comandos a seguir. Adicionando usuários com useradd Utilizamos o comando useradd para criar um novo usuário no sistema. Sintaxe: useradd [-u uid [-o]] [-g grupo] [-G grupo-secundario,...] [-d home] [-s shell] [-c comentario] [-m [-k template]] [-f inativo] [-e expiração ] [-p senha] usuário useradd -D [-g grupo] [-b base] [-s shell] [-f inativo] [-e expiração ] O useradd trabalha de dois modos. O primeiro modo adiciona o usuário com as opções específicas. O segundo modo é ativado quando a opção -D (Defaults) é habilitada, e serve para visualizar e definir os padrões para criação dos usuários. 103 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -u uid -o -g grupo Informa qual deve ser o UID do usuário. Se omitido, o sistema utiliza o próximo disponível. Permite criar usuário com UID duplicado (Usuário Clonado) Especifica qual será o grupo principal do Usuário. Algumas distribuições aderem ao sistema criado pela RedHat, chamado UPG (Unix Private Group), que cria um grupo com o mesmo nome do usuário, no qual somente determinado usuário pertence ao grupo. Informando esse parâmetro estamos evitando que o sistema crie um grupo no esquema UPG, mas o grupo no qual informarmos já deve previamente existir. grupo- Especifica a quais grupos secundários esse usuário deve pertencer. -G secundario -d home -s shell -c comentario -m -k template -f inativo -e expiração -p senha -D Especifica qual será o diretório base do usuário. Especifica qual será o shell do usuário. Adiciona informações no campo GECOS do arquivo /etc/passwd. O sistema criará um diretório base para o usuário caso ele não exista (comportamento padrão). O conteúdo do novo diretório será exatamente o mesmo que o diretório /etc/skel, que, por sua vez, serve como um diretório de perfil para novos usuários criados no sistema. Especifica uma pasta de template (perfil) alternativa ao /etc/skel para o usuário a ser criado. Essa opção só é válida junto com a opção -m. Especifica o número de dias em que a senha expire até que a conta seja permanentemente desabilitada. O valor 0 expira a senha assim que a conta houver expirado. O valor -1 desabilita essa característica (padrão). Especifica uma data na qual a conta irá expirar. o Formato deve ser AAAA-MM-DD, por exemplo: 2004-11-01 seria 01 de novembro de 2004. Especifica a senha criptografada. Inútil nos dias de hoje, pois existem comandos específicos para gerenciar as senhas. Se utilizada sem nenhum outro parâmetro serve para visualizar os padrões atuais para criação dos usuários. Se ativada em conjunto com as opções -g, -b, -s, -f ou -e é possível modificar o valor padrão de grupo, diretório base (home), shell, inativo e expiração, respectivamente. 104 PROGRAMA TÉCNICO CIDADÃO Exemplo A: # useradd -G users,audio -d /home/utah -m -c "Utah LinuxCenter" aluno O comando acima adicionou o usuário “aluno” ao sistema, pertencendo aos grupos users e audio (esses grupos já existiam). A linha no arquivo /etc/passwd ficou assim: aluno:x:10092:100:Utah LinuxCenter:/home/utah:/bin/bash Exemplo B: # useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= shell= SKEL=/etc/skel # useradd -D -s /bin/sh # useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= shell=/bin/sh SKEL=/etc/skel Modificamos o grupo padrão para novos usuários para o UID 29, que em nosso sistema referese ao grupo audio. Definindo senhas com passwd O comando passwd modifica senhas para contas de usuários e grupos. Um usuário normal somente pode trocar sua própria senha. Somente o superusuário root pode trocar a senha de qualquer usuário no sistema. O passwd também é utilizado para modificar informações sobre a conta de usuário, tais como o nome completo, o shell inicial, data de expiração de senha, etc. 105 PROGRAMA TÉCNICO CIDADÃO Sintaxe: passwd [-f|-s] [usuario] passwd [-x maximo] [-n minimo] [-w aviso] [-i inativo] usuario passwd {-l|-u|-d|-S|-e} usuario Tabela de Parâmetros -f -s -l -u -d -S -e Serve para trocar o nome do usuário (campo de comentário no arquivo / etc/passwd). Age como o comando chfn, visto adiante. Age como o comando chsh, viso adiante. Serve para modificar o shell do usuário. Trava a conta do usuário. (lock) Destrava a conta do usuário. (unlock) Deleta a senha do usuário (Deixa em Branco). Mostra o status da conta de usuário. (Data de expiração, etc...) Expira imediatamente a senha do usuário. Troca de Senhas Quando um usuário aciona o comando passwd para trocar a senha, o usuário é questionado a si mesmo quanto a senha atual (caso exista). A senha digitada é então criptografada e comparada com a senha criptografada já existente no sistema. O usuário só tem uma chance de inserir a senha correta. Somente o superusuário root pode trocar senhas sem antes confirmar a anterior, pois isso permite que ele possa redefinir senhas “esquecidas”, por exemplo. Logo após a senha antiga ser validada, informações sobre a idade da senha são verificadas no sistema para definir se o usuário tem permissão de trocar a senha naquele momento. Em caso negativo, o passwd se recusa a trocar a senha. Em caso positivo, o usuário é então questionado sobre a nova senha, que após digitada, é verificada quanto a complexibilidade. No geral, senhas devem consistir em 6 a 8 caracteres incluindo um ou mais do seguinte: 106 PROGRAMA TÉCNICO CIDADÃO – Letras maiúsculas; – Letras minúsculas; – Números de 0 a 9; – Caracteres de pontuação (Ex.: ~,. !”) O passwd irá rejeitar qualquer senha que não atender aos requisitos. Se a senha for aceita, o usuário é então questionado para repetir a mesma senha, que é então comparada com a senha nova para evitar que erros de digitação possam impedir que determinado usuário acesse o sistema. Cabe ressaltar que o passwd pode modificar a ordem de verificação em alguns sistemas, mas os passos são os mesmos. Exemplo A: # passwd aluno Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Primeiramente definimos uma senha para o usuário “aluno”. Como é o usuário root que está definindo a senha para o usuário “aluno”, a checagem de complexibilidade da senha não é feita. No exemplo definimos a senha 123 (não aparece enquanto digitamos, é normal). Exemplo B: $ passwd Changing password for aluno (current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 107 PROGRAMA TÉCNICO CIDADÃO Agora, após logarmos como o usuário aluno, tentamos trocar sua senha. repare que foi necessário digitar a senha atual (123). Na nova senha, escolhemos uma com boa complexibilidade: “zxasQW12”, sem as aspas. Exemplo C: # passwd -de aluno Password changed. Deletamos e expiramos a senha para o usuário aluno, isso irá requerer que o usuário cadastre uma nova senha na próxima tentativa de login. Muito cuidado com isso, utilize somente em casos extremos em que não exista outra alternativa, pois caracteriza uma grande falha de segurança. Removendo usuários com userdel Utilizamos o comando userdel para remover usuários do sistema. Sintaxe: userdel [-r] usuario O único parâmetro disponível para o userdel é o -r, que instrui ao userdel para remover também todos os arquivos do usuário (na verdade o comando remove a pasta home do usuário). Por padrão (sem a opção -r), o userdel mantém os arquivos do usuário. Exemplo: # ls -ld /home/aluno/ drwxr-xr-x 2 aluno users 136 Nov 3 11:43 /home/aluno/ # userdel -r aluno userdel: user aluno is currently logged in O sistema apresentou um erro ao tentar remover o usuário aluno, que estava logado em outro terminal. Não é possível remover usuários que estejam logados no momento. 108 PROGRAMA TÉCNICO CIDADÃO # userdel -r aluno # ls -ld /home/aluno/ ls: /home/aluno/: No such file or directory Após o usuário efetuar logoff do terminal em que estava já é possível removê-lo. Repare que foram removidos também seus arquivos pessoais. Aumentando a segurança com o comando chage O comando chage serve para gerenciar as entradas de expiração de senha encontradas no arquivo /etc/shadow. É muito importante definir informações de expiração de senha para um sistema linux, pois isso agrega mais segurança, impedindo que usuários permaneçam muito tempo com a mesma senha, ou até mesmo que contas de usuários inexistentes permaneçam válidas. Sintaxe: chage [-m min_dias] [-M max_dias] [-d ultimo_dia] [-I inativo] [-E data_expira] [-W dias_aviso] usuário chage -l usuário O comando chage age de duas formas. Da primeira forma ele define as opções de expiração de senha do usuário, da segunda forma (com a opção -l) ele mostra as opções atualmente definidas para determinado usuário. 109 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -m min_dias Intervalo mínimo de dias que o usuário pode trocar a senha. -M max_dias Número máximo de dias que o usuário pode permanecer com a mesma senha. -d ultimo_dia Especifica qual a data da última alteração de senha do usuário. O valor a ser especificado para ultimo_dia é o número de dias desde 01/01/1970, ou uma data no formato AAAA-MM-DD (Ex: 2004-1215 significa dia 15 de dezembro de 2004). -I inativo Número de dias de inatividade (Sem efetuar Login no sistema) que a senha é automaticamente bloqueada. -E data_expira Especifica até qual data a conta do usuário será válida. Útil para usuários de funcionários temporários. O valor para data_expira segue o mesmo padrão que a opção -d. -W dias_aviso Configura com quantos dias de antecedência determinado usuário será avisado sobre a expiração de sua senha. -l Lista as opções atuais de expiração de senha. Exemplo A: # chage -l huguinho Minimum: 0 Maximum: 99999 Warning: 7 Inactive: -1 Last Change: Nov 10, 2004 Password Expires: Never Password Inactive: Never Account Expires: Never # chage huguinho Changing the aging information for huguinho Enter the new value, or press ENTER for the default Minimum Password Age [0]: 2 Maximum Password Age [99999]: 90 Last Password Change (YYYY-MM-DD) [2004-11-10]: Password Expiration Warning [7]: 5 Password Inactive [-1]: 30 110 PROGRAMA TÉCNICO CIDADÃO Account Expiration Date (YYYY-MM-DD) [1969-12-31]: 2004-12-15 # chage -l huguinho Minimum: 2 Maximum: 90 Warning: 5 Inactive: 30 Last Change: Nov 10, 2004 Password Expires: Feb 08, 2005 Password Inactive: Mar 10, 2005 Account Expires: Dec 15, 2004 Repare em como ficaram os valores de expiração de senha após as modificações e associe aos campos adequados. Exemplo B: # chage -m2 -M90 -W5 -I30 -E2004-12-15 huguinho Uma outra forma de se chegar no mesmo resultado do exemplo anterior. DICA Quando uma conta é bloqueada por motivo de expiração de senha, somente o administrador (root) é capaz de desbloqueá-la utilizando novos valores para o chage e, quando necessário, desbloqueando a conta com o comando “passwd -u usuario”. Gerenciando informações de usuários com chfn e finger Podemos utilizar o comando chfn para editar informações típicas dos usuários, como seu nome completo, telefone, departamento, etc. Essas informações ficam armazenadas em cada uma das entradas do arquivo /etc/passwd, mais especificamente no quinto campo de cada entrada. É bastante útil ter essas informações, pois é a forma mais fácil de obter informações sobre os usuários cadastrados no sistema. Sintaxe: 111 PROGRAMA TÉCNICO CIDADÃO chfn [-f nome_completo] [-r sala] [-w fone_trabalho] [-h fone_casa] [-o outros] [usuario] Tabela de Parâmetros -f nome_completo Configura o Nome completo do Usuário (Ex: João da Silva) -r sala Número da sala em que ele trabalha -w fone_trabalho Telefone Comercial -h fone_casa Telefone Residencial -o outros Outras Informações e Observações Exemplo A: # chfn huguinho Changing the user information for huguinho Enter the new value, or press ENTER for the default Full Name []: Hugo da Silva Sauro Room Number []: 5 Work Phone []: 5555555 Home Phone []: 6666666 Other []: Usuário de testes da Utah # finger huguinho Login: huguinho Name: Hugo da Silva Sauro Directory: /home/huguinho Shell: /bin/sh Office: 5, 555-5555 Home Phone: 666-6666 Last login Thu Nov 11 14:35 (BRST) on tty2 No mail. No Plan. As informações definidas com chfn podem ser consultadas com o comando finger, conforme o exemplo. 112 PROGRAMA TÉCNICO CIDADÃO NOTA O comando finger não vem instalado por padrão em algumas distribuições Linux. No Debian, para instalá-lo, digite como usuário root: apt-get install finger Exemplo B: chfn -f "Hugo da Silva Sauro" -r 5 -w 5555555 -h 6666666 -o "Usuário de testes da Utah" huguinho A linha de comando acima leva ao mesmo resultado que o exemplo anterior. Modificando o shell do usuário com chsh O comando chsh lida com o último campo do arquivo /etc/passwd, o shell inicial do usuário. Um usuário normal somente pode trocar o shell principal para sua própria conta. Somente o root tem permissão para trocar o shell de outros usuários. Sintaxe: chsh [-s login_shell] [user] Quando o comando é invocado por um usuário normal, o novo shell informado deve estar listado no arquivo /etc/shells. Se for invocado pelo root e o comando não existir nesse arquivo, o comando é automaticamente adicionado no arquivo. Exemplo A: # chsh huguinho Changing the login shell for huguinho Enter the new value, or press return for the default Login Shell [/bin/sh]: /bin/bash Modificado o shell inicial do usuário para /bin/bash. Exemplo B: 113 PROGRAMA TÉCNICO CIDADÃO # chsh -s /bin/bash huguinho Mesmo que o exemplo anterior, de forma direta. Verificando integridade dos arquivos de senhas com pwck O comando pwck verifica a integridade de informações de autenticação dos usuários no sistema nos arquivos /etc/passwd e /etc/shadow em busca de erros de formato. O comando verifica o seguinte: – O número correto de campos; – Nomes de usuários duplicados; – UID's e GID's órfãos; – Grupo válido; – Diretório home válido; – Shell inicial válido. Sintaxe: pwck [-sr] [passwd shadow] A opção -s serve para ordenar os usuários nos arquivos /etc/passwd e /etc/shadow com base em seu UID. A outra opção (-r) não pode ser utilizada junto com -s, e serve para ativar o modo somente-leitura do pwck, que apenas mostra o que está errado mas nunca modifica nenhum arquivo. Se especificarmos uma das opções passwd ou shadow, o pwck somente agirá nos respectivos arquivos. Exemplo: # pwck 114 PROGRAMA TÉCNICO CIDADÃO user lp: directory /var/spool/lpd does not exist user news: directory /var/spool/news does not exist user uucp: directory /var/spool/uucp does not exist user postgres: directory /var/lib/postgres does not exist user list: directory /var/list does not exist user irc: directory /var/run/ircd does not exist user gnats: directory /var/lib/gnats does not exist user grpadm: directory /home/grpadm does not exist user huguinho: directory /home/huguinho does not exist user zezinho: directory /home/zezinho does not exist user nobody: directory /nonexistent does not exist pwck: no changes O comando pwck detectou que os diretórios home de alguns usuários não existiam, mas não efetuou nenhuma modificação no sistema, somente alertou. Convertendo/Revertendo o sistema de senhas shadow O linux disponibiliza dois comandos que nos permitem converter e reverter o sistema de senhas shadow. Para migrar um sistema que ainda não utiliza senhas shadow, utilizamos o comando pwconv. Já para reverter um sistema já com shadow ativado, utilizamos o comando pwunconv. DICA Para migrar também as informações de grupos para shadow (Tirar as senhas do / etc/group e migrar para o /etc/gshadow, basicamente) utilizamos grpconv. Para reverter, grpunconv. Tem o mesmo efeito que pwconv e pwunconv, porém atua nos arquivos de grupos. Modificando contas de usuários com usermod Todos os dados que podem ser fornecidos ao comando useradd durante a criação de um usuário no sistema podem ser alterados, no caso de usuários já existentes, com o comando usermod. 115 PROGRAMA TÉCNICO CIDADÃO Sintaxe: usermod [-u uid [-o]] [-g grupo] [-G grupo,...] [-d home [-m]] [-s shell] [-c comentario] [-l novo_nome] [-f inativo] [-e expira ] [-p senha] [-L|-U] nome Exemplo A: # id huguinho uid=10095(huguinho) gid=100(users) groups=100(users),1521(grupo) # usermod -l donald huguinho # id huguinho id: huguinho: No such user # id donald uid=10095(donald) gid=100(users) groups=100(users),1521(grupo) # usermod -l huguinho donald # id huguinho uid=10095(huguinho) gid=100(users) groups=100(users),1521(grupo) Utilizamos o usermod para renomear o usuário huguinho para donald; Verificado que somente o nome do usuário mudou, em seguida renomeamos novamente o usuário para o nome original. Exemplo B: # id huguinho uid=10095(huguinho) gid=100(users) groups=100(users),1521(grupo) # usermod -u 10094 huguinho # id huguinho uid=10094(huguinho) gid=100(users) groups=100(users),1521(grupo) Modificado o uid do usuário huguinho de 10095 para 10094. Lembrando que o novo uid não pode estar atribuído a nenhum usuário já existente. 116 PROGRAMA TÉCNICO CIDADÃO DICA Uma boa forma de memorizar comandos como esses é associando sua utilização. Por exemplo: useradd = user + add (Adicionar Usuário), usermod = user + mod (Modificar usuário). Gerenciamento de grupos Gerenciar grupos de usuários é uma tarefa imprescindível no dia a dia de um administrador Linux. Tarefas como adicionar e remover grupos, definir a quais grupos determinados usuários devem participar, determinar administradores de grupos, etc. É essencial uma boa compreensão sobre o funcionamento dos grupos de usuários no Linux, pois o correto funcionamento do sistema depende de grande coerência no que tange gerenciamento de grupos e usuários. Obtendo Informações com o comando id Uma das principais ferramentas que auxiliam no gerenciamento de usuários e grupos é o comando id. Com ele é possível saber, por exemplo, a quais grupos um determinado usuário pertence, com seus respectivos gids. Sintaxe: id [parâmetro]... [usuário] 117 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -g Mostra somente o GID. Se utilizado em conjunto com o parâmetro -n, mostra o nome do grupo. -G Mostra todos os grupos (GIDs) que o usuário pertence. Se utilizado em conjunto com o parâmetro -n, mostra os nomes dos grupos. O primeiro grupo na listagem é o grupo principal, os demais são os secundários. -n Mostra “nomes” ao invés de números (UIDs e GIDs) na saída do comando. -u Mostra somente o UID. Se utilizado em conjunto com o parâmetro -n, mostra o nome do usuário. Exemplos: $ id uid=1052(emartins) gid=1001(utah) grupos=6(disk),24(cdrom),25(floppy),29(audio),1001(utah), 1006(suporte),1507(apostilas) $ id -G 1001 6 24 25 29 1006 1507 $ id -Gn utah disk cdrom floppy audio suporte apostilas $ id root uid=0(root) gid=0(root) grupos=0(root) Adicionando grupos com groupadd Cria novos grupos no sistema. Sintaxe: groupadd [-g gid [-o]] grupo Exemplo: $ groupadd -g 1037 utah 118 PROGRAMA TÉCNICO CIDADÃO O comando acima cria um novo grupo no sistema, com GID 1037. Caso o UID (-g) seja omitido, o sistema escolhe automaticamente o próximo disponível. A opção “-o” serve para forçar a utilização daquele gid, mesmo que ele já esteja atribuido a outro grupo. Removendo grupos com groupdel Para remover um grupo do sistema utilizamos o comando groupdel. Se removermos um grupo que contenha usuários, os usuários são mantidos no sistema, porém não terão mais vínculo com o grupo removido (ainda bem...). Sintaxe: groupdel grupo Adicionando usuários aos grupos Utilizamos o comando gpasswd para, dentre outras coisas, adicionar usuários em grupos já existentes. Sintaxe: gpasswd -a usuario grupos Exemplo: # useradd -m aluno # id aluno uid=10092(aluno) gid=100(users) groups=100(users) # groupadd utah # gpasswd -a aluno utah Adding user aluno to group utah # id aluno uid=10092(aluno) gid=100(users) groups=100(users),1001(utah) 119 PROGRAMA TÉCNICO CIDADÃO Após adicionado o usuário aluno e o grupo utah, utilizamos o comando gpasswd para adicionar o usuário recém-criado ao grupo. Removendo usuários dos grupos Para remover usuários dos grupos também fazemos uso do gpasswd, da seguinte forma: gpasswd -d usuario grupo Exemplo: # id aluno uid=10092(aluno) gid=100(users) groups=100(users),1001(utah) # gpasswd -d aluno utah Removing user aluno from group utah Modificando informações sobre grupos Através do comando groupmod é possível renomear um grupo ou trocar o GID. Sintaxe: groupmod [-g gid [-o]] [-n novo_nome ] grupo Exemplo: # groupadd linux # gpasswd -a aluno linux Adding user aluno to group linux # id aluno uid=10092(aluno) gid=100(users) groups=100(users),1511(linux) # groupmod -g 1520 -n pinguim linux # id aluno uid=10092(aluno) gid=100(users) groups=100(users),1520(pinguim) 120 PROGRAMA TÉCNICO CIDADÃO No exemplo, primeiro criamos o grupo linux e adicionamos o usuário aluno nele. O sistema automaticamente atribuiu um GID para o grupo (1511, no exemplo). Utilizamos o comando groupmod para trocar o GID e o nome do grupo linux. Definindo administradores de grupos com gpasswd Todos os grupos no sistema podem ter administradores, membros e uma senha. Podemos utilizar o comando gpasswd para definir administradores e senha de grupos. Administradores de grupos são usuários que tem permissão (previamente concedida pelo usuário root) para adicionar usuários do sistema aos grupos que eles administram. É importante lembrar que o usuário a ser adicionado ao grupo já deve existir no sistema. Sintaxe: gpasswd [-A usuário,...] [-M usuário,...] grupo A opção -A serve para “nomear” um usuário do sistema como administrador do grupo. A opção -M faz o mesmo, porém adiciona o usuário como membro do grupo também. Exemplo: # useradd -m admgrupo # id admgrupo uid=10094(admgrupo) gid=100(users) groups=100(users) # groupadd grupo # gpasswd -A admgrupo grupo # useradd -m huguinho # su - admgrupo $ gpasswd -a huguinho grupo Adding user huguinho to group grupo $ id huguinho uid=10095(huguinho) gid=100(users) groups=100(users),1521(grupo) $ gpasswd -d huguinho grupo Removing user huguinho from group grupo $ id huguinho uid=10095(huguinho) gid=100(users) groups=100(users) 121 PROGRAMA TÉCNICO CIDADÃO No exemplo foi definido que o usuário admgrupo é administrador do grupo grupo. Para remover esse privilégio do usuário, é preciso remover o nome do usuário em questão do terceiro campo do arquivo /etc/gshadow. Trocando o grupo principal temporariamente com newgrp É possível trocar o grupo principal do usuário somente para a sessão atual (tudo volta ao normal ao término da sessão). Isso pode ser útil quando precisamos ter privilégios específicos de determinado grupo por alguns instantes. Utilizamos o comando newgrp para essa finalidade. Sintaxe: newgrp [-] grupo O parâmetro “-” instrui ao comando para carregar todas as variáveis de ambiente do shell atual. Exemplo A: $ id uid=10096(admgrupo) gid=100(users) groups=100(users) $ gpasswd grupo Changing the password for group grupo New Password: Re-enter new password: $ su - huguinho Password: $ id uid=10095(huguinho) gid=100(users) groups=100(users),1521(grupo) $ newgrp grupo $ id uid=10095(huguinho) gid=1521(grupo) groups=100(users),1521(grupo) $ exit 122 PROGRAMA TÉCNICO CIDADÃO Nesse exemplo, foi definida uma senha para o grupo; Como o usuário huguinho pertence ao grupo “grupo”, não foi necessário digitar uma senha para o grupo. Quando acionamos o comando “newgrp grupo”, foi aberto um novo shell atrelado ao shell atual. Exemplo B: # useradd -m zezinho # id zezinho uid=10097(zezinho) gid=100(users) groups=100(users) # su - zezinho $ newgrp - grupo Password: $ id uid=10097(zezinho) gid=1521(grupo) groups=100(users),1521(grupo) $ exit Adicionamos o usuário zezinho, que por padrão pertence somente ao grupo users. Como foi definida uma senha para o grupo “grupo” antes, o usuário zezinho pode utilizar o comando newgrp para temporariamente fazer parte do grupo. Para isso lhe foi requisitada a senha do grupo, que foi cadastrada no exemplo anterior com o comando “gpasswd grupo”. Verificando Integridade dos arquivos de grupos com grpck O comando grpck verifica a integridade das informações de autenticação do sistema. Todas as entradas dos arquivos /etc/group e /etc/gshadow são verificadas quanto ao formato correto em cada campo. O usuário é questionado a deletar uma entrada defeituosa que esteja comprometendo a segurança do sistema. O comando verifica o seguinte nos arquivos: – O número correto de campos; – Nomes de grupos duplicados; – Uma lista válida de membros e administradores. 123 PROGRAMA TÉCNICO CIDADÃO Sintaxe: grpck [-r] [group shadow] A opção -r diz para o grpck efetuar os testes em modo somente-leitura, ou seja, não altera nenhum arquivo, somente mostra os problemas na tela. O padrão do comando é verificar ambos os arquivos /etc/group e /etc/shadow; Para forçar ele verificar somente um deles, basta especificar somente o nome de um dos arquivos como parâmetro. Para o Exemplo abaixo, partimos do princípio de que exista um problema de nome de grupo duplicado no arquivo /etc/group, conforme abaixo: grupo:!:1521:huguinho grupo:!:1522: Exemplo: # grpck duplicate group entry delete line `grupo:!:1521:huguinho'? No duplicate group entry delete line `grupo:!:1522:'? Yes grpck: the files have been updated Respondemos “No” para a primeira pergunta e “Yes” para a segunda porque a primeira pergunta referenciava a linha correta (que não devemos apagar). 124 PROGRAMA TÉCNICO CIDADÃO PERMISSÕES DE ARQUIVOS E DIRETÓRIOS As permissões são um dos aspectos mais importantes do Linux (na verdade, de todos os sistemas baseados em Unix). Elas são usadas para vários fins, mas servem principalmente para proteger o sistema e os arquivos dos usuários. Manipular as permissões é algo muito essencial. Mas tal complexidade não deve ser interpretada como dificuldade e sim como grande variedade de configurações, o que permite criar vários tipos de proteção de arquivos e diretórios. Como você deve saber, somente o super-usuário (root) tem ações irrestritas no sistema, justamente por ser o usuário responsável pela configuração, administração e manutenção do Linux. Cabe a ele por exemplo, determinar o que cada usuário pode executar, criar, modificar, etc. Naturalmente, a forma usada para determinar o que o usuário pode fazer é a determinação de permissões. Entendendo as permissões $ ls -l ~/exercicios/ln total 8 -rw-r--r-- 2 emartins utah 0 2004-10-28 17:29 arquivo1 drwxr-xr-x 3 emartins utah 4096 2004-10-28 17:30 dir1 drwxr-xr-x 2 emartins utah 4096 2004-10-29 10:44 dir2 -rw-r--r-- 2 emartins utah 0 2004-10-28 17:29 hardlink1 Repare na saída do comando ls -l, que mostra as permissões dos arquivos na primeira coluna. Esses primeiros 10 caracteres que aparecem (-rw-r—r-- por exemplo.) são os caracteres que demonstram as permissões atuais de cada arquivo/diretório. Observe a Linha abaixo, onde as permissões aparecem em destaque: -rwxrwxrwx 2 emartins utah 0 2004-10-28 17:29 arquivo1 Grupo Dono Usuário Dono Permissões de outros Permissões de grupo Permissões de usuário Tipo de Arquivo 125 PROGRAMA TÉCNICO CIDADÃO O primeiro caractere define qual é o tipo de arquivo. Os tipos de arquivos mais conhecidos são mostrados na tabela abaixo: l Link simbólico b Dispositivo de Bloco d Diretório s Socket de Comunicação c Dispositivo de Caractere - Arquivo Comum Cada uma das letras r, w e x dentro das permissões tem um significado diferente, conforme a tabela abaixo: r Leitura w Escrita x Execução Como o permissionamento está dividido em 3 seções (usuário, grupo e outros), a presença ou ausência dessas letras determina quais permissões cada um terá. Exemplo A: $ ls -l apostila.sxw -rwxrw-r-- 1 erika office 183627 2004-11-01 13:09 apostila.sxw O arquivo apostila.sxw é um arquivo comum, pertence ao usuário erika e ao grupo office. O usuário erika pode ler, gravar e executar o arquivo ( rwx ); quaisquer outros usuários que pertençam ao grupo office podem ler e gravar no arquivo ( rw- ); Portanto, qualquer outro usuário que não seja o dono do arquivo (erika) nem pertença ao grupo office só terá permissões de ler o arquivo ( r ). Exemplo B: 126 PROGRAMA TÉCNICO CIDADÃO $ ls -ld /etc drwxr-xr-x 96 root root 5384 2004-11-01 11:01 /etc Podemos verificar que o arquivo etc na verdade é um diretório ( d ); Pertence ao usuário e grupo root; Tem permissões de leitura, gravação e execução ( rwx )para o usuário dono; Leitura e execução ( r-x ) para o grupo dono e quaisquer outros usuários. Nota: Mesmo que as permissões de arquivos restrinjam o usuário root, elas não têm efeito p/ ele. Definindo Permissões com chmod Utilizamos o comando chmod (Change Mode) para configurar as permissões no Linux. Sintaxe: chmod [OPÇÃO]... MODO[,MODO]... ARQUIVO... chmod [OPÇÃO]... MODO-OCTAL ARQUIVO... chmod [OPÇÃO]... --reference=ARQUIVOREF ARQUIVO... Tabela de Parâmetros -v Verbose. Mostra informações sobre as modificações efetuadas. Mesmo que as permissões tenham se mantido. -c Changes. Mesmo que a opção -v, porém só mostra informações se as permissões tiverem sido modificadas. -R Recursive. Aplica as permissões recursivamente. O chmod trabalha com dois modos de permissões: simbólico e octal. Esses dois modos não mudam a Sintaxe do comando mostrada anteriormente, pois só agem no MODO (MODO e MODO-OCTAL) das permissões. Antes de estudar os dois modos separadamente, criaremos o ambiente de testes. Ambiente: 127 PROGRAMA TÉCNICO CIDADÃO $ mkdir -p ~/exercicios/chmod; cd ~/exercicios/chmod $ mkdir -p dir1/dir2 $ touch arq1 dir1/dir2/arq2 Modo Simbólico de Permissões O modo simbólico do chmod define as permissões com base em suas letras (r, w e x...) de significado. Nesse modo, as permissões cabíveis a cada uma das partes envolvidas são representadas por letras, conforme tabela abaixo: u usuário g grupo o outros a todos (all) Com base nisso, basta unir as permissões com as partes afetadas. Para estabelecer essa união, utilizamos os sinais de +, - e = (adiciona, remove ou iguala permissões, respectivamente). Exemplo A: $ ls -l arq1 -rw-r--r-- 1 erika erika 0 2004-11-01 15:40 arq1 $ chmod u-w arq1 $ ls -l arq1 -r--r--r-- 1 erika erika 0 2004-11-01 15:40 arq1 O arquivo arq1 teve a permissão de escrita ( w ) removida para o usuário ( u ) dono do arquivo, ou seja: o “u” indica que estamos alterando permissões para o usuário, o sinal de “-” indica que estamos removendo permissões, e em seguida, o “w” significa permissão de escrita. Exemplo B: $ ls -l arq1 -r--r--r-- 1 erika erika 0 2004-11-01 15:40 arq1 $ chmod +x arq1 $ ls -l arq1 128 PROGRAMA TÉCNICO CIDADÃO -r-xr-xr-x 1 erika erika 0 2004-11-01 15:40 arq1 Adicionada permissão de execução para todos os campos (usuário, grupo e outros), pois não foi especificada qual parte seria afetada pelo comando. Exemplo C: $ ls -l arq1 -r-xr-xr-x 1 erika erika 0 2004-11-01 15:40 arq1 $ chmod go-x,ug+w arq1 $ ls -l arq1 -rwxrw-r-- 1 erika erika 0 2004-11-01 15:40 arq1 Na mesma linha de comando, foi removida a permissão de execução para grupo e outros e também foi adicionada a permissão de escrita para o usuário e grupo. Exemplo D: $ ls -ld dir1 drwxr-xr-x 3 erika erika 72 2004-11-01 16:03 dir1 $ ls -l dir1/dir2/arq2 -rw-r--r-- 1 erika erika 0 2004-11-01 15:40 dir1/dir2/arq2 $ chmod -R a=rx dir1 $ ls -ld dir1 dr-xr-xr-x 3 erika erika 72 2004-11-01 16:03 dir1 $ ls -l dir1/dir2/arq2 -r-xr-xr-x 1 erika erika 0 2004-11-01 15:40 dir1/dir2/arq2 Modificamos recursivamente (opção -R) as opções de usuário, grupo e outros ( a ) do diretório dir1 para leitura e execução ( rx ). Repare que, devido ao fato das permissões terem sido aplicadas recursivamente, o arquivo arq2, que fica em um subdiretório abaixo de dir1 também recebeu as permissões. Exemplo E: $ ls -l total 0 -rwxrw-r-- 1 erika erika 0 2004-11-01 15:40 arq1 dr-xr-xr-x 3 erika erika 72 2004-11-01 16:03 dir1 129 PROGRAMA TÉCNICO CIDADÃO $ ls -l dir1 total 0 dr-xr-xr-x 2 erika erika 72 2004-11-01 16:03 dir2 $ chmod -x dir1 $ ls -l dir1 ls: dir1/dir2: Permissão negada total 0 $ cd dir1 bash: cd: dir1: Permissão negada $ chmod +x dir1 $ ls -l dir1 total 0 dr-xr-xr-x 2 erika erika 72 2004-11-01 16:03 dir2 $ cd dir1 O exemplo mostra que é necessário ter permissões de execução para entrar ou listar o conteúdo de um diretório. Isso acontece porque quando entramos em um diretório, na verdade estamos “executando” o arquivo especial que é o diretório, que contém a lista de todos os arquivos e diretórios dentro dele. Sem a permissão de execução não podemos entrar em um diretório, somente o root rompe essas barreiras. Modo octal de permissões Nesse modo, lidamos diretamente com o número de bits que compõem as permissões, conforme tabela abaixo: Bits Permissão 4 Leitura ( r ) 2 Gravação ( w ) 1 Execução ( x ) Dessa forma, se quisermos obter resultados específicos, basta somar o número de bits correspondente as permissões, conforme tabela a seguir: 130 PROGRAMA TÉCNICO CIDADÃO Permissão Soma de bits rwx 4+2+1=7 rw- 4+2+0=6 r-x 4+0+1=5 r-- 4+0+0=4 -wx 0+2+1=3 -w- 0+2+0=2 --x 0+0+1=1 --- 0+0+0=0 Por exemplo, para chegar ao resultado rwxr-xr--, utilizamos o modo 754 no chmod. Exemplo A: $ chmod 750 arq1 $ ls -l arq1 -rwxr-x--- 1 erika erika 0 2004-11-01 15:40 arq1 Exemplo B: $ chmod 644 arq1 $ ls -l arq1 -rw-r--r-- 1 erika erika 0 2004-11-01 15:40 arq1 DICA Pratique bastante permissões de acesso, pois são extremamente essenciais no dia a dia de um administrador de sistema e seu bom compreendimento evita algumas falhas de segurança. 131 PROGRAMA TÉCNICO CIDADÃO Máscara de usuário (umask) A umask (user mask) são 3 números que definem as permissões iniciais do dono, grupo e outros usuários que o arquivo ou diretório receberá quando for criado ou copiado pelo usuário atual. A principal função da umask é impedir que arquivos pessoais criados pelos usuários do sistema sejam legíveis por outros usuários assim que criados. Ela consegue esse resultado subtraindo um número de bits (o valor da umask) das permissões do arquivo que for criado. Por padrão, qualquer arquivo criado por um usuário no sistema não recebe permissões de execução, com exceção dos diretórios. Por exemplo, para todos os arquivos recém-criados, as permissões iniciais seriam 666 (tudo ativado, sem execução). Para chegar as permissões iniciais do arquivo criado após a influência do umask, basta subtrair o valor da umask da permissão padrão (666). Por exemplo, se o valor da umask for 22, os arquivos novos teriam permissão 644 ar a permissão padrão de arquivos recém-criados (666 – 22 = 644). É importante frizar que para arquivos copiados, o umask só modifica as permissões do arquivo de destino se o valor partindo de 777 e subtraído do valor da umask for menor, conforme o Exemplo B. A umask fica armazenada na memória durante o shell atual. Se modificarmos o valor da umask ela será redefinida para o padrão ao abrirmos um novo shell, e o valor modificado em um shell não influencia em outro. Sintaxe: umask [-p] [-S] [modo] 132 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -p -S Mostra a palavra umask antes do modo (sem muito sentido...) Utiliza o modo simbólico de permissões (Igual no comando chmod) Ambiente: $ mkdir ~/exercicios/umask; cd ~/exercicios/umask Exemplo A: $ umask 0022 $ touch arq1 $ ls -l total 0 -rw-r--r-- 1 erika erika 0 2004-11-01 18:42 arq1 $ umask 000 $ touch arq2 $ ls -l total 0 -rw-r--r-- 1 erika erika 0 2004-11-01 18:42 arq1 -rw-rw-rw- 1 erika erika 0 2004-11-01 18:42 arq2 Com o umask padrão, o arquivo criado (arq1) recebeu permissões 644. Após modificarmos o umask para 000 (anulando sua influência), o arquivo criado (arq2) recebeu permissões 666. Exemplo B: $ touch arq3 $ chmod -v 775 arq3 modo de `arq3' mudado para 0775 (rwxrwxr-x) $ umask 0022 $ cp arq3 arq4 $ ls -l total 0 -rw-r--r-- 1 erika erika 0 2004-11-01 18:42 arq1 -rw-rw-rw- 1 erika erika 0 2004-11-01 18:42 arq2 -rwxrwxr-x 1 erika erika 0 2004-11-01 19:12 arq3 -rwxr-xr-x 1 erika erika 0 2004-11-01 19:13 arq4 133 PROGRAMA TÉCNICO CIDADÃO Repare que o umask (22) agiu na permissão do arquivo original (arq3 = 775) e o arquivo arq4 foi criado com permissões 755. É preciso um pouco de atenção antes de escolher a umask, um valor mal escolhido pode causar problemas de acesso a arquivos, diretórios ou programas não sendo executados. O valor padrão da umask na maioria das distribuições atuais é 022. A umask é de grande utilidade para programas que criam arquivos/diretórios temporários, desta forma pode-se bloquear o acesso de outros usuários desde a criação do arquivo, evitando recorrer ao chmod. 134 PROGRAMA TÉCNICO CIDADÃO O SHELL BASH (BOURNE AGAIN SHELL) Conforme visto anteriormente, existe uma camada entre o sistema operacional (kernel) e o usuário, que “interpreta” os comandos digitados e os passa para o kernel, e vice-versa. Essa camada recebe o nome de interpretador de comandos, ou shell. Um shell no Linux utiliza-se de dispositivos especiais de entrada e saída (Vistos na tabela adiante) para se comunicar com o usuário. Dessa mesma forma, programas também utilizam desse método para interação com o usuário. Tecnicamente, o shell do Linux utiliza algum dispositivo de caracteres (/dev/tty*, /dev/pts/*, etc...) associado a 3 dispositivos especiais (stdin, stdout e stderr) estudados adiante para conseguir essa interação com o usuário. O linux conta com diversos interpretadores de comandos (shells), porém o mais utilizado nas distribuições é o shell bash. O bash é um “relançamento” de um antigo shell de UNIX, o sh. Bash significa Bourne Again Shell (Algo como “O shell que nasceu novamente”). Vale a pena lembrar que podem existir diversos interpretadores de comandos instalados no sistema operacional (Que tal uma olhada no arquivo /etc/shells?), e que podemos escolher qual shell será o padrão para determinado usuário com o comando chsh, visto anteriormente. Devido ao fato do shell bash ser o padrão na grande maioria das distribuições, é ele que estudaremos a seguir. Mesmo assim, muitas das características do bash existem em outros shells. Redirecionamento Tudo que é visto no terminal é formado com caracteres (por isso dispositivos de caracteres). Esses caracteres são resultado da saída de dados padrão dos comandos executados ou do próprio shell. Mas os comandos não se limitam a enviar caracteres para a tela do terminal 135 PROGRAMA TÉCNICO CIDADÃO (Saída de dados padrão), mas também podem (e devem) receber dados do terminal. Esse fluxo de caracteres pode fluir em 3 direções, conforme tabela abaixo: Descritor de Arquivo Nome do Dispositivo Abreviação 0 Entrada de dados padrão stdin 1 Saída de dados padrão stdout 2 Saída de erros padrão stderr O descritor de arquivo é utilizado para identificar “em qual direção” os caracteres irão fluir. Entrada de dados padrão (/dev/stdin) Dispositivo que cuida do fluxo de entrada para os dados que podem ser enviados para os programas em execução. A maior parte do tempo é o teclado que fica fica encarregado de “gerar” os dados que acabam sendo enviados para esse dispositivo. Porém, através de comandos de redirecionamento de shell (visto adiante) podem associar um arquivo como a entrada de dados padrão. Saída de dados padrão (/dev/stdout) Dispositivo pelo qual os programas normalmente enviam seus resultados de execução. Quando listamos arquivos com o comando ls, por exemplo, o resultado que o comando nos mostra é justamente a saída padrão, que visualizamos no monitor. Semelhante a entrada de dados padrão, podemos utilizar de comandos de redirecionamento para enviar a saída de um comando para um arquivo ou outro comando, conforme veremos em breve. 136 PROGRAMA TÉCNICO CIDADÃO Saída de erros padrão (/dev/stderr) Esse é um dispositivo bastante parecido com a saída de dados padrão, porém atua em um “canal” diferente, e serve para os programas enviarem qualquer mensagem de erro durante a execução. Assim como a saída de dados padrão, podemos redirecionar a saída de erros padrão para um arquivo. Operadores de Redirecionamento Para controlar a direção em que os dados devem fluir, o bash conta com operadores de redirecionamento. Esses operadores dizem basicamente para onde os caracteres tem que ir (stdin, stdout, stderr, arquivo, comando, etc...) e podem estar antes ou depois de um comando. São 3 os operadores de redirecionamento: Operadores de Saída de dados padrão (stdout): “>” e “>>” Sua função é redirecionar o fluxo de caracteres da stdout (que pode ser a saída de um comando, por exemplo) para algum arquivo ou dispositivo, lembrando que no Linux “tudo é arquivo”. Exemplo A: $ mkdir -p ~/exercicios/redirecionamento $ cd ~/exercicios/redirecionamento $ touch arq1 arq2 arq3 $ ls > listagem $ ls arq1 arq2 arq3 listagem $ cat listagem arq1 arq2 arq3 137 PROGRAMA TÉCNICO CIDADÃO Nesse exemplo, após criar nosso ambiente de testes, redirecionamos a saída do comando ls para um arquivo chamado listagem. Esse arquivo não existia anteriormente, mas foi criado devido ao redirecionamento. Repare que o conteúdo do arquivo é exatamente a saída do comando ls. Exemplo B: $ cd ~/exercicios/redirecionamento/ $ cat > arquivo.txt Um simples arquivo de texto. Pressione [Enter] Pressione [CTRL]+[D] $ cat arquivo.txt Um simples arquivo de texto. Acionamos o comando cat, sem nenhum argumento, e instruímos o bash para redirecionar a saída de dados padrão para um arquivo chamado arquivo.txt. Exemplo C: $ cat arquivo.txt Um simples arquivo de texto. $ echo "Novo conteúdo" > arquivo.txt $ cat arquivo.txt Novo conteúdo Ainda com o mesmo arquivo de testes, efetuamos outro redirecionamento, dessa vez com a saída do comando echo. Repare que o conteúdo do arquivo foi sobrescrito com o redirecionamento efetuado. Para concatenar o arquivo de saída ao invés de sobrescrever o seu conteúdo, utilizamos “dois” operadores de redirecionamento da stdout (>>), como no exemplo abaixo: Exemplo D: $ cat arquivo.txt Um simples arquivo de texto. 138 PROGRAMA TÉCNICO CIDADÃO $ echo "Novo conteúdo" >> arquivo.txt $ cat arquivo.txt Um simples arquivo de texto. Novo conteúdo Compare com o exemplo anterior. Exemplo E: $ echo "algum texto" > arquivo.txt $ cat arquivo.txt algum texto $ echo "algum texto novo" 0> arquivo.txt algum texto novo $ cat arquivo.txt $ echo "algum texto novo" 0> arquivo.txt > arquivo-novo.txt $ cat arquivo.txt $ cat arquivo-novo.txt algum texto novo Primeiro sobrescrevemos o conteúdo do arquivo arquivo.txt e constatamos isso com o comando cat. Logo depois, enviamos o redirecionamento da saída padrão “de volta” para a entrada padrão. Na verdade, o redirecionamento “0>” diz para o fluxo de caracteres ser enviado de volta para a entrada padrão (Descritor de arquivo 0, conforme tabela anterior), e não para o arquivo de destino. É por isso que o arquivo arquivo.txt ficou vazio após o redirecionamento com “0>”. Como o fluxo retorna para o shell, podemos redirecionar novamente ele, mas agora para um “novo arquivo”, chamado arquivo-novo.txt, que agora sim recebe o conteúdo do redirecionamento. O intuito de mostrar redirecionamentos como esses, não muito comuns no dia-a-dia do administrador, é familiarizar o administrador com o fluxo correto das informações no shell bash, assunto que tem peso muito alto em uma prova de certificação Linux como a Linux Professional Institute 1 (LPIC-1), que é o foco deste curso. 139 PROGRAMA TÉCNICO CIDADÃO Operadores de entrada de dados padrão: “<” e “<<” Não são amplamente utilizados quanto os operadores de saída de dados padrão. Sua função é redirecionar o fluxo de caracteres da stdin (que pode ser um arquivo contendo argumentos a serem tratados por um comando, por exemplo) para algum comando. Ainda no mesmo ambiente de testes dos exemplos anteriores (~/exercicios/redirecionamento), vamos aos exemplos: Exemplo A: $ cat arquivo.txt Um simples arquivo de texto. Novo conteudo $ cat < arquivo.txt Um simples arquivo de texto. Novo conteudo Digitamos dois comandos no exemplo. O primeiro é um simples “cat” no arquivo; O segundo tem o mesmo resultado, só que utiliza o redirecionamento do arquivo arquivo.txt como argumento para o comando cat. Como a função do comando cat é enviar para a stdout o conteúdo que lhe for passado (geralmente um arquivo), o mesmo pode ser feito com um fluxo de dados (caracteres) vindo de um redirecionamento da stdin. Da mesma forma que o redirecionamento de saída de dados padrão, podemos concatenar o fluxo de caracteres utilizando dois operadores p/ o mesmo sentido, nesse caso “<<”. Este redirecionamento serve principalmente para marcar o fim de exibição de um bloco. Este é especialmente usado em conjunto com o comando cat, mas também tem outras aplicações. Exemplo B: $ cat << final > este texto > sera mostrado > ate que a palavra final 140 PROGRAMA TÉCNICO CIDADÃO > seja encontrada > sozinha na linha > final este texto sera mostrado ate que a palavra final seja encontrada sozinha na linha Redirecionando a saída de erros padrão (stderr) Em quaisquer dos redirecionamentos aprendidos até agora, podemos utilizar para redirecionar a saída de erros padrão (stderr) ao invés da saída de dados padrão (stdout) utilizando o descritor de arquivo 2. Recapitulando, os comandos e scripts utilizam-se da saída de dados padrão para enviar o fluxo de caracteres a fim de notificar o usuário sobre o que está havendo no comando (a saída de uma listagem de arquivos com o comando ls, por exemplo. Esses mesmos comandos e scripts utilizam-se de um “canal” diferente para enviar informações sobre erros em sua execução para o shell. O “canal”, nesse caso, é o descritor de arquivo. Para enviar informações (caracteres) sobre erros provenientes dos comandos e scripts em execução, estes utilizam o descritor de arquivo 2. Exemplo A: $ ls $ ls inexistente.txt > arquivo.txt ls: inexistente.txt: Arquivo ou diretório não encontrado $ cat arquivo.txt $ ls inexistente.txt 2> erros.txt $ cat erros.txt ls: inexistente.txt: Arquivo ou diretório não encontrado Tentamos propositadamente listar um arquivo inexistente (inexistente.txt) com o comando ls, causando um erro no programa. O comando ls utilizou-se da saída de erros padrão (stderr) para enviar um fluxo de caracteres a fim de notificar que não encontrou o arquivo especificado. 141 PROGRAMA TÉCNICO CIDADÃO Como o redirecionamento inicial que fizemos apenas redireciona a saída de dados padrão para o arquivo arquivo.txt, a stderr é mostrada na tela, e visualizamos assim a mensagem de erro. No redirecionamento seguinte, redirecionamos a stderr para um arquivo chamado erros.txt (redirecionamento 2>). Exemplo B: $ rm arquivo.txt erros.txt $ lss > stdout.txt 2>stderr.txt $ ls stderr.txt stdout.txt $ cat stderr.txt bash: lss: command not found $ ls stderr.txt inexistente.txt >stdout.txt 2>>stderr.txt $ ls stderr.txt stdout.txt $ cat stderr.txt bash: lss: command not found ls: inexistente.txt: Arquivo ou diretório não encontrado Após digitar um comando inexistente (lss), causamos um erro no shell, que nos notifica através da stderr. A saída de nosso comando “inexistente” (vazia) foi redirecionada para o arquivo stdout.txt e a saída de erros padrão (stderr) foi redirecionada para o arquivo stderr.txt. No redirecionamento do comando ls, que procurava listar 2 arquivos (stderr.txt e inexistente.txt), foram gerados dois fluxos de saída: Um deles envia para a stdout o nome do arquivo stderr.txt, que foi encontrado na listagem. O segundo fluxo envia para a stderr uma notificação de que não foi possível encontrar o arquivo inexistente.txt. Repare que concatenamos a saída da stderr, e assim não sobrescrevemos o conteúdo do arquivo stderr.txt. Redirecionamento com pipes: “|” O pipping é um recurso que permite conectar a saída de um comando na entrada de outro comando subseqüente, sem limitações quanto ao número de comandos a serem conectados, 142 PROGRAMA TÉCNICO CIDADÃO desde que cada um deles leia dados da saída padrão do comando anterior e escreva sua saída na entrada de dados do próximo comando. Isso mantém o fluxo entre os comandos. Encare o pipe como um encanamento (E realmente “pipe” significa “cano” em inglês.), onde interconectamos os canos uns aos outros (comandos), formando um encanamento, onde a água (fluxo de caracteres) irá passar. Ambiente: $ mkdir ~/redirecionamento/pipe -p $ cd ~/redirecionamento/pipe/ $ touch arq1 arq2 arq3 Primeiro criamos o nosso ambiente de exercícios. Exemplo A: $ ls arq1 arq2 arq3 $ ls |grep 2 arq2 $ ls |grep [23] arq2 arq3 No diretório atual existem 3 arquivos (arq1, arq2 e arq3). Utilizamos o comando ls unido ao comando grep através de um pipe para filtrar nossa saída de texto (stdout) duas vezes. Na primeira vez, o comando ls envia a lista dos 3 arquivos para a stdin do comando grep, que por sua vez, só mostra na tela o nome do arquivo que contém o número 2, nesse caso, arq2. Depois, a única coisa que muda é a filtragem do grep, que passa a mostrar os nomes dos arquivos que contém o número 2 ou 3, nesse caso são 2 arquivos, arq2 e arq3. Exemplo B: $ ls /bin |grep mount mount mountpoint 143 PROGRAMA TÉCNICO CIDADÃO umount Listamos o conteudo do diretório /bin e utilizamos um pipe para “filtrar” a saída da listagem com o comando grep, mostrando somente os comandos que contém a palavra mount. No dia-a-dia de um administrador de sistemas Linux, torna-se necessária a utilização de muitos pipes em uma mesma linha de comando para chegar em algum resultado em comum. No decorrer do curso iremos nos deparar com diversas situações assim, mas por enquanto, observe (e teste) alguns exemplos: $ ps aux |grep ^root |more $ ls -lR /usr/local |grep lib |grep rwxrwxr-x |more Diferenças entre o “|” e o “>” A principal diferença entre o “|” e o “>”, é que o pipe envolve processamento entre comandos, ou seja, a saída de um comando é enviado a entrada do próximo comando e o “>” redireciona a saída de um comando para um arquivo ou dispositivo (lembrando que dispositivos também não passam de arquivos especiais). Em qualquer dos exemplos anteriores com pipe, um resultado diferente seria obtido usando um “>” no lugar do “|”; No “Exemplo B”. se o comando “ls /bin |grep mount” fosse substituído por “ls /bin >grep mount” (o pipe trocado por >), teria um resultado completamente diferente, pois iria redirecionar a saída do comando ls para um arquivo chamado grep. Comando tee É importante saber do comando tee nesse ponto do estudo, pois sua função é redirecionar o fluxo de caracteres que lhe foi passado (por um pipe, por exemplo) para um arquivo (tal como um simples redirecionamento “>”) e ao mesmo tempo mostra na tela (stdout) o mesmo 144 PROGRAMA TÉCNICO CIDADÃO conteúdo que foi redirecionado. Em miúdos, seria como redirecionar a saída de um comando p/ um arquivo e continuar vendo a saída na tela normalmente. Sintaxe: comando| tee [-a] [arquivo] Exemplo A: $ ls -la ~/exercicios | tee /tmp/listagem.txt total 1 drwxr-xr-x 5 erika erika 128 2004-11-30 21:15 . drwxr-xr-x 27 erika erika 1144 2004-12-01 16:56 .. drwxr-xr-x 3 erika erika 96 2004-11-01 15:40 chmod drwxr-xr-x 2 erika erika 112 2004-12-01 13:36 redirecionamento drwxr-xr-x 2 erika erika 144 2004-11-01 19:19 umask $ cat /tmp/listagem.txt total 1 drwxr-xr-x 5 erika erika 128 2004-11-30 21:15 . drwxr-xr-x 27 erika erika 1144 2004-12-01 16:56 .. drwxr-xr-x 3 erika erika 96 2004-11-01 15:40 chmod drwxr-xr-x 2 erika erika 112 2004-12-01 13:36 redirecionamento drwxr-xr-x 2 erika erika 144 2004-11-01 19:19 umask A saída do comando foi mostrada normalmente na tela e ao mesmo tempo gravada no arquivo listagem.txt. Exemplo B: $ cat /etc/fstab |tee /tmp/listagem.txt /dev/hda2 / reiserfs defaults 0 0 /dev/hda5 none swap sw 0 0 proc /proc proc defaults 0 0 /dev/fd0 /floppy auto user,noauto 0 0 /dev/cdrom /cdrom iso9660 ro,user,noauto 0 /dev/hda1 /boot ext3 defaults 0 2 $ ls ~/exercicios |tee -a /tmp/listagem.txt chmod redirecionamento umask 0 145 PROGRAMA TÉCNICO CIDADÃO $ cat /tmp/listagem.txt /dev/hda2 / reiserfs defaults 0 /dev/hda5 none swap sw 0 0 proc /proc proc defaults 0 0 /dev/fd0 /floppy auto user,noauto 0 0 /dev/cdrom /cdrom iso9660 ro,user,noauto 0 /dev/hda1 /boot ext3 defaults 0 2 chmod redirecionamento umask 0 0 Utilizando a opção -a, o conteúdo do arquivo de destino será concatenado, ao invés de sobrescrito. Tabela de Redirecionamentos A tabela abaixo mostra um resumo das funções de cada operador de redirecionamento. Redirecionador Função comando > arquivo Redireciona a saída de dados padrão (stdout) comando < arquivo Redireciona a entrada de dados padrão (stdin) comando >> arquivo Concatena a saída de dados padrão (stdout) comando << arquivo Concatena a entrada de dados padrão (stdin) comando 2> arquivo Redireciona a saída de erros padrão (stderr) comando 2>> arquivo Concatena a saída de erros padrão (stderr) comando1 | comando2 Utiliza a stdout do comando1 como stdin do comando2 146 PROGRAMA TÉCNICO CIDADÃO Paginadores O comando more pode ser utilizado para leitura de arquivos que ocupem mais de uma tela. Quando toda a tela é ocupada, o more efetua uma pausa e permite que você pressione [Enter] ou [espaço] para continuar avançando no arquivo. Para sair do more pressione [q]. O comando less também segue o mesmo propósito geral, porém permite recuarmos o texto que já rolou a tela, sendo um “paginador” mais eficiente que o more. Os páginadores são amplamente utilizados para paginar fluxos de texto. Exemplos: ps ax |more ps ax |less ls /etc |less Caracteres especiais do bash (Metacaracteres) Também conhecidos como metacaracteres (ou wildcards), esses caracteres especiais são assim entitulados porque desempenham funções que vão além de simples caracteres. Os principais deles são “?” e “*”. O metacaractere “?” substitui um caractere qualquer no nome de um arquivo. O “*” é antigo conhecido até mesmo dos tempos de DOS, onde era utilizado da seguinte forma para referenciar todos os arquivos do diretório: *.*. No Linux, para obter o mesmo resultado, basta um único asterisco: *. Um bom conhecimento sobre metacaracteres é determinante durante uma prova para certificação em Linux. Ambiente: $ mkdir -p ~/exercicios/metacaracteres 147 PROGRAMA TÉCNICO CIDADÃO $ cd ~/exercicios/metacaracteres/ $ touch brasil brazil Brasil Brazil BRASIL BRAZIL $ ls brasil Brasil brazil Brazil BRASIL BRAZIL Antes de começar com os exercícios, devemos criar o ambiente de testes. Exemplo A: $ ls bra?il brasil brazil $ ls ?ra?il brasil Brasil brazil Brazil No primeiro comando, o ls listou os arquivos que contivessem bra, seguidos de qualquer caractere, e terminavam com il. Como haviam dois arquivos que casavam com os critérios, somente esses foram mostrados. No segundo comando foi utilizado dois metacaracteres, um para o primeiro e outro para o quarto caractere do arquivo. Exemplo B: $ $ ls bra* brasil brazil $ ls *rasil brasil Brasil O metacaractere * é muito mais fácil de entender, pois casa com qualquer coisa, quantas vezes for necessário. O que o diferencia do metacaractere “?” é que este casa com qualquer coisa somente uma vez. Para casar uma pesquisa com um determinado número de caracteres, podemos agrupar o metacaractere “?”. Exemplo C: $ touch casa casas casais casinhas $ ls casa?? casais 148 PROGRAMA TÉCNICO CIDADÃO $ ls casa* casa casais casas $ rm -fv cas* removed `casa' removed `casais' removed `casas' removed `casinhas' Os critérios do comando ls era basicamente qualquer arquivo que comece com “casa” e contenha mais dois caracteres quaisquer (casa??), diferente do segundo ls, que listaria arquivos que iniciem com casa e possam ou não conter quaisquer outros caracteres depois (casa*). Não esqueça de remover os arquivos conforme o exemplo, para que não atrapalhe nos outros exemplos. Alternativamente, podemos utilizar outros metacaracteres como “[“ e “]” para melhor filtrar os critérios a serem passados a linha de comando. Conforme exemplo abaixo. Exemplo D: $ ls brasil Brasil BRASIL brazil Brazil BRAZIL $ ls [Bb]rasil brasil Brasil $ ls ?ra[sz]il Brasil Brazil Repare em todos os arquivos que existem atualmente no diretório e quais arquivos foram selecionados pelo comando ls. Pratique isso bastante, pois é de extrema importância em um exame de certificação como o Linux Professional Institute 101 (LPI-101). Também é possível especificar um range de letras ou números dentre os metacaracteres “[“ e “]” para facilitar nossas buscas. Exemplo E: $ touch 1brasil 2brasil 11brasil 22brasil $ ls [a-z]rasil 149 PROGRAMA TÉCNICO CIDADÃO brasil Brasil $ ls [c-z]rasil ls: [c-z]rasil: Arquivo ou diretório não encontrado $ ls [0-9]brasil 1brasil 2brasil $ ls [0-9][0-9]brasil 11brasil 22brasil Listamos primeiramente todos os arquivos cujo primeiro caractere é alguma letra entre a e z (O ls, nesse caso, não faz distinção de maiúsculas e minúsculas) e o restante da palavra seja “rasil”. Quando tentamos listar os arquivos cujo primeiro caractere seja alguma letra entre c e z e o restante da palavra seja “rasil”, nenhum é encontrado. O próximo ls mostra os arquivos cujo primeiro caractere é um número somente seguido da palavra “brasil”. Repare em como utilizamos os metacaracteres para listar os arquivos que contenham dois números no início do nome, seguidos pela palavra “brasil”. O mesmo resultado de [a-k], por exemplo, pode ser conseguido com [abcdefghijk]. É apenas uma forma mais fácil de se expressar a mesma coisa. Executando múltiplos comandos em ordem determinada Podemos desencadear a execução de diversos comandos em ordem, como apenas uma linha de comando. Para tal, utilizamos o metacaractere “;”. Exemplo A: $ ls ?rasil ; echo “Outro Comando” brasil Brasil Outro Comando A primeira linha da saída é resultado do comando ls, já a segunda refere-se ao comando echo, que foi executado assim que o ls executou. Esse sistema não deve ser novidade para nós, pois já utilizamos por diversas vezes até agora no decorrer do curso. 150 PROGRAMA TÉCNICO CIDADÃO Exemplo B: $ numero=2 $ (numero=1; echo "Dentro: $numero" ); echo "Fora: $numero" Dentro: 1 Fora: 2 Podemos “agrupar” comandos entre parênteses para “proteger” o conteúdo de variáveis, permitindo que o valor de alguma variável de shell seja diferente para os comandos entre parênteses, sem interferir no valor das variáveis fora. A princípio é um pouco confuso entender, mas depois se torna simples. Foi definido o valor 2 para a variável $numero. Repare que dentro dos parênteses essa variável tem o valor 1, mas fora continua tendo o valor 2, pois a “clausura” imposta pelos parênteses impede que qualquer variável ali criada altere as já existentes. FIQUE LIGADO Este é um outro tópico de grande peso em provas para certificações Linux de nível básico. É imprescindível um bom domínio sobre esse tipo de metacaracteres, pois questões assim costumam ter um baixo nível de acertos. Também é possível simplificar parâmetros dos comandos. Para tal façanha, o bash nos dispõe dos metacaracteres “{“ e “}” (chaves). Analise os exemplos. Exemplo C: $ cd ~/exercicios/metacaracteres; rm * $ touch arquivo{1,2,3}-{a,b,c}.{txt,doc} $ ls arquivo1-a.doc arquivo1-c.doc arquivo2-b.doc arquivo3-a.doc arquivo3-c.doc arquivo1-a.txt arquivo1-c.txt arquivo2-b.txt arquivo3-a.txt arquivo3-c.txt arquivo1-b.doc arquivo2-a.doc arquivo2-c.doc arquivo3-b.doc arquivo1-b.txt arquivo2-a.txt arquivo2-c.txt arquivo3-b.txt 151 PROGRAMA TÉCNICO CIDADÃO Com apenas um comando touch, agrupamos diversas instâncias do mesmo comando, mais precisamente 18 vezes. Graças aos 3 blocos de chaves, o bash interpretou o seguinte: Primeiro formou-se o parâmetro arquivo1-a.txt, depois arquivo1-a.doc, em seguida arquivo1-b.txt, e assim por diante. A ordem completa pode ser constatada apenas trocando o comando touch pelo comando echo, deixando o comando com a seguinte aparência: $ echo arquivo{1,2,3}-{a,b,c}.{txt,doc} arquivo1-a.txt arquivo1-a.doc arquivo1-b.txt arquivo1-b.doc arquivo1-c.txt arquivo1-c.doc arquivo2-a.txt arquivo2-a.doc arquivo2-b.txt arquivo2-b.doc arquivo2-c.txt arquivo2-c.doc arquivo3-a.txt arquivo3-a.doc arquivo3-b.txt arquivo3-b.doc arquivo3-c.txt arquivo3-c.doc Agora não esqueça de limpar a bagunça: $ rm * Operadores de controle lógico: && e || (AND e OR) O shell bash também dispõe de metacaracteres operadores de controle lógico, os conhecidos AND e OR de diversas linguagens de programação. Mas aqui eles até que são bem simples de compreender. O operador de controle AND é representado por dois sinais de “&”, serve para agrupar comandos e somente executar o próximo comando caso o primeiro tenha obtido sucesso. Exemplo A: $ ls $ ls arquivo.txt 2>/dev/null && echo "Arquivo Encontrado" $ touch arquivo.txt $ ls arquivo.txt 2>/dev/null && echo "Arquivo Encontrado" arquivo.txt Arquivo Encontrado $ rm arquivo.txt Causamos um erro no comando ls, pois o arquivo arquivo.txt não existia no diretório (Repare que direcionamos a stderr para uma saída nula). Devido ao comando ls não ter obtido êxito, o 152 PROGRAMA TÉCNICO CIDADÃO comando echo não foi executado. Após a criação do arquivo arquivo.txt, o comando echo foi executado. Esse tipo de agrupamento é muito importante para criar condicionais para rotinas de administração do sistema. Só ejetar a fita DAT se o backup for concluído com êxito, por exemplo. Temos também o operador de controle OR, que é representado por dois sinais de pipe “||”; Ele age basicamente da seguinte forma: O comando após o operador de controle OR somente será executado caso o primeiro falhe. Algo como um comando reserva, muito utilizado em scripts para notificação caso algum comando falhe. Exemplo B: $ ls arquivo.txt 2>/dev/null || echo "Arquivo Nao existe" Arquivo Nao existe $ touch arquivo.txt $ ls arquivo.txt 2>/dev/null || echo "Arquivo Nao existe" arquivo.txt Repare que o comando echo entrou em ação devido ao comando ls ter falhado, o que não ocorreu mais após criarmos o arquivo arquivo.txt. DICA Caso o nome de um arquivo ou o argumento de um comando contenha um caractere que porventura seja igual a um metacaractere, esse deve ser “escapado” pelo shell; Para tal, basta preceder o caractere com uma barra invertida “\”. Configuração do shell bash O shell bash, apesar de ser um interpretador de comandos, também é um programa instalado no sistema, que conta com seus arquivos de configuração. Esses arquivos são lidos quando o bash é invocado, e isto geralmente é feito quando determinado usuário efetua login no sistema. 153 PROGRAMA TÉCNICO CIDADÃO As distribuições Linux já costumam disponibilizar estes arquivos com prévias configurações funcionais do bash. Estudaremos a seguir cada um desses arquivos, e quais suas respectivas funções. O shell bash pode ser iniciado de forma interativa e não interativa. Um shell interativo, é o shell que conhecemos, onde digitamos comandos “interativamente”. Este tipo de shell se divide em duas formas, shell interativo de login, que é o shell carregado quando efetuamos o login, e o shell interativo comum, que é o shell carregado manualmente após um login. É possível carregar um shell desse tipo invocando-se o comando bash. Um shell não-interativo é um shell pouco usado, que não recebe comandos diretamente e só serve para executar um comando ou script (“bash -c comando”, por exemplo). Quando o bash é invocado como um shell interativo de login, primeiro ele verifica a existência do arquivo /etc/profile, caso ele exista, os comandos nele contidos serão lidos e executados. Após ler e executar esse arquivo, o bash faz o mesmo com o arquivo ~/.bash_profile, ~/.bash_login e ~/.profile, nessa mesma ordem, lendo e executando os comandos presentes nesses arquivos. Quando um shell interativo de login é finalizado, o bash lê e executa os comandos contidos no arquivo ~/.bash_logout, caso exista. Se o shell bash for invocado de forma interativa comum (Não é um shell de login), o bash somente lê e executa os comandos contidos nos arquivos /etc/bash.bashrc (ou /etc/bashrc em algumas distribuições), em seguida no arquivo ~/.bashrc. IMPORTANTE Os arquivos /etc/bashrc e ~/.bashrc não são lidos pelo bash quando invocamos um shell interativo de login, porém alguns scripts como o /etc/profile ou ~/.bash_profile podem “chamar” alguns desses arquivos e executá-los. O importante a saber é que o bash não procura por esses arquivos nestas circunstâncias. 154 PROGRAMA TÉCNICO CIDADÃO A seguir veremos exemplos dos arquivos comentados nessa seção. Arquivo /etc/profile if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games" fi if [ "$PS1" ]; then if [ "$BASH" ]; then PS1='\u@\h:\w\$ ' else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi export PATH umask 022 Repare que este arquivo configura o PATH dos comandos, a aparência do prompt (Variável $PS1) e configura a umask padrão. Arquivo ~/.bash_profile # ~/.bash_profile: executed by bash(1) for login shells. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package. # the default umask is set in /etc/login.defs 155 PROGRAMA TÉCNICO CIDADÃO #umask 022 # include .bashrc if it exists if [ -f ~/.bashrc ]; then . ~/.bashrc fi # the rest of this file is commented out. # set PATH so it includes user's private bin if it exists #if [ -d ~/bin ] ; then # PATH=~/bin:"${PATH}" #fi # do the same with MANPATH #if [ -d ~/man ]; then # MANPATH=~/man: # export MANPATH #fi Este arquivo possui uma rotina que verifica a existência de um outro arquivo chamado ~/.bashrc, e caso este arquivo exista, será executado pelo bash. Arquivo /etc/bash.bashrc ou /etc/bashrc # System-wide .bashrc file for interactive bash(1) shells. # To enable the settings / commands in this file for login shells as well, # this file has to be sourced in /etc/profile. # If not running interactively, don't do anything [ -z "$PS1" ] && return # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. shopt -s checkwinsize # set variable identifying the chroot you work in (used in the prompt below) if [ -z "$debian_chroot" -a -r /etc/debian_chroot ]; then 156 PROGRAMA TÉCNICO CIDADÃO fi debian_chroot=$(cat /etc/debian_chroot) # set a fancy prompt (non-color) PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' # enable bash completion in interactive shells #if [ -f /etc/bash_completion ]; then # . /etc/bash_completion #fi Arquivo /etc/bash.bashrc de uma distribuição Debian. Arquivo ~/.bashrc # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If not running interactively, don't do anything: [ -z "$PS1" ] && return # don't put duplicate lines in the history. See bash(1) for more options #export HISTCONTROL=ignoredups # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. #shopt -s checkwinsize # enable color support of ls and also add handy aliases if [ "$TERM" != "dumb" ]; then eval `dircolors -b` alias ls='ls --color=auto' #alias dir='ls --color=auto --format=vertical' #alias vdir='ls --color=auto --format=long' fi # some more ls aliases #alias ll='ls -l' #alias la='ls -A' 157 PROGRAMA TÉCNICO CIDADÃO #alias l='ls -CF' # set variable identifying the chroot you work in (used in the prompt below) #if [ -z "$debian_chroot" -a -r /etc/debian_chroot ]; then # debian_chroot=$(cat /etc/debian_chroot) #fi # set a fancy prompt (non-color) PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' # Comment in the above and uncomment this below for a color prompt #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\] \w\[\033[00m\]\$ ' # If this is an xterm set the title to user@host:dir case $TERM in xterm*|rxvt*) PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"' ;; *) ;; esac # enable programmable completion features (you don't need to enable # this, if it's already enabled in /etc/bash.bashrc). #if [ -f /etc/bash_completion ]; then # . /etc/bash_completion #fi Repare na existência de opções que podem ser habilitadas apenas descomentando as linhas corretas. Este arquivo também foi retirado de um sistema Debian. Arquivo ~/.bash_logout Este arquivo não costuma existir por padrão em algumas distribuições Linux. Como dito anteriormente, a função desse arquivo é executar alguma(s) tarefa(s) ao sairmos do sistema, que podem se tornar necessárias com o tempo. É importante frisar que este arquivo somente será executado ao sairmos de um shell bash interativo de login. 158 PROGRAMA TÉCNICO CIDADÃO Execute o comando abaixo para criar um novo ~/.bash_logout: $ echo “echo Ate Logo... ; read” > ~/.bash_logout Em seguida, efetue logout do terminal de login (Faça em um terminal texto, como tty1, por exemplo). Ao sairmos, será mostrada a mensagem “Ate Logo...” na tela, que desaparecerá ao pressionarmos qualquer outra tecla. Arquivo ~/.bash_history Arquivo já estudado anteriormente, armazena os últimos comandos digitados pelo usuário. Aliases de shell Aliases de shell são formas de se “apelidar” comandos, criando comandos intermediários de atalho para eles. Aliases são definidos com o comando alias, que é um dos comandos integrados ao shell bash. Como o comando alias (sem nenhum argumento) podemos listar os alias atualmente configurados no shell atual. Caso deseje apagar um alias, utilize o comando unalias. Sintaxe: alias nome=”qualquer comando valido do shell” Exemplo A: $ alias alias ls='ls --color=auto' $ alias cls="clear" $ alias alias cls='clear' alias ls='ls --color=auto' $ cls 159 PROGRAMA TÉCNICO CIDADÃO Definimos um alias para o comando cls (velho conhecido do DOS), que não existe no Linux. Como o comando clear tem o mesmo efeito em sistemas Linux, criamos um alias para que quando o usuário digitar o comando cls, o sistema execute clear. Exemplo B: alias alias alias alias alias alias alias desligar=’shutdown -h now’ reiniciar=’shutdown -r now’ ls=’ls –-color’ cd-on=’mount /dev/cdrom’ cd-off=‘umount /dev/cdrom’ x=’startx’ limpa="clear ; date" Este atalho deve ser escrito no arquivo /etc/bashrc. Se não existir esse arquivo, crie o arquivo com vi e salve-o no diretório /etc com o nome bashrc. DICA Os alias definidos na linha de comando manualmente se perdem ao saírmos do shell atual. Para tornar os aliases permanentes, basta adicioná-los ao arquivo /etc/bash.bashrc ou ~/.bashrc caso queira restringir os novos aliases somente para algum(ns) usuário(s) do sistema. O próprio ~/.bashrc costuma ter alguns aliases já pré-definidos ou comentados. Escape de Comandos no bash É importante que o administrador de sistemas Linux esteja habituado com o escape de comandos no shell, sem contar que é um tópico de peso para um exame de certificação Linux do nível proposto pelo treinamento. Os principais caracteres de escape são: ' (aspas simples), “ (aspas duplas), e \ (barra invertida). Qualquer string adequada entre aspas simples será interpretada literalmente pelo shell; O mesmo acontece com as aspas duplas. A diferença entre as aspas é que no caso das simples, 160 PROGRAMA TÉCNICO CIDADÃO não é permitida a substituição de comandos (visto adiante), já entre as aspas duplas isso é permitido. Qualquer caractere logo após a \ é considerado literalmente. Colocar uma \ no final da linha diz ao bash para não interpretar a quebra de linha, e continuar o comando na linha de baixo (vide exemplos). A substituição de comandos é uma característica do bash (herdada de outros shells) que permite a um comando utilizar como parâmetro ou parte de um parâmetro a saída de outro comando que esteja enquadrado entre ` (crases) ou no formato $(comando), conforme exemplo abaixo: Exemplo A: $ echo "Existem `ls -l |wc -l` arquivos em $(pwd)" Existem 8 arquivos em /home/erika Ocorreram 2 substituições e 1 escape de comandos na linha acima. As duas substituições referem-se a saída do comando “ls -l |wc -l”, que listou os arquivos no diretório e em seguida usou o comando “wc -l“para “contar” quantas linhas haviam na saída, que resultou em 8. A segunda substituição refere-se a saída do comando pwd, que mostra o caminho do diretório atual. Repare que as duas substituições de comandos foram efetuadas de formas diferentes. O escape de comandos refere-se a tudo que está compreendido entre as aspas duplas no comando. Exemplo B: $ echo "Um teste 'simples' demais" Um teste 'simples' demais $ echo 'Um teste 'simples' demais' Um teste simples demais $ echo 'Um teste "simples" demais' Um teste "simples" demais Repare em como o escape de comandos atua. Quando as aspas são iguais dentro e fora, o escape de comandos é anulado. 161 PROGRAMA TÉCNICO CIDADÃO DOCUMENTAÇÃO Documentação é essencial no que tange o sistema operacional Linux, com seus diversos comandos e termos. É de grande importância que o administrador, por mais experiente que seja, saiba consultar a documentação do sistema. No Linux, existem alguns padrões de documentação que servem como repositório de informações sobre os comandos e termos relacionados ao sistema. Essas informações podem ser acessadas pelo próprio sistema. Os comandos e termos costumam estar documentados nas chamadas páginas de manual e diretório de documentação. O diretório de documentação de um sistema Linux costuma ser /usr/share/doc. Dentro desse diretório existem diversos subdiretórios que hospedam documentação sobre os comandos e termos relacionados. Por exemplo, para obter mais informações sobre o bash, basta analisar os arquivos dentro do diretório /usr/share/doc/bash. É bem simples. As páginas de manual são ligeiramente mais complexas, mas iremos estudá-las em seguida. DICA Geralmente os comandos contam com parâmetros de ajuda no formato: “comando –help” ou “comando -h”. Isso facilita bastante a busca por informações sobre determinado parâmetro de comando. Páginas de manual As páginas de manual definem um padrão com que os programas instalados devem dispor a documentação. Atualmente, existem dois tipos de páginas de manual: As mais antigas, porém ainda amplamente utilizadas são as “man pages” e o formato mais recente de documentação que são as “info pages”. Estudaremos com mais cautela cada uma delas. Man pages As páginas de manual no formato de “man pages” acompanham quase todos os programas GNU/Linux. Elas trazem uma descrição da funcionalidade de cada comando ou programa e detalhes sobre o funcionamento dos parâmetros. Uma página de manual é visualizada na forma 162 PROGRAMA TÉCNICO CIDADÃO de texto com rolagem vertical. Também é comum encontrar documentação para arquivos de configuração do sistema, e não somente para comandos. Para “acessar” as man pages, utilizamos o comando man. Sintaxe: man [seção] termo Sua utilização é bem simples. Para ler a página de manual do comando ls, por exemplo, utilizamos “man ls”. Para facilitar a organização das man pages, foram definidas seções para as páginas de manual deste formato. Estas seções estão descritas na tabela a seguir. Seção Descrição 1 Programas executáveis ou programas do shell 2 Chamadas do sistema (Funções providas pelo Kernel) 3 Chamadas de biblioteca (Funções providas por bibliotecas do sistema) 4 Arquivos especiais (Geralmente dentro do diretório /dev) 5 Arquivos de configuração 6 Jogos 7 Miscelânea (Qualquer coisa enquadrar nas demais) 8 Comandos de administração do sistema (Geralmente os que ficam em /sbin) 9 Rotinas do Kernel (Ainda não é o padrão, talvez mude) que arquivos não se 163 PROGRAMA TÉCNICO CIDADÃO Dessa forma, podemos direcionar nossa busca por documentação para uma página de manual específica, pois é possível que a documentação de um programa exista em 2 ou mais categorias, como é o caso do comando crontab que é documentado na seção 1 (sobre o próprio comando) e 5 (formato do arquivo de configuração para o comando). Sendo assim, como as seções são numeradas e estão em ordem crescente, o man irá mostrar a primeira seção sobre o comando encontrada. Nesse caso do crontab, ao digitarmos ”man crontab”, o man irá nos mostrar a primeira página de manual sobre o comando crontab que ele encontrar, nesse caso a seção 1. Caso queira acessar a página de manual do crontab da seção 5 ao qual ele também pertence, utilizamos o comando da seguinte forma: man 5 crontab Uma man page segue um formato padrão para dispor as informações na página. A primeira linha da saída é o cabeçalho, que costuma mostrar nas duas extremidades o nome da página de manual seguida do número da seção entre parênteses. No caso da seção 5 do comando crontab, a primeira linha seria assim: CRONTAB(1) CRONTAB(1) Para navegar na página de manual, utilizamos as setas do teclado, [PGUP] e [PGDOWN]. Para Atualizar a tela, tecla [r], para sair [q]. Os arquivos de man pages ficam armazenados no diretório /usr/share/man. Lá existem diversos subdiretórios que referenciam as respectivas seções em diversos idiomas disponíveis, muitas vezes organizadas por links simbólicos. DICA Utilize o comando man -w manpage para descobrir em que seções das páginas de manual o termo pesquisado reside. 164 PROGRAMA TÉCNICO CIDADÃO Info Pages É considerada a evolução das man pages. Sua principal diferença é a inclusão de um novo sistema de navegação através das páginas, que agora permitem links umas entre as outras, lembrando muito o conceito de páginas web. Se pressionarmos [Enter] em cima de uma palavra destacada, a info page nos levará a seção correspondente. É um pouco mais simples do que as man pages, pois não está dividida em seções (ainda). Se o nome do comando ou programa não for digitado, a info pages mostra a lista de todos os manuais de comandos e programas disponíveis. A navegação da info pages é feita através de nomes marcados com um“*” (hipertextos) que se pressionarmos [Enter], nos levará até a seção correspondente. Sintaxe: info [comando ou programa] Tabela de Navegação Tecla q ? n p u m d Função Sai da info page Mostra a tela de ajuda de navegação Avança uma página Volta uma página Sobe um nível de página Abre mecanismo de busca para localizar uma página dentro das info pages Volta ao índice de documentos Exemplo: $ info ls 165 PROGRAMA TÉCNICO CIDADÃO Sistema de buscas na documentação do sistema Algumas vezes nos deparamos com alguma situação em que precisamos obter informações sobre “algo”, que pode ser um comando ou termo relacionado, que não sabemos exatamente para que serve. (Sempre aparece aquele comando inusitado). É possível efetuar buscas por determinados critérios na documentação do sistema, a fim de encontrar a página de manual (manpages ou infopages) correta para o comando ou termo pesquisado. Criando a base de dados Antes de efetuarmos qualquer pesquisa, é preciso criar (ou atualizar, se necessário) a base de dados das páginas de manual com o comando makewhatis, portanto, é necessário rodar esse comando sempre que uma nova página de manual for adicionada ao sistema (ao instalarmos programas, por exemplo) ou antes da primeira utilização, quando a base de dados ainda não existe. IMPORTANTE Algumas distribuições Linux (como o Debian, por exemplo), utilizam o comando mandb -c para criar a base de dados ao invés do comando makewhatis. Efetuando pesquisas na documentação Após a base já estar criada, podemos efetuar pesquisas de duas maneiras na base de dados das páginas de manual. A primeira delas é com o comando whatis, que efetua a busca com base no 166 PROGRAMA TÉCNICO CIDADÃO “nome do comando”. É muito utilizada quando já sabemos o nome do comando e queremos obter mais informações sobre ele diretamente. Já a outra forma é com o comando apropos, que efetua a pesquisa com base em “parte do nome do comando ou sua descrição”. Isso permite efetuarmos buscas com base em termos de pesquisa, o que se torna útil quando não sabemos exatamente o nome do comando, por exemplo. Exemplo A: $ whatis cron cron (8) - daemon to execute scheduled commands (Vixie Cron) $ apropos cron cron (8) - daemon to execute scheduled commands (Vixie Cron) crontab (1) - maintain crontab files for individual users (V3) crontab (5) - tables for driving cron $ whatis scheduled scheduled: nada apropriado. $ apropos scheduled cron (8) - daemon to execute scheduled commands (Vixie Cron) 167 PROGRAMA TÉCNICO CIDADÃO LOCALIZANDO ARQUIVOS NO SISTEMA Existem alguns utilitários no Linux que nos auxiliam a localizar arquivos na estrutura de diretórios com base em critérios. A ferramenta mais utilizada para essa tarefa é o comando find, que permite localizarmos arquivos no sistema como base em critérios como o nome do arquivo, datas, tamanho, etc. Gerando assim uma grande flexibilidade na busca de determinados arquivos no sistema. Comando find O find é uma das mais importantes ferramentas GNU disponíveis. Ele trabalha basicamente com critérios, que podem ser combinados a fim de se encontrar um ou mais arquivos específicos. Essa característica permite, por exemplo, utilizarmos o find para selecionar quais arquivos farão ou não parte de uma rotina de backup no Linux. O find também permite executarmos um determinada ação para cada um dos arquivos resultantes da busca. Sintaxe: find [caminho...] [expressão] O caminho padrão é o diretório atual; a expressão padrão é -print. As principais expressões estão descritas na tabela abaixo: 168 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -name arquivo Procura por algum arquivo chamado “arquivo”. -mindepth nível Especifica um nível mínimo de subdiretórios para a pesquisa. -maxdepth nível Expecifica um nível máximo de subdiretórios para a pesquisa. -amin n Procura arquivos que tenham sido acessados “n” minutos atrás. -atime n Procura arquivos que tenham sido acessados “n” dias atrás. -cmin n Procura arquivos que tenham sido modificados “n” minutos atrás. -ctime n Procura arquivos que tenham sido modificados “n” dias atrás. -user usuário Procura arquivos cujo dono seja o usuário determinado. -group grupo Procura arquivos cujo dono seja o grupo determinado. -size tamanho Procura arquivos de um tamanho específico. O tamanho pode ser especificado em b (blocos de 512 bytes, padrão), c (bytes), k (Kilobytes) e w (Palavras de 2 bytes, ou 16 bits) -type tipo Procura por arquivos que sejam de um tipo específico. Os tipos podem ser: b (dispositivo de bloco), c (dispositivo de caractere), d (diretório), f (arquivo comum), l (link simbólico), entre outros. -perm permissão Procura arquivos que possuam determinada permissão, que pode ser especificada em formato de letras ou em formato octal. -exec comando \; Executa determinado comando para cada arquivo encontrado na busca. Para referenciar o arquivo no comando utilize {} no lugar do nome de um arquivo. (Veja exemplos a seguir). O comando find ainda possui outros diversos parâmetros não mostrados nessa tabela, porém são parâmetros dificilmente utilizados, que podem ser encontrados na man page do comando quando necessário. Exemplo A: $ find /bin -name ls /bin/ls $ find /bin -name “ls*” /bin/ls 169 PROGRAMA TÉCNICO CIDADÃO /bin/lsmod /bin/lspci /bin/lsmod.modutils Procura por um arquivo chamado “ls” dentro do diretório /bin, em seguida procura por qualquer arquivo que inicie com ls (ls*) no mesmo diretório. DICA Sempre que for especificar algum coringa como ls* utilize-o entre aspas, como o exemplo acima. Exemplo B: # find / -name grep -maxdepth 3 Procura no diretório raiz e sub-diretórios até o terceiro nível um arquivo ou diretório cujo nome seja grep. Exemplo C: # find /usr -size +10000k Procura por arquivos com mais de 10MB a partir do diretório /usr. Exemplo D: # find /etc -size -1000k -name host* -type f /etc/hosts /etc/hosts.allow /etc/init.d/hostname.sh /etc/hostname /etc/hosts.deny /etc/host.conf # find /etc -size -1000k -name host??????? -type f /etc/hosts.allow /etc/init.d/hostname.sh 170 PROGRAMA TÉCNICO CIDADÃO Agora algumas pesquisas mais complexas que envolvem coringas, onde buscamos arquivos a partir do diretório /etc cujo tamanho seja inferior a 1MB, o nome comece com host (host*) e deve ser um arquivo comum. Depois refinamos nossa pesquisa dizendo que somente queremos encontrar arquivos cujo nome comece com host e contenha mais 7 caracteres. Exemplo E: # touch /tmp/arq1 # touch -t 11201204 /tmp/arq2 # ls -l /tmp/arq* -rw-r--r-- 1 root root 0 Dec 20 12:04 /tmp/arq1 -rw-r--r-- 1 root root 0 Nov 20 12:04 /tmp/arq2 # find /tmp -name "arq*" -atime -10 /tmp/arq1 # find /tmp -name "arq*" -atime +10 /tmp/arq2 # find /tmp -name "arq*" -atime -32 /tmp/arq1 /tmp/arq2 Repare que foram criados dois arquivos, um com a data atual (arq1) e outro com a data de acesso propositalmente modificada para 30 dias atrás (arq2). A primeira busca do find procura por arquivos cujo nome inicie com “arq” (arq*) e que tenha sido acessado nos últimos 10 dias (De dez dias para cá geralmente é mais fácil de memorizar). A segunda busca é parecida, o que a diferencia é que buscamos por um arquivo que não tenha sido acessado nos últimos 10 dias (Tente lembrar “de dez dias pra lá”). Por último, Pesquisamos pelos mesmos arquivos que iniciem com arq, mas que tenham sido acessados nos últimos 32 dias, o que resultou nos dois arquivos. Exemplo F: # find /dev -group disk -name hd[abc]2 -type b /dev/hda2 /dev/hdb2 /dev/hdc2 # find /dev -group disk -name hd[abc]2 -type b -exec echo "Arquivo {}" \; 171 PROGRAMA TÉCNICO CIDADÃO Arquivo /dev/hda2 Arquivo /dev/hdb2 Arquivo /dev/hdc2 Tentamos localizar arquivos dentro de /dev que pertençam ao grupo disk, cujo nome comece com hd, o terceiro caractere do nome seja a, b ou c e seja do tipo b (Dispositivo de blocos). Isso retornou 3 resultados. Depois utilizamos a mesma busca como base para o argumento -exec, que executou o comando echo para cada um dos arquivos resultantes, exemplificando como é possível executar comandos para cada resultado individual da pesquisa. Comando whereis Localiza os binários e as páginas de manual para algum binário (comando ou biblioteca) do sistema. A pesquisa é efetuada com base nos caminhos configurados na variável $PATH do shell e em caminhos que comumente abrigam binários do sistema. Sintaxe: whereis [opção] arquivo Onde arquivo é o binário a ser pesquisado. Tabela de Parâmetros -b Procura por binários. -m Procura por páginas de manual. -s Procura por código-fonte. Exemplo A: # whereis crontab 172 PROGRAMA TÉCNICO CIDADÃO crontab: /usr/bin/crontab /etc/crontab /usr/share/man/man1/crontab.1.gz usr/share/man/man5/crontab.5.gz # whereis -b crontab crontab: /usr/bin/crontab /etc/crontab # whereis -m crontab crontab: /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/crontab.5.gz / Comando locate Localiza uma palavra da estrutura de arquivos ou diretórios do sistema a partir de uma base de dados própria previamente indexada. É útil quando queremos localizar de forma rápida um arquivo qualquer. Como a pesquisa é efetuada em um banco de dados próprio do comando, antes precisamos criar o banco de dados com o comando updatedb. Sintaxe: locate [arquivo] Exemplo: # touch /tmp/meunovoarquivo # locate meunovoarquivo # updatedb # locate meunovoarquivo /tmp/meunovoarquivo Repare que antes de atualização da base de dados do locate com o comando updatedb não era possível encontrar o arquivo meunovoarquivo. Isso torna o locate muito útil para buscas rápidas, sem ter que varrer todo ou parte do sistema de arquivos a cada busca, por exemplo. 173 PROGRAMA TÉCNICO CIDADÃO EDITORES DE TEXTO O Linux conta com diversos editores de texto que são peça chave no dia a dia de um administrador de sistemas. O mais utilizado entre eles é o VI, pois está presente em 99% das distribuições Linux além de também estar presente em sistemas Unix. Devido a isso, o VI será o foco de nossos estudos. Vi O nome Vi vem de visual, pois é o que os usuários consideravam como sendo um editor visual a mais de 3 décadas atrás. O Vi é o editor atualmente utilizado que possui mais tempo de vida (mais de 3 décadas). Na verdade, o que encontramos na maioria das distribuições Linux atuais é uma reencarnação do Vi original denominado Vim (Vi Improved), que foi escrito desde o início por programadores voluntários com base no VI já existente. O objetivo desses programadores era criar um editor de textos melhor que o Vi original, mas que mantivesse as mesmas características. As principais características do Vi original são na verdade soluções para as necessidades da época. A utilização do Vi é bastante baseada em teclas de atalho para executar tarefas de rolagem e edição de texto, devido ao fato de que na época em que o original foi desenvolvido as redes eram muito lentas, e quanto menos informações (Teclas, comandos...) pudessem trafegar pela rede ao se editar um arquivo melhor. Essas características são bem vindas até hoje, pois permite efetuarmos edições de arquivos remotamente (Através de uma conexão remota já estabelecida, como Telnet e SSH, por exemplo) através de um link de banda estreita. Sintaxe: vim [arquivo] O Vi possui 3 modos básicos de operação: comando, linha e edição. 174 PROGRAMA TÉCNICO CIDADÃO OBSERVAÇÃO Em sistemas que possuem o Vim IMproved (vim) instalado, geralmente é criado um alias do comando vi para vim. Modo de comando É o modo de operação padrão do Vi. Neste modo o editor interpreta os caracteres digitados como comandos internos do editor e não como texto a ser inserido no arquivo. A falta de compreensão deste modo geralmente causa maior frustração ao utilizar este editor. Os comandos do Vi se dividem em 4 sub-categorias: movimentação, pesquisa, texto e edição, vistos na tabela abaixo: 175 PROGRAMA TÉCNICO CIDADÃO Comandos de Movimentação Comando Descrição k Movimenta o cursor para cima. j Movimenta o cursor para baixo. l Movimenta o cursor para a direita. h Movimenta o cursor para a esquerda. 0 (zero) Posiciona o cursor no início da linha. $ Posiciona o cursor no final da linha. G Posiciona o cursor na Última linha do arquivo. [CTRL]+[F] Avança uma tela na rolagem de texto. [CTRL]+[B] Retroscede uma tela na rolagem de texto. H Posiciona o cursor na primeira linha da tela. M Posiciona o cursor na linha do meio da tela. L Posiciona o cursor na última linha da tela. w Posiciona o cursor no início da próxima palavra (ignora pontuação). W Posiciona o cursor no início da próxima palavra sem ignorar a pontuação. b Posiciona o cursos no início da palavra anterior (ignora pontuação) B Posiciona o cursor no início da palavra anterior sem ignorar a pontuação. nG Posiciona o cursor no início da linha n (Substituir “n” pelo número da linha desejada). 176 PROGRAMA TÉCNICO CIDADÃO Comandos de Pesquisa Comando Descrição f+c Posiciona o cursor no próximo caractere “c” encontrado na linha. (Ex.: fp posiciona o cursor sobre o próximo caractere p encontrado na linha.) /palavra Posiciona o cursor na próxima ocorrência da palavra pesquisada abaixo do cursor. ?palavra Posiciona o cursor na próxima ocorrência da palavra pesquisada acima do cursor. n Prossegue a busca do último comando “/” ou “?” na próxima ocorrência. Caso chegue ao final do arquivo, a pesquisa terá continuidade no início do arquivo. N A mesma função que o comando N, porém faz a pesquisa na ordem inversa da última pesquisa efetuada com “/” ou “?”. [CTRL]+[G] Mostra o nome, o número da linha atual e o total de linhas do arquivo. 177 PROGRAMA TÉCNICO CIDADÃO Comandos de Texto e Substituição Comando Descrição x Exclui o caractere que esteja abaixo do cursos. dw Exclui todo o texto da posição atual do cursor até o final da palavra. yw Copia todo o texto da posição atual do cursor até o final da palavra. cw Exclui todo o texto da posição atual do cursor até o final da palavra e coloca o editor no modo de de edição. dd Exclui toda a linha atual. (Recorta) yy Copia toda a linha atual. (Recorta) D Exclui todo o texto da posição atual do cursor até o final da linha. (Recorta) Y Copia todo o texto da posição atual do cursor até o final da linha. rx Substitui o caractere abaixo do cursor pelo caractere “x”. (Obs.: Qualquer caractere pode ser utilizado, x é somente um exemplo). cc Limpa toda a linha em que o cursor se encontra e coloca o editor no modo de edição. R Inicia o modo de “substituição de texto”. Para sair, pressione [ESC]. J Une a linha atual à próxima linha. p Cola o texto que esteja em buffer após o cursor. (Obs.: Qualquer comando de texto que exclua caracteres os envia para o buffer.) v Inicia o modo visual para seleção do texto a partir da posição atual do cursor. Após selecionar o texto desejado. Utilize uma das teclas como [y], [c] e [d] para copiar, substituir e recortar, respectivamente, ou a tecla [v] novamente para fechar o modo visual. u Desfaz o último comando. [CTRL]+[R] Refaz o último comando. O modo de texto é uma forma prática de substituir, organizar e inserir texto sem utilizar o modo de edição (sem precisar digitar texto). Uma característica importante desse modo é que todo o 178 PROGRAMA TÉCNICO CIDADÃO texto manipulado por esses comandos fica armazenado no buffer. Isso permite, por exemplo, recortar uma linha inteira com o comando “dd” e colar na linha logo abaixo do cursor com o comando “p”. Modo de Edição Ao entrarmos no modo de edição, tudo que digitarmos no teclado será enviado como texto para o arquivo (O mais parecido possível com outros editores de texto). Para sair do modo de edição e voltar ao modo de comando, utilizamos a tecla [ESC], até 2 vezes se assim for necessário. Quando estamos no modo de edição, a string “-- INSERT --” é mostrada no canto inferior esquerdo da tela. No modo de comando, nada é mostrado. A partir do modo de comando, podemos utilizar quaisquer dos comandos da tabela abaixo para iniciar o modo de edição: Comandos para entrar no modo de edição Comando Descrição o Insere no início da linha abaixo do cursor. cl Apaga o caractere sob o cursor e inicia o modo de edição. a Insere após o cursor. A Insere no final da linha. i Insere na posição atual do cursor. 179 PROGRAMA TÉCNICO CIDADÃO Modo de linha O Modo de linha é um modo onde se tem acesso a comandos especiais do vi. Para entrar em modo de linha deve-se estar em modo de comando e pressionar “:” (Dois-pontos). Principais comandos do modo de linha Comando Descrição :e arquivo Instrui o vi para abrir um arquivo para edição. :w[!] [arquivo] Salva o arquivo atual. Opcionalmente podemos colocar o nome de outro arquivo para instruir o via salva o arquivo atual como outro nome (Salvar Como...). Adicionar a exclamação “!” em frente do comando (w!) força a operação. :q[!] Sai do arquivo sem salvar. Caso tenha feito alguma alteração o Vi não deixará sair sem salvar, somente se utilizarmos a exclamação (q!) para forçar a saída sem salvar o arquivo. :r arquivo Insere o conteúdo de outro arquivo a partir do cursor. :x[!] Sai do Vi e salva o arquivo atual. Também é possível utilizar a exclamação para forçar a operação. :s/antiga/nova/g Substitui a string “antiga” pela string “nova” na linha atual. O parâmetro “g” no final é opcional, e diz para o Vi continuar em busca de substituições na mesma linha mesmo após a primeira ocorrência. :%s/antiga/nova/g Substitui a string “antiga” pela string “nova” em todo o documento atual. O parâmetro “g” no final é opcional, e diz para o Vi continuar em busca de substituições na mesma linha mesmo após a primeira ocorrência. O comportamento padrão do Vi (sem o “g”) é proceder para a próxima linha caso substitui alguma palavra) :set number e :set no Ativa e desativa, respectivamente, a numeração de linhas do arquivo. number :nohl Desabilita o highlight que marca as palavras de alguma busca efetuada anteriormente. 180 PROGRAMA TÉCNICO CIDADÃO Para voltar do modo de linha para o modo de comando basta pressionar ESC. Dicas preciosas do Vim Existem alguns “macetes” de sobrevivência do Vim, que devem estar na ponta da língua de um administrador Linux. Uma dica importante é lembrar que sempre é possível desfazer as alterações efetuadas em um arquivo, até um certo limite, com a tecla [u] no modo de comando. Outra dica importante: Para os comandos de linha que interagem com o texto (substituição por exemplo) é possível especificar um intervalo de linhas onde o comando terá efeito. Digamos que você precise substituir a palavra gato pela palavra cachorro no arquivo em que esteja editando, mas somente entre as linhas 100 e 154. A solução seria o seguinte comando de linha: :100,154s/gato/cachorro/g Uma outra ocasião mais utilizada: Digamos que você precise comentar com o caractere “#” um grande intervalo de linhas em um arquivo (pode ser maçante ficar fazendo isso linha por linha). O comando de linha do vi abaixo resolveria facilmente o problema, nesse caso, das linhas 10 até 25 (faça com um arquivo grande para testar. :10,25s/^/# / O intervalo “10,25” dia para o comando atuar somente entre as linhas 10 e 25. O comando de substituição irá substituir o início da linha (Representado pelo caractere “^”) pelo sinal de “#” acrescido de um espaço. Pronto. Também é possível editar dois ou mais arquivos na mesma tela. Tal proeza se torna verdadeira com o comando :split. Por exemplo, digamos que você já esteja editando um arquivo e queira abrir outro na mesma tela, dividindo a mesma ao meio. Basta utilizar o comando abaixo dentro do Vim. :split novoarquivo 181 PROGRAMA TÉCNICO CIDADÃO Para alternar entre as telas utilize a sequência de teclas [CONTROL]+[W]+[W]. 182 PROGRAMA TÉCNICO CIDADÃO ARQUITETURA DE HARDWARE Quando falamos de hardware, também falamos no nome que o software atribui ao seu hardware. O nome dos seus dispositivos por exemplo são diferentes, abaixo uma comparação entre Linux e DOS Dispositivo Dispositivo Linux DOS ttyS0 COM1 ttyS1 COM2 ttyS2 COM3 ttyS3 COM4 lp0 LPT1 lp1 LPT2 /dev/hda1 C: /dev/hda2 D:* /dev/hdb1 D: * Os parâmetros usados para configurar o hardware no linux são a IRQ, I/O e DMA, porém há dispositivos que só usem dois desses parâmetros. As interrupções podem ser visualizadas através do arquivo /prov/interrupts # cat /proc/interrupts 183 PROGRAMA TÉCNICO CIDADÃO CPU0 0: 824407 XT-PIC timer 1: 20276 XT-PIC keyboard 2: 0 XT-PIC cascade 4: 141947 XT-PIC serial 5: 86091 XT-PIC SiS 7018 PCI Audio 8: 3 XT-PIC rtc 11: 9485 XT-PIC usb-ohci, usb-ohci, eth0 14: 69121 XT-PIC ide0 15: 4 XT-PIC ide1 NMI: 0 LOC: 824417 ERR: 128 MIS: 0 Estas são as interrupções que se estão utilizando em minha maquina. Abaixo uma breve explicação sobre as interrupções. IRQ 0 - saída do temporizador (8254) IRQ 1 - controlador usado para teclado IRQ 2 - cascata para IRQ8–IRQ15 no PC-AT IRQ 3 - porta serial secundária, geralmente/dev/ttyS1 IRQ 4 - porta serial primária, geralmente /dev/ttyS0 IRQ 5 - livre (era a interrupção do HD no XT) IRQ 6 - controlador de disquetes /dev/fd0 IRQ 7 - porta paralela (para impressora, /dev/lp0) IRQ 8 - rtc IRQ 9 - interrupção de software (int 0x0A), redireciona para IRQ2 IRQ 10 - livre IRQ 11 - livre 184 PROGRAMA TÉCNICO CIDADÃO IRQ 12 - Mouse PS/2 IRQ 13 - livre IRQ 14 - controlador IDE primário (/dev/hda, /dev/hdb) IRQ 15 - controlador IDE secundário (/dev/hdc, /dev/hdd) setserial Esta é uma ferramenta para relatar e reportar as configurações das portas seriais do computador, isso inclui numero de IRQ, I/O. Com ela você também pode mudar as configurações de IRQ, portas e etc. Por exemplo: Para ver as configurações de uma das portas seriais, digite: # setserial /dev/ttyS1 /dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3 Você pode mudar o numero de irq a ser usado apenas digitando o comando. # setserial /dev/ttyS1 irq <numero> port <numero> Agora vamos ver as configurações da porta serial /dev/ttyS1 e mudar o irq e a porta dela # setserial /dev/ttyS1 /dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3 Vimos que a irq dela é 3 e a porta 0x02f8, agora vamos mudar para irq 4 e porta 0x03e8. 185 PROGRAMA TÉCNICO CIDADÃO # setserial /dev/ttyS1 irq 4 port 0x3e8 # setserial /dev/ttyS1 /dev/ttyS1, UART: unknown, Port: 0x03e8, IRQ: 4 Isto pode ser muito útil em relação a conflito de hardware, dispositivos que estejam por exemplo usando o mesmo irq. A opção -a imprime na tela todas as informações do dispositivo Os endereços de I/O porem ser visualizados através do arquivo /proc/ioports # cat /proc/ioports 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 0376-0376 : ide1 0378-037a : parport0 03c0-03df : vga+ 03f6-03f6 : ide0 03f8-03ff : serial(set) 0cf8-0cff : PCI conf1 4000-400f : Silicon Integrated Systems [SiS] 5513 [IDE] 4000-4007 : ide0 4008-400f : ide1 186 PROGRAMA TÉCNICO CIDADÃO d000-dfff : PCI Bus #01 d000-d07f : Silicon Integrated Systems [SiS] SiS630 GUI Accelerator+3D e000-e0ff : PCI device 1039:7013 (Silicon Integrated Systems [SiS]) e400-e47f : PCI device 1039:7013 (Silicon Integrated Systems [SiS]) e800-e8ff : Silicon Integrated Systems [SiS] SiS PCI Audio Accelerator e800-e8ff : SiS 7018 PCI Audio ec00-ecff : Realtek Semiconductor Co., Ltd. RTL-8139 ec00-ecff : 8139too 187 PROGRAMA TÉCNICO CIDADÃO PARTICIONAMENTO E SISTEMAS DE ARQUIVOS Neste capítulo aprenderemos como lidar com a tabela de partições, definir um correto esquema de particionamento e aplicar o sistema de arquivos mais adequado a cada situação. Particionamento Antigamente, quando o conceito de particionamento ainda não existia, um sistema era disposto em todo o disco rígido (isso não significa que ele ocupava todo o espaço), não permitindo utilizarmos melhor o espaço disponível na mídia de armazenamento. A tabela de partições Com o advento dos discos rígidos, também surgiu o particionamento, que é a capacidade de se “repartir” um disco rígido em diversas fatias de dados, chamadas partições. Essa divisão dos dados é possível “até hoje” devido a tabela de partições. Imagine o disco rígido como um grande repositório de dados binários (e é realmente o que ele é). A tabela de partições tem a função de dizer onde começa, onde termina e qual o tipo de sistema de arquivos de determinada partição. Ela fica localizada em uma área específica no início do disco rígido, onde o sistema operacional pode ler e saber a localização de todas as partições. Inicialmente, só era possível criar 4 partições em um disco rígido. Onde cada uma delas poderia receber seu próprio sistema de arquivos diferente. Exemplo: +---------------+----------------+---------------+---------------+ | Partição 1 | Partição 2 | Partição 3 | Partição 4 | +---------------+----------------+---------------+---------------+ 188 PROGRAMA TÉCNICO CIDADÃO Com o tempo, tornou-se necessário um número maior de partições, e foi aí que definiram os tipos de partições: primárias, extendida e lógicas. Partições primárias As partições primárias são as partições que geralmente recebem um sistema operacional, e costumam ficar situadas no início de um disco particionado. Foram os primeiros tipos de partições “inventadas”, no tempo em que só poderiam existir apenas 4 partições. Essa limitação existe até hoje com esse tipo de partição, pois só podem haver 4 partições primárias em um disco rígido. Caso haja necessidade de ter mais partições em um sistema, é necessário conhecer os outros 2 tipos de partições: extendida e lógicas. Uma partição primária pode receber dados (sistemas de arquivos), mas não outras partições diretamente. A partição extendida Para sanar o problema de limitação de até 4 partições no disco, foi desenvolvida a partição primária, que não pode receber dados (sistemas de arquivos) diretamente, mas sua finalidade é alojar “sub-partições”, as chamadas partições lógicas. Não pode existir mais de uma partição extendida no mesmo disco rígido. As partições lógicas Como complemento à partição extendida, foram desenvolvidas as partições lógicas, que não passam de simples partições alojadas dentro de uma partição extendida. Uma partição lógica pode receber sistemas de arquivos normalmente, assim como uma partição primária, e seu principal motivo de existência é a necessidade de se ter mais do que 4 partições num disco rígido. 189 PROGRAMA TÉCNICO CIDADÃO Por exemplo, se precisarmos ter 6 partições em um disco rígido, criaríamos: 3 primárias, 1 extendida e mais 3 lógicas dentro da extendida. Repare que não se deve considerar a partição extendida como uma partição válida, visto que ela não recebe dados diretamente, somente por intermédio de partições lógicas. Vejamos como isso ficaria: +---------+---------+---------+----------------------------------------+ | | | | Primária1 | Primária2| | | | | Extendida | Primária3|----------------------------------------+ | Lógica1 | Lógica2 | Lógica3 | +---------+---------+---------+----------------------------------------+ Conseguimos ter 6 partições de dados no mesmo disco rígido. O limite de partições lógicas no disco rígido é de 12 partições, o que limita um disco à ter no máximo 15 partições de dados mais uma extendida. Endereçamento e geometria dos discos rígidos Um assunto que deve ser de bom conhecimento de qualquer administrador de sistemas. É preciso compreender como a BIOS do computador e o sistema operacional efetuam o mapeamento dos dados em um disco rígido. É com base no endereçamento ou na geometria do disco que o sistema operacional sabe onde estão os arquivos nas partições arquivos. Existem duas formas de mapeamento de dados: LBA e CHS. 190 PROGRAMA TÉCNICO CIDADÃO Modo LBA de endereçamento É o método plano (de 1 dimensão) mais simples, moderno e funcional que um sistema tem para mapear os dados em um disco rígido. O que ocorre basicamente é o seguinte: a BIOS do computador endereça todo o disco rígido em vários “pedacinhos” que costumam ter 512bytes de tamanho cada um. Cada pedacinho desse recebe um número de identificação, e é chamado de bloco. Dessa forma, quando um sistema operacional compatível com LBA (O Linux é) precisa escrever ou ler dados em determinada parte do disco rígido, ele se localiza pelo respectivo bloco LBA. Modo CHS de geometria Este é o modo mais antigo, complexo e limitado de mapeamento de dados dos discos rígidos. O método CHS baseia-se num fator de 3 dimensões para mapear os dados no disco rígido. As 3 dimensões são: cilindros (cylinders), cabeças (heads) e setores (sectors). Esse modo impõe algumas limitações que devem ser observadas, como o limite dos 1024 cilindros que assola computadores antigos, onde a bios não consegue mapear mais do que 1024 cilindros, 256 cabeças e 63 setores, o que impõe a limitação de 8.4gb ao disco, que mesmo sendo maior do que isso, a BIOS só conseguirá “enxergar” essa quantidade de dados. Algumas BIOS mais antigas ainda possuem uma limitação ainda maior, que é de 1024 cilindros, 16 cabeças e 63 setores, o que totaliza um limite de 528mb para discos rígidos. É importante conhecer esses limites pois o kernel do linux deve estar disposto em uma partição /boot separada de todo o restante e no início do disco, para garantir que essa partição seja visível pela BIOS, e conseqüentemente pelo gestor de boot. A única barreira que devemos nos importar em romper é a de permitir que o gerenciador de boot consiga carregar o kernel, pois uma vez que o controle é dado ao sistema operacional Linux, ele consegue “enxergar” toda a capacidade do disco rígido, independente do tamanho 191 PROGRAMA TÉCNICO CIDADÃO observado na BIOS. Isso permite, por exemplo, utilizarmos discos maiores do que 8.4gb em micros Intel 586, como os Pentium MMX. Particionando o disco rígido com fdisk O fdisk é o utilitário do Linux responsável por gerenciar a tabela de partições. Existem outras “encarnações” de fdisk em sistemas operacionais como o MS DOS®, por exemplo, mas são completamente diferentes do nosso fdisk do Linux. No linux o utilitário fdisk somente lida com a tabela de partições, e não é capaz de criar sistemas de arquivos. Este é um procedimento que veremos adiante. Sintaxe: fdisk [opção] [dispositivo de bloco] Onde “dispositivo de bloco” é um disco rígido (como /dev/hda ou /dev/sdc, por exemplo), na maioria das vezes. O comando suporta poucas opções (pelo menos “do lado de fora”). Uma delas é a opção -l, que exibe a tabela de partições de determinado dispositivo dado como argumento, ou de todos os dispositivos conhecidos. A opção -s mostra o tamanho, em blocos, de determinado dispositivo ou partição. Para entrarmos no modo interativo do utilitário fdisk, basta especificar um dispositivo de blocos válido. Exemplo: # fdisk /dev/hda O número de cilindros para este disco está configurado para 238216. Não existe nada de errado, mas isto é maior que 1024, e pode em certas configurações causar problemas com: 192 PROGRAMA TÉCNICO CIDADÃO 1) programas que executam em tempo de inicialização (versões velhas do lilo) 2) inicialização e programas de particionamento de outros OSs (p.ex., DOS FDISK, OS/2 FDISK) Comando (m para ajuda): Na tela inicial do fdisk, caso o disco possua mais do que 1024 cilindros, seremos presenteados com a mensagem de alerta acima. O fdisk funciona com base em letras especiais que definem comandos. Digite [M] (seguido de enter...) para visualizar a tela de ajuda. A tela de ajuda mostra os comandos possíveis com o fdisk. Comando - ação a alterna a opção "inicializável" b edita rótulo BSD no disco c alterna a opção "compatibilidade" d exclui uma partição l lista os tipos de partição conhecidos m mostra este menu n cria uma nova partição o cria uma nova tabela de partições DOS vazia p mostra a tabela de partições q sai sem salvar as alterações s cria um novo rótulo de disco Sun vazio t altera a identificação da partição para o sistema u altera as unidades das entradas mostradas v verifica a tabela de partições w grava a tabela no disco e sai x funcionalidade adicional (somente para usuários avançados) Vamos agora seguir um passo a passo para excluir, adicionar e modificar o tipo de uma partição. NOTA Somente o usuário root pode utilizar o fdisk. 193 PROGRAMA TÉCNICO CIDADÃO No prompt do fdisk, utilize a opção [p] para mostrara tabela de partições, que no meu sistema, tem o seguinte aspecto: Comando (m para ajuda): p Disk /dev/hda: 122.9 GB, 122942324736 bytes 16 heads, 63 sectors/track, 238216 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Dispositivo Boot Start End Blocks Id System /dev/hda1 * 1 40640 20482528+ 83 Linux /dev/hda2 40641 238216 99578304 f W95 Ext'd (LBA) /dev/hda5 40641 237214 99072823+ 8e Linux LVM /dev/hda6 237215 238216 504976+ 82 Linux swap Repare na coluna “Id”, que mostra o código que identifica o tipo de sistema de arquivos presente na partição. O Linux conta com diversos tipos, dos quais os principais são: 83 para partições de dados e 82 para partições swap. É importante lembrar que todas as alterações feitas na tabela de partições só terão efeito se utilizarmos a opção [w] do fdisk, que salva as alterações. Antes de criar uma partição, é preciso ter espaço “não particionado” no disco e não infringir as regras dos tipos de partições (Tentar criar 5 partições primárias, por exemplo). No exemplo, vamos excluir uma partição antes de criar uma outra. Comando (m para ajuda): d Número da partição (1-6): 6 Comando (m para ajuda): p Disk /dev/hda: 122.9 GB, 122942324736 bytes 16 heads, 63 sectors/track, 238216 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Dispositivo Boot Start End Blocks Id System 194 PROGRAMA TÉCNICO CIDADÃO /dev/hda1 * /dev/hda2 /dev/hda5 1 40641 40641 40640 20482528+ 83 Linux 238216 99578304 f W95 Ext'd (LBA) 237214 99072823+ 8e Linux LVM Utilizamos a opção [d] para apagar a partição 6 do dispositivo /dev/hda. Agora vamos criar uma nova partição no espaço não particionado, logo depois vamos modificar seu tipo para 82 (Partição SWAP). Comando (m para ajuda): n Comando - ação l lógica (5 ou superior) p partição primária (1-4) l Primeiro cilindro (237214-238216, default 237214): Using default value 237214 Último cilindro ou +tamanho ou +tamanho M ou +tamanho K (237214-238216, default 238216): Using default value 238216 Comando (m para ajuda): p Disk /dev/hda: 122.9 GB, 122942324736 bytes 16 heads, 63 sectors/track, 238216 cylinders Units = cilindros of 1008 * 512 = 516096 bytes Dispositivo Boot Start End Blocks Id System /dev/hda1 * 1 40640 20482528+ 83 Linux /dev/hda2 40641 238216 99578304 f W95 Ext'd (LBA) /dev/hda5 40641 237214 99072823+ 8e Linux LVM /dev/hda6 237214 238216 505102+ 83 Linux Comando (m para ajuda): t Número da partição (1-6): 6 Código hexadecimal (digite L para listar os códigos): 82 O tipo da partição 6 foi alterado para 82 (Linux swap / Solaris) Comando (m para ajuda): p Disk /dev/hda: 122.9 GB, 122942324736 bytes 16 heads, 63 sectors/track, 238216 cylinders 195 PROGRAMA TÉCNICO CIDADÃO Units = cilindros of 1008 * 512 = 516096 bytes Dispositivo Boot Start End Blocks Id System /dev/hda1 * 1 40640 20482528+ 83 Linux /dev/hda2 40641 238216 99578304 f W95 Ext'd (LBA) /dev/hda5 40641 237214 99072823+ 8e Linux LVM /dev/hda6 237214 238216 505102+ 82 Linux swap / Solaris Comando (m para ajuda): q Ao criarmos uma nova partição, o fdisk nos questiona, se possível, sobre qual será o tipo de partição (primária, extendida ou lógica), ou não pergunta quando a única alternativa for “lógica”. Também somos questionados sobre o tamanho desejado da partição, com base em qual setor do disco ela começa e qual ela termina. Geralmente o setor de início não é preocupação, pois o fdisk assume o primeiro livre, o último, caso não queiramos ocupar todo o espaço disponível, pode ser especificado em megabytes, por exemplo, no formato +XXXM, onde “XXX” é o tamanho desejado em MB para a partição. Sistemas de arquivos Quando já se tem um espaço particionado, ele ainda não está pronto para receber dados, pois precisa de um sistema de arquivos. Um sistema de arquivos “prepara o terreno” da partição para que ela possa receber dados (arquivos e diretórios), pois é o sistema de arquivos que gerencia a localização dos arquivos na partição. Ele faz isso subdividindo a determinada partição em blocos menores denominados clusters. No Linux, os sistemas de arquivos são, na sua maioria, baseados em inodes. Inodes são uma espécie de índice numérico para os arquivos no sistema, e já foram estudados na primeira apostila. 196 PROGRAMA TÉCNICO CIDADÃO O Linux é compatível com uma vasta gama de sistemas de arquivos, até mesmo de outros sistemas, como FAT32 ou NTFS. Mas os principais sistemas de arquivos nativos do Linux são: ext2, ext3 e reiserfs. Antes de prosseguir, é preciso conhecer um pouco sobre cada um desses sistemas de arquivos para que possamos selecionar qual melhor se encaixa em determinada situação. O sistema de arquivos ext2: O início de tudo Esta é a segunda versão do sistema de arquivos extendido do Linux. A primeira que fez sucesso. É o sistema de arquivos básico para Linux, suporta quotas, acl's, etc. Mas tem um grande problema que mais tarde foi suprido pelo ext3: O sistema de arquivos precisava ser verificado sempre que havia uma queda de energia. Esse problema se torna crítico e serviu como obstáculo para o Linux em grandes corporações e data centers, pois o sistema perdia muito tempo durante a inicialização para a verificação. E quanto maior eram as partições, mais tempo era perdido. O sistema de arquivos ext3: A revolução Funciona de forma semelhante ao ext2. Internamente, são até muito parecidos, até compatíveis entre si. A grande diferença é que o ext3 corrige o maior problema do ext2 com um recurso chamado journaling. Funcionamento do journaling O journaling é um recurso presente em diversos sistemas de arquivos, não só no ext3. Quando um sistema de arquivos conta com journaling, todos os dados que entram na fila de escrita são “anotados” no journaling antes da operação (alguns sistemas adicionam outros diferenciais 197 PROGRAMA TÉCNICO CIDADÃO mais complicados, mas isso não vem ao caso agora). Quando a operação de cada um deles é concluída, os dados são removidos do journaling. Resumidamente, o journaling armazena informações sobre o as operações de escrita que estão para ocorrer. Caso ocorra uma queda de energia ou qualquer outra coisa que venha a parar o sistema no meio de uma operação de escrita, ao ser reiniciado, o sistema de arquivos verifica as informações que “ficaram” no journaling e então somente as áreas afetadas por essas operações marcadas no journaling que serão verificadas pelo utilitário fsck (estudado adiante). O journaling não torna as operações de escrita mais lentas a ponto de causar perca de performance que justifique o ganho de confiabilidade. É importante lembrar que o journaling desses sistemas de arquivos por padrão convive na mesma partição que os dados, e ocupa um determinado espaço para isso. O sistema de arquivos reiserfs: Nascido para ser rápido Esse sistema de arquivos só se assemelha com o ext2/3 pelo fato de serem ambos sistemas de arquivos, pois internamente eles são bem distintos. O reiserfs utiliza um algoritmo interno (que geralmente é o chamado r5, r6 ou o rupasov.) para ordenar os nomes de arquivos pelo sistema. O que o torna muito rápido com arquivos pequenos e uma grande quantidade de arquivos no mesmo sistema. Ele também conta com journaling, como o ext3. Criando um sistema de arquivos Utilizamos o comando mkfs para criar sistemas de arquivos em partições ou outros dispositivos de blocos (como um disquete, por exemplo). 198 PROGRAMA TÉCNICO CIDADÃO O mkfs possui um sub-comando para cada sistema de arquivos suportado pela distribuição. Por exemplo, para criar sistemas de arquivos ext3, utilizamos o comando mkfs.ext3, já para reiserfs, utilizamos mkfs.reiserfs. Vamos utilizar um disquete de 1.44” para nosso exemplo. Antes de se criar um sistema de arquivos num disquete, é preciso formatá-lo com o comando fdformat. Levando em consideração que queremos formatar a unidade /dev/fd0, utilizamos: # fdformat -n /dev/fd0 A opção -n instrui ao utilitário para não verificar por bad-blocks no disquete. Agora, para formatar o disquete com o sistema de arquivos ext21, utilizamos: # mkfs.ext2 /dev/fd0 Esse passo é exatamente igual para partições, basta apontar para a partição que deseja formatar, como /dev/hda6, por exemplo. Definindo um ponto de montagem O termo “ponto de montagem” precisa ser muito bem compreendido por todos que pretendem seguir carreira com sistemas Linux. O conceito é bem simples de compreender, trata-se de associar algum diretório (geralmente vazio) no sistema com um dispositivo de blocos, dessa forma, os dados enviados para este diretório serão gravados no respectivo dispositivo de blocos. É o tamanho do dispositivo que irá definir a quantidade máxima de dados que determinado diretório (ponto de montagem) irá comportar. 1 Não é possível ter um sistema de arquivos com journaling em um disquete, devido ao pouco espaço disponível. 199 PROGRAMA TÉCNICO CIDADÃO DICA Saber definir corretamente pontos de montagem para partições de tamanhos corretos em áreas críticas do sistema ajuda a diminuir possíveis falhas no sistema, tornando-o mais seguro. Essa associação entre um diretório e um dispositivo de blocos recebe o nome de montagem. Para cumprir essa tarefa, utilizamos o comando mount (consulte a man page para maiores detalhes sobre sistemas de arquivos). Sintaxe: mount [opção] [dispositivo] [ponto de montagem] Portanto, vamos utilizar o comando mount para montar o disquete recém-formatado no diretório /floppy (ou /mnt/floppy em sistemas RedHat like) # mount /dev/fd0 /floppy # df -h # mount O comando df -h exibe informações sobre os sistemas de arquivos montados, assim como a utilização de cada um. O comando mount, sem nenhum argumento, mostra uma lista com detalhes dos sistemas de arquivos montados. Para desmontar um sistema de arquivos, basta executar o comando umount / ponto/de/montagem ou umount dispositivo, conforme abaixo: # umount /floppy O umount não permite desmontarmos dispositivos que estejam em uso. Portanto, não tente desmontar caso esteja no ponto de montagem do dispositivo desejado. 200 PROGRAMA TÉCNICO CIDADÃO Só se pode remover o disquete da unidade quando ele estiver “desmontado”. Contrariar essa regra pode causar perda de dados. Isso ocorre porque os dados enviados para um ponto de montagem de um disquete ou alguns tipos de unidades de rede não são gravados imediatamente na mídia. Para forçar um “sincronismo” momentâneo e gravar os dados pendentes no disquete, utilize o comando sync, sem parâmetros. O arquivo /etc/fstab Este arquivo serve de configuração para os pontos de montagem fixos do sistema. Toda vez que adicionarmos uma nova partição de dados no sistema, esse arquivo deve ser editado para as novas necessidades. Os pontos de montagem são definidos um por linha nesse arquivo, da seguinte forma: /dev/hda1 / reiserfs defaults 0 1 São 6 colunas que “devem” estar preenchidas para que a entrada funcione. Da primeira para a última, os significados das colunas são: Dispositivo de bloco, ponto de montagem, sistema de arquivos, opções de montagem (consulte a man page para as opções disponíveis para cada sistema de arquivos), dump (Se o dispositivo pode ou não ter backup através do dump) e o nível de passagem. Nível de passagem define em que ordem os sistemas de arquivos devem ser verificados pela ferramenta fsck durante a inicialização, do menos para o maior. O valor 0 desabilita a checagem. Todo ponto de montagem presente nesse arquivo pode ser montado com menos opções, pois o mount automaticamente busca as outras opções no arquivo. 201 PROGRAMA TÉCNICO CIDADÃO Verificando a integridade de sistemas de arquivos Para verificar a integridade de um sistema de arquivos no Linux, utilizamos a ferramenta fsck. ATENÇÃO O fsck não deve ser utilizado em sistemas de arquivos montados em modo de leitura e escrita. Isso pode causar danos irreversíveis à eles. Sintaxe: fsck [opções] dispositivos Tabela de opções -C -A -R Exibe progresso da verificação. Verifica todos os dispositivos encontrados em /etc/fstab. -V Utilizado junto à opção -A. Diz ao fsck para ignorar a verificação do dispositivo que contenha o sistema de arquivos raiz. Modo “verbose”. Exibe mais informações sobre os comandos sendo executados. -r -y Força o fsck a rodar interativamente. Pedindo confirmações para todas as questões. Responde yes (Sim) para todas as questões automaticamente. Utilize com cuidado. Exemplo: # fsck -y /dev/fd0 Gerenciando quotas de sistemas de arquivos As quotas de sistemas de arquivos existem para que o administrador possa limitar a utilização do recurso mais difícil de se prever em um ambiente computacional: o armazenamento. 202 PROGRAMA TÉCNICO CIDADÃO Elas não vêm habilitadas por padrão, só o que precisamos é possuir um kernel, um sistema de arquivos que suporte quotas e um utilitário para gerenciar quotas. O ext2 e 3 suportam quotas. O suporte a quotas do reiserfs ainda não está adicionado nos kernel's padrão do Linux, mas existem patches na internet que possibilitam isso. Partindo do princípio que o o sistema já possuam uma partição com suporte a quotas e um kernel também com suporte, basta instalar o utilitário que permite gerenciarmos as quotas. No Debian, o pacote que provê esse suporte chama-se quota, portanto, um apt-get install quota deve resolver o problema. Habilitando as quotas O primeiro passo é habilitar as quotas, que podem ser por usuários ou por grupos, no respectivo ponto de montagem em /etc/fstab. Para habilitar quotas para usuários, adicione a opção usrquota ao ponto de montagem. Para grupos, a opção é grpquota. Abaixo adicionamos as duas opções à uma entrada do arquivo /etc/fstab: /dev/sdb1 /home ext3 defaults,usrquota,grpquota 0 1 Agora basta montar e habilitar finalmente as quotas para o ponto de montagem. # mount /home # quotacheck -acvug quotacheck: Scanning /dev/sdb1 [/home] done quotacheck: Checked 3 directories and 20 files quotacheck: Old file not found. quotacheck: Old file not found. Este último comando deve ser rodado periodicamente para garantir a integridade das quotas. 203 PROGRAMA TÉCNICO CIDADÃO Configurando quotas p/ usuários e grupos Contamos com o utilitário edquota para configurar as quotas. Para editar as quotas de um usuário, utilizamos: # edquota -u fulano Disk quotas for user fulano (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/sdb1 84 0 0 21 0 0 Ao executar o comando, entramos em uma espécie de edição de arquivo, onde podemos visualizar o quanto em blocos (múltiplo de 1024bytes, ou 1KB) e inodes o usuário está consumindo e definir dois limites para ambos: O “soft limit” e o “hard limit”. O soft limit costuma ser um limite inferior e próximo ao limite máximo de utilização de espaço de armazenamento. Quando um usuário atinge seu soft-limit, desde que ainda esteja abaixo do hard-limit, ele entra em um período chamado “grace time”, que por padrão é 7 dias, mas pode ser modificado com o comando edquota -t. O hard-limit é o limite máximo de utilização de armazenamento. os limites soft e hard existem tanto para a utilização de espaço em disco quanto para a utilização de inodes, como podem ver no arquivo de quota do usuário. Para editar as quotas para um grupo, utilizamos: edquota -g grupo Verificando as quotas Para listar a utilização das quotas, utilizamos o comando repquota -a (Mostra de todos os pontos de montagem com quotas habilitadas). Para garantir a correta integridade das quotas, sempre execute o comando quotacheck -av. 204 PROGRAMA TÉCNICO CIDADÃO Adicionando uma nova swap É necessário aprender a adicionar uma nova swap no sistema. Mas antes de mais nada, você sabe o que é uma swap? Uma partição swap é um espaço de troca que completa o sistema de memória virtual do Linux, junto com a memória ram e as memórias cache do(s) processador(es). A soma de todas essas memórias é o que forma a “memória virtual”, que é o que fica visível para os processos em execução, e o sistema operacional cuida de definir onde escrever “fisicamente” os dados, na memória ram ou na swap. No Linux, isso funciona da seguinte forma: Os dados que os programas requerem da memória virtual são sempre providos da memória ram ou cache. Caso algum programa requisite dados que estejam numa partição swap, esses dados são “trocados” por dados ociosos na memória ram. Por isso que o tamanho da swap deve ser no mínimo igual a memória ram. Algumas vezes, pode ser necessário adicionar mais espaço de swap a um sistema a fim de aumentar sua memória virtual, se bem que isso não é uma boa prática, o melhor mesmo é adicionar mais memória ram ao sistema. Existem duas maneiras de adicionarmos swap no sistema: através de 1 nova partição swap (o que geralmente é difícil, pois nem sempre há espaço em disco disponível) ou através de um arquivo de swap, que trata-se de um arquivo especial situado em um sistema de arquivos (ext3 por exemplo) montado. Como os procedimentos são praticamente os mesmos para os dois casos, iremos optar pelo modo de arquivo. Primeiro precisamos criar um arquivo “vazio” que seja do tamanho desejado para a swap (confuso não?), veja como é fácil: # dd if=/dev/zero of=/swap bs=1024 count=128000 128000+0 registros de entrada 128000+0 registros de saída 205 PROGRAMA TÉCNICO CIDADÃO A função do comando dd é “copiar bits de um lado (if) para outro (of). Estamos tirando bits de / dev/zero (que é um dispositivo especial que serve à esse propósito) e os enviando para o arquivo /swap, com 128000 blocos de 1024 (1KB) de tamanho cada um. Faça as contas e descubra o tamanho de nosso futuro arquivo de swap. # mkswap /swap Setting up swapspace version 1, size = 131067904 bytes # cat /proc/swaps Filename Type Size Used Priority /dev/sda1 partition 64256 2244 -1 Utilizamos o comando mkswap para “formatar” o arquivo /swap no formato de swap. O arquivo /proc/swaps nos dá informações sobre quais dispositivos de swap estão ativos no momento. Repare que o arquivo ainda não está listado. # swapon /swap # cat /proc/swaps Filename /dev/sda1 /swap Type Size Used Priority partition 64256 2244 -1 file 127992 0 -2 Agora sim, após utilizar o comando swapon finalmente ativamos nosso arquivo de swap. Vejamos abaixo como desabilitar uma swap: # swapoff /swap # cat /proc/swaps Filename /dev/sda1 Type partition Size Used Priority 64256 2244 -1 Pronto. É muito simples: swapon “liga a swap” e swapoff “desliga”. DICA Para ativar uma swap na inicialização, configure-a no arquivo /etc/fstab. 206 PROGRAMA TÉCNICO CIDADÃO COMPACTADORES E ARQUIVADORES Um termo muito comum no mundo GNU/Linux é “compactadores”.São um grupo de ferramentas especializadas em “compactar” arquivos, tal como o Winzip2 faz no Windows®. Iremos aprender a distinção entre essas ferramentas e as características de cada algoritmo de compressão que eles utilizam. Os principais compactadores existentes no GNU/Linux são: gzip e bzip2 Veremos também o que significa o termo “arquivadores” e porque a ferramenta GNU “tar” é um deles, e como ela se relaciona com os compactadores, possibilitando a execução de backups do sistema. Compactadores Compactadores são os programas que “apenas” compactam os arquivos. A grande diferença entre compactadores e arquivadores deve ser bem observada: “Os compactadores não agrupam diversos arquivos em um; Somente compactam separadamente”. A ferramenta gzip O gzip é uma das principais ferramentas GNU. Ele surgiu para ser o “zip do Linux”, porém, seu algoritmo de compressão não é compatível com o algoritmo do zip, originalmente desenvolvido p/ DOS e é utilizado até hoje em sistemas de 32 bits Microsoft® (Winzip, por exemplo). Gzip significa “GNU zip”, e seu algoritmo de compressão já é bem superior ao do zip. Sintaxe: gzip [opção] [-S sufixo] [arquivo...] O sufixo, nesse caso, é o texto que será agregado ao final do nome do arquivo após compactado. O padrão (se ignorarmos o sufixo) é “.gz”, uma espécie de extensão que identificaria o arquivo como sendo compactado pelo gzip. 2 O Winzip é um compactador e arquivador. 207 PROGRAMA TÉCNICO CIDADÃO ATENÇÃO Após compactado, o arquivo original é sobrescrito, não restando uma cópia compactada no sistema. Somente depois de descompactar é que o arquivo volta e o compactado desaparece. Tabela de Parâmetros -c --stdout -d --decompress -f --force -h --help -l --list -L --license -n --no-name -N --name -q --quiet -r --recursive -t --test -v --verbose -V --version -1 --fast -9 --best --rsyncable Escreve na saída padrão, não altera o arquivo original. Descompacta o arquivo. Força a operação. Exibe a ajuda. Lista o conteúdo de um arquivo compactado. Mostra a Licença do programa. Não salva ou restaura o nome original e tempos de acesso do arquivo. Salva ou restaura o nome original e tempos de acesso do arquivo. Exibe menos informações na tela. Age recursivamente em diretórios (Não compacta diretórios, somente os arquivos contidos nele recursivamente). Testa a integridade de um arquivo compactado. Exibe mais informações na tela. Mostra a versão do programa. Utiliza algoritmo de compressão simples. É mais rápido, porém compacta menos. Utiliza algoritmo de compressão avançado. É mais demorado, porém compacta melhor. Cria arquivos compatíveis com o utilitário rsync. Exemplo A: $ mkdir /tmp/teste-gzip ; cp -var /etc/*.conf /tmp/teste-gzip $ gzip -v -5 /tmp/teste-gzip/*.conf $ ls /tmp/teste-gzip $ gzip -v -d /tmp/teste-gzip/*.gz 208 PROGRAMA TÉCNICO CIDADÃO Exemplo B: $ cat /etc/passwd |gzip > ~/passwd.gz $ file ~/passwd.gz ~/passwd.gz: gzip compressed data, from Unix Exemplo muito interessante sobre como trabalhar com fluxos. Enviamos o fluxo de texto do arquivo /etc/passwd para a stdout e emendamos com o gzip através de um pipe. O gzip gera os dados em formato binário para a saída padrão dele, a qual redirecionamos para um arquivo de saída. DICA É possível utilizar o comando gunzip para descompactar arquivos gzip também. Ele funciona como um “gzip -d”. A ferramenta bzip2 Surgiu para ser o substituto do gzip. Serve ao mesmo propósito, porém possui um algoritmo de compressão muito mais eficiente, pois comprime muito mais. A diferença “interna” é que o bzip2 trabalha com blocos de dados, por isso o “b” no início do nome. Na verdade o bzip2 é uma suíte de ferramentas, que consiste em 4 programas: bzip2, bunzip2, bzcat e bzip2recover. O bzip2 é o compactador em si, assim como o bunzip2 é o descompactador. bzcat exibe o conteúdo de arquivos compactados pelo bzip2 e também serve para descompactar. o bzip2recover serve para recuperar arquivos bzip2 corrompidos. Sintaxe: bzip2 [opções] [arquivos...] bunzip2 [-fkvsVL] [arquivos...] bzcat [-s] [arquivo...] 209 PROGRAMA TÉCNICO CIDADÃO bzip2recover arquivo Tabela de Parâmetros -c --stdout -d --decompress -f --force -k --keep -s --small -L --license -z --compress -q --quiet -r --recursive -t --test -v --verbose -V --version -1 --fast -9 --best Escreve na saída padrão, não altera o arquivo original. Descompacta o arquivo. Força a operação. Mantém arquivos de entrada. Utiliza menos memória. Mostra a Licença do programa. Força compressão. Exibe menos informações na tela. Age recursivamente em diretórios (Não compacta diretórios, somente os arquivos contidos nele recursivamente). Testa a integridade de um arquivo compactado. Exibe mais informações na tela. Mostra a versão do programa. Utiliza algoritmo de compressão simples. É mais rápido, porém compacta menos. Utiliza algoritmo de compressão avançado. É mais demorado, porém compacta melhor. Exemplo: $ mkdir /tmp/teste-bzip2 ; cp -var /etc/*.conf /tmp/teste-bzip2 $ bzip2 -v -5 /tmp/teste-bzip2/*.conf $ ls /tmp/teste-bzip2 $ bzip2 -v -d /tmp/teste-bzip2/*.bz2 210 PROGRAMA TÉCNICO CIDADÃO Arquivadores Arquivadores são programas capazes de “juntar” diversos arquivos e diretórios em um só arquivo. Os mais conhecidos para linux são as ferramentas GNU cpio e tar. Estudaremos aqui o tar. A ferramenta tar O tar é a ferramenta de backup mais conhecida no mundo Linux. Ele é capaz de arquivar diversos arquivos em um só, onde o arquivo de destino pode ser um simples arquivo no disco rígido ou uma unidade de fita, formando uma ótima ferramenta de backup. Sintaxe: tar [opções] [arquivos...] 211 PROGRAMA TÉCNICO CIDADÃO Tabela de Parâmetros -c -x -t -v -f arquivo.tar -p -P -z -j -r -u -A --help Diz ao tar para “criar” um arquivo de backup, que deve ser especificado na opção -f. Instrui ao tar para extrair um arquivo tar, que também deve ser especificado pela opção -f. Testa arquivo tar, especificado pela opção -f. Modo “verbose”. Mostra mais informações sobre a operação atual. Especifica qual o arquivo o tar irá trabalhar. No caso da opção -c, caso não exista, o arquivo será criado. Diz ao tar para preservar as permissões dos arquivos dentro do arquivo tar. Geralmente não é necessário, pois o tar costuma ter esse comportamento por padrão. Instrui o tar a “preservar” a barra “/” no início do nome dos arquivos. Por padrão, o tar “remove” a “/” no início dos nomes de arquivos que populem um arquivo tar, tornando-os todos os caminhos relativos. Ativa o algoritmo de compressão gzip no arquivo especificado pela opção -f. Não pode ser utilizado em conjunto com a opção -j (algoritmo bzip2). Ativa o algoritmo de compressão bzip2 no arquivo especificado pela opção -f. Não pode ser utilizado em conjunto com a opção -z (algoritmo gzip). Anexa arquivos no final de um arquivo tar. Atualiza o conteúdo de arquivos tar. Concatena outros arquivos tar em um arquivo tar. Exibe ajuda. Exemplo: # tar -cvf /tmp/backup.tar /etc # mkdir /tmp/restore # cd /tmp/restore/ # tar -tvf /tmp/backup.tar # tar -xpvf /tmp/backup.tar Efetuamos o backup de todo o diretório /etc no arquivo /tmp/backup.tar. Basta que o arquivo de destino seja um dispositivo de fita, como /dev/st0 por exemplo, para efetuarmos um backup em 212 PROGRAMA TÉCNICO CIDADÃO uma unidade de fita. Ao extrairmos o backup, foi criado o diretório etc dentro do diretório atual (/tmp/restore). As famosas tarballs Muita gente já deve ter ouvido falar de tarballs mas não sabe ao certo o que vem a ser uma delas, ou pelo menos não sabe como criá-las. As tarballs são simples de entender e de lidar, pois são arquivos normais do tar (Um arquivador....), compactados com algum algoritmo de compactação como gzip ou bzip2. Para lidar com tarballs, basta ativar a opção -z (gzip) ou -j (bzip2) do tar. No exemplo abaixo, vamos fazer praticamente o mesmo que o exemplo anterior, porém ativando um algoritmo de compactação. Exemplo A: # # # # # tar -cvzf /tmp/backup.tar.gz /etc mkdir /tmp/restore cd /tmp/restore/ tar -tvzf /tmp/backup.tar.gz tar -xpvzf /tmp/backup.tar.gz Repare que todas as operações do tar somente foram acrescidas da opção -z, que ativa o algoritmo de compressão gzip, e é utilizado inclusive junto da opção -t, que testa o arquivo tar. Quanto ao nome dos arquivos, é de costume associar a extensão .tar.gz ou .tgz para arquivos “arquivados “ pelo tar e compactados pelo algoritmo do gzip, e a extensão .tar.bz2 ou .tbz para arquivos “arquivados” pelo tar e compactados pelo algoritmo do bzip2. Exemplo B: # # # # tar -cvjf /tmp/backup.tar.bz2 /etc mkdir /tmp/restore cd /tmp/restore/ tar -tvjf /tmp/backup.tar.bz2 213 PROGRAMA TÉCNICO CIDADÃO # tar -xpvjf /tmp/backup.tar.bz2 214 PROGRAMA TÉCNICO CIDADÃO PROCESSO DE INICIALIZAÇÃO É importante compreender tudo que envolve o processo de inicialização de um sistema Linux. Isso ajuda muito quando for preciso diagnosticar algum problema durante a inicialização, por exemplo. O processo de inicialização consiste basicamente em 3 Etapas: Inicialização do hardware pela BIOS, carregamento do gestor de boot (responsável por carregar o kernel) e os processos de init. A inicialização do hardware feita pela bios consiste no POST (Power On Self Test) e na busca de informações de boot no MBR (Master Boot Record) do dispositivo que estiver configurado como inicializável na BIOS. +-----------+ | BIOS +-----------+ |------->| +-----------+ MBR +---------------------+ |-------->| +-----------+ Processos de init | +---------------------+ | +----------------+ | Gestor de Boot | +----------------+ Gerenciadores de boot Um gerenciador é um software que geralmente fica instalado no MBR de um disco rígido e tem a finalidade de gerenciar a carga de sistemas operacionais. No caso do Linux, o gestor de boot tem a missão de carregar o kernel do para a memória e entregar o comando para o sistema operacional. Essa etapa do processo exige que o administrador tenha conhecimento sobre um gestor de boot no Linux. Existem 2 gestores de boot mais famosos para Linux: o lilo e o grub. 215 PROGRAMA TÉCNICO CIDADÃO LILO Esse gestor de boot é bem maduro e oferece configuração simples. A maioria das distribuições já optou ou ainda opta por ele, pois algumas já estão definindo o grub como gestor de boot padrão. Abordaremos uma configuração básica do lilo, que permita o sistema inicializar e cumprir seu dever. Configurando o lilo A configuração do lilo consiste em apenas 1 arquivo, o /etc/lilo.conf. É nesse arquivo que definimos as opções que desejamos para o boot. Seguem um exemplo de um típico lilo.conf: lba32 boot=/dev/sda root=/dev/sda2 install=/boot/boot-menu.b map=/boot/map delay=20 vga=normal append=”pci=bios” default=Linux image=/vmlinuz label=Linux read-only A opção lba32 diz ao lilo que o sistema está utilizando o modo de endereçamento de disco LBA. A opção boot especifica em qual dispositivo instalar o gestor de boot. A opção root configura qual o dispositivo que contém o sistema de arquivos raiz do sistema. O gestor de boot precisa saber disso para que seja possível localizar o programa /sbin/init, necessário para dar continuidade ao processo de inicialização. 216 PROGRAMA TÉCNICO CIDADÃO A opção install especifica qual será o arquivo binário do gestor de boot que deverá ser instalado. O lilo costuma contar com 3, todos dentro do diretório /boot: boot-menu.b, boot- text.b e boot.b. A diferença entre eles é o menu que aparece na inicialização. Se essa opção for omitida, o lilo assume /boot/boot.b. A opção map especifica o caminho para o arquivo de mapa de dos dispositivos. Esse arquivo já acompanha o lilo e não deve ser preocupação. A opção delay especifica o tempo, em “décimos de segundos” que o lilo aguardará até carregar a imagem padrão. A opção vga configura qual será a resolução do console após carregar o kernel. Se o seu kernel suportar framebuffer, tente valores como vga=771 (800x600), ou vga=773 (1024x768). A opção append permite passarmos parâmetros de inicialização para o kernel. A opção default indica qual será a imagem padrão. Podem existir mais de uma entrada do tipo “image” no arquivo. Cada uma delas refere-se a um sistema operacional (podem ser vários kernel's para o mesmo sistema). Essa opção aponta para o arquivo de kernel do Linux, que nesse caso aponta para um link simbólico presente em todos os sistemas Debian (/vmlinuz). Após editar o arquivo conforme suas necessidades, podemos testá-lo, antes de mais nada, com o comando: # lilo -t Added Linux * The boot sector and the map file have *NOT* been altered. Uma vez que o comando não tenha apresentado nenhum erro, podemos prosseguir com a instalação do gestor de boot, basta digitar o comando: # lilo 217 PROGRAMA TÉCNICO CIDADÃO Added Linux * Nesse momento, o lilo leu as configurações do arquivo /etc/lilo.conf e gravou no dispositivo especificado na opção boot. Agora basta reiniciar o sistema e testar. Restaurando o setor de boot Sempre que o lilo altera o setor de boot do disco (O MBR por exemplo), é feita uma cópia do original no arquivo /boot/boot.0300. Basta retornar esse arquivo para a MBR que tudo estará resolvido. Lembrando que a MBR fica localizada no início do HD, mais especificamente nos primeiros 512bytes. Podemos utilizar o comando dd para tal façanha: dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1 GRUB GRUB é um gestor de boot mais recente com mais recursos que o lilo. A principal diferença entre o lilo e o grub, além dos arquivos de configuração, é que o grub não requer que o setor de boot seja regravado sempre que modifique alguma configuração. Os arquivos de configuração do grub ficam localizados no diretório /boot/grub por padrão. ATENÇÃO O grub não costuma vir instalado por padrão em algumas distribuições. Se for esse o caso, instale o pacote que provém o grub para sua distribuição. No Debian, o pacote se chama “grub”. 218 PROGRAMA TÉCNICO CIDADÃO O principal arquivo de configuração é o /boot/grub/menu.lst, onde definimos a aparência e as opções disponíveis no gestor de boot. Segue um exemplo de um arquivo /boot/grub/menu.lst: default=0 timeout=10 splashimage=(hd1,0)/grub/splash.xpm.gz title Primeira Opção root (hd1,0) kernel /arquivo_do_kernel ro vga=771 root=/dev/hda2 initrd /arquivo_da_initrd.img title Segunda Opção root (hd1,0) kernel /arquivo_do_kernel2 ro vga=771 root=/dev/hda2 initrd /arquivo_da_initrd-2.img As 3 primeiras linhas contemplam a seção global do arquivo, e definem, respectivamente, qual será a opção padrão de inicialização (Conta-se a partir do 0), quanto tempo (em segundos) deve-se esperar por interação do usuário até que seja carregada a opção padrão, e qual o arquivo de imagem que será mostrado na tela do grub. As outras entradas do arquivo são as entradas de boot, que definem as opções que ficam selecionáveis no menu do grub. Cada uma dessas entradas consiste em um “bloco de configuração” que começa com a diretiva “image”. O exemplo acima possui 2 dessas entradas. Vamos analisar as opções presente nesse tipo de entrada: title Primeira Opção root (hd0,0) kernel /arquivo_do_kernel ro vga=771 root=/dev/hda2 initrd /arquivo_da_initrd.img Todo o texto localizado após a opção “title” é o texto que será exibido no menu de seleção do grub. 219 PROGRAMA TÉCNICO CIDADÃO Para que possamos especificar caminhos de arquivos nas próximas opções do grub, precisamos definir qual será a partição que o grub irá procurar os dados; fazemos isso com a opção “root”. Repare que a partição foi especificada de uma maneira proprietária do grub: (hd0,0). Isso acontece porque o grub utiliza uma nomenclatura própria de dispositivos para facilitar sua configuração. Vejamos na tabela abaixo como o grub se comporta nesse aspecto: Sistema de dispositivos do GRUB (hd0) (hd0,0) (fd0) (hd3,2) Primeiro disco rígido disponível (hda ou sda) Primeira partição do primeiro disco disponível (hda1 ou sda1) /dev/fd0 Terceira partição do quarto disco rígido (hdd3 ou sdd3) DICA Caso o sistema possua discos de tecnologia diferentes associados, como SCSI e IDE, pode ser necessário editar o arquivo /boot/grub/device.map para definir quais serão os respectivos dispositivos no grub. O parâmetro “kernel” especifica qual será o arquivo do kernel associado com aquela entrada de boot, lembrando que a principal finalidade de um gestor de boot no Linux é carregar um Kernel e entregar o restante do processo de inicialização ao sistema operacional recém-carregado. Repare que são passados alguns parâmetros de inicialização para o kernel (todos esses na mesma linha). O mais importante desses parâmetros é o parâmetro root, que especifica qual será a partição que contém o sistema de arquivos raiz, pois é lá onde o kernel irá procurar pelo programa /sbin/init, que é o próximo passo do processo de inicialização. Ás vezes é necessário especificar a opção “initrd”, que aponta para um arquivo de initrd para o respectivo kernel. Uma initrd é um arquivo que contém módulos necessários para que o kernel 220 PROGRAMA TÉCNICO CIDADÃO consiga “enxergar” o restante do sistema de arquivos e dar procedência ao processo de inicialização. Exemplos desses módulos são “controladoras de disco” e “sistemas de arquivos”. Instalando o GRUB no MBR Para gravar o sistema do grub no MBR, contamos com o utilitário grub-install, que é bem simples de utilizar, basta especificar o dispositivo em que será gravado o grub, dessa forma: # grub-install /dev/hda Isso instalará o grub no MBR do disco rígido. Com o grub instalado e tudo configurado corretamente, o usuário deve ser presenteado com um menu para a seleção das entradas de boot configuradas no arquivo /boot/grub/menu.lst. Neste menu, podemos editar “temporariamente” as opções das entradas de inicialização pressionando a tecla [E] sobre uma delas. As outras teclas de navegação são mostradas no rodapé da tela. O processo de init A terceira etapa de inicialização se dá início assim que o gestor de boot consegue carregar o kernel e passa o controle ao sistema operacional (O kernel...) do restante do processo. A missão agora é configurar os dispositivos do sistema e inicializar os programas que estiverem marcados para tal. Logo após o kernel ser carregado, ele tenta montar “como somente leitura” a partição raiz do sistema, que foi especificada através do parâmetro “root” durante a inicialização pelo gestor de boot. 221 PROGRAMA TÉCNICO CIDADÃO Assim que a partição raiz estiver montada, o kernel procura e executa o programa /sbin/init, com base nas opções encontradas no arquivo /etc/inittab, para inicialmente definir o “Nível de execução” do Kernel. O que são runlevels (Níveis de execução)? O Kernel do Linux trabalha com os chamados níveis de execução, ou runlevels, que é uma maneira organizada e robusta de definir que tipo de trabalho será exercido com o sistema. O Linux conta com 7 níveis de execução, contados de 0 a 6. Cada nível instrui o Kernel a agir de uma forma diferente, conforme tabela abaixo: Níveis de execução 0 Modo “shutdown”. Envia um sinal para o Kernel finalizar e desligar o sistema. 1 2a5 6 Modo “Monousuário”. Desabilita a habilidade multiusuário do Kernel; muito utilizado em manutenções do sistema, pois só permite que um usuário utilize o sistema de cada vez (o root). note que isso também impossibilita que certos programas entrem em execução. Modos multiusuário. São os níveis padrão de execução do Linux, onde o Kernel não desabilita nenhuma característica importante. Modo “reboot”. Envia um sinal para o Kernel finalizar e reiniciar o sistema. É de extrema importância que o administrador conheça bem quais são e para que serve os níveis de execução. DICAS Podemos, a qualquer momento, utilizar o comando runlevel para descobrir que o nível de execução atual e também utilizar o comando init <nível desejado> para instruir o kernel a trocar o nível de execução atual. 222 PROGRAMA TÉCNICO CIDADÃO O arquivo /etc/inittab Este é, logo após o próprio kernel, o arquivo mais importante dessa etapa da inicialização. É nele que se encontram os parâmetros que guiam o sistema por todo o restante do processo. Cada entrada nesse arquivo tem o seguinte aspecto: identificação:runlevels:ação:comando Identificação é uma string qualquer, geralmente pequena (1 ou 2 caracteres) e que não se deve repetir para nenhuma outra entrada no arquivo. Sua finalidade é identificar a entrada no arquivo. O campo “runlevels” especifica em que níveis de execução a linha deve ser analisada. Já o campo “ação” especifica como deve ser o comportamento do comando executado no último campo. O campo “ação” aceita palavras-chave que determinam essa característica. Exemplos de palavras-chave são: “respawn” diz ao init para reiniciar o comando quando ele for finalizado; “boot” instrui o init a inicializar o processo durante o boot, ignorando o campo “runlevels”. Vejamos um exemplo do /etc/inittab em um sistema Debian típico: # grep ^[^#] /etc/inittab |nl 1 id:2:initdefault: 2 si::sysinit:/etc/init.d/rcS 3 ~~:S:wait:/sbin/sulogin 4 l0:0:wait:/etc/init.d/rc 0 5 l1:1:wait:/etc/init.d/rc 1 6 l2:2:wait:/etc/init.d/rc 2 7 l3:3:wait:/etc/init.d/rc 3 8 l4:4:wait:/etc/init.d/rc 4 9 l5:5:wait:/etc/init.d/rc 5 10 l6:6:wait:/etc/init.d/rc 6 11 z6:6:respawn:/sbin/sulogin 12 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now 223 PROGRAMA TÉCNICO CIDADÃO 13 14 15 16 17 18 19 20 21 pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop 1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 4:23:respawn:/sbin/getty 38400 tty4 5:23:respawn:/sbin/getty 38400 tty5 6:23:respawn:/sbin/getty 38400 tty6 As linhas foram numeradas e os comentários foram suprimidos para facilitar a leitura. O programa init lê uma por uma as entradas e executa as operações adequadas. Na linha 1 é definido o nível de execução padrão do sistema, na segunda linha é invocado o script / etc/init.d/rcS, que desencadeia a estrutura de inicialização dos scripts cujo nome inicie com “S” no diretório /etc/rcS.d; A linha 3 é um adicional de segurança que impede acesso ao sistema no modo monousuário (O runlevel S é igual 1) sem autenticação como root. As linhas 4 à 10 dão procedimento a inicialização dos serviços do sistema para cada runlevel (Repare que comente um desses será executado, pois cada um equivale a um runlevel). Mais detalhes sobre esse processo em seguida. Na linha 12 é configurado um “trap” para a seqüência de teclas [CONTROL]+[ALT]+[DEL], onde o comando shutdown será invocado para reiniciar o PC. Essa linha pode ser comentada ou editada para as necessidades do administrador. As linhas 13, 14 e 15 configuram como o sistema deve agir no caso de falta de energia3. As últimas linhas do arquivo configuram os terminais que estarão disponíveis após a inicialização. Repare a palavra-chave “respawn” nessas linhas... ela é responsável por disponibilizar novamente outro terminal quando saímos de um. 3 É necessário um sistema de UPS (No-break) gerenciado para que isso possa funcionar. 224 PROGRAMA TÉCNICO CIDADÃO Estrutura de inicialização de serviços Essa parte do processo de inicialização que requer mais atenção tem algumas diferenças principais entre algumas distribuições Linux. Basicamente, existem dois modelos de inicialização de serviços: SysV e BSD. A maioria das distribuições utilizam o sistema SYSV como padrão (RedHat, Debian, Suse, Mandrake, Conectiva, etc...), e são poucos os que utilizam o sistema BSD de inicialização (Somente o Slackware até onde conheço). Portanto, estudaremos o sistema SYSV nesse tópico. Nesse sistema de inicialização, após ser definido o nível de execução através do arquivo / etc/inittab e o os scripts de configuração terem entrado em ação (Linhas 1 e 2 do arquivo), a entrada específica do /etc/inittab cuidará de chamar o script /etc/init.d/rc. O script /etc/init.d/rc Esse script é responsável por executar, na ordem correta, os scripts contidos no diretório de inicialização de serviços do runlevel atual. É simples saber qual é esse diretório. Existe 1 diretório para cada nível de execução, onde devem estar contidos links para os “reais” scripts de inicialização para cada serviço em / etc/init.d. Os diretórios de inicialização de serviços Esses diretórios são, geralmente, /etc/rc?.d, onde “?” é o número do nível de execução. Por exemplo, para o nível 2 de execução, o diretório é /etc/rc2.d. O script executa, em ordem alfabética, todos os arquivos que iniciam com “S” dentro do diretório do respectivo nível de execução. Vejamos o conteúdo desse diretório em um sistema real: 225 PROGRAMA TÉCNICO CIDADÃO # cd /etc/rc2.d # ls -l lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root lrwxrwxrwx 1 root root root root root root root root root root root root root root root root root 18 15 26 15 14 14 18 16 16 20 17 21 14 13 19 23 2004-12-03 19:46 S10sysklogd -> ../init.d/sysklogd 2004-12-03 19:46 S11klogd -> ../init.d/klogd 2004-12-04 10:34 S19progress.service -> ../init.d/progress.service 2004-12-04 10:34 S20acpid -> ../init.d/acpid 2004-12-04 10:34 S20alsa -> ../init.d/alsa 2004-12-04 10:34 S20apmd -> ../init.d/apmd 2005-01-06 14:45 S20cpufreqd -> ../init.d/cpufreqd 2004-12-21 22:47 S20cupsys -> ../init.d/cupsys 2004-12-04 10:34 S20dbus-1 -> ../init.d/dbus-1 2004-12-04 10:37 S20irqbalance -> ../init.d/irqbalance 2004-12-03 19:46 S20makedev -> ../init.d/makedev 2004-12-04 10:34 S25progress.up -> ../init.d/progress.up 2004-12-03 19:46 S89cron -> ../init.d/cron 2004-12-04 10:36 S99gdm -> ../init.d/gdm 2004-12-03 19:46 S99rmnologin -> ../init.d/rmnologin 2004-12-03 19:46 S99stop-bootlogd -> ../init.d/stop-bootlogd O comando “ls -l” já mostra a lista na mesma ordem de execução, e podemos ter uma base sobre o que ocorre nessa parte da inicialização. Repare que todas as entradas são links simbólicos para os scripts contidos em /etc/init.d. DICA O número contido no nome dado aos links para cada serviço é conhecido como número de prioridade do serviço, pois por estar em ordem alfabética, os serviços com número de prioridade menor executarão primeiro. 226 PROGRAMA TÉCNICO CIDADÃO SERVIDOR GRÁFICO X-WINDOW Comumente referenciado como “Interface Gráfica do Linux”, o servidor gráfico é um componente muito complexo e importante do sistema. Atualmente existem 2 versões de servidor gráfico para Linux: XFree86 e X.org. Ambos são configurados da mesma forma, e pelo menos até agora, não existem diferenças drásticas de configuração entre eles. Funcionamento A primeira coisa realmente importante nesse assunto é saber distinguir o que vem a ser “servidor gráfico” e “gerenciador de janelas”. O sistema X-WINDOW é considerado um sistema cliente-servidor porque realmente ele é. A função do servidor gráfico é ter configurados ao menos os 4 dispositivos essenciais para gestão gráfica (teclado, mouse, monitor e placa de vídeo) e disponibilizar acesso a esses recursos através de uma conexão de rede. Inclusive os processos gráficos locais utilizam uma conexão de rede para que as aplicações gráficas (clientes do X-WINDOW) obtenham acesso aos 4 dispositivos. Configurando o XFree86 O arquivo de configuração do XFree86 é /etc/X11/XF86Config-4. É nele que definimos a resolução, profundidade de cores e monitor, por exemplo. Vejamos um exemplo desse arquivo: Section "Files" FontPath # if the local FontPath FontPath FontPath "unix/:7100" # local font server font server has problems, we can fall back on these "/usr/lib/X11/fonts/misc" "/usr/lib/X11/fonts/cyrillic" "/usr/lib/X11/fonts/100dpi/:unscaled" 227 PROGRAMA TÉCNICO CIDADÃO FontPath FontPath FontPath FontPath FontPath FontPath EndSection "/usr/lib/X11/fonts/75dpi/:unscaled" "/usr/lib/X11/fonts/Type1" "/usr/lib/X11/fonts/CID" "/usr/lib/X11/fonts/Speedo" "/usr/lib/X11/fonts/100dpi" "/usr/lib/X11/fonts/75dpi" Section "Module" # Load "GLcore" Load "bitmap" Load "dbe" Load "ddc" # Load "dri" Load "extmod" Load "freetype" # Load "glx" Load "int10" Load "record" Load "speedo" Load "type1" Load "vbe" EndSection Section "InputDevice" Identifier "Generic Keyboard" Driver "keyboard" Option "CoreKeyboard" Option "XkbRules" "xfree86" Option "XkbModel" "abnt2" Option "XkbLayout" "br" Option "XkbVariant" "abnt2" EndSection Section "InputDevice" Identifier "Configured Mouse" Driver "mouse" Option "CorePointer" Option "Device" "/dev/psaux" Option "Protocol" "PS/2" Option "Emulate3Buttons" "true" 228 PROGRAMA TÉCNICO CIDADÃO Option EndSection "ZAxisMapping" "4 5" Section "Device" Identifier "NVIDIA" Driver "nv" EndSection Section "Monitor" Identifier "Monitor Genérico" HorizSync 31.5-70 VertRefresh 50-120 Option "DPMS" EndSection Section "Screen" Identifier "Default Screen" Device "NVIDIA" Monitor "Monitor Genérico" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1152x864" EndSubSection EndSection Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" InputDevice "Generic Keyboard" InputDevice "Configured Mouse" EndSection A configuração é definida em seções, como InputDevice para teclado e mouse, Monitor para o monitor, Device para placa de vídeo e Screen para a aparência da tela. A seção ServerLayout define quais seções fazem parte da estrutura de configuração. 229 PROGRAMA TÉCNICO CIDADÃO DICA Para configurar esse arquivo no Debian, o dpkg disponibiliza um ótimo helper. Digite “dpkg-reconfigure xserver-xfree86” para acioná-lo. Inicializando o XFree86 Após configurado, já podemos utilizar o comando startx (nenhum outro servidor gráfico deve estar rodando no momento) para inicializar o servidor gráfico. Para se ter algo mais funcional, precisamos de um ambiente desktop completo (gerenciador de janelas) e um gerenciador de login. Para instalar os pacotes necessários no Debian, utilize: dselect install gnome-desktop-environment Isso instalará os componentes principais do gnome junto com seu gerenciador de login, o gdm. Após os pacotes instalados e configurados, basta iniciar o serviço gdm para ter acesso a um ambiente gráfico completo e funcional. Acessando o XFree86 através da rede Devido a natureza “network” do servidor gráfico XFree86, é possível efetuar uma conexão a outro servidor gráfico, permitindo que um aplicativo executado localmente utilize dos recursos gráficos de outra máquina. Para habilitar tal característica, é preciso que o ip do host que tentará a conexão seja liberado no host de destino, com o comando: # xhost +192.168.X.X Onde 192.168.X.X é o endereço IP do host que tentará a conexão com esta máquina. Agora, no host que originará a conexão, é preciso exportar a variável DISPLAY para que redirecione as chamadas gráficas para o outro host. Vejamos: 230 PROGRAMA TÉCNICO CIDADÃO $ echo $DISPLAY :0.0 $ export DISPLAY=”192.168.Y.Y:0.0” Onde 192.168.Y.Y é o ip do servidor ao qual pretende se conectar. A partir de agora, todo cliente gráfico que for inicializado nesse host será executado pelo servidor gráfico no computador de destino. Faça o teste. 231 PROGRAMA TÉCNICO CIDADÃO AGENDAMENTO DE TAREFAS Na gama de conhecimento de um administrador de sistemas GNU/Linux é essencial constar “Agendamento de Tarefas”, uma atividade muito importante que facilita bastante a vida de qualquer administrador. No Linux, contamos com diversos programas que lidam com agendamento de tarefas, mas o principal deles é o cron. Cron O cron é um programa que roda em background (um daemon) e cuida de executar tarefas préagendadas por usuários do sistema periodicamente através das chamadas crontabs. Existem, basicamente, 3 maneiras diferentes de se agendar uma tarefa utilizando o cron. Podese editar diretamente o arquivo de configuração /etc/crontab, adicionar um script em um dos diretórios de agendamento do cron (/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e / etc/cron.d) ou através do comando crontab. Veremos as diferenças. O arquivo /etc/crontab Esse é o arquivo principal de configuração do cron. Somente o usuário root tem permissão para editar esse arquivo diretamente. Esse arquivo pode receber 2 tipos de entradas: Variáveis de ambiente que serão válidas para os comandos agendados no CRON e entradas de agendamento, que devem seguir o padrão abaixo: m h d M s usuario comando No exemplo acima, cada um dos 5 primeiros campos tem um significado que influencia diretamente na periodicidade do agendamento. Vejamos o significado de cada um desses campos: 232 PROGRAMA TÉCNICO CIDADÃO Significado dos campos m h d M s Minuto (0 a 60) Hora (0 a 23) Dia do mês (1 a 31) Mês do ano (1 a 12) Dia da semana (0 a 7, sendo que 0 e 7 é domingo) Dessa forma, basta agendar uma linha de agendamento para cada evento desejado. Vamos verificar alguns exemplos de agendamentos: 35 0 * * * Diariamente, às 0:35. */5 8-18 * * 1-5 De segunda a sexta, a cada 5 minutos durante o horário comercial. 10,50 */2 1 3 * A cada 2 horas, nos minutos 10 e 50, sempre no dia 1 de março. ATENÇÃO Para que qualquer tipo de agendamento funcione, é preciso que o daemon do cron (crond) esteja em execução. Diretórios de agendamento do cron O cron possui agendamentos pré-configurados no arquivo /etc/crontab, cada um deles com uma periodicidade diferente. Cada uma dessas entradas também está associada a um diretório diferente. 233 PROGRAMA TÉCNICO CIDADÃO Os diretórios são: /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly, que executam, respectivamente, de hora em hora, diariamente, semanalmente e mensalmente os scripts lá postos. Por exemplo. Para se ter um script de backup sendo executado diariamente pelo cron, é possível colocá-lo (ou até mesmo um link simbólico) no diretório /etc/cron.daily. O diretório /etc/cron.d Também é possível agendar tarefas no cron criando-se arquivos de agendamento no diretório / etc/cron.d. Estes arquivos devem seguir o mesmo formato que as entradas de agendamento do arquivo /etc/crontab. Agendamentos definidos pelos usuários Através do comando crontab, é possível que usuários comuns do sistema (Isso inclui o root) consigam agendar tarefas. As tarefas agendadas pelos usuários comuns do sistema só podem ser agendadas e visualizadas por eles mesmos e o root, sempre. Sintaxe: crontab [-u usuário] arquivo crontab [-u usuário] { -e | -l | -r } A opção -u permite que o root gerencie crontabs de outros usuários. A opção -e (edit) abre o modo de edição da crontab para o usuário. A opção -l (list) mostra a crontab do usuário na tela e a opção -r (release) limpa a respectiva crontab. Ao invocar o crontab com a opção -e, é aberto o editor padrão (geralmente o vim) para permitir editar o arquivo de crontab do usuário, que só pode ser editado dessa forma. 234 PROGRAMA TÉCNICO CIDADÃO A grande diferença de se agendar tarefas dessa forma é que não precisamos especificar a qual usuário o agendamento se refere na linha de configuração, pois a crontab inteira pertence a determinado usuário. Vejamos um exemplo: $ crontab -e 0 0 * * * /home/usuario/bin/script.sh :wq crontab: installing new crontab $ crontab -l 0 0 * * * /home/apostila/bin/script.sh $ crontab -r $ crontab -l no crontab for usuario Controle de acesso ao cron O cron conta com um sistema de controle de acesso, que permite restringir quem tem permissões para agendar tarefas no sistema. Esse controle é feito através de dois arquivos: /etc/cron.allow e /etc/cron.deny. Nenhum destes arquivos existe por padrão. Caso o arquivo /etc/cron.allow exista, somente os usuários que estejam listados nele (um por linha) poderão agendar tarefas com o cron. (inclusive o root !!!). Caso esse arquivo não exista, mas existe o arquivo /etc/cron.deny, este servirá de lista negra dos usuários que não terão acesso ao cron. DICAS É uma boa prática de segurança criar um arquivo /etc/cron.allow para limitar e ter mior controle sobre quem terá acesso ao cron. 235 PROGRAMA TÉCNICO CIDADÃO 236 PROGRAMA TÉCNICO CIDADÃO BIBLIOTECAS COMPARTILHADAS O sistema GNU/Linux é estruturado de forma que bibliotecas de funções de código presentes em determinados programas possam ser compartilhadas para utilização em qualquer outro programa que saiba fazer uso delas, criando um repositório de funções de código. Imagine o programa A, que possui bibliotecas com funções de criação de objetos gráficos na tela, como janelas, por exemplo. Agora imagine o programa B, que “Oferece uma interface gráfica” para determinadas tarefas administrativas do sistema. Nesse caso, o programa A compartilha suas bibliotecas com o restante do sistema, e o programa B utiliza algumas delas para prover as funções de acesso a interface gráfica. As bibliotecas compartilhadas são uma das maiores responsáveis pelo sucesso das ferramentas Linux hoje em dia, pois permite que um programador junte características já existentes de outros programas à suas criações. Trabalhando com bibliotecas compartilhadas Apesar de parecer um termo complicado, trabalhar com bibliotecas compartilhadas é extremamente simples. É preciso saber em quais diretórios elas costumam estar, quais bibliotecas determinado binário utilizam e saber adicionar novas bibliotecas no sistema. Localização das bibliotecas compartilhadas Por padrão, os programas instalados já adicionam as bibliotecas em seus devidos diretórios, que geralmente são: /lib, /usr/lib e /var/lib. Listando Bibliotecas disponíveis Para listar todas as bibliotecas disponíveis e a localização de cada uma, utilize o comando: # ldconfig -p Esse comando mostrará uma lista gigante das bibliotecas. 237 PROGRAMA TÉCNICO CIDADÃO Descobrindo quais bibliotecas um binário utiliza É possível saber quais bibliotecas compartilhadas determinado binário necessita para funcionar. Basta utilizar o comando ldd, da seguinte forma: # ldd /bin/tar librt.so.1 => /lib/tls/librt.so.1 (0xb7fd4000) libc.so.6 => /lib/tls/libc.so.6 (0xb7e9f000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7e90000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fea000) Para uma listagem mais completa, adicione o parâmetro -v ao comando ldd, veja: # ldd -v /bin/tar librt.so.1 => /lib/tls/librt.so.1 (0xb7fd4000) libc.so.6 => /lib/tls/libc.so.6 (0xb7e9f000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7e90000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fea000) Version information: /bin/tar: librt.so.1 (GLIBC_2.2) => /lib/tls/librt.so.1 libc.so.6 (GLIBC_2.3) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.2.3) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.2) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.1) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/tls/libc.so.6 /lib/tls/librt.so.1: libpthread.so.0 (GLIBC_2.0) => /lib/tls/libpthread.so.0 libpthread.so.0 (GLIBC_2.1) => /lib/tls/libpthread.so.0 libpthread.so.0 (GLIBC_PRIVATE) => /lib/tls/libpthread.so.0 libc.so.6 (GLIBC_2.1.3) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.2) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.1) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.3.2) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_PRIVATE) => /lib/tls/libc.so.6 /lib/tls/libc.so.6: ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 238 PROGRAMA TÉCNICO CIDADÃO ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2 /lib/tls/libpthread.so.0: ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2 libc.so.6 (GLIBC_2.1.3) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.1) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.3.2) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.2) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_2.1.2) => /lib/tls/libc.so.6 libc.so.6 (GLIBC_PRIVATE) => /lib/tls/libc.so.6 Adicionando novas bibliotecas ao sistema Caso você tenho criado ou baixado alguma biblioteca nova, adicione o caminho completo do diretório em que essa biblioteca se encontra no arquivo /etc/ld.so.conf e digite o comando ldconfig (sem parâmetros). Isso irá gerar o arquivo /etc/ld.so.cache, que contém informações sobre as bibliotecas disponíveis no sistema. Após a operação, confira o resultado com o comando “ldconfig -p” e veja se sua nova biblioteca consta na lista. 239 PROGRAMA TÉCNICO CIDADÃO GERENCIAMENTO DE PROCESSOS No Linux, ou mais especificamente em todos os sistemas operacionais que seguem o padrão POSIX de desenvolvimento (todos os Unix, Linux e BSDs), utilizam um sistema de gerenciamento de processos. É esse sistema que permite a execução simultânea de programas no mesmo computador, e isso transcorre de maneira simples de se entender. Basicamente, cada programa em execução pode desencadear a execução de outros sub-programas, mas todos no geral são denominados um a como com sendo processos. Cada processo recebe um identificador numérico crescente que o diferencia dos demais; Esse identificador numérico recebe o nome de PID, e significa Process Identification. O PID é nosso termo-chave para gerenciarmos os processos, conforme veremos adiante. Lidando com processos É essencial que um administrador de sistemas Linux saiba como lidar com processos, isso inclui iniciar, listar, terminar e modificar a prioridade de execução deles. Listando processos Para ter uma visão geral ou em algumas ocasiões, específica sobre quais processos estão em execução em um computador sob o sistema operacional Linux, contamos com diversas ferramentas, das quais as mais importantes são: ps e top. O comando ps A ferramenta ps é utilizada para mostrar os processos em execução no sistema, permitindo listar processos que coincidam com determinados argumentos como o usuário que originou o processo ou o PID. Sintaxe: ps [opçoes] 240 PROGRAMA TÉCNICO CIDADÃO O comando, apesar de ter um nome pequeno, possui uma grande gama de opções, divididas em 3 grupos: UNIX, BSD e GNU. Isso existe “no Linux” para manter compatibilidade com o comando ps de outros sistemas, permitindo que administradores experientes em UNIX não encontrem dificuldades em manipulas o ps no Linux, pois as mesmas opções do UNIX também são aceitas. Isso complica um pouco a vida de quem está aprendendo o ps agora. Portanto, fique atento nos parâmetros para saber a quais grupos eles pertencem. As opções do UNIX são precedidas por hífem, e podem ser agrupadas, desde que a primeira opção do grupo possua o hífem (Ex.: ps -ax). As opções do BSD não são precedidas por nada e podem ser agrupadas facilmente (EX.: ps axef). Já as opções GNU, que são exclusivas do Linux e têm um formato característico bem diferente, pois são todas precedidas por dois hífens e não podem ser agrupadas (Ex.: ps –user usuario). Confundir as opções pode trazer resultados também confusos. Por exemplo, o comando ps aux, não tem a mesma interpretação que o comando ps -aux, que sob os padrões POSIX do UNIX, mostraria todos os processos (opção -a) que pertençam ao usuário “x” (a opção -u especifica um usuário. graças a “astutez” do Linux, os dois comandos teriam o mesmo resultado, desde que o usuário x não exista no sistema, pois o ps verifica isso, e caso o usuário não existe, ele trata a sequência como se fosse aux (sem hífem). 241 PROGRAMA TÉCNICO CIDADÃO Tabela de opções UNIX -A ou -e -a -u usuario(s) -t -p pid -C comando -g grupo(s) GNU BSD t a r e x f --user usuario(s) --group grupo(s) --pid pid --tty tty Seleciona todos os processos. Seleciona todos os processos que estejam ligados a algum terminal, exceto líderes de seção (Geralmente o próprio interpretador de comandos do terminal) Mostra processos iniciados por determinado(s) usuário(s). Para especificar mais de um usuário, separe-os por vírgula. Mostra processos vinculados com determinado terminal. Mostra processo com determinado pid Mostra processos cujo nome do executável coincida com “comando” Mostra processos iniciados por determinado(s) grupo(s). Para especificar mais de um grupo, separe-os por vírgula. Mostra todos os processos associados com o terminal atual. Mostra todos os processos associados com algum terminal, inclusive líderes de seção. Seleciona somente os processos em execução (que estejam consumindo recursos de processamento) Mostra variáveis de ambiente associadas com cada processo. Lista todos os processos pertencentes ao usuário atual. Bastante utilizado em conjunto com a opção “a” para mostrar todos os processos. Mostra os processos em hierarquia (Floresta). Idem a opção -u Idem a opção -g Idem a opção -p Idem a opção -t Exemplo A: # ps ax 242 PROGRAMA TÉCNICO CIDADÃO Forma mais comum de se listar todos os processos. Nota: a saída do comando foi suprimida pois ocuparia muito espaço desnecessário. Exemplo B: # ps axef Isso mostrará uma lista completa dos processos em execução no sistema, de forma hierárquica e com informações de variáveis de ambiente para cada processo. Exemplo C: # ps -p 6613 # ps -u apostila Mostra informações sobre o processo cujo pid seja 6613 (Não esqueça de mudar esse número e escolher um pid válido no seu sistema no momento em que for testar). Em seguida, mostramos os processos pertencentes ao usuário “apostila”. Significado das colunas na saída do comando ps O comando ps exibe diversas colunas diferentes dependendo das opções passadas à ele. Para conhecer o significado de cada coluna (que muitas vezes é óbvio, como PID por exemplo), consulte a man page do comando). Mostraremos aqui os significados das letras na coluna STAT, que mostra o estado de cada processo na lista através de letras, cujo significado veremos na tabela abaixo: 243 PROGRAMA TÉCNICO CIDADÃO Significados das siglas da coluna STAT D R S T W X Z < N L s l + O processo se encontra em “sono profundo” (Não morreu mas está em coma) “Running” - O processo está rodando, consumindo recursos de processamento “Sleeping” - Processo “Dormindo”. A maioria dos processos fica nesse estado O processo está parado Paginando. (Não é válido em kernels 2.6) Morto. Você provavelmente não o verá mais Processo Zumbi. Quando um processo entra nesse estado, ele já foi finalizado, mas ainda ocupa memória por descuido de seu processo pai O processo tem alta prioridade O processo tem baixa prioridade Possui páginas abertas na memória É um líder de sessão é um processo capaz de multi-tarefa O processo está rodando em primeiro plano O comando top De forma parecida com o ps, o top também mostra informações sobre os processos em execução, só que de uma forma diferente. Primeiro que ele ordena os processos com base em algum critério (Utilização de CPU, memória, etc....); Segundo que ele só mostra na tela a lista de processos que nela couber. Basta digitar o comando top para “entrar” no utilitário. A saída do top é dividida em 2 partes, um cabeçalho como o abaixo e a lista dos processos em si: top - 01:51:03 up 12:21, 5 users, load average: 1.08, 1.18, 1.12 Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie Cpu0: 11.7% us, 1.3% sy, 0.0% ni, 86.0% id, 0.0% wa, 1.0% hi, 0.0% si Cpu1: 11.0% us, 1.3% sy, 0.0% ni, 87.7% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 515232k total, 513008k used, 2224k free, 36144k buffers Swap: 504968k total, 0k used, 504968k free, 0k cached 244 PROGRAMA TÉCNICO CIDADÃO Este cabeçalho exibe informações importantes sobre a utilização de recursos do sistema. Podemos observar nesse exemplo, que trata-se de um sistema multiprocessado e que a carga de CPU está em média 11% para cada CPU atualmente, que o sistema possui 512mb de ram e que existe pouco mais de 2mb livres (Obs.: É perfeitamente normal existir pouca memória ram disponível num sistema em execução à algum tempo). Importante ressaltar que o top se atualiza automaticamente a cada x segundos (3 por padrão). Para forçar uma atualização imediatamente, pressione a barra de [espaço]. Para Modificar o tempo de atualização automática do top, pressione a tecla [d] e digite o novo valor em segundos. Para obter uma lista dos possíveis comandos do top, pressione a tecla [h]. Para sair do top, use a tecla [q]. Níveis de processos Os processos são executados no sistema em diferentes camadas ao ponto de vista do usuário. Isso permite que o sistema seja realmente multitarefa e multiusuário. Os níveis de processos são: Foreground (Primeiro plano) e Background (Segundo plano). A maioria dos processos em execução fica em background, mas algumas vezes iniciamos processos em foreground, como o top ou o editor vim, por exemplo. Um processo em foreground não permite utilizarmos o terminal para outras finalidades. Para iniciar um processo já em background, proceda o comando com o sinal de &, conforme abaixo: # vi & [1] 19872 Isso inicializou um processo do vi, cujo pid é 19872 e o identificador do trabalho é 1 (veja mais sobre isso adiante). 245 PROGRAMA TÉCNICO CIDADÃO Para visualizar os processos em background, utilizamos o comando jobs: # jobs [1]+ Stopped vi # jobs -l [1]+ 19872 Stopped (tty output) vi Repare que a opção -l do comando mostra também o pid do processo. O status “Stopped” significa que o trabalho está parado, apesar de estar em segundo plano (Nem todo processo suporte ser executado em segundo plano, pois depende de interação do usuário). Para compreendermos melhor o gerenciamento de trabalhos, vamos iniciar mais um em background: # updatedb & [2] 20002 Agora iniciamos um processo que suporta execução em background, caso ele termine antes de passarmos pelos exemplos, execute o comando novamente e prossiga. Vejamos como ficou a lista de trabalhos: # jobs [1]+ Stopped [2]- Running vi updatedb & Para enviar o trabalho para foreground, utilizamos o comando fg (foreground), seguido do número do trabalho: # fg 2 updatedb Pressione [CONTROL]+[Z] [2]+ Stopped updatedb # jobs [1]- Stopped vi [2]+ Stopped updatedb Pressionando [CONTROL]+[Z] enviamos o processo que está em foreground para background, mas ele fica com o status Stopped (Parado). 246 PROGRAMA TÉCNICO CIDADÃO Para instruir um trabalho nessa situação a continuar a rodar em segundo plano, digite bg (background) seguido do número do trabalho: # bg 2 [2]+ updatedb & # jobs [1]+ Stopped [2]- Running vi updatedb & É possível cancelar a execução de um trabalho em foreground com a sequência de teclas [CONTROL]+[C]. Experimente fazer isso com o trabalho 2 do exemplo. Sinalizando processos É possível enviar sinais para os processos em execução. Os sinais de processos foram criados com a finalidade de enviar instruções para os processos, ordenando-os a finalizar ou reiniciar por exemplo. Um comando capaz de enviar esses sinais para os processos é o kill. Na página de manual é possível obter uma lista completa dos sinais disponíveis. Os sinais mais conhecidos são: TERM, que diz ao processo para finalizar todos os seus subprocessos e fechar, KILL, que “mata” o processo sem esperar nenhuma finalização e HUP, que diz ao processo para reiniciar. O comando kill Sintaxe: kill [ -sinal | -s sinal ] pid ... kill -l [ sinal ] Os principais sinais possuem um número associado: 15 é TERM, 9 é KILL. A lista completa pode ser vista na man-page do comando kill. 247 PROGRAMA TÉCNICO CIDADÃO Utilizamos o “kill -l sinal” para “traduzir” o sinal em seu respectivo número de sinal, e vice versa. O sinal padrão do kill é o 15 (TERM). Para finalizar um processo som este sinal, basta digitar “kill pid”, onde pid é o número do processo que deseja finalizar. Exemplos: # kill -HUP 16384 # kill -9 14446 14447 15896 17894 Não esqueça que esses pids do exemplo são fictícios. O comando killall De forma semelhante ao comando kill, o comando killall serve ao mesmo propósito: enviar sinais aos processos. Só que o killall não recebe como argumentos os pids dos processos que deseja enviar o sinal, e sim o nome dos processos diretamente. Resumindo, ele envia sinais para os processos pelo nome. Sua sintaxe é semelhante ao comando kill. O sinal padrão também é 15. Sintaxe: killall [opções] [processo] [processo...] Exemplo: # killall -v -HUP cron Isso enviará o sinal HUP para todos os processos de nome “cron” (que geralmente é executado em todos os sistema). Note a utilização da opção -v, que mostra na saída quais processos estão sendo sinalizados. 248 PROGRAMA TÉCNICO CIDADÃO O comando killall5 A finalidade desse comando é propagar um sinal (15 por padrão) para todos os processos em execução, com exceção dos iniciados pelo kernel e ele mesmo. Sintaxe: killall5 [-sinal] Exemplo: # killall5 -HUP # killall5 -9 O primeiro reinicia todos os processos, o segundo causa um “holocausto” nos processos, matando-os sem esperar por respostas. DICA Caso queira executar um comando que permaneça ativo mesmo depois de fechar o terminal atual, preceda-o com o comando nohup. Ex.: nohup updatedb & Gerenciando prioridades dos processos Todo processo em execução possui um valor de prioridade, que é utilizado para o kernel ordenar os processos na fila de processamento. Esse valor de prioridade, chamado de “nice”, varia do mais alto “-20” até o mais baixo “19”. O nice padrão para processos iniciados é “0”, mas somente um usuário root consegue executar processos com prioridade maior que 0 (O que confunde um pouco, pois essas prioridades “maiores” que zero vão de -1 até -20, que é a maior de todas.). Definindo prioridades com o comando nice É possível iniciar um programa com prioridade alterada utilizando-se o comando nice. 249 PROGRAMA TÉCNICO CIDADÃO Sintaxe: nice [-n prioridade] comando Se não definirmos a prioridade desejada (de 19 à -20), o nice assume a prioridade 10, mais baixa que o normal 0. Exemplo: # nice -n 19 updatedb & Modificando prioridades com o comando renice Para modificar a prioridade de execução de um processo que já esteja sendo executado, utilize o renice. É possível fazer isso com base no pid ou usuário que tenha iniciado o processo, por exemplo. Repare que a sintaxe é um pouco diferente em relação ao comando nice. Sintaxe: renice prioridade [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] usuários ] Vamos iniciar um processo, tomar nota de seu pid, e utilizá-lo para modificar sua prioridade de execução. Exemplo: # updatedb & [1] 7243 # renice 15 -p 7243 7243: prioridade antiga = 0; prioridade nova = 15 # renice -10 -p 7243 7243: prioridade antiga = 15; prioridade nova = -10 Modificamos por duas vezes a prioridade de execução do processo. 250 PROGRAMA TÉCNICO CIDADÃO 251 PROGRAMA TÉCNICO CIDADÃO GNU/LINUX AVANÇADO Este curso visa proporcionar aos alunos o conhecimento avançado em redes baseadas no sistema operacional para configuração de redes e integração de seu sistema com um ambiente heterogênio, além de objetivar os seguintes itens: · Ganhar experiência com tarefas de administração intermediárias; · Controlar os processos de Boot; · Configurar serviços do sistema; · Gerenciar a segurança do sistema e de usuário; · Criar e editar Shell Scripts. Este material de apoio foi desenvolvido pela equipe de treinamento Utah, sendo resultado de uma preocupação constante da empresa em oferecer treinamentos diferenciados, com a máxima qualidade para capacitar você . Esperamos que este material possa auxiliá-lo, não somente durante o treinamento, mas também como um material de consulta e apoio técnico. 252 PROGRAMA TÉCNICO CIDADÃO 253 PROGRAMA TÉCNICO CIDADÃO OS SERVIÇOS DE REDE NO LINUX Instalando um Servidor DNS no Linux No Linux, o software chamado “Bind” provê os servidor de resolução de nomes DNS. O Bind é amplamente utilizado em servidores Linux, Unix e BSD. A configuração do bind no Linux é praticamente idêntica em qualquer distribuição Linux, mudando somente os nomes dos pacotes e o caminho para os arquivos, mas a sintaxe costuma ser conservada. Como utilizamos a distribuição Debian como padrão em nossa apostila (lembrando que o treinamento é independente de distribuição...), nos basearemos no Debian para prosseguir com a configuração; Resumo das características do Bind no Debian: Pacote(s): bind9 Serviço: bind9 Porta(s): 53(udp) Configurações: /etc/bind/named.conf, /var/cache/bind/* A instalação do servidor de nomes deverá ser feita através do comando a seguir : # aptitude install bind9 IMPORTANTE Como pode ser visto no comando acima, no Debian, o nome do pacote que implementa o servidor de nomes bind da série 9 é o pacote de nome bind9. Um pacote de nome bind também existe, mas o mesmo contém o servidor de nomes bind da série 8 e NÃO deve ser utilzado. 254 PROGRAMA TÉCNICO CIDADÃO Após a instalação do pacote bind9, o daemon de nome named será iniciado e o bind já entrará em funcionamento. Os arquivos de configuração do servidor de nomes bind estarão localizados sob o diretório /etc/bind e os arquivos de zonas a serem criados deverão ser colocados sob o diretório /var/cache/bind, de acordo com o valor do parâmetro directory da seção options no arquivo de configuração principal do servidor de nomes bind, o arquivo /etc/bind/named.conf. Servidor de nomes somente para cache A idéia de um servidor de nomes somente para cache, como o próprio nome sugere, é somente aproveitar o cache de resolução de nomes do servidor. Em um servidor de nomes desse tipo, não é necessário criar mapas de zonas e lidar com nenhum tipo adicional de configuração, uma vez que o pacote bind9 do Debian já é iniciado com um funcionamento adequado para atuar como um servidor de nomes somente para cache logo após sua instalação. Configuração de um servidor de nomes autoritativo Um servidor de nomes autoritativo é um servidor de nomes que possui autoridade para um ou mais domínios e, sendo assim, responde as pesquisas de resoluções de nomes para hosts que fazem parte dos domínios em questão. Ao contrário do caso do servidor de nomes somente para cache, a criação de um servidor de nomes autoritativo para um domínio requer configuração do bind e, adicionalmente, a criação dos mapas de zonas para resolução comum e reversa para o domínio. Para configurar o bind de forma que o mesmo responda com autoridade para um domínio, os seguintes passos das seções a seguir deverão ser seguidos. 255 PROGRAMA TÉCNICO CIDADÃO Definição de zonas para o domínio O domínio para o qual desejamos que o bind responda pesquisas de resolução de nomes deverá ser cadastrado no arquivo de configuração principal do bind, o arquivo /etc/bind/named.conf, como uma zona, utilizando a seguinte sintaxe : zone "dominio.com.br" { type master; file "db.dominio.com.br"; allow-transfer { 200.1.2.4; }; notify yes; }; A estrofe acima declara uma nova zona, de nome dominio.com.br, a qual será utilizada para definir a estrutura do domínio de mesmo nome, ou seja, o domínio dominio.com.br onde : ● O parâmetro type especifica o tipo de servidor de nomes que nossa instalação do bind será para essa zona específica : master ou slave. master indica que nosso servidor de nomes será o servidor principal (master) do domínio em questão e slave indica que nosso servidor de nomes será um servidor escravo (slave), que somente receberá atualizações de mudanças feitas na zona diretamente na configuração do servidor master. ● O parâmetro file indica o nome do arquivo onde a zona será definida, relativo ao diretório padrão de mapas de zonas, definido pelo parâmetro directory no início do arquivo /etc/bind/named.conf, ou seja, o diretório /var/cache/bind. ● O parâmetro allow-transfer especifica os endereços IPs dos servidor de nomes que estão autorizados a transferir a zona em questão. É interessante listar, separados por dois pontos - ; - os endereços IPs dos servidor de nomes escravos aqui. ● O parâmetro notify especifica se o bind deverá enviar notificações de mudanças nos dados da zone para seus servidores de nomes escravos. Habilitar esta opção é uma boa 256 PROGRAMA TÉCNICO CIDADÃO idéia, uma vez que, dessa forma, os servidores de nomes escravos serão avisados automaticamente caso mudanças sejam feitas nos mapas de zonas do servidor de nomes principal e iniciarão uma transferência de zona para ficarem com seus mapas de zonas atualizados em relação ao servidor de nomes principal. IMPORTANTE É importante notar que a sintaxe utilizada na estrofe de exemplo acima deve ser seguida. As chaves de abertura e fechamento do trecho que define a zona, os dois pontos após a definição do valor de cada um dos parâmetros da zona e a definição dos valores entre aspas duplas devem realmente ser feitos dessa forma ou erros de sintaxe ocorrerão. Criação dos mapas de zonas Após a definição da zona no arquivo /etc/bind/named.conf é necessário criar o mapa da zona, ou seja, o arquivo contendo a zona toda a configuração da zona, com o mapeamento entre endereços IPs e nomes de hosts. O arquivo deverá ser criado sob o diretório /var/cache/bind, com o nome definido no parâmetro file da zona cadastrada no arquivo /etc/bind/named.conf. Tecnicamente, qualquer nome pode ser definido para os arquivos dos mapas de zonas. Vamos adotar um padrão bem conhecido, ficando: db.dominio.com.br, onde dominio.com.br é o domínio gerenciado pela zona em questão. Um exemplo de arquivo de mapa de zona seria : $TTL 43200 $ORIGIN dominio.com.br. @ IN SOA servidor.dominio.com.br. hostmaster.servidor.dominio.com.br. ( 2004101801; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) @ IN MX 5 mx01 257 PROGRAMA TÉCNICO CIDADÃO @ @ @ @ servidor ns2 mx01 mx02 www ftp webmail pop smtp IN MX 10 mx02 IN NS servidor IN NS ns2 IN A 200.1.2.3 IN A 200.1.2.3 IN A 200.1.2.4 IN A 200.1.2.5 IN A 200.1.2.6 IN A 200.1.2.7 IN A 200.1.2.8 IN CNAME servidor IN CNAME servidor IN CNAME servidor O mapa de zona de exemplo acima, que gerencia o domínio de exemplo dominio.com.br, define diversos registros : ● Os dois registros do tipo MX, mx01 e mx02, definem os dois servidores de e-mail responsáveis pelas mensagens do domínio dominio.com.br. Porém, os nomes desses hosts são definidos mais abaixo, onde ao host com o endereço IP 200.200.1.2.5 é atribuído o nome mx01.dominio.com.br e ao host com o endereço IP é atribuído o nome mx02.dominio.com.br. É aconselhável, por motivos de segurança, definir o(s) registro (s) MX da zona apontando para o nome de um registro do tipo A e não para um registro do tipo CNAME. ● Os registros de exemplo do tipo NS, servidor e ns2, definem que nossa zona terá dois servidores de nomes que poderão responder com autoridade. Um exemplo é criar um segundo servidor de nomes no host de endereço IP apontando pelo registro NS ns2 e configurá-lo como um servidor de nomes escravo para que o mesmo transfira automaticamente os mapas de zona do domínio de exemplo dominio.com.br, eliminando a necessidade de criar o mapa de zonas no servidor escravo uma segunda vez. 258 PROGRAMA TÉCNICO CIDADÃO ● Os registros de exemplo do tipo A, servidor, ns2, mx01, mx02, www e ftp apenas indicam os nomes de exemplo dos hosts com os endereços IPs 200.1.2.3, 200.1.2.4, 200.1.2.5, 200.1.2.6, 200.1.2.7 e 200.1.2.8, respectivamente. ● Os registros de exemplo do tipo CNAME indicam nomes alternativos (apelidos) através dos quais alguns hosts webmail.dominio.com.br, também são conhecidos, pop.dominio.com.br e como, por exemplo, smtp.dominio.com.br serem apelidos para o host de nome servidor.dominio.com.br. Em adição, o cabeçalho da zona é formado pelos seguintes elementos : ● $TTL Cada registro em uma zona é conhecido também como um RR, ou Registro de Recurso (do inglês Resource Record). Cada RR pode possuir um "tempo de vida", definido como um registro inteiro de 32 bits representado em unidades de segundos. Um TTL define um limite de tempo que o registro deve ser mantido em cache. É usado principalmente por resolvers (programas que buscam informações em servidores de nomes em resposta a requisições de clientes) quando os mesmos fazem caches de RRs. Esse "tempo de vida" é obtido do $TTL geral da zona na primeira linha do arquivo de zona caso os RRs listados no arquivo de zona não especifiquem cada um seu próprio TTL. ● Registro SOA O registro SOA indica o início de uma zona com autoridade. Esse registro é composto de vários campos, como pode ser visto no exemplo de zona anterior. Segue abaixo o registro SOA do exemplo anterior para melhor visualização e uma explicação posterior : @ IN SOA servidor.dominio.com.br. hostmaster.servidor.dominio.com.br. ( 2004101801; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl 259 PROGRAMA TÉCNICO CIDADÃO ) Na primeira linha indicamos, após o nome totalmente qualificado do servidor de nomes, hostmaster.servidor.dominio.com.br que, na verdade, seria o endereço de e-mail (com o símbolo de @ substituído por um ponto) do contato responsável pela zona. Devido a isso é importante existir uma conta de e-mail hostmaster (ou um alias hostmaster apontando para a caixa-postal do administrador responsável) que possa ser contactada em caso de problemas relacionados a resolução de nomes em sua zona. Após a abertura do parênteses, temos cinco campos diferentes. A seguir, uma explicação da utilidade de cada um deles : ● Serial O primeiro campo é conhecido como serial. O campo serial deve conter um número inteiro que deve ser incrementado a cada modificação feita na zona. Quando os servidores de nomes escravos checam a zona em busca de modificações, o campo serial é o campo checado. Se o mesmo possui um valor maior que o valor da cópia que possuem localmente, os servidores de nomes escravos entendem que a zona foi modificada e que uma nova transferência de zona é necessária. Um bom padrão para o serial costuma ser: AAAAMMDDXX Onde AAAA é o ano no qual o modificação foi feita, com quatro dígitos. MM é o mês em que a modificação foi feita, com dois dígitos, DD é o dia em que a modificação foi feita, com dois dígitos e, por último, XX informa a quantidade de vezes que a zona foi modificada dentro de um mesmo dia, também com dois dígitos (01 até 99). ● Refresh, Retry e Expire 260 PROGRAMA TÉCNICO CIDADÃO O segundo, terceiro e quarto campos são conhecidos como refresh, retry e expire, respectivamente. Esses campos controlam o período de tempo em que os servidores de nomes secundários irão buscar por informações atualizadas sobre a zona no servidor de nomes principal. Sempre que uma zona é carregada em um servidor secundário, o servidor de nomes secundário espera a quantidade de segundos especificada no campo refresh antes de checar a existência de um novo serial no servidor de nomes principal. Caso a checagem, por qualquer motivo, não possa ser completada, novas checagens serão iniciadas a cada retry segundos. Por exemplo : se o campo retry contém um valor de 3600, novas tentativas de checagem ocorrerão de 1 em 1 hora, pois 3600 segundos equivalem a 1 hora. A checagem é, na verdade, uma simples pesquisa pelo campo SOA da zona no servidor de nomes primário. Caso o campo serial na cópia da zona existente no servidor de nomes secundário for igual ao serial da zona existente no servidor principal, nenhuma mudança ocorreu e a espera pelo intervalo de refresh segundos é reiniciada. Caso o servidor de nomes secundário não consiga executar uma checagem pelo serial do servidor de nomes principal por todo o tempo especificado no campo expiry, o mesmo assume que sua cópia da zona é obsoleta e a descarta. Criação de mapas de resolução reversa Em alguns casos, além da criação dos mapas de zonas, é necessária a criação de mapas de resolução reversa, ou seja, mapas que possibilitem que o nome de um host seja encontrado dado o endereço IP do mesmo. Isso é conseguido através do uso de um domínio especial, o domínio in-addr.arpa, e de registros do tipo PTR no mapa de resolução reversa. 261 PROGRAMA TÉCNICO CIDADÃO Porém, ao contrário dos mapas de zonas, mapas de resolução reversa são criados para uma rede específica e não para cada domínio. Sendo assim, apesar de um servidor de nomes poder possuir mapas de zonas de diversos domínios, o mesmo poderá possuir um mapa de resolução reversa somente para a rede (interna ou externa) para a qual o mesmo possui autoridade. As entradas do tipo PTR no domínio in-addr.arpa são feitas especificando somente o último octeto de um endereço IP, relacionando o mesmo ao nome do host correspondente. Um exemplo de mapa de resolução reversa para a rede interna (inválida na Internet) de exemplo 192.168.1.0 seria : $TTL 43200 @ IN SOA servidor.dominio.com.br. hostmaster.servidor.dominio.com.br. ( 2004101901 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; default_ttl ) @ 3 4 5 6 7 8 IN IN IN IN IN IN IN NS PTR PTR PTR PTR PTR PTR servidor.dominio.com.br. servidor.dominio.com.br. ns2.dominio.com.br. mx01.dominio.com.br. mx02.dominio.com.br. www.dominio.com.br. ftp.dominio.com.br. O mapa de resolução reversa acima é um mapa de exemplo para a rede de exemplo utilizada no exemplo da seção anterior. 262 PROGRAMA TÉCNICO CIDADÃO IMPORTANTE Mapas de resolução reversa são comumente criados para resolução reversa em ambientes de redes internas inválidas (ou seja, as redes definidas pela RFC1819) ou por grandes provedores e/ou organizações detentores de uma grande classe de endereços IP, uma vez que a entidade responsável pela classe de endereços IP no qual sua faixa de endereços IP se encaixa é a responsável pela criação e pela manutenção dos mapas de resolução reversa. IMPORTANTE 2 Caso você não seja o detentor de sua classe de endereços IP, mas sim somente de uma faixa de endereços pertencentes a essa classe, entre em contato com o fornecedor de sua faixa de endereços IP e peça para o mesmo acrescentar seus endereços IPs ao mapa de resolução reversa de nomes da rede em questão. Assim como no caso do mapa de zonas, o mapa de resolução reversa de nomes de uma rede deve ser definido no arquivo de configuração principal do bind, em /etc/bind/named.conf. Um exemplo de como o mapa da rede de exemplo que utilizamos pode ser definido é: zone "2.1.200.in-addr.arpa" { type master; file "db.200.1.2"; }; No exemplo acima, podemos ver que a zona especial in-addr.arpa é utilizada. Para definir o mapa reverso de nossa rede de exemplo, informamos essa zona especial, in-addr.arpa, após os três primeiros octetos de nossa rede de exemplo invertidos (ou seja, como nossa rede de exemplo é 200.1.2.0, os três primeiros octetos invertidos são 2.1.200). Como especificamos os octetos que definem a rede junto ao nome da zona para definí-la no arquivo /etc/bind/named.conf, (em nosso caso, os três primeiros octetos) agora precisamos informar somente o o último octeto de cada endereço IP para definir um registro do tipo PTR, 263 PROGRAMA TÉCNICO CIDADÃO como pode ser visto acima no arquivo de mapas de resolução reversa para nossa rede de exemplo. Encaminhando requisições de pesquisas Quando um servidor de nomes não consegue resolver o nome de um host para um endereço IP utilizando informações existentes em seu cache de resolução de nomes, o mesmo pode repassar a requisição de pesquisa a outros servidores de nomes tentar encontrar a resposta em seu cache. Em algumas situações, não é desejável que todos os servidores de nomes internos façam requisições de resolução de nomes diretamente a outros servidores de nomes na Internet, mas sim encaminhem tais requisições a um outro servidor de nomes interno, que por sua vez terá permissão de consultar servidores de nomes externos na Internet. Além de facilitar a manutenção de regras de firewalls, uma vez que regras para liberação de pesquisas DNS deverão ser acrescentadas somente para um servidor de nomes, o recurso de encaminhamento de requisições é interessante porque o servidor de nomes para o qual todos os outros servidores de nomes encaminharão suas requisições irá desenvolver um cache muito mais completo de informações de resolução de nomes, o qual poderá ser utilizado por todos os outros servidores de nomes e por todos os clientes. O parâmetro de configuração que possibilita o encaminhamento de requisições de resolução de nomes é o parâmetro forwarders. Um exemplo de configuração utilizando o parâmetro forwarders seria : forwarders { 1.2.3.4; }; Onde 1.2.3.4 é o endereço IP do servidor de nomes para onde as requisições de pesquisa de nomes não satisfeitas pelo cache local de nosso servidor de nomes serão enviadas. É possível também especificar uma lista de servidores de nomes para os quais as requisições devem ser 264 PROGRAMA TÉCNICO CIDADÃO encaminhadas. Cada um dos servidores de nomes da lista especificada será contactado em sequência, até que um deles consiga resolver a requisição. Quando uma resposta for recebida, a requisição em questão não será encaminhada para o restante dos servidores de nomes listados, uma vez que uma resposta já foi recebida. Um exemplo de configuração do parâmetro forwarders utilizando uma lista de servidores de nomes para os quais as requisições de resolução de nomes devem ser encaminhadas seria : forwarders { 1.2.3.4; 2.3.4.5; } Onde 1.2.3.4 e 2.3.4.5 são os endereços IPs dos servidores de nomes para os quais as requisições de pesquisas de nomes não satisfeitas pelo cache local de nosso servidor de nomes devem ser encaminhadas. Como testar a configuração É imprescindível que sejam efetuados testes nos arquivos de configuração alterados antes de reiniciar os serviços relacionados. Validando a configuração do bind Uma maneira de testar facilmente se a configuração do servidor de nomes está correta é utilizar as ferramentas fornecidas pelo próprio pacote bind9 para essa finalidade. Para testar a validade das configurações feitas no arquivo de configuração principal do servidor de nomes no arquivo /etc/bind/named.conf, utilize a ferramenta de nome named-checkconf. Essa ferramenta deve ser utilizada da seguinte forma: # named-checkconf /etc/bind/named.conf 265 PROGRAMA TÉCNICO CIDADÃO Caso nenhuma erro seja apresentado, o arquivo de configuração /etc/bind/named.conf estará configurado sintaticamente correto. Caso exista algum erro de sintaxe no arquivo, o mesmo será exibido. Por exemplo, considere o erro a seguir : $ named-checkconf /etc/bind/named.conf /etc/bind/named.conf:84: missing ';' before 'zone' O erro acima indica que o caracter de ponto e vírgula (;) está faltando antes da declaração de uma nova zona, além de indicar em qual linha do arquivo /etc/bind/named.conf pode ser encontrado. Após corrigir o erro (no caso, inserir o caracter de ponto e vírgula após a finalização de declaração de uma zona e o início de outra), é importante executar o utilitário named- checkconf novamente para se certificar de que não existam mais erros. Validando mapas de zonas Similarmente ao utilitário named-checkconf, visto na seção anterior, outra ferramenta de grande ajuda na detecção e resolução de problemas relacionados a mapas de zonas é o utilitário de nome named-checkzone, também fornecido junto com o pacote bind9. A maneira correta de utilizá-lo e executando-o da seguinte forma : # named-checkzone <nome_da_zona> <arquivo_de_zona> Onde <nome_da_zona> é o nome da zona, conforme configurada no arquivo / etc/bind/named.conf e <arquivo_de_zona> é o arquivo de mapas onde a zona em questão foi definida. Veja a seguir um exemplo de saída do utilitário named-checkzone verificando a sintaxe do mapa da zona de exemplo dominio.com.br : $ named-checkzone dominio.com.br /var/cache/bind/db.dominio.com.br zone dominio.com.br/IN: loaded serial 2004101801 OK $ 266 PROGRAMA TÉCNICO CIDADÃO Repare que a saída do comando simula o carregamento da zona dominio.com.br, indica o serial atual da mesma e exibe um sinal de OK caso nenhum erro de sintaxe seja detectado no mapa de zona. Assim como no caso do utilitário named-checkconf, o utilitário named-checkzone auxilia a encontrar problemas em um arquivo de mapa de zonas caso erros de sintaxe sejam encontrados. Veja o exemplo a seguir onde um erro de sintaxe foi intencionalmente inserido : # named-checkzone dominio.com.br /var/cache/bind/db.dominio.com.br dns_rdata_fromtext: /var/cache/bind/db.dominio.com.br:40: near '.dominio.com.br.': empty label zone dominio.com.br/IN: loading master file /var/cache/bind/db.dominio.com.br: empty label O erro encontrado, bem como a linha onde o mesmo foi detectado são exibidos. Após corrigir o erro, execute novamente o utlitário named-checkzone para se certificar de que nenhum outro erro ainda exista. ATENÇÃO Apesar do utilitátio named-checkzone ser de grande valia, nem todos os erros podem ser identificados. Tenha cuidado na criação de seus mapas de zonas ! Testando a resolução de nomes Existem diversas ferramentas dedicadas ao teste de funcionamento de resposta a requisições de resolução de nomes de servidores de nomes. Porém, a ferramenta mais utilizada é o utilitário dig. No Debian, esse utilitário é fornecido pelo pacote dnsutils. Para instalá-lo, utilize o comando a seguir : # aptitude install dnsutils Após instalado, o utilitário dig pode ser utilizado da seguinte forma : dig <tipo_registro> <dominio> 267 PROGRAMA TÉCNICO CIDADÃO Onde <tipo_registro> deve ser substituído pelo tipo de registro do domínio que se deseja pesquisar (por exemplo, o(s) registro(s) MX do domínio) e <dominio> deve ser substituído pelo próprio nome do domínio. Um exemplo de consulta aos registros MX do domínio uol.com.br seria : $ dig MX uol.com.br ; <<>> DiG 9.2.4 <<>> MX uol.com.br ;; global options: printcmd ;; Got answer: ;; ->>;HEADER<<- opcode: QUERY, status: NOERROR, id: 29998 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;uol.com.br. IN MX ;; ANSWER SECTION: uol.com.br. 2995 IN MX 10 mx.uol.com.br. ;; AUTHORITY SECTION: uol.com.br. 3575 uol.com.br. 3575 IN IN NS NS eliot.uol.com.br. borges.uol.com.br. ;; ADDITIONAL SECTION: eliot.uol.com.br. 2044 IN A borges.uol.com.br. 2044 IN A ;; ;; ;; ;; 200.221.11.98 200.147.255.105 Query time: 2 msec SERVER: 192.168.1.2#53(192.168.1.2) WHEN: Wed Oct 20 14:32:04 2004 MSG SIZE rcvd: 120 Como pode ser visto no exemplo de pesquisa acima, a seção QUESTION SECTION indica que a pequisa pelo registro MX do domínio uol.com.br foi feita. Na seção ANSWER SECTION, podemos ver que a resposta foi apenas um registro MX, apontando para o host mx.uol.com.br, com prioridade 10. 268 PROGRAMA TÉCNICO CIDADÃO Adicionalmente, podemos notar que maiores informações foram trazidas, como, por exemplo, dois registros que indicam dois servidores de nomes responsáveis pelo domínio uol.com.br, eliot.uol.com.br e borges.uol.com.br. Mais abaixo, podemos ver também que esses dois servidores de nomes possuem os endereços IP 200.221.11.98 e 200.147.255.105, respectivamente. Perceba também que algumas informações sobre a pesquisa são exibidas a seguir, como o tempo de pesquisa (2 milisegundos), o nome do servidor de nomes para o qual a pesquisa foi feita (192.168.1.2), quando a pesquisa foi requisitada e o tamanho da mensagem recebida do servidor de noms contendo a resposta da pequisa. Devemos lembrar que, por padrão, o servidor de nomes para o qual a pesquisa será enviada é o servidor de nomes para o qual o sistema operacional onde a pesquisa está sendo feita aponta. Isso pode ser conferido no arquivo /etc/resolv.conf. Para especificar a qual servidor de nomes a requisição de pesquisa deve ser enviada, acrescente um parâmetro adicional a linha de comando que execute o utilitário dig, contendo o caracter @ seguido do endereço IP do servidor de nomes desejado. Um exemplo de pesquisa especificando o servidor de nomes para o qual enviar a requisição de pesquisa seria : $ dig MX uol.com.br @1.2.3.4 Ou seja, pesquise pelo registro MX do domínio uol.com.br no servidor de nomes que possui o endereço IP 1.2.3.4. Além dos testes de registros específicos, outra recomendação é utilizar o ping para testar o funciomento da resolução de nomes tentando pingar os hosts cadastrados na zona. IMPORTANTE Caso os testes com o ping sejam feitos a partir de um servidor ou estação que não seja o servidor de nomes onde a zona foi implementada, não se esqueça de configurar a estação ou servidor para apontar para o servidor de nomes onde a zona foi recém-configurada antes de iniciar os testes. 269 PROGRAMA TÉCNICO CIDADÃO 270 PROGRAMA TÉCNICO CIDADÃO SISTEMAS DE RESOLUÇÃO DE NOMES Com o passar dos anos, aliado ao crescimento da Internet. tornou-se inviável que os usuários tivessem que saber o endereço IP para cada recurso que pretendiam acessar. Essa é uma característica que consta estampada nos seres humanos.... Todos concordam que é muito mais difícil referenciar a uma pessoa pelo seu CPF do que pelo seu nome. É justamente esse problema que um sistema de resolução de nomes resolve: Ele traduz nomes para endereços IP. O primeiro sistema de resolução de nomes criado foi o hosts. Sistema de resolução hosts Esse sistema de resolução que desencadeou a criação de todos os outros sistemas de resolução posteriores. Seu funcionamento é muito simples, e provavelmente por isso que ele ainda popula sistemas atuais, ao lado de outros sistemas de resolução. O sistema se baseia em um arquivo de “hosts”, que contém entradas desse tipo: 192.168.1.1 meuhost.meudominio meuhost No Linux, esse arquivo é o /etc/hosts, e no meu sistema ele se assemelha com: # cat /etc/hosts 127.0.0.1 localhost 192.168.1.57 ws-57.utah.net.br ws-57 Podemos testar a resolução de nomes com o comando ping, por exemplo. # ping ws-57.utah.net.br # ping ws-57 Problemas do sistema de hosts Com o passar do tempo, o aumento no número de hosts automaticamente gerou um grande problema: Os computadores que se conectavam à Internet (se é que ela poderia ser chamada 271 PROGRAMA TÉCNICO CIDADÃO assim naquela época....) precisavam baixar um arquivo de hosts para poder utilizar a resolução de nomes oferecida pelo sistema, mas com o crescimento exponencial do número de hosts nesse arquivo, tornou-se impraticável ter que baixar esse arquivo com a velocidade de conexão da época. Para solucionar tal problema foi criado o sistema de resolução de nomes DNS, que estudaremos a seguir. Sistema de resolução DNS O DNS é um sistema de resolução de nomes cuja característica marcante é sua capacidade de hierarquia e flexibilidade. Toda a Internet hoje em dia utiliza o DNS. Quando estamos utilizando um browser para navegar, por exemplo, ao digitarmos um endereço na barra de endereços, é desencadeado um processo de resolução DNS. O DNS consegue a façanha de distribuir a carga da resolução de nomes (solucionando o antigo problema do sistema de hosts) porque implementa uma hierarquia especial na resolução. Para entender essa hierarquia, devemos comprender o que são nomes de domínios. Nomes e Domínios... Os nomes de domínios são o coração do sistema DNS. Um nome de domínio é dividido em zonas através do “.' (ponto). Cada zona equivale a um nível na hierarquia, cujo ponto mais alto é topo da mesma, chamado de domínio de primeiro nível. No nome www.terra.com.br, por exemplo, o domínio de primeiro nível é “br”. Ainda sob o mesmo exemplo, a segunda parte (lembre-se: da direita para a esquerda) é o domínio de segundo nível. A última parte (Nesse caso, o “www”) é o nome do host sob aquele domínio, e 272 PROGRAMA TÉCNICO CIDADÃO tudo que estiver entre o nome do host e o domínio de segundo nível são sub-domínios de seu precedente na hierarquia. O conjunto completo de um nome DNS é chamado FQDN (Fully Qualified Domain Name). Um FQDN é um nome único em toda a hierarquia da Internet, pois ele se refere a um objeto único em toda a estrutura. Uma boa analogia aos FQDNs são nosso nomes completos, onde nosso primeiro nome seria o nome do host e o nosso sobrenome seria o domínio ao qual pertencemos. Exemplos de nomes FQDN são: www.terra.com.br, www.uol.com.br e www.yahoo.com. Processo de resolução DNS Esta é provavelmente a parte mais almejada deste treinamento, pois compreender como o processo de resolução DNS ocorre nos mínimos detalhes é de suma importância para dar continuidade ao treinamento, sendo requisito para a maioria dos capítulos que estão por vir. Vamos analizar aqui como ocorre um processo completo de resolução DNS, conforme a figura abaixo. 273 PROGRAMA TÉCNICO CIDADÃO 1) O cliente DNS pergunta ao servidor qual é o IP do host www.usp.br; 2) O servidor DNS não sabe, e inicia o processo de resolução do FQDN a partir do rootserver, perguntando à ele qual é o IP do servidor DNS responsável pela zona “br”; 3) O rootserver responde. 274 PROGRAMA TÉCNICO CIDADÃO 4) O servidor DNS então pergunta para o servidor que é autoridade para a zona “br” qual é o IP do servidor que é autoridade para a zona “usp.br”. 5) O servidor DNS da zona “br” então responde. 6) O servidor DNS agora pergunta para o servidor DNS da zona “usp.br” qual é o ip do host www que consta em seu domínio (www.usp.br). 7) O DNS da zona “usp.br” responde a solicitação com o endereço IP do host www.usp.br. 8) Finalizando o processo de resolução, o servidor DNS responde a pergunta inicial do cliente DNS com o IP do host www.usp.br. Agora então o cliente pode efetuar uma conexão ao site www.usp.br (por exemplo), pois tem o seu endereço IP. É importante frisar que após uma resolução DNS bem sucedida efetuada por um servidor DNS, a mesma fica armazenada por um tempo determinado no cache do servidor. Assim, posteriores consultas iguais serão respondidas de prontidão, enquanto durar o “Tempo de Vida” definido no servidor DNS que é autoridade para a zona. 275 PROGRAMA TÉCNICO CIDADÃO SISTEMAS DE E-MAIL O conteúdo abrangido neste capítulo visa capacitar os profissionais a exercer tarefas básicas e intermediárias nos sistemas de e-mail no Linux. Existem diversos “Servidores de e-mail” no Linux, mas focalizaremos nossos estudos no Sendmail e no Postfix. Estudaremos o Sendmail porque é um requisito para a prova 102 do LPI, onde são abrangidas tarefas de configuração básicas desse sistema. Como um adendo, aprenderemos como configurar similarmente o Postfix, que é um Servidor de e-mail mais atual e amplamente utilizado em relação ao Sendmail. Transações de e-mail Antes de entrar em tópicos específicos de configuração dos servidores de e-mail, precisamos compreender minuciosamente quais as etapas envolvidas no processo de envio e recebimento de mensagens. De uma forma geral, estes processos não são específicos do Linux, sendo cabíveis independente de sistema operacional ou software de e-mail cliente e/ou servidor. Existem diversos termos envolvidos nas transações de e-mail, conforme ilustração à seguir: 276 PROGRAMA TÉCNICO CIDADÃO MUA - Mail User Agent Ao enviarmos um e-mail para alguém, utilizamos um cliente de e-mail, que é chamado de MUA (Mail User Agente) no processo. Esse cliente de e-mail pode ser um Webmail ou um software como o Microsoft Outlook Express® ou o Novell Evolution® por exemplo. 277 PROGRAMA TÉCNICO CIDADÃO SMTP – Simple Mail Transfer Protocol O MUA utiliza o protocolo SMTP para entregar os emails para o servidor de mensagens responsável pelo nosso domínio (Geralmente o provedor de acesso ou o servidor interno da empresa). O protocolo SMTP utiliza a porta 25/tcp para comunicação. MTA – Mail Transfer Agent Todo servidor de emails envolvido no processo é chamado de MTA (Mail Transfer Agent). A função de um MTA é basicamente determinar para onde devem ser encaminhados os emails que chegam até ele. Se o MTA determinar que é o responsável para o envio de mensagens do domínio que consta no campo do destinatário, ele geralmente armazena a mensagem em um recipiente (Arquivo ou diretório) denominado caixa postal, que pode ser consultada remotamente pelos MUA através dos protocolos POP3 e SMTP, explicados adiante. Caso o MTA determine que o destino da mensagem não seja local, ele faz uma pesquisa DNS em busca do registro MX do respectivo domínio do e-mail do destinatário (Tudo que vem depois do arroba), que no exemplo é “uol.com.br”, e utiliza o protocolo SMTP para fazer a entrega da mensagem ao servidor de destino. Essa entrega entre servidores é chamada RELAY de mensagens. POP3 e IMAP Para ler os emails situados em um servidor remoto, um MUA utiliza o protocolo POP3 (PostOffice Protocol) ou o protocolo IMAP (Internet Message Access Protocol). Cada um desses protocolos tem uma forma diferente de “trazer” as mensagens para o MUA. 278 PROGRAMA TÉCNICO CIDADÃO O POP3 é bem simples: utiliza a porta 110/tcp, e o MUA se conecta no servidor POP3 para efetuar o download das mensagens após autenticação do usuário dono da caixa postal. Geralmente, a única opção que o protocolo tem é deixar ou não uma cópia das mensagens no servidor. O IMAP na verdade é um protocolo desenvolvido para “acesso remoto à caixa postal”, permitindo o usuário ler os emails através de um MUA sem que seja necessário efetuar o download dos mesmos. Ele utiliza a porta 143/tcp para comunicação. Sendmail Muito comum em sistemas UNIX, o sendmail é um MTA utilizado durante cerca de 3 décadas atrás até os dias de hoje, onde é também amplamente utilizado. Por ter tanto tempo de vida, o sendmail se tornou amplamente conhecido por administradores UNIX ao redor do mundo, sendo muito utilizado no Linux também. Graças ao seu tempo de vida, o sendmail também foi herdando uma complexa interface de configuração agregada ao arquivo sendmail.cf, que geralmente fica localizado no diretório /etc. O sendmail.cf é o arquivo principal de configuração do sendmail. Instalando o sendmail no Debian Seguindo o padrão da apostila, estamos nos baseando na distribuição Debian Woody 3.0 para instalações, mas o resultado final não deve ser muito diferente em outras distribuições. Basta instalar os pacotes necessários, e este passo vale para todas as distribuições, o que diferencia são os nomes dos pacotes e os gerenciadores de pacotes, geralmente. Basta utilizar o apt-get para instalar o pacote sendmail, da seguinte forma: # apt-get install sendmail Reading Package Lists... Done 279 PROGRAMA TÉCNICO CIDADÃO Building Dependency Tree... Done The following extra packages will be installed: m4 perl perl-modules The following packages will be REMOVED: exim The following NEW packages will be installed: m4 perl perl-modules sendmail 0 packages upgraded, 4 newly installed, 1 to remove and 0 not upgraded. Need to get 3453kB of archives. After unpacking 12.9MB will be used. Do you want to continue? [Y/n] Repare que o Debian remove automaticamente o pacote exim, que é outro MTA que provê o pacote virtual “mail-transport-agent”, e agora está sendo subsidiado pelo pacote sendmail. Também serão instalados pacotes extra que auxiliarão na configuração do sendmail (m4 perl e perl-modules). Assim que o pacote do sendmail for instalado, será lançado seu assistente de configuração (conforme abaixo), caso não queira consigurar o sendmail agora, poderá fazêlo mais tarde através do utilitário sendmailconf ou criando-se “na unha” o arquivo de configuração do sendmail, mas como nós somos meros mortais, faremos uso do utilitário de configuração do Debian para o sendmail: You are doing a new install, or have erased /etc/mail/sendmail.mc. If you've accidentaly erased /etc/mail/sendmail.mc, check /var/backups. Sendmail will not start until it is configured. Do you wish to configure sendmail now, or wait until later? Configure now ? (y/N) Y To configure sendmail later, type sendmailconfig After configuring sendmail, you can start it via /etc/init.d/sendmail start Press [ENTER] Ao pressionar a tecla [ENTER] nesse ponto, será lançado o utilitário sendmailconf, que nos guiará através de perguntas para a criação de um novo arquivo sendmail.cf. 280 PROGRAMA TÉCNICO CIDADÃO Configurando o Sendmail no Debian Comentaremos somente os passos importantes para a configuração do servidor de e-mail, descartando alguns passos para diminuir a complexidade também. Mail Name --------Your `mail name' is the hostname portion of the address to be shown on outgoing news and mail messages (following the username and @ sign). This name will be used by other programs besides sendmail; it should be the single, full domain name (FQDN) from which mail will appear to originate. Mail name? [apostilas.utah.net.br] Nessa parte devemos configurar o “Mail Name” do sistema, que é a parte que aparecerá após o “@” (arroba) nos emails gerados neste servidor. Smart Host ---------A "Smart Host" is one that can deliver mail to external machines. By using a "Smart Host", we don't need DNS, or good connectivity ourselves. This is most likely what you want if you have a dialup link, or sit behind a firewall. To enable this option, give the name of the host to which all non-local mail should be forwarded. Otherwise leave the option empty. To remove a prior name, use `NONE'. Smart Host:? [] podemos configurar aqui uma “Smart Host”, que num sistema de e-mail refere-se a outro servidor de e-mail que serviria como um distribuidor de emails para nosso servidor. Um bom exemplo disso seria nosso servidor interno de e-mail no trabalho utilizar o servidor de e-mail do provedor de acesso a internet como Smart Host, assim, todos os emails que precisem ser enviados para “fora” serão repassados para o servidor de e-mail do provedor. Deixe a opção em branco para desativar essa característica. SMTP Mailer 281 PROGRAMA TÉCNICO CIDADÃO ----------If you plan to exchange mail with other computers, you should enable the SMTP mailer. Even if you don't plan to exchange mail with other computers, it is still a good idea to enable this so local programs can use it. Enable the SMTP mailer? [Y] Esta opção habilita o suporte a conexões SMTP do sendmail, pois ele não precisa do SMTP para lidar com emails locais ou com Smart Hosts (Nesse caso, ele seria um cliente SMTP e não um servidor). Mail Acceptance --------------Sendmail is usually configured to accept mail for your mail name (apostilas.utah.net.br). However, under special circumstances you may not wish sendmail to do this, particularly if (and disabling this option generally requires that) mail for `apostilas.utah.net.br' is MXed to another host. If in doubt, it is safe to leave this option enabled. Accept mail for `apostilas.utah.net.br'? [Y] Nesta opção configuramos se o sendmail aceitará entregar emails cujo destino seja nosso nome FQDN, que no exemplo é apostilas.utah.net.br. Em uma configuração normal isso é necessário e pode evitar muitos problemas de configuração. Alternate Names --------------In addition to the canonical mail name `apostilas.utah.net.br', you can add any number of additional alternate names to recognize for receiving mail. If other hosts are MXed to you for local mail, this is where you should list them. This list is saved into the file /etc/mail/local-host-names so it can be changed later as needed. To answer this question, separate each alternate name with a space, or answer `NONE' to eliminate all alternate names. Alternate names? [] 282 PROGRAMA TÉCNICO CIDADÃO Nesse ponto podemos configurar a lista de domínios que nosso servidor de e-mail aceitará mensagens. Essa lista de domínios será salva no arquivo /etc/mail/local-host-names, e qualquer domínio que quisermos delegar o controle dos emails para nosso sendmail deve ser adicionado nessa lista. Best MX is Local ---------------If enabled, this option will cause sendmail to accept mail as though locally addressed for any host that lists this machine as the best possible MX record. This generates additional DNS traffic, but should be OK for low-to-medium traffic hosts. N.B.: This feature is fundamentally incompatible with wildcard MX records. If you have a wildcard MX record that matches your domain, you cannot use this feature. Assume best MX is local? [N] Ativar esta opção costuma ser uma boa prática pois diminui um pouco a administração dizendo ao sendmail para aceitar emails de domínios cuja pesquisa DNS informe que ele mesmo é o MX para aquele domínio. Isso também gera uma “pequena” falha de segurança, pois um agressor pode forjar uma pesquisa DNS (Talvez invadindo o servidor DNS que na maioria dos casos não é a mesma máquina...) apontando o MX para nosso servidor de e-mail, fazendo-o aceitar emails e inclusive fazer RELAY para estes domínios e dependendo da configuração isso pode deixar nosso servidor como RELAY aberto, estado impraticável na internet, pois permite que utilizem nosso servidor para envio de SPAMs, por exemplo. Sendmail Restricted Shell ------------------------If enabled, this option causes sendmail to use the sendmail restricted shell program (smrsh) instead of /bin/sh for mailing to programs. This improves your ability to control what gets run via e-mail; only those programs which appear in a special directory can be run. If you enable this option, please carefully read the smrsh(8) man page for further information. Use the Sendmail Restricted Shell (smrsh)? [Y] 283 PROGRAMA TÉCNICO CIDADÃO Esta opção “deve” ser ativada por padrão no sendmail (Apesar de não estar disponível em versões mais antigas do software), pois evita algumas falhas de segurança que permitem ao atacante executar comandos arbitrários no sistema através de falhas no sendmail. Habilitando esta opção, estaremos forçando o sendmail a utilizar um shell restrito (shrsh) para seu funcionamento ao invés de um shell válido para usuários que costumam “interagir” com o sistema, como o sh ou o bash. Reload the running sendmail now with the new configuration? [Y] Ao terminar a configuração do sendmail com o utilitário sendmailconf, respondemos “Y” para essa questão (caso ela apareça) para instruir ao sistema para reiniciar os daemons do serviço sendmail. Para fazer isso manualmente, podemos utilizar o comando: # killall -HUP sendmail Testando sua configuração Nesse momento, nosso sendmail já deve estar em pleno funcionamento (repare nos arquivos criados no diretório /etc/mail). Vamos utilizar o comando mail como MUA para testar o envio local de mensagens do sendmail. Isso geralmente é o suficiente para comprovar o funcionamento básico do sendmail. Caso não exista, vamos criar um usuário de testes que será nosso destinatário das mensagens “por enquanto”: # useradd -m aluno # passwd aluno Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 284 PROGRAMA TÉCNICO CIDADÃO O comando abaixo acionará o MTA padrão do sistema (No nosso caso, o sendmail, antes que esqueçam) para enviar nossa mensagem gerada com o comando mail para a caixa postal correspondente (repare que não especificamos um e-mail no formato usuario@domínio). # mail aluno Subject: Assunto da Mensagem Digite toda a mensagem... .... Quando terminar, digite uma linha contendo somente o sinal de ".", conforme abaixo. . Cc: Uma boa forma de de acompanhar o funcionamento do servidor de emails e estar alerta para algum erro de configuração é analizando os logs de e-mail, que no caso do Debian ficam no arquivo /var/log/mail.log e podem ser acompanhados com o comando: # tail -f /var/log/mail.log Entradas corretas para o envio de nossa mensagem de testes se assemelham com o seguinte: A) Feb 7 22:50:21 apostilas sendmail[1374]: j180oKRV001374: from=root, size=159, class=0, nrcpts=1, msgid=<[email protected]>, RELAY=root@localhost B) Feb 7 22:50:27 apostilas sm-mta[1376]: j180oL7e001376: from=<[email protected]>, size=455, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MSA, RELAY=localhost [127.0.0.1] C) Feb 7 22:50:27 apostilas sendmail[1374]: j180oKRV001374: to=aluno, ctladdr=root (0/0), delay=00:00:07, xdelay=00:00:06, mailer=RELAY, pri=30043, RELAY=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (j180oL7e001376 Message accepted for delivery) 285 PROGRAMA TÉCNICO CIDADÃO D) Feb 7 22:50:27 apostilas sm-mta[1378]: j180oL7e001376: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30682, dsn=2.0.0, stat=Sent Dividimos as entradas para facilitar a compreensão do aluno, mas elas aparecem em seqüência no arquivo de log. A primeira entrada (A) mostra que tudo ocorreu bem na entrada da mensagem na fila. A segunda entrada (B) demonstra que o sendmail determinou que o melhor transporte para a mensagem é local (Não é necessário efetuar uma pesquisa DNS para descobrir o registro MX correspondente ao domínio), e que para isso foi aberta uma conexão SMTP com o host local (127.0.0.1, vejam a importância da interface loopback). O item C diz que a mensagem foi aceita com sucesso para entrega e o item D diz que a mensagem foi entregue com sucesso para a caixa postal do usuário. Nesse ponto, o sendmail adicionou a mensagem a caixa postal do usuário (caso ela exista) que fica em /var/spool/mail/<usuário>, que em nosso caso é: /var/spool/mail/aluno. Este “estilo” de caixa postal é chamado de mbox e é muito conhecido em ambientes UNIX, além de ser o formato mais simples de caixa postal. Um arquivo mbox nada mais é do que um arquivo de texto normal que contém todas as mensagens de e-mail da “caixa” escritas seqüencialmente. Vejamos como ficou nosso arquivo mbox do usuário aluno (/var/spool/mail/aluno) que contém uma mensagem: # cat /var/mail/aluno From [email protected] Mon Feb 7 23:08:59 2005 Return-Path: <[email protected]> Received: from apostilas.utah.net.br (localhost [127.0.0.1]) by apostilas.utah.net.br (8.12.3/8.12.3/Debian-7.1) with ESMTP id j1818w7e001413 for <[email protected]>; Mon, 7 Feb 2005 23:08:58 -0200 Received: (from root@localhost) by apostilas.utah.net.br (8.12.3/8.12.3/Debian-7.1) id j1818vNW001411 for aluno; Mon, 7 Feb 2005 23:08:57 -0200 Date: Mon, 7 Feb 2005 23:08:57 -0200 286 PROGRAMA TÉCNICO CIDADÃO From: root <[email protected]> Message-Id: <[email protected]> To: [email protected] Subject: Assunto da Mensagem Content-Length: 116 Digite toda a mensagem... .... Quando terminar, digite uma linha contendo somente o sinal de ".", conforme abaixo. Cada mensagem é dividida em duas partes. A primeira (colocada propositadamente em negrito para facilitar a leitura) é o cabeçalho da mensagem, que contém informações sobre a mensagem, como o assunto, remetente, destinatário, etc. Todo o restante do e-mail, a contar da primeira linha em branco, é o corpo da mensagem. Vamos agora verificar se o usuário aluno realmente consegue “ler” a mensagem enviada. Para isso, vamos primeiro escolher outro terminal e logar nele com o usuário aluno. Linux apostilas 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 unknown Most of the programs included with the Debian GNU/Linux system are freely redistributable; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. You have mail. $ Repare que o o sistema avisa automaticamente que o usuário têm novas mensagems. Para ler, utilize o comando mail e em seguida escolha o número associado a mensagem que deseja ler, conforme abaixo: $ mail 287 PROGRAMA TÉCNICO CIDADÃO Mail version 8.1.2 01/15/2001. Type ? for help. "/var/mail/aluno": 1 message 1 new >N 1 [email protected] Mon Feb 7 23:08 22/768 Assunto da Mensagem &1 Isso exibirá a mensagem “1” na tela. Para sair, utilize a tecla [Q]: &q Saved 1 message in /home/aluno/mbox $ Repare que o usuário foi notificado que 1 (uma) mensagem foi salva no arquivo mbox dentro do diretório $HOME do usuário. Isso “remove” os emails lidos do arquivo global de caixa postal, adicionando-o em um arquivo mbox local do usuário. Dessa forma, para ler os emails da caixa postal local, utilizamos a opção -f do comando mail, conforme abaixo: $ mail No mail for aluno $ mail -f Mail version 8.1.2 01/15/2001. Type ? for help. "/home/aluno/mbox": 1 message > 1 [email protected] Mon Feb 7 23:08 23/779 Assunto da Mensagem &q $ Repare no nome do arquivo que aparece no início do comando. Fila de mensagens no Sendmail O sendmail possui um sistema simples de gerenciamento da fila de mensagens, que possui um lado bom e outro ruim. O lado bom é que é simples gerenciar pois cada mensagem na fila cria um arquivo respectivo no diretório /var/spool/mqueue, o que torna simples apagar uma ou mais mensagens na fila. 288 PROGRAMA TÉCNICO CIDADÃO O lado ruim é que isso torna o sendmail muito mais lento que outros MTA que utilizam sistemas mais complexos (Ou completos?) para gerenciamento da fila de mensagens, como o Qmail e o Postfix. Parte da culpa pela lentidão está no sistema operacional, que não consegue lidar com um número excessivo (alguns milhares) de arquivos num mesmo diretório. Para visualizar as mensagens na fila do sendmail, utilizamos o comando: # sendmail -bp /var/spool/mqueue is empty Total requests: 0 ATENÇÃO O comando mailq também serve ao mesmo propósito, mas é bom se acostumar com a sintaxe oferecida pela apostila, pois reflete o que realmente é requisitado pela Linux Professional Institute® e outras entidades certificadoras. A fila de mensagens é atualizada automaticamente pelo daemon do sendmail a cada 4 horas por padrão, para mudar esse intervalo, utilize o comando: # sendmail -q1h45m No exemplo, modificamos o tempo de atualização para 1 hora e 45 minutos. Para forçar uma atualização neste mesmo instante, utilize: # sendmail -q Também é importante que o administrador do sistema saiba gerenciar a fila de mensagens com base em alguns critérios, como o remetente ou o destinatário, por exemplo. Digamos que você possua cerca de 500 emails na fila de mensagens e seu chefe precisa enviar um e-mail urgente para um fornecedor e precisa garantir que este e-mail chegue logo. É possível permitir que o e-mail do seu chefe “fure a fila” e seja processado imediatamente pelo sendmail com o comando: 289 PROGRAMA TÉCNICO CIDADÃO # sendmail -qSchefe Onde “chefe” é o e-mail do seu chefe, que consta como remetente da mensagem importante. Para fazer o mesmo com base no destinatário, basta trocar a letra “S” (Sender) por “R” (Recipient), ficando assim: # sendmail -qRdestinatario Aliases de e-mail Uma das características mais importantes de um sistema de e-mail é sua capacidade de “apelidar” um ou mais usuários do sistema, permitindo criar caixas postais “virtuais” (Embora este não seja o termo mais correto hoje em dia) apontando para um ou mais usuários reais do sistema. Um exemplo clássico disso é o e-mail “webmaster”. No sistema de aliases, adicionamos uma entrada como a abaixo no arquivo de aliases (geralmente o arquivo /etc/aliases): webmaster: aluno Isso criará uma caixa postal virtual chamada “webmaster”, e todo e-mail que enviarmos para webmaster (que tal [email protected] ?) será entregue na caixa postal do usuário aluno. Caso necessite criar redirecionamentos para mais de um usuário (aluno e fulano, por exemplo), basta separá-los por vírgula que as mensagens enviadas para o alias será redirecionada para todas as caixas postais listadas na mesma linha (separadas por vírgula). Adicione esta entrada (caso já não exista) no arquivo /etc/aliases e digite o comando a seguir para “atualizar” a lista de aliases: # sendmail -bi /etc/mail/aliases: 5 aliases, longest 10 bytes, 83 bytes total 290 PROGRAMA TÉCNICO CIDADÃO Envie um e-mail de testes para “webmaster” e verifique a caixa postal do usuário aluno para constatar o funcionamento do redirecionamento da caixa postal. Não se esqueça de dar uma olhada no arquivo de log (/var/log/mail.log). ATENÇÃO O comando “newaliases” tem o mesmo efeito que o comando “sendmail -bi”, porém, é importante saber das duas formas, pois o formato mostrado na apostila é requisito de provas de certificação como as do Linux Professional Institute®. O arquivo ~/.forward Caso um usuário do sistema queira redirecionar os emails seus emails para outra(s) conta(s), basta que ele adicione os respectivos nomes de usuários no arquivo ~/.forward que o sendmail cuida do resto. Isso é muito útil quando determinado funcionário da empresa saiu de férias e durante um período os emails dele deverão ser redirecionados para outro usuário. Atualmente já existem técnicas mais avançadas para redirecionamento de emails, principalmente com outros MTA, mas essa não deixa de ser uma forma simples de redirecionamento. Listas de destinatários É possível criar um alias que referencie um arquivo contendo diversos emails, e todo e-mail enviado para aquele determinado alias será encaminhado para cada um dos destinatários listados no e-mail. Por exemplo, digamos que seja necessário criar um e-mail [email protected], e que quando enviarmos um e-mail para este endereço, todos os membros do grupo de vendas receberão uma cópia. Para isso, basta criar um arquivo (/etc/mail/vendas.aliases, por 291 PROGRAMA TÉCNICO CIDADÃO exemplo) contendo a lista, um por linha, dos destinatários e incluir uma entrada como a seguir no arquivo /etc/aliases: vendas: :include:/etc/mail/vendas.aliases Não se esqueça de atualizar a lista de aliases com o comando “sendmail -bi”. Domínios virtuais no Sendmail Caso seja necessário que nosso servidor de e-mail sendmail tenha que lidar com mais de um domínio, será necessário utilizar domínios virtuais para garantir que as mensagens enviadas para [email protected] não sejam confundidas com as mensagens enviadas para [email protected]. Os domínios virtuais existem nos servidores de e-mail para separar os domínios assim como também existem nos servidores web para permitir hospedarmos mais de uma página no mesmo servidor. Configuração Para configurar os domínios virtuais no sendmail, precisamos nos certificar de possuir pelo menos duas zonas “diferentes” configuradas num servidor DNS. No exemplo utilizaremos utah.net.br e sun.com.br. As zonas devem ter seus registros MX apontando para o IP do servidor sendmail a ser configurado, no exemplo este IP será 192.168.1.12, verifique o seu. Faça testes com o comando dig para garantir que o registro MX existe para cada zona e estão apontando para o IP correto. Testes de ping também costumam ajudar. Todos os domínios virtuais (2 no meu caso) devem constar, um por linha, no arquivo / etc/mail/local-host-names. Este costuma ser o erro mais comum dos administradores menos experientes com sendmail 292 PROGRAMA TÉCNICO CIDADÃO Vamos adicionar mais alguns usuários no sistema para que possamos ter opções de redirecionamento. Em nosso exemplo, adicionei os usuários: aluno, huguinho, zezinho e luizinho, além de seus respectivos aluno2, huguinho2, zezinho2 e huguinho2. Para ativar os domínios virtuais no sendmail, é preciso adicionar uma linha conforme abaixo no arquivo sendmail.cf, logo após a ocorrência da Linha “Cwseu.hostname.fqdn” (no meu caso é apostilas.utah.net.br), que define seu hostname para o sendmail. Esta linha costuma ficar por volta da 152. Utilize a busca do vim para facilitar. Kvirtuser hash /etc/mail/virtusertable A partir de agora, devemos adicionar as informações de domínios virtuais no arquivo / etc/mail/virtusertable. Segue um exemplo de como fica este arquivo em nosso exemplo: [email protected] aluno [email protected] huguinho [email protected] zezinho [email protected] luizinho @utah.net.br aluno [email protected] aluno2 [email protected] huguinho2 [email protected] zezinho2 [email protected] luizinho2 @sun.com.br aluno2 Dessa forma, os emails enviados para [email protected] irão para a caixa postal do usuário aluno, já os emails enviados para o e-mail [email protected] serão encaminhados para a caixa postal do usuário aluno2, e assim por diante. Adicionamos também duas contas “pega-tudo”, uma para cada domínio. Na última linha do arquivo consta a conta pega-tudo para o domínio sun.com.br, e todo e-mail que não casar com nenhum usuário”virtual” deste domínio será enviado para a conta aluno2. Não é uma boa prática criar contas pega-tudo, pois costumam ser alvos fáceis de spammers. 293 PROGRAMA TÉCNICO CIDADÃO Para finalizar a configuração, precisamos compilar o mapa de hosts virtuais num formato legível pelo sendmail (O formato hash) com o comando: # cd /etc/mail # makemap hash virusertable < virtusertable Isso criará um arquivo .db do respectivo mapa, que no caso será /etc/mail/virtusertable.db. Não se esqueça de repetir este passo a cada modificação no arquivo virtusertable. Reinicie o daemon do sendmail e faça os testes. Caso algo dê errado, não se esqueça de verificar os logs do sistema. Enviando emails com telnet Uma forma prática (e em alguns casos divertida) de isolar possíveis problemas no MUA e utilizar uma interface direta com o MTA para enviar mensagens de e-mail para testes é através do telnet. O conceito é simples, basta utilizar o telnet (se não estiver instalado, instale) para se conectar à porta 25 do servidor de emails e digitar os comandos conforme o exemplo abaixo, que enviará um e-mail para o usuário [email protected]. # telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 apostilas.utah.net.br ESMTP Sendmail 8.12.3/8.12.3/Debian-7.1; Tue, 8 Feb 2005 01:28:10 -0200; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1] EHLO localhost 250-apostilas.utah.net.br Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-EXPN 250-VERB 250-8BITMIME 250-SIZE 294 PROGRAMA TÉCNICO CIDADÃO 250-DSN 250-ETRN 250-DELIVERBY 250 HELP MAIL FROM: [email protected] 250 2.1.0 [email protected]... Sender ok RCPT TO: [email protected] 250 2.1.5 [email protected]... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Digito o e-mail e termino com ".", conforme abaixo... . 250 2.0.0 j183SALC002231 Message accepted for delivery quit 221 2.0.0 apostilas.utah.net.br closing connection Connection closed by foreign host. Todos os comandos digitados manualmente estão destacados em negrito. O primeiro (EHLO) diz ao MTA quem é você (repare que ele responde). Especificamos o remetente com o comando “MAIL FROM:” e o destinatário com o comando “RCPT TO:”. O comando DATA inicia a edição do corpo da mensagem. Para sair do telnet após o envio, utilize o comando quit. DICA Caso fique “aparentemente” preso no telnet, é possível forçar uma saída pressionando a seqüência de teclas [CONTROL]+[]] (fecha colchetes...). Aparecerá um prompt Telnet>, basta utilizar o comando quit nele para sair. Postfix Estudaremos agora um dos mais revolucionários servidores de e-mail já desenvolvidos: o Postfix. Ele é um robusto sistema de e-mail que possui algumas “raízes” do sendmail, mas é um 295 PROGRAMA TÉCNICO CIDADÃO produto completamente reformulado para as necessidades atuais da Internet, pois foi criado com preocupação em segurança, velocidade e facilidade de integração. A forma com que o Postfix é configurado permite fácil integração com outros produtos que o adicionam funcionalidades, como filtros de e-mail (Antivírus e AntiSpam) e gerenciadores de entrega. O Postfix possui centenas de parâmetros de configuração controlados através de seu arquivo de configuração principal, o arquivo main.cf. Felizmente, a configuração padrão do Postfix já utiliza valores padrão corretos para a maioria dos cenários de utilização do Postfix. Sendo assim, poucos parâmetros precisam ser realmente modificados para que o Postfix possa oferecer sua funcionalidade básica. O restante desse treinamento irá tratar dos parâmetros de configuração que devem ser alterados em um arquivo de configuração padrão fornecido pela instalação do pacote Debian do postfix encontrado nos CDs de instalação e/ou nos respositórios de pacotes oficiais Debian. Instalação e configuração básica do Postfix Basicamente esta parte se resume em instalar o pacote que provê o Postfix para s distribuição Linux utilizada. Para instalar o pacote Debian do Postfix, use o comando a seguir: # aptitude install postfix Ao instalar o pacote postfix, o pacote do que estiver provendo “mail-transport-agent” (Pode ser o exim ou o sendmail, por exemplo) será removido. Uma particularidade do pacote Debian do Postfix é que o mesmo utiliza o debconf para sua configuração inicial básica. Devido a isso, logo após instalar o pacote postfix, o script de pós-instalação do pacote irá executar a etapa de configuração básica inicial do pacote. 296 PROGRAMA TÉCNICO CIDADÃO A primeira tela a ser exibida é a tela que lhe questiona que tipo de configuração você deseja para o Postfix. Diversas configurações são possíveis, como Internet com smarthost, Internet Site, Sistema satélite, Somente local e a opção Sem configuração. Como o processo de configuração básica inicial do Postfix baseada em debconf ainda não pode gerenciar todos os parâmetros geralmente necessários, o procedimento a ser usado é selecionar a opção Local only, de modo que somente algumas perguntas serão feitas e, ao terminar de respondê-las, você terá um Postfix com uma configuração que lhe permitirá enviar e receber mensagens de e para usuários locais. A maioria das distribuições Linux já provêm pacotes do Postfix com este nível de configuração. Configurações adicionais para modificar o comportamento do Postfix devem ser feitas diretamente no arquivo de configuração principal, /etc/postfix/main.cf. Após escolher a opção Local only, surgirá uma pergunta lhe questionando sobre qual será o Mail name padrão. O Mail name é a porção logo após o símbolo de arroba (@) dos endereços de e-mail, e será usado para compor o endereço exibido no campo From: das mensagens enviadas a partir do servidor Postfix. Por exemplo, caso uma mensagem seja enviada do console do servidor pelo usuário joao e o Mail name esteja definido como utah.net.br, o destinatário da mensagem irá recebê-la e visualizar no campo From: da mesma [email protected]. Responda No para a próxima pergunta, que questiona se o Postfix deverá acrescentar o sufixo . dominio (na verdade, o que será acrescentado será .$mydomain, ou seja, ponto mais o valor da variável $mydomain) em mensagens que contém somente um componente na porção hostname. A próxima pergunta questiona quais os domínios que o servidor Postfix deve considerar ele mesmo como sendo o destino final. Ou seja, se você acrescentar o domínio uol.com.br nessa listagem, o Postfix irá tentar entregar localmente todas as mensagens enviadas para endereços 297 PROGRAMA TÉCNICO CIDADÃO que contenham @uol.com.br no campo To:. Sendo assim, somente acrescente nesta listagem os domínios que realmente serão hospedados no servidor Postfix sendo instalado. Este parâmetro é equivalente ao arquivo /etc/mail/local-host-names do sendmail. O padrão sugerido é o hostname totalmente qualificado (FQDN) do servidor onde o Postfix está sendo instalado, localhost.utah.net.br e localhost. Acrescente a essa lista o(s) domínio(s) para o(s) qual(is) você deseja que o Postfix seja o destino final. Por exemplo, caso o Postfix sendo instalado tenha que ser o destino final para os domínios utah.net.br e sun.com.br, a listagem informada como resposta a essa pergunta ficaria como: apostilas.utah.net.br, localhost.utah.net.br, localhost, utah.net.br, sun.com.br Essa lista pode ser modificada posteriormente no parâmetro mydestination do arquivo / etc/postfix/main.cf. A próxima pergunta questiona para qual endereço de e-mail as mensagens enviadas para o usuário root deverão ser redirecionadas. O Postfix não entrega mensagens diretamente na caixa do usuário root, pois precisaria ser executado com privilégios de root para fazê-lo. Como isso pode ser uma falha de segurança, o padrão é definir uma conta de usuário comum para onde as mensagens destinadas ao usuário root serão enviadas. Ao definir essa conta, um entrada será acrescentada no arquivo de aliases padrão do Postfix, o arquivo /etc/aliases, criando um alias de root para o usuário definido. O sistema de aliases funciona exatamente como no sendmail. Pronto. A etapa de configuração será finalizada e o Postfix será iniciado, já funcionando para o envio e recebimento de mensagens de e para usuários locais. 298 PROGRAMA TÉCNICO CIDADÃO Controlando o daemon do Postfix Após a definição ou modificação da maioria dos parâmetros do Postfix, não é necessário reiniciá-lo por completo. Apenas um reload é necessário, o que já fará com que quaisquer modificações nos arquivos de configuração do Postfix passem a ser válidas. Somente alguns parâmetros requerem que o Postfix seja reiniciado por completo (com o comando postfix restart, por exemplo) para que passem a ser válidos. O parâmetro inet_interfaces, do qual trataremos adiante, é um exemplo. Ao longo desse treinamento, será assumido que sempre que a definição ou modificação de um parâmetro do Postfix seja requisitada, um reload do mesmo seja executado. Quando existir a necessidade de um restart completo do Postfix, isso será explicitamente informado. Para referência, um reload do Postfix é equivalente a executar o comando a seguir : # postfix reload Um restart do Postfix, por sua vez, é equivalente a executar o comando a seguir : # postfix restart Configurações específicas do Postfix Veremos agora a função de alguns parâmetros do Postfix no arquivo /etc/postfix/main.cf. Gerenciamento das configurações Existem duas formas básicas de gerenciar as configurações do Postfix. A primeira é a mais óbvia, editando diretamente o arquivo main.cf. A segunda é através do comando postconf (Consulte a man page para maiores detalhes). 299 PROGRAMA TÉCNICO CIDADÃO O postconf permite basicamente visualizar e editar as configurações do postfix a partir da linha de comando, sem a necessidade de utilizar um editor de texto para edição do main.cf. Consultando parâmetros O funcionamento é bem simples. Para exibir todos os parâmetros que o Postfix suporta, assim como seus respectivos parâmetros configurados atualmente, digite: # postconf Isso resultará em umas 300 linhas possíveis, cada uma contando um parâmetro de configuração do Postfix. Os valores padrão para cada parâmetro podem ser visualizados com a opção -d do postconf, assim: # postconf -d Para direcionar sua pesquisa a um parâmetro específico, basta especificar o parâmetro na frente do comando. Por exemplo, digamos que seja você queira visualizar o parâmetro myhostname, utilize: # postconf myhostname myhostname = apostilas.utah.net.br Este é o valor atual do parâmetro myhostname. Para exibir o valor “padrão”, utilize: # postconf -d myhostname myhostname = apostilas Para exibir somente os parâmetros diferentes do padrão, utilize: # postconf -n alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no command_directory = /usr/sbin config_directory = /etc/postfix 300 PROGRAMA TÉCNICO CIDADÃO daemon_directory = /usr/lib/postfix mailbox_command = mailbox_size_limit = 0 mydestination = apostilas.utah.net.br, apostilas.utah.net.br, localhost.utah.net.br, localhost, utah.net.br myhostname = apostilas.utah.net.br mynetworks = 127.0.0.0/8 myorigin = /etc/mailname program_directory = /usr/lib/postfix recipient_delimiter = + relayhost = setgid_group = postdrop smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) Estes são geralmente os parâmetros que foram definidos no arquivo main.cf, mesmo que através do postconf. Modificando parâmetros Agora vamos aprender a utilizar o postconf para modificar parâmetros de configuração sem “tocar” no arquivo main.cf. A sintaxe também é bem simples, baste acionar a opção -e do postconf e especificar (entre aspas, geralmente) o valor desejado para a opção, conforme exemplo abaixo: # postconf mydomain mydomain = utah.net.br # postconf myhostname myhostname = apostilas.utah.net.br # postconf -e myhostname="apostilas.\$mydomain" # postconf myhostname myhostname = apostilas.$mydomain Não se esqueça que o caractere “$” deve ser escapado com barra invertida “\” para que o shell não interprete como uma variável de ambiente. Agora verifique as mudanças no arquivo /etc/postfix/main.cf. 301 PROGRAMA TÉCNICO CIDADÃO Para quais endereços IP ou redes permitir RELAY? O parâmetro mynetworks controla para quais endereços IPs e/ou redes o Postfix irá fazer RELAY (oferecer o serviço de envio de mensagens). Segue um exemplo de configuração do parâmetro mynetworks: mynetworks = 127.0.0.0/8, 192.168.1.0/24, 200.1.2.3/32 No exemplo acima, o RELAY está sendo liberado para as redes 127.0.0.0/8 (rede da interface de loopback), 192.168.1.0/24 (rede de classe C inválida de exemplo) e para o endereço IP (e não rede) 200.1.2.3/32 (endereço hipotético usado como exemplo). Utilize o exemplo acima como base para sua configuração e substitua os endereços IPs/redes usados no exemplo pelos endereços IP/redes para os quais o Postfix terá que oferecer seus serviços. IMPORTANTE O RELAY deve ser sempre liberado para a rede da interface de loopback, 127.0.0.0/8. Caso contrário, o Postfix não conseguira entregar nenhum tipo de mensagem localmente. O hostname totalmente qualificado (FQDN) do servidor Postfix O parâmetro myhostname indica ao Postfix qual o hostname totalmente qualificado (FQDN) da máquina onde o Postfix está sendo implantado. O padrão é obter esse valor do hostname padrão do servidor. É importante ter o hostname corretamente definido no arquivo /etc/hosts para que o Postfix de forma geral funcione satisfatoriamente. Um exemplo de arquivo / etc/hosts segue abaixo: 302 PROGRAMA TÉCNICO CIDADÃO 127.0.0.1 localhost.localdomain localhost 192.168.1.12 apostilas.utah.net.br apostilas Certifique-se de que o “nome curto” do servidor seja o único conteúdo do arquivo / etc/hostname (isto é específico do Debian) e que a saída dos comandos abaixo seja semelhante: # cat /etc/hostname apostilas # hostname apostilas # hostname -f apostilas.utah.net.br # grep `hostname -f` /etc/hosts 192.168.1.12 apostilas.utah.net.br apostilas Isso garante que a configuração de nomes do servidor esteja correta. Como estamos revisando a configuração e vamos precisar utilizar o DNS, verifique também se exite uma entrada de nameserver apontando para seu próprio IP (pode ser o loopback também) no arquivo /etc/resolv.conf. # cat /etc/resolv.conf search utah.net.br nameserver 127.0.0.1 Agora voltemos ao Postfix. Um exemplo de configuração do parâmetro myhostname seria : # postconf myhostname myhostname = apostilas.$mydomain Constate também que o parâmetro mydomain comporta realmente o seu domínio, que deve ser a mesma saída do comando dnsdomainname. # dnsdomainname utah.net.br # postconf -e mydomain="`dnsdomainname`" # postconf mydomain mydomain = utah.net.br 303 PROGRAMA TÉCNICO CIDADÃO Dessa forma, é garantido que o Postfix esteja configurado corretamente com seu FQDN. Em quais interfaces de rede permitir conexões SMTP O parâmetro inet_interfaces controla em quais interfaces de rede o Postfix deverá aguardar por conexões SMTP. Caso seja necessário oferecer os serviços do daemon SMTP para todas as redes nas quais o servidor Postfix tenha uma interface de rede, defina o valor do parâmetro inet_interfaces como a seguir: inet_interfaces = all Logicamente, as restrições do parâmetro mynetworks ainda são válidas para controle de quais endereços IP e/ou redes podem fazer RELAY utilizando o Postfix, uma vez que o parâmetro inet_interfaces somente controla em quais interfaces de rede o Postfix vai ouvir. Somente no caso do servidor possuir mais de uma interface de rede é que este parâmetro começa a se tornar útil. Conforme dito, se o valor de inet_interfaces estiver definido para “all”, o postfix deixará a porta SMTP (25/tcp) aberta em todas as interfaces de rede, isso inclui a interface loopback. Digamos que seu servidor possua2 interfaces de rede (além da loopback, é claro), onde uma fica com o IP 192.168.1.12 e a outra fica com o IP 200.1.2.3, e não queremos oferecer os serviços do postfix para a interface de rede com o IP 200.1.2.3. A configuração ficaria assim: inet_interfaces = 127.0.0.1, 192.168.1.12 A modificação do parâmetro inet_interfaces requer um restart do Postfix e não simplesmente um reload. DICA Podemos constatar os resultados com o comando: “netstat -nl |grep :25” 304 PROGRAMA TÉCNICO CIDADÃO Serão mostradas as interfaces que possuem a porta 25 aberta. Isto é uma boa prática para todos os serviços de rede e deve se tornar hábito para administradores que se preocupam com a segurança. Configuração para caixas-postais no estilo Maildir O padrão do Postfix é utilizar o formato de caixas-postais mbox (igual o sendmail). Mas o Postfix pode lidar com diversos formatos de caixas-postais, e dentre elas, uma boa alternativa é o formato Maildir, que organiza em uma estrutura de diretórios as mensagens da caixa-postal, tornando a varredura da caixa postal muito mais rápida. Porém, para que isso seja possível, precisamos configurar o Postfix para entregar as mensagens dos usuários locais nesse formato de caixa-postal. O parâmetro necessário é o home_mailbox, que não possui um padrão definido (O que leva ao Postfix optar pelo formato mbox). Vejamos: # postconf home_mailbox home_mailbox = # postconf -e home_mailbox="Maildir/" # postconf home_mailbox home_mailbox = Maildir/ # postfix reload postfix/postfix-script: refreshing the Postfix mail system Por padrão, o Postfix entrega mensagens no formato mbox sob o diretório /var/mail (/var/spool/mail é um link simbólico para /var/mail). A configuração acima instrui o Postfix a entregar as mensagens dos usuário em um diretório de nome Maildir, sob o diretório pessoal de cada usuário. Não é necessário a existência prévia de um diretório de nome Maildir sob o diretório pessoal de cada usuário uma vez que o próprio Postfix se encarregará de criar tal diretório caso o mesmo 305 PROGRAMA TÉCNICO CIDADÃO ainda não exista, bem como criar a estrutura de subdiretórios necessária para a entrega das mensagens e acertar quaisquer permissões necessárias. Encaminhando mensagens para outro MTA Por vezes, é necesário encaminhar mensagens geradas localmente no servidor de mensagens ou através da rede para que sejam entregues em outro servidor de mensagens e não localmente, assim como um SmartHost do sendmail. Para habilitar o suporte a esse recurso, o parâmetro relayhost pode ser utilizado, configurado da seguinte forma: relayhost = [1.2.3.4]:25 Onde 1.2.3.4 é o endereço IP do servidor de mensagens para o qual as mensagens devem ser encaminhadas. O endereço IP deve ser especificado entre colchetes para evitar pesquisas DNS e agilizar o envio. Após os dois pontos, 25 representa no exemplo acima o número da porta TCP onde o servidor de mensagens remoto está ouvindo por conexões SMTP (geralmente 25). IMPORTANTE O encaminhamento só será feito para mensagens com destino a usuários de domínios que não estejam listados no parâmetro mydestination. As mensagens que tenham como destino usuários de domínios listados no parâmetro mydestination serão entregues localmente, independente da configuração do parâmetro relayhost. Definindo aliases O arquivo de aliases do Postfix é definido pelo parâmetro alias_maps. O valor padrão desse parâmetro no pacote Debian do Postfix é: alias_maps = hash:/etc/aliases Modifique somente no caso de querer especificar um arquivo de aliases alternativo. 306 PROGRAMA TÉCNICO CIDADÃO Outro ponto importante a ser lembrando é que o Postfix possui um comando próprio para gerar a base de dados de aliases a partir do arquivo de aliases definido no parâmetro alias_maps. O comando usado para geração dessa base de dados é o postalias. Segue abaixo um exemplo de utilização do comando postalias para geração da base de dados de aliases: # postalias /etc/aliases O parâmetro alias_database define qual arquivo de aliases será lido pelo postfix para obter a lista de aliases. Em uma configuração comum o valor desse parâmetro é idêntico ao parâmetro alias_maps, que apontam para arquivos de mapa do tipo hash. Ao utilizarmos o comando postalias em um arquivo de mapa (/etc/aliases, por exemplo), será criado um arquivo binário no formato hash de mapa, e este arquivo terá o mesmo nome do arquivo de entrada, mais a extensão “.db”. No nosso exemplo (e na maioria dos casos) o arquivo binário criado pelo comando “postalias /etc/aliases” será “/etc/aliases.db”. Definindo um alias para o postmaster É de extrema importância definir um alias para o postmaster, uma vez que as mensagens de erro enviadas pelo Postfix recomendam relatar o problema sendo reportado para o postmaster do domínio em questão. O destino desse alias costuma ser a conta do usuário encarregado de administrar o servidor de email. Adicionalmente, é um padrão estabelecido em sistemas de controle de mensagens manter um endereço no formato postmaster@dominio para receber mensagens administrativas e de usuários que desejam relatar problemas ao responsável pelo gerenciamento de mensagens, inclusive de usuários de outros domínios que precisem relatar um problema que possam eventualmente estar enfrentando na tentativa de se comunicar com um usuário do domínio atendido pelo Postfix. 307 PROGRAMA TÉCNICO CIDADÃO A sintaxe da definição do alias é exatamente a mesma usada na definição de um alias no MTA sendmail. Segue abaixo um exemplo definindo um alias do postmaster para o usuário local aluno: postmaster: aluno Definindo um alias para o root Da mesma forma que o alias para o postmaster, definir um alias para o root também é extremamente importante. Até mesmo mais importante do que o caso do postmaster, uma vez o Postfix, por razões de segurança, não entrega mensagens diretamente na caixa postal do usuário. Para que a entrega direta para o usuário root funcionasse seria necessário que o usuário Postfix pudesse gravar na caixa de mensagens do usuário root ou que o processo do Postfix fosse executado com privilégios de root. Como um dos focos do Postfix é segurança, isso não é permitido. Sendo assim, é obrigatório ter definido um alias do usuário root para um usuário comum. Esta configuração deve ser modificada e as mensagens com destino ao usuário root deverão ser entregues na conta de um usuário comum encarregado da administração do servidor ou até mesmo um grupo de usuários encarregados. Como exemplo, a seguir veremos uma linha do arquivo de aliases do Postfix que define que as mensagens destinadas ao usuário root serão entregues para o usuário aluno (o qual, logicamente, já deve existir): root: aluno IMPORTANTE Não se esqueça de recriar os mapas de aliases com o comando “postalias /etc/aliases”. 308 PROGRAMA TÉCNICO CIDADÃO Domínios Virtuais no Postfix O suporte a domínios virtuais no Postfix, assim como muitos outros de seus recursos, é implementado utilizando mapas de lookup. Simplificando para nossos propósitos, um mapa de lookup é onde o Postfix busca informações de equivalência de endereços de e-mail para usuários. O Postfix suporta domínios virtuais no estilo do sendmail e em seu próprio estilo. O suporte ao estilo do sendmail só está disponível para compatibilidade com instalações que estão sendo migradas do MTA sendmail para o Postfix. Em novas instalações, o melhor é utilizar o formato do Postfix. Para configurar o Postfix para buscar informações de domínios virtuais no mapa de lookup correto, especifique-o na opção virtual_maps, conforme abaixo: # postconf virtual_maps virtual_maps = # postconf -e virtual_maps="hash:/etc/postfix/virtual" O arquivo /etc/postfix/virtual deve seguir o seguinte formato (Utilizaremos os mesmos redirecionamentos da aula de sendmail): utah.net.br Um comentário qualquer aqui [email protected] aluno [email protected] huguinho [email protected] zezinho [email protected] luizinho sun.com.br Um comentário qualquer aqui [email protected] aluno2 [email protected] huguinho2 [email protected] zezinho2 [email protected] luizinho2 No exemplo acima, os redirecionamentos são os mesmos existentes no exemplo dado com os domínios virtuais do sendmail. 309 PROGRAMA TÉCNICO CIDADÃO A principal diferença de formato do Postfix é que os domínios devem ser separados e deve existir um cabeçalho com um comentário antes da primeira entrada para cada domínio. Para ativar as configurações, execute: # postmap /etc/postfix/virtual # postfix reload O primeiro comando cria o mapa em formato binário /etc/postfix/virtual.db. O segundo ativa as configurações efetuadas no Postfix. O conteúdo do arquivo /etc/postfix/virtual.db, ao contrário do arquivo /etc/postfix/virtual, não pode ser lido normalmente (trata-se de um arquivo binário). O Postfix sabe como ler o arquivo binário /etc/postfix/virtual.db, o que é feito em detrimento da leitura do arquivo / etc/postfix/virtual, devido a leitura do arquivo binário ser extremamente mais rápida do que interpretar todo o arquivo, /etc/postfix/virtual, em texto puro. IMPORTANTE NUNCA liste os domínios que serão tratados como virtuais no parâmetro mydestination. Nesse caso, simplesmente remova-os do parâmetro mydestination e trateos dentro do arquivo /etc/postfix/virtual, como exemplificado anteriormente. Agora basta efetuar os testes da mesma forma que foram efetuados na aula de sendmail. Servidores POP3 e IMAP Agora que já implementamos o protocolo SMTP no servidor de email, pode ser necessário disponibilizar acesso remoto às caixas postais através dos protocolos POP3 e IMAP, explicados anteriormente. É importante compreender que os protocolos POP3 e IMAP não são responsabilidade do MTA instalado no sistema, como o Sendmail ou o Postfix. O suporte a esses protocolos é dados 310 PROGRAMA TÉCNICO CIDADÃO através de servidores específicos para cada um. Geralmente o serviço que provê suporte ao POP3 é o mesmo que provê suporte à IMAP. No Debian existem diversas alternativas, mas a mais simples, funcional e com boa interação com o formato de caixas postais Maildir é o courier. Outras distribuições como a Conectiva por exemplo utilizam o courier por padrão. Instalando o Courier Para instalar o courier com suporte a POP3 e IMAP no Debian, utilize o comando a seguir : aptitude install courier-pop courier-imap Após o download, descompactação e instalação dos pacotes courier-pop, courier-imap e suas dependências, uma nota debconf será exibida, informando que o empacotamento do Courier foi totalmente revisado. Simplemente tecle [Enter] para continuar. A instalação dos pacotes será finalizada e os daemons POP (pop3d), IMAP (imapd) e de autenticação (authdaemon) serão iniciados. Verifique se o sistema já está aguardando por conexões nas portas adequadas: # netstat -nl tcp 0 # netstat -nl tcp 0 |grep :110 0 0.0.0.0:110 |grep :143 0 0.0.0.0:143 0.0.0.0:* LISTEN 0.0.0.0:* LISTEN Configurando o Courier Após a instalação dos servidores POP e IMAP, o próximo passo é configurá-los. Os arquivos de configuração de ambos os daemons, bem como todos os arquivos de configuração relacionados a qualquer componente do Courier, estão localizados sob o diretório /etc/courier. 311 PROGRAMA TÉCNICO CIDADÃO A configuração do servidor POP é feita no arquivo /etc/courier/pop3d e a configuração do servidor IMAP é feita no arquivo /etc/courier/imapd. O arquivo /etc/courier/authdaemonrc não precisará ser modificado a menos que seja necessário aumentar a quantidade de daemons de autenticação iniciados por padrão (ou seja, cinco instância do daemon) ou que outros métodos de autenticação sejam usados. Os valores padrões fornecidos pelos pacotes courier-pop e courier-imap já são adequados para a grande maioria das instalações, mas caso seja necessário, seguem abaixo alguns parâmetros que podem ser modificados para melhor adaptar os daemons de POP e IMAP ao ambiente onde os mesmos estão sendo implementados : ● ADDRESS (POP e IMAP) Esse parâmetro especifica em quais endereços IP o daemon IMAP irá ouvir por requisições de clientes IMAP. O padrão é 0 (zero), que singifica que o daemon IMAP irá ouvir por requisições de clientes IMAP em todos os endereços IP existentes no servidor onde o mesmo foi instalado. Esse parâmetro é útil caso desejemos restringir o acesso IMAP somente a um possível Webmail instalado localmente no servidor. Para isso, simplesmente definiríamos o valor do parâmetro ADDRESS para o endereço da interface de loopback, ou seja, 127.0.0.1. ● MAXDAEMONS (POP e IMAP) Esse parâmetro controla a quantidade máxima de instâncias do daemon de IMAP que poderão ser iniciadas. Por padrão, um máximo de 40 instâncias serão iniciadas. Ajuste esse valor de acordo com a demanda do ambiente onde o Courier-IMAP está sendo implantado. ● MAXPERIP POP e IMAP Esse parâmetro controla o número máximo de conexões originadas de um mesmo endereço IP a serem aceitas. Por padrão, no máximo 4 conexões originadas de um 312 PROGRAMA TÉCNICO CIDADÃO mesmo endereço IP serão aceitas. É interessante manter esse valor para um valor baixo para que usuários mal-intencionados não consigam gerar um situação de negação de serviços no servidor POP/IMAP devido a enviarem inúmeras requisições POP/IMAP ao mesmo tempo. Por outro lado, caso esteja enfrentando problemas de desconexão dos usuários, aumentar a quantidade de conexões simultâneas originadas de um mesmo endereço IP pode ajudar a resolver o problema, principalmente se o(s) usuário(s) enfrentando o problema possui diversas pastas em sua caixa-postal POP/IMAP. ● IMAP_CAPABILITY (somente IMAP) Esse parâmetro especifica uma lista de capabilities (capacidades) que o daemon IMAP suporta. Repare que o Courier-IMAP deve ter sido compilado com o suporte a todas as capalilities a serem especificadas como parâmetros para a lista de capabilities definida por IMAP_CAPABILITY. Por padrão, lista de capabilities especificada em IMAP_CAPABILITY é IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE. A lista de capabilities deve ser modificada para o valor IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE. Repare no acréscimo das capabilities AUTH=CRAM-MD5 e AUTH=CRAM-SHA1. Esses métodos de autenticação adicionais poderão ser usados caso a autenticação com senhas em texto puro seja usada, mas não com a autenticação utilizando senhas criptografadas. 313 PROGRAMA TÉCNICO CIDADÃO Testando o funcionamento Para testar o funcionamento dos daemons POP e IMAP, precisamos de uma conta válida no sistema. vamos utiliza a conta “aluno”. Envie uma mensagem para o usuário utilizando o comando a seguir: # echo "teste" | mail -s "Mensagem de testes" aluno Após o envio da mensagem, consulte o log de mensagens do Postfix, localizado no arquivo / var/log/mail.log e procure no final do arquivo por uma linha indicando a entrega da mensagem na caixa-postal do usuário teste. Como exemplo, a mensagem se parecerá com a linha a seguir: Feb 8 17:30:51 apostilas postfix/local[994]: 7E1879D6E: to=<[email protected]>, relay=local, delay=0, status=sent (maildir) Após verificar o funcionamento da entrega da mensagem, utilize o comando telnet para testar o funcionamento dos daemons de POP e IMAP. Para testar o funcionamento do POP3, utilize: # telnet 127.0.0.1 110 Isso abrirá uma conexão na porta 110/tcp, e deverá transcorrer o seguinte: Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Hello there. USER aluno +OK Password required. PASS 123 +OK logged in. LIST +OK POP3 clients that break here, they violate STD53. 1 406 314 PROGRAMA TÉCNICO CIDADÃO . RETR 1 +OK 406 octets follow. Return-Path: <[email protected]> Delivered-To: [email protected] Received: by apostilas.utah.net.br (Postfix, from userid 0) id 7E1879D6E; Tue, 8 Feb 2005 17:30:51 -0200 (BRST) To: [email protected] Subject: Mensagem de testes Message-Id: <[email protected]> Date: Tue, 8 Feb 2005 17:30:51 -0200 (BRST) From: [email protected] (root) teste . QUIT +OK Bye-bye. Connection closed by foreign host. # Os comandos digitados foram destacados em negrito. Uma explicação da sessão de testes acima seria: Após executar o comando de conexão à porta 110/tcp (POP3) , o servidor POP respondeu com algumas linhas informativas e, logo após a linha iniciada por +OK, o comando USER aluno foi informado, com o intuito de indicar ao servidor POP qual usuário estamos tentando autenticar. Após isso, o servidor POP requisitou a senha do usuário informado. Sendo assim, informamos a mesma através do comando PASS 123. A autenticação então ocorreu com sucesso. Após isso, o comando LIST foi utilizado para listar as mensagens na caixa-postal do usuário com o qual completamos a autenticação. O servidor POP então respondeu com uma listagem das mensagens, contendo seu ID interno e o tamanho de cada uma em octetos. Como em nosso exemplo temos somente uma mensagem, o servidor POP exibiu somente os dados referentes a mesma. 315 PROGRAMA TÉCNICO CIDADÃO Logo após, o comando RETR, seguido do ID da mensagem, foi usado para recuperar a mensgem em questão. A mensagem foi então exibida completamente e, após a leitura da mesma, o comando QUIT foi usado para desconexão do servidor POP. Similarmente, um exemplo de uma sessão de testes do servidor IMAP seria : # telnet localhost 143 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc. See COPYING for distribution information. 001 LOGIN aluno 123 001 OK LOGIN Ok. 002 SELECT INBOX * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent) * OK [PERMANENTFLAGS (\Draft \Answered \Flagged \Deleted \Seen)] Limited * 1 EXISTS * 1 RECENT * OK [UIDVALIDITY 1107891731] Ok 002 OK [READ-WRITE] Ok 003 FETCH 1 BODY[TEXT] * 1 FETCH (BODY[TEXT] {7} teste ) 003 OK FETCH completed. 004 LOGOUT * BYE Courier-IMAP server shutting down 004 OK LOGOUT completed Connection closed by foreign host. # Mais uma vez, os comandos digitados foram destacados em negrito. Uma explicação da sessão de testes IMAP seria : Após executar o comando de conexão à porta 143/tcp (IMAP) , o servidor IMAP respondeu com algumas linhas informativas. Logo após, o comando 001 LOGIN aluno 123 foi informado, com o intuito de indicar ao servidor IMAP qual usuário e senha iremos utilizar para autenticação. 316 PROGRAMA TÉCNICO CIDADÃO O servidor IMAP autenticou o usuário corretamente, sendo assim, informamos ao servidor IMAP que desejamos ter acesso a pasta principal, INBOX, do usuário, através do comando 002 SELECT INBOX. O servidor IMAP respondeu informando que existe uma mensagem na caixa INBOX e que o acesso de leitura e gravação foi cencedido. Após isso, o comando 003 FETCH 1 BODY[TEXT] foi utilizado para ler o conteúdo do corpo da mensagem existente na caixa. O conteúdo do corpo da mensagem foi exibido. Após isso, o comando 004 LOGOUT foi usando para a desconexão do servidor IMAP. A partir de agora, basta apontar a configuração dos MUA para nosso servidor que os protocolos POP3 e IMAP estão funcionando corretamente. 317 PROGRAMA TÉCNICO CIDADÃO NETWORK INFORMATION SERVICES (NIS) Muito comum em ambientes UNIX, os “Serviços de Informação da Rede”, ou simplesmente NIS (Network Information Services) são serviços de centralização de informações que facilitam muito a vida dos administradores e agregam flexibilidade para serviços como Autenticação e Resolução de nomes. O grande foco do NIS no Linux é prover uma interface transparente para busca de informações às aplicações locais. Por exemplo, o Linux pode obter a lista de usuários e senhas de diversas formas. A mais simples é através dos arquivos planos locais (/etc/passwd, /etc/shadow e / etc/group). Mas, dentre outras formas, um sistema Linux pode obter essas informações através dos serviços NIS, consultando o servidor NIS em busca de informações de autenticação de usuários, por exemplo. Esse arranjo entre usuários e NIS é denominado Autenticação Centralizada. Atualmente existem outras formas de se prover autenticação centralizada ao Linux, como LDAP e SMB, por exemplo, mas por enquanto focaremos nossos estudos no NIS, que é um tópico bem requisitado em provas de Certificação Profissional Linux. Autenticação centralizada com NIS O conceito por detrás da autenticação centralizada com NIS é bem simples de compreender. Consiste basicamente em se ter um servidor NIS com todos os usuários e senhas cadastrados e disponibilizados para a rede através dos serviços NIS (Também conhecidos como serviços de páginas amarelas, Yellow Pages). As outras estações ou servidores da rede podem obter informações de autenticação diretamente do servidor NIS, criando um ambiente centralizado de informações para autenticação de usuários, facilitando bastante a administração, pois basta cadastrar usuários no servidor NIS e configurar as estações ou outros servidores para serem clientes de nosso servidor NIS. Dessa forma, qualquer usuário válido no servidor NIS pode se autenticar normalmente em qualquer cliente NIS da rede. 318 PROGRAMA TÉCNICO CIDADÃO A ilustração acima nos ajuda a compreender quais as partes envolvidas num arranjo de autenticação centralizada NIS. Como podem ver, o conjunto formado pelo servidor e os clientes NIS recebe o nome de “Domínio NIS”. O domínio NIS deve ser o mesmo entre os membros, veremos mais adiante como configurar corretamente o domínio NIS. Instalação dos serviços NIS Para instalar o servidor NIS no Debian é muito simples, basta instalar o pacote nis que todas as dependências (Como o portmap) virão naturalmente. Este pacote já provê os arquivos necessários tanto para o servidor quanto para os clientes. # aptitude install nis Assim que o pacote for instalado, será lançado um script de configuração do debconf. A primeira pergunta que ele faz é referente ao nome de nosso domínio NIS. Utilizaremos “Utah.NIS” (Lembre-se: para o servidor e para os clientes). É importante saber que o nome do 319 PROGRAMA TÉCNICO CIDADÃO domínio NIS faz distinção entre maiúsculas e minúsculas, e este é um erro comum para administradores iniciantes. Em seguida o script do debconf nos mostra um aviso de que a configuração não está completa (Ainda bem, pois não fizemos nada ainda...). Ao término do script, o sistema iniciará os serviços portmap (requisito tanto para o cliente quanto para o servidor NIS) e ypbind, que é o daemon cliente do NIS. Mas a inicialização do ypbind não terá sucesso, pois como o próprio debconf nos avisou, a configuração não está completa. Configuração do servidor NIS Na verdade, tudo que o debconf fez foi colocar o nome de domínio NIS desejado no arquivo / etc/defaultdomain, que é lido pelos scripts de inicialização do Debian para definir que será nosso domínio NIS. Para verificar qual é o domínio NIS configurado atualmente, digite: # nisdomainname Utah.NIS Este deve ser o mesmo do arquivo /etc/defaultdomain. Caso não seja, edite o arquivo / etc/defaultdomain, modifique o domínio NIS (É a única coisa contida neste arquivo). e digite: # nisdomainname `cat /etc/defaultdomain` # nisdomainname Utah.NIS # cat /etc/defaultdomain Utah.NIS Perfeito, se chegamos a esse ponto, as coisa estão caminhando bem. 320 PROGRAMA TÉCNICO CIDADÃO Por padrão, o para que o NIS em nosso sistema se comporte como um servidor, “no Debian”, é preciso editar o arquivo /etc/default/nis e modificar a variável NISSERVER para “master”. Isso diz ao NIS que somos um servidor e não um cliente NIS. Na verdade, a parte de configuração de cliente NIS também deve ser feita no servidor, conforme veremos posteriormente. Isso significa que o servidor NIS também é um cliente. Devemos agora iniciar os serviços NIS com o comando: # /etc/init.d/nis start Starting NIS services: ypserv yppasswdd ypxfrd ypbind [binding to YP server .......... backgrounded] Agora o sistema inicia dois serviços: ypserv, que é o daemon responsável pelo servidor NIS, e o ypbind, que, como já foi dito, é o daemon responsável pelo cliente NIS. Os daemons yppasswdd e ypxfrd são responsáveis, respectivamente, pelo gerenciamento remoto de senhas e replicação da base de dados. Repare que a inicialização do ypbind é enviada para segundo plano, pois ainda não funciona corretamente. Nosso servidor NIS já está no ar, só falta “popularmos” sua base de dados com informações, neste caso, usuários, senhas e grupos. Para “CRIAR” a base de dados, já migrando informações sobre usuários existentes naquele momento, utilize: # /usr/lib/yp/ypinit -m Isto inicializará nosso servidor NIS como principal (Configuração de servidores NIS escravos está fora do escopo desse treinamento). A primeira pergunta que surge diz respeito aos servidores NIS que devem ser conhecidos pelo nosso. Para uma configuração com somente um servidor (nosso caso), basta pressionar [CONTROL]+[D] e confirmar com “y” que o script irá prosseguir. 321 PROGRAMA TÉCNICO CIDADÃO Após a confirmação, a saída na tela deve ser algo parecido com isso: We need some minutes to build the databases... Building /var/yp/Utah.NIS/ypservers... Running /var/yp/Makefile... make[1]: Entering directory `/var/yp/Utah.NIS' Updating passwd.byname... Updating passwd.byuid... Updating group.byname... Updating group.bygid... Updating hosts.byname... Updating hosts.byaddr... Updating rpc.byname... Updating rpc.bynumber... Updating services.byname... Updating services.byservicename... Updating netid.byname... Updating protocols.bynumber... Updating protocols.byname... Updating netgroup... Updating netgroup.byhost... Updating netgroup.byuser... Updating networks.byaddr... Updating networks.byname... Updating shadow.byname... make[1]: Leaving directory `/var/yp/Utah.NIS' Esses nomes que aparecem nas linhas “Updating...”, como passwd.byname, group.byname, hosts.byname, etc... são os mapas do NIS disponíveis nesse servidor. Cada um desses mapas é construído com base nas informações obtidas nos arquivos de texto plano. Por exemplo, o mapa passwd.byname é construído com base no arquivo /etc/passwd, e o mapa hosts.byname é construído com base no arquivo /etc/hosts. Os mapas ficam armazenados no diretório /var/yp/<domínio NIS>, que em nosso exemplo é /var/yp/Utah.NIS. 322 PROGRAMA TÉCNICO CIDADÃO São as informações contidas nos mapas que ficam disponíveis para os clientes NIS. Portanto, qualquer modificação nos arquivos planos, como a adição de um novo usuário, por exemplo, demanda uma atualização nos respectivos mapas do servidor NIS. Para atualizar os mapas do NIS após uma alteração nos arquivos planos, basta utilizar: # cd /var/yp # make Por exemplo, se modificarmos a senha do usuário aluno: # passwd aluno Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully # cd /var/yp # make make[1]: Entering directory `/var/yp/Utah.NIS' Updating passwd.byname... Updating passwd.byuid... Updating netid.byname... Updating shadow.byname... make[1]: Leaving directory `/var/yp/Utah.NIS' Repare nos mapas que foram modificados. Configuração do cliente NIS Para configurar o cliente NIS, devemos compreender como o Linux busca por informações sobre algumas “entidades” do sistema. O daemon responsável pelas pesquisas do cliente NIS, como já foi dito, é o ypbind. Seu arquivo de configuração é o /etc/yp.conf. Por padrão, o ypbind tenta encontrar o servidor NIS na rede através de broadcasting, mas para facilitar a configuração e diminuir o tráfego excessivo gerado na redepor essas pesquisas, 323 PROGRAMA TÉCNICO CIDADÃO adicionamos a seguinte linha ao arquivo /etc/yp.conf para especificar o endereço IP (ou o hostname, caso seja visível através de hosts ou DNS) do servidor NIS: ypserver 192.168.1.12 Modifique o IP conforme sua configuração, desde que aponte para o IP do servido NIS na rede. Efetuada a alteração, basta reiniciar os serviços NIS e dar continuidade com a configuração. # /etc/init.d/nis restart Starting NIS services: ypserv ypbind Agora repare que o serviço ypbind não apresentou problemas. Caso isso não tenha ocorrido, reveja os passos de configuração. Entidades do Sistema Entidades são velhas conhecidas de alguns programadores da linguagem C, e é justamente assim que ela é vista no Linux. A melhor maneira de explicar o que vem a ser uma entidade para o Linux é através de exemplos. Por exemplo, a entidade passwd, por padrão, é obtida a partir de arquivos planos, mas para que um cliente NIS possa obter informações sobre essa entidade a partir de um servidor NIS, devemos modificar isso no arquivo /etc/nsswitch.conf, visto em breve. Para visualisar uma entidade no Linux (Não, você não verá fantasmas ou outras coisas do além...), basta utilizar o comando getent, seguido do nome da respectiva entidade. Tente alguns dos exemplos abaixo para compreender melhor: # getent hosts # getent passwd # getent shadow Alternativamente, podemos especificar uma chave para a procura, pois o getent funciona como um banco de dados. Por exemplo, o comando getent passwd nos mostra todas as entradas da 324 PROGRAMA TÉCNICO CIDADÃO entidade passwd. Se adicionarmos o nome de um usuário válido no sistema, somente será mostrada a entrada relativa à ele, conforme exemplo abaixo: # getent passwd aluno aluno:x:1002:100::/home/aluno:/bin/bash Neste outro exemplo, pesquisamos a entrada da entidade hosts que se refere ao IP 192.168.1.12: # getent hosts 192.168.1.12 192.168.1.12 apostilas.utah.net.br apostilas É exatamente dessa forma que os programas buscam por informações através das entidades. O arquivo /etc/nsswitch.conf Este é o arquivo de configuração do serviço de espaço de nomes no Linux (Não confunda com o /etc/resolv.conf do DNS). É nele que especificamos onde o sistema irá procurar por informações sobre entidades. O conceito é muito simples, pois baseia-se em entradas do tipo: entidade: método1 método2 método3 ... Por exemplo, as linhas para as entidades passwd, shadow e group nos clientes NIS devem ser: passwd: group: shadow: files nis files nis files nis Isso configura o mecanismo de busca das entidades passwd, shadow e group para tentar localizar o item pesquisado primeiro nos arquivos planos locais (files), e caso não encontre, será efetuada a pesquisa na base de dados NIS (nis). Uma alteração nesse arquivo não requer que seja reinicializado nenhum serviço, pois são as bibliotecas C do sistema (libc, presente na maioria dos binários) que lêem este arquivo. 325 PROGRAMA TÉCNICO CIDADÃO ATENÇÃO NUNCA deixe de especificar o método “files” para as entidades passwd, shadow e group, pois isso pode impedir que usuários do sistema sejam validados, e isso inclui o root, que por padrão não é adicionado nos mapas NIS. Testando suas configurações Para verificar se as configurações estão funcionando corretamente, basta consultar as entidades passwd, group e shadow no cliente NIS. Estas devem apresentar os usuários que somente estão cadastrados no servidor NIS e não existem no sistema local. Caso esse teste ocorra sem problemas, podemos tentar efetuar login no cliente NIS como um dos usuários cadastrados no servidor. Após um login efetuado com sucesso, o usuário será notificado que não existe um diretório $HOME para ele naquela máquina, e que estará utilizando a raiz “/” como seu $HOME temporariamente. Este aviso é normal, pois o diretório $HOME do usuário recém-autenticado na verdade só existe no servidor onde ele foi cadastrado. Para solucionar esse problema e incrementar nossa solução de autenticação centralizada partiremos para os serviços NFS, vistos no próximo capítulo. Modificando as senhas dos usuários Um usuário autenticado em um cliente NIS pode modificar sua senha através do comando yppasswd. O comando yppasswd se comunica diretamente com o daemon yppasswdd que roda no servidor NIS para permitir a troca da senha diretamente na base de dados NIS. Vejamos um exemplo: $ yppasswd Changing NIS account information for aluno on apostilas. 326 PROGRAMA TÉCNICO CIDADÃO Please enter old password: Changing NIS password for aluno on apostilas. Please enter new password: Please retype new password: The NIS password has been changed on apostilas. $ ATENÇÃO Lembre-se de que um usuário normal não pode definir senhas muito simples (com menos de 6 caracteres, por exemplo). 327 PROGRAMA TÉCNICO CIDADÃO SERVIDORES DE ARQUIVOS Estudaremos agora os serviços de rede capazes de disponibilizar arquivos para seus clientes de rede. Estes serviços são os chamados servidores de arquivos. Os principais servidores de arquivos disponíveis no Linux atualmente são: NFS e SAMBA. O NFS é o serviço de compartilhamento de arquivos padrão no UNIX e Linux, e será o primeiro que estudaremos. Já o SAMBA é um serviço de compartilhamento de arquivos que roda sob Linux ou UNIX para permitir interoperatibilidade dos serviços de compartilhamento de arquivos entre máquinas Linux e Windows. Network File System – NFS O NFS (Network File System) é um sistema de compartilhamento de arquivos muito difundido no mundo UNIX, e que naturalmente segue a mesma tendência no Linux. Sua instalação e configuração é muito simples, conforme veremos adiante, e também completa a solução de autenticação centralizada com NIS. Instalando o NFS no Debian Instalar um servidor NFS consiste em instalar os pacotes necessários e configurar um arquivo, que veremos adiante. No debian, existem 3 pacotes relacionados aos serviços NFS. nfs-common: Traz binários e documentação necessários tanto para o cliente quanto para o servidor NFS. É dependência para os outros 2 pacotes apresentados a seguir. nfs-kernel-server: Implementação do servidor NFS diretamente no kernel do Linux. É muito mais rápido que o nfs-user-server, porém possui menos características de configuração. 328 PROGRAMA TÉCNICO CIDADÃO nfs-user-server: Esta é a versão do servidor NFS que roda em espaço de usuário (não está diretamente no código do Kernel) no Linux. É mais lento e menos maduro que o nfskernel-server. Para servidores de produção, optaremos pelo nfs-kernel-server por suas características óbvias. Portanto, para instalar um servidor NFS, basta utilizar: # apt-get install nfs-kernel-server Isso instalará também o pacote nfs-common, por ser uma dependência. O script de pós-instalação do pacote emitirá uma notificação dizendo que o statd é o nome do serviço que deve ser utilizado para controle de acesso através de tcp_wrappers (Visto em outro Capítulo). Serão inicializados os serviços portmap (caso já não esteja) e nfs-kernel-server. O portmap é necessário para mapear as conexões remotas. Configurando o servidor NFS Esta etapa é idêntica em qualquer sistema. O arquivo /etc/exports é o arquivo principal de configuração do servidor NFS. É nele que definimos quais diretórios serão compartilhados, assim como quais hosts terão que tipos de acesso à esses compartilhamentos. Segue um exemplo de uma entrada do arquivo /etc/exports: /home 192.168.1.0/255.255.255.0(rw,sync) 192.168.30.137(ro) Essa especifica linha que qualquer host na rede 192.168.1.0/24 tem acesso ao compartilhamento /home com permissões de leitura e escrita (rw, read/write) e que as operações de escrita serão tratadas de forma síncrona. Também foi configurado que o host 192.168.30.137 possui acesso somente-leitura (ro, read-only) ao compartilhamento. 329 PROGRAMA TÉCNICO CIDADÃO IMPORTANTE Nunca deixe um espaço em branco entre o host e as opções entre parênteses neste arquivo. Isso configuraria o host como acesso somente leitura e qualquer outro host com acesso TOTAL ao compartilhamento. Segue mais algumas opções que podem ser utilizadas nos compartilhamentos: async: Todas as operações de escrita serão primeiro armazenadas na memória do servidor para somente serem gravadas no disco em períodos de ociosidade. Torna o servidor muito mais rápido e menos seguro em relação a opção sync. root_squash: Mapeia todas as requisições dos clientes originadas do UID 0 (root) para um usuário anônimo. Isso impede que o root dos clientes tenha os mesmos poderes que o root do servidor sobre os arquivos. Esse é o comportamento padrão do servidor NFS. Para desabilitar isso, utilize a opção no_root_squash. nohide: Esta opção existe para impedir que um compartilhamento montado sobre a mesma estrutura de outro compartilhamento fique invisível para o cliente NFS. O arquivo /etc/exports será lido quando o serviço NFS iniciar (/etc/init.d/nfs-kernel-server em nosso exemplo). Sempre que fizer alguma alteração no arquivo e o servidor já estiver rodando, utilize o comando abaixo para atualizar a lista de compartilhamentos disponíveis no servidor: # exportfs -ar Para verificar quais os compartilhamentos disponíveis em um servidor NFS, execute: # showmount -e 192.168.1.12 Export list for 192.168.1.12: /home 192.168.1.0/255.255.255.0,192.168.30.137 330 PROGRAMA TÉCNICO CIDADÃO Aponte a pesquisa para o endereço IP de outro servidor NFS para verificar a lista de compartilhamentos NFS disponíveis nele. DICA utilize o comando rpcinfo -p <ip do servidor> para saber quais serviços remotos estão disponíveis no servidor. Todos os serviços que dependem do portmap para funcionar podem ser listados dessa forma. Montando compartilhamentos remotos Após ter o servidor configurado, podemos montar os compartilhamentos NFS nos clientes da rede. Para isso, utilizamos o comando mount (estudado anteriormente). Por exemplo, para montar o compartilhamento /home do servidor na estação cliente utilizamos: # mount 192.168.1.12:/home /home # mount /dev/hda1 on / type ext3 (rw,errors=remount-ro) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hda2 on /tmp type ext3 (rw) 192.168.1.12:/home on /home type nfs (rw,addr=192.168.1.12) # df -h Filesystem Size Used Avail Use% Mounted on /dev/hda1 372M 155M 198M 44% / /dev/hda2 372M 8.1M 344M 3% /tmp 192.168.1.12:/home 372M 155M 198M 44% /home O formato do caminho da origem (<ip>:<compartilhamento>) é peculiar do NFS, e portanto não é necessário especificar o tipo do sistema de arquivos aqui. Caso queira tornar este ponto de montagem fixo no cliente da rede, adicione a seguinte linha ao fstab: 192.168.1.12:/home /home nfs defaults,rw 0 0 331 PROGRAMA TÉCNICO CIDADÃO Não se esqueça de substituir o IP do servidor pelo valor adequado em sua implantação. SAMBA Este é sem dúvida um dos serviços de rede mais importantes do Linux, pois oferece interoperatibilidade no compartilhamento de arquivos entre Linux e Windows®. O samba permite implementarmos o protocolo SMB no Linux. Este protocolo é a base para o compartilhamento de arquivos em redes Microsoft®. Curiosidade Muitos devem se perguntar qual é a origem do nome SAMBA. A história se resume no seguinte: Um programador certo dia precisou que o compartilhamento de arquivos entre Windows e Linux funcionasse de forma transparente para ois dois sistemas. Com base no protocolo SMB, foi criado um programa que mais tarde receberia o nome de SAMBA, pois é a palavra do dicionário que mais se assemelha com a sigla do protocolo, SMB. Instalação do Samba no Debian No Debian woody (3.0), a versão disponível do software segue os padrões da série 2.2.x. Atualmente já existem distribuições Linux que disponibilizam versões da série 3 do samba. Na série 3 do samba, várias melhorias foram adicionadas,mas pouca coisa foi removida, portanto, praticamente tudo que for absorvido aqui pode ser utilizado para implementar um servidor samba da série 3. Em Debian, o pacote fonte de nome samba fornece diversos pacotes binários diferentes. Tais pacotes são : samba - A LanManager like file and printer server for Unix. samba-common - Samba common files used by both the server and the client. smbclient - A LanManager like simple client for Unix. 332 PROGRAMA TÉCNICO CIDADÃO swat - Samba Web Administration Tool samba-doc - Samba documentation. smbfs - Mount and umount commands for the smbfs (kernels 2.0.x and above). libpam-smbpass - pluggable authentication module for SMB password database libsmbclient - Shared library that allows applications to talk to SMB servers libsmbclient-dev - libsmbclient shared libraries winbind: Service to resolve user and group information from Windows NT servers Dependendo do uso a ser dado ao servidor Samba, combinações diferentes dos pacotes listados acima serão necessários. No caso da instalação de um servidor de arquivos Samba comum, utilizaríamos somente o pacote samba, que o apt cuida de instalar as dependências necessárias: # aptitude install samba Após o download, descompactação e instalação dos pacotes que compõem o Samba e suas dependências, o processo debconf de configuração Samba será iniciado e uma pergunta lhe questionará se você deseja configurar o Samba utilizando o processo de configuração debconf. Responda Sim e tecle [Enter] para continuar. A próxima pergunta questiona qual o nome do domínio padrão a ser usado pelo servidor Samba sendo instalado. Informe o nome do domínio (Ou grupo de trabalho) na caixa de texto e tecle [Enter] para continuar. Esta pergunta define o parâmetro workgroup no arquivo de configuração principal do Samba, o arquivo /etc/samba/smb.conf. A próxima pergunta questiona se a criptografia de senhas deve ser utilizada e atenta para o fato de que, caso senhas em texto puro sejam utilizadas, será necessário a mudança de parâmetros no registro das estações Windows®. Responda Sim (ou seja, a criptografia de senhas deverá ser utilizada) para a pergunta e tecle [Enter] para continuar. Esta pergunta define o parâmetro encript passwords no arquivo de configuração principal do Samba. Uma nota do debconf será exibida, informando que, nesta versão dos pacotes Debian do Samba, os arquivos de log dos daemons smbd e nmbd estão localizados sob o diretório / 333 PROGRAMA TÉCNICO CIDADÃO var/log/samba e que, caso versões anteriores do Samba tenham instalado arquivos de log sob o diretório padrão anterior, o diretório /var/log, esses arquivos serão automaticamente movidos para /var/log/samba. Basta teclar [Enter] para continuar. Uma nova pergunta debconf será feita, questionando se o arquivo de senhas criptografadas, o arquivo /etc/samba/smbpasswd, deve ser criado. Selecione a opção Sim e tecle [Enter] para continuar. A instalação dos pacotes será finalizada e os daemons do Samba, smbd e nmbd, serão iniciados. Caminhos de instalação O layout dos diretório que compõem os pacotes do Samba, da forma como é empacotado pelo projeto Debian, é o seguinte : ● Diretório de configuração principal do Samba : /etc/samba ● Diretório de logs do Samba (smbd e nmbd) : /var/log/samba ● Binários do Samba : /usr/sbin/smbd e /usr/sbin/nmbd ● Binários do smbstatus : /usr/bin/smbstatus ● Binários do testparm : /usr/bin/testparm Adicionalmente, um trabalho do cron, localizado em /etc/cron.daily/samba, é executado diariamente, fazendo uma cópia do arquivos de senhas criptografadas dos usuários do Samba, o arquivo /etc/samba/smbpasswd, para o diretório /var/backups. 334 PROGRAMA TÉCNICO CIDADÃO Configuração do Samba Existem literalmente dezenas de cenários diferentes de uso do Samba e, devido a isso, vamos nos ater ao cenário de utilização do mesmo como um servidor de arquivos de uma rede contendo estações Windows, incluíndo estações Windows 2000 e Windows XP, funcionando como um PDC (Controlador de Domínio Primário). Todos os parâmetros de configuração citados poderão ser encontrados (ou acrescentados, caso não existam) no arquivo de configuração principal do Samba, o arquivo /etc/samba/smb.conf. O Samba como PDC da rede Aqui veremos como configurar o Samba como um Primary Domain Controller para os clientes Windows® da rede. Um PDC é responsável pela autenticação centralizada dos usuários da rede. Veremos as partes envolvidas no processo adiante. Domínio padrão O domínio padrão a ser usado pela rede Windows é definido pelo parâmetro workgroup. Porém, em nossa instalação básico, o nome do domínio já foi definido devido a pergunta debconf relacionada a essa configuração já ter sido respondida. Nome NetBIOS do servidor Samba O nome NetBIOS (e não DNS) do servidor Samba pode ser definido pelo parâmetro netbios name. Este será o nome através do qual o servidor de arquivos Samba será conhecido na rede o nome através do qual poderemos identificá-lo navegando pelo domínio usando, por exemplo, a janela de Ambiente de Rede das estações Windows. 335 PROGRAMA TÉCNICO CIDADÃO Por padrão, esse parâmetro não existe no arquivo de configuração padrão dos pacotes Debian do Samba. Simplesmente inclua este parâmetro na seção global (ou seja, antes das definições de compartilhamentos) do arquivo de configuração principal do Samba. IMPORTANTE Não use o nome DNS do servidor, definido em sistemas Debian no arquivo / etc/hostname, como valor para esse parâmetro. Nível de segurança Este é, sem dúvida alguma, o parâmetro de configuração mais importante de toda a configuração de um servidor Samba. O parâmetro security define o nível de segurança sob o qual um servidor Samba irá operar. Existem vários níveis de segurança possíveis. O que segue abaixo é uma tradução (com pequenas modificações) da seção da página de manual do arquivo smb.conf, explicando os níveis de segurança existentes no Samba : ● security = user Essa é a configuração de segurança padrão no Samba versão 2.2. Com a segurança em nível de usuário (security = user), um cliente Samba deve primeiro se autenticar com um nome de usuário e uma senha válidos (os quais podem ser mapeados utilizando-se o parâmetro username map). Senhas encriptadas também podem ser utilizadas nesse modo de segurança. Parâmetros como o user e o guest only, caso definidos, são aplicados e modificar o usuário UNIX a ser usado na conexão, mas somente após o usuário ter sido autenticado com sucesso. Note que o nome do recurso (diretório ou impressora compartilhada) sendo compartilhado não é enviado para o servidor até que o servidor tenha autenticado o 336 PROGRAMA TÉCNICO CIDADÃO cliente com sucesso. Esta é a razão de compartilhamentos convidados (guest) não funcionarem nesse nível de segurança sem que seja permitido ao servidor mapear automaticamente usuários para a conta de convidado. Consulte o parâmetro map to guest para detalhes de como fazer isso. Veja também a seção Nota sobre validação de usuários/senhas. ● security = server Neste modo o Samba irá tentar validar o usuário/senha passando os mesmos para um outro servidor SMB, como um máquina Windows NT, por exemplo. Caso isso falhe, o Samba reverterá seu modo de funcionamento para o nível de segurança security = user. Mas note que caso senhas encriptadas tenham sido negociadas o Samba não poderá reverter novamente para checar o arquivo de senhas UNIX, ele precisará ter acesso um arquivo smbpasswd válido no qual poderá checar usuários. Consulte a documentação de nome ENCRYPTION.txt no diretório docs/ para maiores detalhes sobre como configurar isso. Note que do ponto de vista do cliente o nível de segurança security = server é o mesmo do nível de segurança security = user. Ele somente afeta como o servidor lida com a autenticação e de modo algum afeta o que o cliente vê. Note também que o nome do recurso sendo requisitado não é enviado para o servidor até que o servidor tenha autenticado o cliente com sucesso. Esta é a razão de compartilhamentos convidados (guest) não funcionarem nesse nível de segurança sem que seja permitido ao servidor mapear automaticamente usuários para a conta de convidado. Consulte o parâmetro map to guest para detalhes de como fazer isso. Veja também a seção Nota sobre validação de usuários/senhas. ● security = domain 337 PROGRAMA TÉCNICO CIDADÃO Este modo funcionará corretamente somente caso o utilitário smbpasswd tenha sido utilizado para adicionar o servidor Samba em um domínio Windows NT. Esse modo espera que o parâmetro encrypt passwords esteja definido como true. Neste modo, o Samba tentará validar usuários/senhas passando os mesmos para um Controlador de Domínio Primário (PDC) Windows NT ou para um Controlador de Domínio Secundário (BDC), exatamente da mesma forma que um servidor Windows NT faria. Note que um usuário UNIX válido deve existir, bem como a conta no Controlador de Domínio, para permitir que o Samba possua uma conta UNIX válida para qual mapear acessos de arquivos. Note que do ponto de vista do cliente o nível de segurança security = domain é o mesmo que o nível de segurança security = user. Ele somente afeta como o servidor lida com a autenticação e de modo algum afeta o que o cliente vê. Note também que o nome do recurso sendo requisitado não é enviado para o servidor até que o servidor tenha autenticado o cliente com sucesso. Esta é a razão de compartilhamentos convidados (guest) não funcionarem nesse nível de segurança sem que seja permitido ao servidor mapear automaticamente usuários para a conta de convidado. Consulte o parâmetro map to guest para detalhes de como fazer isso. BUG Existe atualmente um bug na implementação (a nível de código fonte) no que diz respeito a nomes de usuários que utilizam conjuntos de caracteres de multi-bytes. A comunicação com um Controlador de Domínio deve ser feita em UNICODE (UTF-8) mas o Samba no momento não expande nomes de usuários multi-byte para UNICODE corretamente e, por isso, um nome de usuário multibyte não será reconhecido corretamente no Controlador de Domínio. Este problema será resolvido em uma versão futura do Samba (Note do tradutor : aparentemente, este problema foi solucionado na série 3.x do Samba). 338 PROGRAMA TÉCNICO CIDADÃO Para melhor compreensão das explicações anteriores, a tradução da seção Nota sobre validação de usuários/senhas seria : Nota sobe validação de usuários/senhas Existem diversas maneiras através das quais um usuário pode se conectar a um serviço. O servidor utiliza os seguintes passos para determina se a conexão a um serviço especificado será permitida. Caso todos os passos falhem, a requisição de conexão é negada. Porém, caso um dos passos tenha sucesso, os passos seguintes não são checados. Caso o serviço esteja marcado como guest only = yes e o servidor esteja sendo executado com segurança a nível de compartilhamento (security = share) os passos de 1 até 5 são pulados. ● 1 Caso o cliente tenha fornecido um par usuário/senha e esse par usuário/senha seja validado pelos programas de senhas de sistema do UNIX a conexão é feita usando esse nome de usuário fornecido. Note que isto inclui o método de passar um nome de usuário \\servidor\serviço%nomeusuário. ● 2 Caso o cliente tenha previamente registrado um nome de usuário com o sistema e agora forneça uma senha correta para esse nome de usuário a conexão é permitida. ● 3 O nome NetBIOS do cliente e quaisquer nomes de usuários usados previamente são checados contra a senha fornecida e, caso casem, a conexão como o usuário correspondente é permitida. ● 4 Caso o cliente tenha previamente validado um par usuário/senha com o servidor e o cliente tenha passado o token de validação então esse nome de usuário é utilizado. ● 5 Caso o campo user = seja usado no arquivo smb.conf para o serviço sendo acessado e o cliente tenha fornecido uma senha que case (de acordo com a checagem de senhas de sistema UNIX) com um dos nomes de usuários do campo user = a conexão é feita como o usuário na linha user =. Caso um dos nomes de usuários na linha user = inicie com um 339 PROGRAMA TÉCNICO CIDADÃO caracter @ (arroba) então esse nome é expandido para uma lista de nomes de usuários no grupo de mesmo nome. ● 6 Caso o serviço sendo requisitado seja um serviço convidado então a conexão é feita como o usuário informado no parâmetro guest account = para este serviço, independente da senha informada. Como podemos ver, o Samba é extremamente flexível e pode ser introduzido em diversos cenários de rede diferenciados. Como padrão, esta documentação básica tratará do cenário onde o servidor Samba será implantado como servidor de arquivos para uma rede Microsoft, atuando como Controlador de Domínio Primário (PDC). Nesse caso, utilizaremos como valor para o parâmetro security o valor user. Encriptação de senhas É possível optar pela utilização de senhas encriptadas ao invés de senhas em texto puro. Porém, cada versão do Microsft Windows possui um problema e/ou detalhe que deve ser observado caso senhas encriptadas sejam utilizadas. Sistemas operacionais anteriores ao Microsoft Windows 95 OSR2 funcionam por padrão com senhas em texto-puro e versões posteriores utilizam senhas encriptadas por padrão. Caso somente estações de trabalho com versões mais atuais que o Microsoft Windows 95 OSR2 sejam usadas no ambiente de rede que o Samba irá servir, habilite a encriptação de senhas definindo o valor do parâmetro encrypt passwords para o valor yes. Habilitar logons em domínio Como a idéia desta documentação básica é configurar um servidor Samba para agir como Controlador de Domínio Primário (PDC) para um rede que contenha estações Windows, é preciso dizer ao Samba para habilitar o suporte a logons em domínio. 340 PROGRAMA TÉCNICO CIDADÃO Para fazê-lo, o parâmetro domain logons pode ser usado. Defina o valor do parâmetro domain logons para yes para habilitar o suporte a logon em domínio. Definindo um Master Browser Redes SMB fornecem um mecanismo através do qual clientes podem acessar uma lista de máquinas na rede. Essa lista é conhecida como browse list. Tal lista contém máquinas que estão prontas para oferecer serviços de arquivo e/ou impressão para outras máquinas na rede. Essa lista não inclui máquinas que não são capazes de executar tarefas de servidores. Esta lista é altamente utilizada por todos os clientes de redes SMB. Caso o servidor Samba esteja sendo instalado em um ambiente de rede onde nenhum outro servidor Windows NT e/ou Windows 2000 execute a função de master browser, armazenando a lista que contém informações sobre quais máquinas da rede estão prontas para oferecerem serviços de arquivo e/ou impressão, é desejável que o Samba possa se comportar como um master browser. É possível que existam diversos master browsers na rede e, inclusive, é necessário que exista pelo menos um master browser para cada subrede, de forma que as informações de servidores prontos para fornecer serviços de arquivo e/ou impressão possam ser disponibilizadas para clientes de diferentes subredes, através da utilização do protocolo WINS, que servirá como uma espécie de DNS para nomes NetBIOS, permitindo que resoluções de nomes NetBIOS para endereços IPs sejam feitas através de consultas diretas ao servidor WINS. O próprio Samba pode ser configurado para se comportar como um servidor WINS. Para fazer com que o Samba se comporte como o master browser da subnet local na qual ele está inserido, defina o valor do parâmetro local master para o valor yes. 341 PROGRAMA TÉCNICO CIDADÃO Precedência na eleição de Master Browsers Como podemos ter diversos master browsers em cada subrede, é importante que possamos definir que nosso servidor Samba tenha precedência na eleição de master browsers na rede. O parâmetro os level permite que um valor de precedência seja especificado para definir a precedência que será dada ao nosso servidor Samba na eleição de master browsers. O valor padrão desse parâmetro, conforme a configuração fornecida pelos pacotes Debian do Samba, é de 20 (vinte). Este valor é suficente caso não exista mais nenhum servidor Samba, Windows NT ou Windows 2000 na rede. Caso existam outros servidores, é interessante utilizar um valor maior para o parâmetro os level. Em documentações do Samba sobre o assunto, o valor 65 (sessenta e cinco) é sugerido como um valor que poderia garantir a eleição do Samba como master browser da subrede local caso o mesmo esteja operando em uma rede complexa com outros servidores SMB. Configuração do Samba como "domain master" Caso o ambiente de rede possua subredes que devem ser atendidas pelos serviços de arquivo e/ou impressão do Samba, o parâmetro domain master pode ser utilizado. Quando definido com o valor de yes, o parâmetro domain master permite que o Samba combine browse lists através de subnets diferentes. Porém, caso exista um servidor Windows NT que já execute este tipo de serviço na rede, não use esse recurso do Samba e simplesmente defina o valor do mesmo como no. O valor padrão desse parâmetro, da forma como é fornecido pelos pacotes Debian do Samba, é o valor auto. Forçando uma eleição de "Master Browser" local Caso a idéia seja realmente garantir que o servidor Samba seja o master browser local em de uma subrede, o parâmetro preferred master pode ser usado para esse fim. 342 PROGRAMA TÉCNICO CIDADÃO O parâmetro preferred master, quando definido como tendo o valor yes, faz com que o daemon nmbd do Samba force uma eleição de browser na inicialização. Em conjunto com o parâmetro os level explicado anteriormente definido para um valor alto como 65 (sessenta e cinco), a probabilidade de eleição do Samba como master browser local será alta o bastante para que o mesmo ganhe qualquer eleição. Configuração para um servidor de horas Outro recurso interessante do Samba é a possibilidade do mesmo funcionar como um servidor de horas para as estações da rede, acertando automaticamente o horário das mesmas, no momento em que os usuários efetuam o logon no domínio. Para habilitar esse suporte, na seção de configuração global do Samba configure o parâmetro time server. Na configuração padrão fornecida pelos pacotes Samba do Debian esse parâmetro não é citado, portanto, insira uma linha como a linha a seguir no arquivo de configuração principal do Samba : time server = yes Esse parâmetro, em conjunto com um script de logon que utilize o comando net time, possibilita que o horário das estações da rede sejam acertadas com base no horário do servidor Samba assim que os usuários das estações efetuem logon no domínio. Veremos com mais detalhes os procedimentos para habilitar e configurar scripts de logon em breve. DICA Caso o recurso de servidor de horas do Samba seja utilizado, é importante que o horário do servidor seja mantido sempre correto. Para auxiliar nesta tarefa, o pacote Debian de nome ntpdate poderá ser instalado no servidor Samba. Esse pacote configura o servidor Samba como um cliente NTP, possibilitando o acerto das horas do mesmo com base em um dos diversos servidores de horas públicos. O servidor de nome 343 PROGRAMA TÉCNICO CIDADÃO ntp.usp.br pode ser informado durante a etapa de configuração do pacote ntpdate, que questionará qual servidor NTP deverá ser usado. IMPORTANTE Algo importante a ser observado é que, para que o servidor Samba possa atualizar seu horário corretamente com base em um servidor NTP público externo, o acesso do servidor Samba ao servidor NTP externo, porta NTP padrão (porta 123 TCP e UDP) deverá ser liberado no firewall. Corrigindo problemas com caracteres estranhos Às vezes é comum nos depararmos com problemas de exibição caracteres em compartilhamentos Samba, principalmente com arquivos e/ou diretórios que contém caracteres acentuados. Para corrigir isso, o parâmetro client code page pode ser usado. Esse parâmetro aceita como valor um código de página DOS válido. Geralmente, o código de página 850 é utilizado, uma vez que esse código de página é o padrão usado em nosso idioma e permite que os arquivos sejam gravados e exibidos corretamente nas estações clientes. Caso ainda tenha problemas definindo o parâmetro client code page, utilize também o parâmetro character set, para definir o conjunto de caracteres exibidos pelo servidor Samba. Como utilizamos um idioma latino, devemos definir como valor do parâmetro character set o valor iso8859-1. Por último, para garantir que arquivos possam se criados e visualizados com caracteres especiais, utilize o parâmetro valid chars, informando como valor para esse parâmetro uma lista de caracteres especiais válidos, como no exemplo a seguir : valid chars = á:Á é:É í:Í ó:Ó ú:Ú â:Â ê:Ê ô:Ô ã:Ã õ:Õ à:À ò:Ò 344 PROGRAMA TÉCNICO CIDADÃO IMPORTANTE É importante notar que o parâmetro valid chars deverá ser informado logo após o parâmetro client code page para que funciona da maneira desejada. Usuários inválidos para login O parâmetro invalid users permite que especifiquemos um usuário, uma lista de usuários (separados por espaços) ou grupos (usando a sintaxe @nome_do_grupo) de usuários que serão considerados usuários inválidos para o Samba, ou seja, esses usuários não poderão fazer login no domínio nem utilizar nenhum recurso do mesmo, como diretórios e impressoras compartilhadas. Por padrão, nas instalações feitas com base nos pacotes Debian do Samba, esse parâmetro é fornecido habilitado e seu valor é definido como root, o que significa que o usuário root não será capaz de utilizar nenhum recurso do domínio. Essa é uma boa prática de segurança. Afinal, porque seria necessário liberar acesso a algum recurso do domínio para o usuário root e, na verdade, porque seria necessário até mesmo inserir o usuário root como um usuário Samba ? Não há necessidade. Definindo usuários administradores Existem alguns casos em que um usuário com poderes de administrador é necessário, como no caso da necessidade de um usuário que tenha poderes de inserir contas de máquinas no domínio. Como utilizar diretamente o usuário root para essas situações não é uma boa idéia devido a problemas de segurança, vejamos uma alternativa. 345 PROGRAMA TÉCNICO CIDADÃO Costuma ser uma boa prática criar um usuário de nome admin no sistema (GNU/Linux) e no Samba. Após a criação desse usuário, o parâmetro admin users deverá ser definido, tendo como valor o nome do usuário recém-criado, o usuário admin, conforme a seguir : admin users = admin Com o parâmetro admin users definido dessa forma, o usuário admin poderá ser usado para inserir máquinas no domínio. Liberação/Restrição de acesso por hosts É possível utilizar o parâmetro hosts allow para especificar quais hosts terão acesso aos serviços de arquivo e/ou impressão fornecidos pelo servidor Samba. Quando usado globalmente, ou seja, fora de uma definição de compartilhamento, o parâmetro hosts allow aplica restrições a nível global, ou seja, a todos os recursos compartihados pelo servidor Samba. Porém, é possível utilizar o parâmetro hosts allow em compartilhamentos específicos, de forma a ter maior flexibilidade no controle de liberação de acesso a compartilhamentos individualmente. O parâmetro hosts allow aceita como valor uma lista de separada por vírgula, espaço ou delimitada por tabs de hosts que têm permissão de acessar um recurso compartilhado pelo servidor Samba (ou todos os recursos caso seja usado globalmente). Os hosts podem ser especificados por endereço IP ou por nome. É possível especificar uma rede inteira. Por exemplo, para especificar toda a rede 192.168.1.0 com máscara de rede 254.255.255.0 usaríamos : hosts allow = 192.168.1.0/255.255.255.0 Ou ainda : hosts allow = 192.168.1. 346 PROGRAMA TÉCNICO CIDADÃO Repare o ponto (.) final após o terceiro octeto da rede especificada acima. É possível também especificar a liberação para uma rede toda exceto para uma estação específica, usando a sintaxe: hosts allow = 192.168.1. EXCEPT 192.168.1.10 Semelhante ao parâmetro hosts allow, mas com resultados inversos, temos o parâmetro hosts deny, que permite a especificação de quais redes e/ou hosts não terão acesso aos recursos disponibilizados pelo servidor Samba ou, caso o parâmetro seja usado dentro da definição de um compartilhamento específico, não terão acesso a esse compartilhamento específico. IMPORTANTE A especificação de uma rede e/ou host no parâmetro hosts allow de forma global, ou seja, fora da definição de um compartilhamento específico, não significa que as configurações relacionadas a permissões de acesso individuais e específicas de cada compartilhamento não terão validade. Todas as restrições específicas de cada compartilhamento ainda serão checadas mesmo caso o parâmetro hosts allow global permita o acesso da rede e/ou host em questão. DICA Para testar o acesso de um host e/ou rede a um compartilhamento específico, utilize o utilitário testparm, conforme o exemplo a seguir : # testparm /etc/samba/smb.conf <host_ou_rede> Onde <host_ou_rede> seria substituído pelo endereço IP do host o da rede que se deseja checar. Arquivos de logs do Samba Por padrão, na configuração padrão fornecida pelos pacotes Debian do Samba, os arquivos de logs do Samba são armazenados sob o diretório /var/log/samba. O parâmetro que define esse diretório é o parâmetro log file e o mesmo é fornecido definido para o valor de / var/log/samba/log.%m. 347 PROGRAMA TÉCNICO CIDADÃO A variável %m é substituída pelo nome NetBIOS da estação que o log representa. Sendo assim, serão criados sob esse diretório vários arquivos, um para cada estação utilizada por usuários para autenticação no domínio Samba. Esse tipo de log facilita a resolução de problemas, uma vez que permite a verificação individual de logs de cada estação. Tamanho máximo dos arquivos de logs É possível controlar o tamanho máximo dos arquivos de logs gerados pelo Samba. Por padrão, em instalações feitas a partir dos pacotes Debian do Samba, os arquivos de logs terão um tamanho máximo de aproximadamente 1MB (aproximadamente porque o tamanho máximo é definido como 1000KB e não 1024KB). O parâmetro que controla essa opção é o parâmetro max log size. O Samba irá checar periodicamente o tamanho dos arquivos de logs e, caso os mesmos tenham excedido o limite definido pelo parâmetro max log size, irá renomeá-los com a extensão .old e criar novos arquivos para armazenar os novos logs. Definir um valor de 0 (zero) para esse parâmetro significa que os arquivos de log não terão limites e isso poderá causar problemas com arquivos de logs maiores do que 2GB. Mantenha o valor padrão dos pacotes Debian do Samba. Não enviar logs para o syslog Devido ao suporte a logging via syslog do Samba ainda ser experimental, é importante que possamos configurá-lo para que os logs sejam gerados diretamente nos arquivos de logs próprios do Samba, os arquivos /var/log/samba/log.smb e /var/log/samba/log.nmb, e não enviados para o syslog. 348 PROGRAMA TÉCNICO CIDADÃO O parâmetro que controla esse comportamento é o parâmetro do Samba de nome syslog. A configuração padrão dos pacotes Debian do Samba já faz isso por padrão, definindo o valor desse parâmetro para 0 (zero). Suporte a WINS Habilitando o servidor WINS no Samba O Samba suporta ser configurado para funcionar como um servidor WINS (Windows Internet Name Service), de forma que seja possível implementar um serviço de resolução de nomes NetBIOS para endereços IP, similarmente ao funcionamento de resolução de nomes DNS. O parâmetro que controla a habilitação desse suporte é o parâmetro wins support. Caso configurado com o valor yes, o parâmetro wins support instruirá o o daemon nmbd do Samba a habilitar seu suporta a WINS e se tornar um servidor WINS. Deve existir somente um servidor WINS na rede. Caso já exista um servidor Windows NT, por exemplo, atuando como o servidor WINS da rede não habilite a suporte a WINS do Samba. Indicando ao Samba qual o servidor WINS da rede Caso já exista um servidor WINS atuando na rede, por exemplo, um servidor Windows NT fazendo esse serviço, o Samba não deve ser configurado como um servidor WINS, ou seja, o parâmetro wins support deverá ser configurado com o valor no. Adicionalmente, caso o suporte a WINS seja necessário mas não seja o próprio servidor Samba quem fará o papel de servidor WINS da rede, o parâmetro wins server pode ser utilizado para informar ao servidor Samba qual o endereço IP do servidor WINS da rede. 349 PROGRAMA TÉCNICO CIDADÃO IMPORTANTE Caso o parâmetro wins support esteja habilitado e o parâmetro wins server também seja definido, o daemon mnbd do Samba não conseguirá iniciar. Sendo assim, decida se o Samba atuará como um servidor WINS, usando o parâmetro wins support, ou como um cliente WINS, usando o parâmetro wins server. Encaminhar pesquisas de nomes não satisfeitas no WINS para o DNS Caso o daemon nmbd do Samba, quando agindo como um servidor WINS, verifique que um determinado nome NetBIOS não foi registrado em sua base de nomes, poderá tratar o nome NetBIOS palavra-por-palavra como um nome DNS e fazer uma pesquisa no servidor DNS por esse nome em nome do cliente que fez a pesquisa, atuando assim como um proxy DNS. Porém, para habilitar esse comportamento, o parâmetro dns proxy deverá ser definido com o valor yes na configuração do Samba. Por padrão, o Samba deixar esse parâmetro definido como yes, mas a configuração padrão dos pacotes Debian do Samba fornecem o Samba com o valor padrão no, desabilitando esse recurso. Caso esse recurso seja interessante para o ambiente de rede do cliente, habilite-o definindo o valor do parâmetro dns proxy para yes. Performance Melhorando a performance com opções de sockets Para melhorar a performance de comunicação em rede dos clientes SMB com o servidor Samba, é possível definir opções de sockets a serem usadas na comunicação com os clientes. Opções de sockets são controles exercidos na camada de rede do sistema operacional que permitem que as conexões sejam melhoradas através de tunning. Não existe uma maneira do Samba conhecer as opções corretas a serem utilizadas no ambiente de rede específico do cliente, portanto, é necessário experimentar com os vários parâmetros 350 PROGRAMA TÉCNICO CIDADÃO disponíveis para verificar qual a combinação deles que melhor atende ao ambiente de rede específico. Para habilitar as opções de sockets no Samba, o parâmetro socket options pode ser usado. As opões de socket suportadas são as seguintes : ● SO_KEEPALIVE ● SO_REUSEADDR ● SO_BROADCAST ● TCP_NODELAY ● IPTOS_LOWDELAY ● IPTOS_THROUGHPUT ● SO_SNDBUF (*) ● SO_RCVBUF (*) ● SO_SNDLOWAT (*) ● SO_RCVLOWAT (*) Das opções citadas, as marcadas com (*) recebem com valor de configuração um número inteiro. As outras podem receber como valor de de configuração valores booleanos 0 ou 1, para habilitar ou desabilitar a opção, respectivamente. Caso somente o nome da opção seja especificado e nem um valor de 0 nem um valor de 1 seja especificado, a opção será habilitada. As opções são definidas no formato: NOME_DA_OPÇÃO = VALOR 351 PROGRAMA TÉCNICO CIDADÃO Note que não devem existir espaços antes ou depois do sinal de =. O padrão do Samba e também dos pacotes Debian do Samba é definir o valor do parâmetro socket options como a seguir : socket options = TCP_NODELAY Uma boa combinação de opções a ser testada (e mantida, caso não cause efeitos colaterais) é a seguinte : socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RECVBUF=8129 A combinação de opções acima geralmente resulta em um grande aumento de performance de acesso e transferência de dados entre clientes SMB e o servidor Samba. Suporte a impressão Carregar as filas de impressão configuradas Caso existam filas de impressão configuradas localmente no servidor Samba, sejam elas filas de impressoras conectadas fisicamente no servidor Samba ou filas de impressoras remotas, é possível que o Samba reconhece todas elas e as disponibilize para uso dos usuários do domínio. O parâmetro load printers controla esse comportamento. Na configuração padrão dos pacotes Debian do Samba, esse parâmetro já vem com o valor yes, que habilita esse comportamento, mas é fornecido comentado. Simplesmente descomente este parâmetro caso o cliente tenha filas de impressão que precisem ser utilizadas pelos usuários do domínio. Onde encontrar as configurações das filas de impressão Para que o parâmetro anterior funcione corretamente, o Samba precisa saber onde encontrar o arquivo que contém a configuração das filas de impressão existentes. Geralmente, esse arquivo 352 PROGRAMA TÉCNICO CIDADÃO é o /etc/printcap e o parâmetro que o configura é o parâmetro printcap name caso o sistema de impressão usado seja o lpr ou o LPRng. A configuração padrão dos pacotes Debian do Samba já fornece esse parâmetro configurado corretamente, mas comentado. Simplesmente descomente o parâmetro para habilitar o funcionamento caso o cliente utilize como sistema de impressão o lpr ou o LPRng. Qual sistema de impressão utilizar? Além de indicar em qual arquivo fica localizada a configuração das filas de impressão, é preciso dizer ao Samba qual o sistema de impressão utilizado. O parâmetro que diz isso ao Samba é o printing. Caso o sistema de impressão do cliente seja o lpd, use como valor para esse parâmetro o valor bsd. Caso o sistema de impressão seja LPRng, use como valor para esse parâmetro o valor lprng. Caso o sistema de impressão seja o CUPS, use como valor para esse parâmetro o valor cups. Perfis ambulantes, scripts de logon e contas de máquinas Habilitando suporte a perfis ambulantes O Samba oferece suporte a perfis ambulantes. Esse suporte permite que o perfil de um usuário (configurações pessoais de programas e preferências, geralmente armazenadas localmente na estação de trabalho de cada usuário) seja armazenado no servidor Samba. Esse suporte é interessante pois permite que o usuário possa mudar de estação de trabalho sem precisar reconfigurar toda a nova estação novamente. Ao fazer o logon no domínio, todas as configurações de seu perfil serão trazidas do servidor e utilizadas na nova estação de trabalho. 353 PROGRAMA TÉCNICO CIDADÃO Para habilitar o suporte a perfis ambulantes no servidor Samba, além de habilitar a criação de um compartilhamento específico para o armazenamento dos perfis, é necessário utilizar o parâmetro logon path do Samba. O parâmetro logon path especifica onde as estações Windows devem procurar pelo perfil dos usuários que fizerem o logon na rede. Existem diversas formas de configurar esse parâmetro, uma delas é: logon path = \\%L\Profiles\%U A variável %L será expandida para o nome NetBIOS do servidor Samba e a variável %U será expandida para o nome do usuário que iniciou a sessão com o servidor Samba fazendo o logon no domínio. Por exemplo, caso tenhamos um servidor Samba cujo nome NetBIOS seja “servidor” e o usuário que esteja fazendo o logon no domínio seja o usuário joao, a estação de trabalho desse usuário irá procurar pelo perfil do usuário em \\servidor\Profiles\joao. IMPORTANTE Dependendo da quantidade de usuários do domínio, da velocidade da rede e do tamanho dos perfis dos usuários do domínio, habilitar o suporte a perfis ambulantes pode não ser uma boa idéia. A transferência dos perfis dos usuários do servidor Samba para suas estações pode ser um processo bastante demorado e consumir muita banda da rede caso não seja planejado antecipadamente e a rede não esteja preparada para a implantação desse recurso. Em termos de consumo de recursos do servidor Samba, um segundo servidor Samba pode ser utilizado e os perfis podem ser armazenados no mesmo ao invés de no servidor Samba atuando como o PDC do domínio. Habilitando o suporte a scripts de logon Um recurso interessante e útil do Samba é o suporte a scripts de logon dos usuários. Scripts de logon podem ser usados para executar tarefas específicas na estação do usuário após a 354 PROGRAMA TÉCNICO CIDADÃO validação e logon do mesmo no domínio. Basicamente, é possível executar qualquer tarefa passível de ser descrita em um arquivo em lote DOS, um arquivo .BAT. Exemplos de tarefas interessantes seriam o mapeamento de compartilhamentos do servidor Samba ou de outros servidores SMB para unidades locais na estação do usuário, acerto do hora da estação com base na hora do servidor Samba, execução de um possível utilitário específico na estação do usuário, como um antivírus, por exemplo, e diversas outras. O parâmetro que controla o habilitação dos scripts de logon é o parâmetro logon script. É possível utilizar um script de logon genérico para todos os usuários do domínio ou, caso seja necessário, utilizar um script de logon individual para cada usuário. A configuração padrão dos pacotes Debian do Samba não contém nenhum parâmetro logon script definido, por isso, é necessário definí-lo conforme a necessidade do cliente. Na maioria das vezes, um único script de logon para todos os usuários será o suficiente. Para definir o parâmetro logon script para um único script de logon para todos os usuários do domínio, definao como a seguir : logon script = startup.bat O script de logon de nome startup.bat será executado para todos os usuários que fizerem o logon no domínio. Caso seja necessário especificar um script diferenciado para cada usuário, defina o parâmetro logon script como a seguir : logon script = %U.bat A variável %U será expandida para o nome do usuário que fez o logon no domínio. Por exemplo, caso o usuário joao tivesse feito o logon no domínio, o script de logon de nome joao.bat seria executado. Logicamente, em ambos os casos, o(s) script(s) de logon indicado(s) pelo parâmetro logon script devem ter sido previamente criados. 355 PROGRAMA TÉCNICO CIDADÃO IMPORTANTE 1 Os scripts de logon devem estar localizados fisicamente no compartilhamento de nome netlogon no servidor Samba. IMPORTANTE 2 Um detalhe a ser observado é que os scripts de logon devem ser criados com o esquema de terminação de linhas padrão DOS ao invés do esquema de terminação de linhas padrão UNIX. A ação que determina isso no vim é, em modo de linha: set ff=dos Devido a isso, ou os scripts precisarão ser criados anteriormente em uma estação DOS/Windows e transferidos posteriormente para o servidor Samba ou um utilitário que faça a conversão entre os dois esquemas de terminação de linha deverá ser usado para converter os scripts antes que os mesmos possam ser utilizados. Um exemplo de script de logon segue abaixo : net net net net use f: \\servidor\compartilhamento1 /yes use g: \\servidor\compartilhamento2 /yes use h: \\servidor\Profiles /yes time \\servidor /set /yes No script de logon de exemplo acima, os compartilhamentos de nome compartilhamento1 e compartilhamento2 estão serão mapeados na estação cliente como as unidade F: e G:, respectivamente. Adicionalmente, o compartilhamento Profiles será mapeado como a unidade H:. es. Por último, a hora do servidor será utilizada como base para acertar a hora da estação cliente através do comando net time, na última linha do script de logon de exemplo. 356 PROGRAMA TÉCNICO CIDADÃO Criação automática de contas de máquinas Para todos os sistemas operacionais da Microsoft que tem como base a tecnologia NT, ou seja, as famílias de sistemas operacionais Windows NT, Windows 2000 e Windows XP, além da criação da necessidade de existência de uma conta de usuário Linux/Samba no servidor Samba, é necessária a criação de uma conta de máquina para cada estação. Esta conta é necessária para permitir que a estação ingresse no domínio Samba e passe a fazer parte do mesmo. Existem dois modos de criar as contas de máquinas para as essas estações : manualmente no servidor Samba, utilizando o utilitário smbpasswd, ou automaticamente, através do uso de um parâmetro específico inserido no arquivo de configuração principal do servidor Samba, o parâmetro add user script. Com o uso desse parâmetro, as contas de máquinas serão automaticamente criadas no momento em que as máquinas forem inseridas no domínio, processo executado localmente na própria estação. Pelo modo manual, a inserção da estação no domínio através de configuração na própria estação também é necessária, mas a desvantagem é que, antes de cada estação ser inserida no domínio, uma conta de máquina para cada uma delas deve ser criada manualmente no servidor Samba. Por padrão, o modo de criação automática de contas de máquinas deverá ser utilizado. Para fazê-lo, defina o valor do parâmetro add user script conforme a seguir : add user script = /usr/sbin/useradd -d /dev/null -M -g maquinas -s /bin/false %u O parâmetro acima deverá ocupar somente uma única linha, apesar de aparecer em duas linhas. Adicionalmente, um grupo de nome maquinas deve ser previamente criado no servidor Samba para que o comando funcione corretamente. Com o parâmetro add user script definido dessa forma, a cada vez que ocorrer uma tentativa de inserções (join) no domínio de uma estação Windows NT, Windows 2000 ou Windows XP, uma conta de máquina para a estação será criada automaticamente no servidor Samba. As contas 357 PROGRAMA TÉCNICO CIDADÃO de máquinas serão criadas utilizando o nome NetBIOS da estação acrescido de um símbolo de cifrão ($). IMPORTANTE 1 O nome da estação que será adicionado ao domínio não pode ser o mesmo nome de uma estação que já faz parte do domínio ou de um usuário do domínio. Isso é muito importante e é um motivo comum de impossibilidade de inserção de estações no domínio. Fique atento a esse detalhe ! IMPORTANTE 2 No momento da inserção de uma estação no domínio, uma caixa de diálogo surgirá na estação, requisitando o nome e a senha de um usuário que tenha permissão de inserir contas de máquinas no domínio. Por padrão, o único usuário que pode inserir contas de máquinas no domínio é o usuário root. IMPORTANTE 3 Para estações Windows XP, além da necessidade de criação de contas de máquina, ainda existe a necessidade de modificar uma chave de registro para que o logon em domínio seja possível. Após inserir a estação no domínio (criar a conta de máquina da mesma), autentique-se como administrador local da estação e mude a seguinte chave de registro do Windows XP : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netlogon\parameters Opção : RequireSignOrSeal Valor dword: 00000000 Para simplificar, um arquivo .reg é distribuído junto com pacote Debian de nome samba-doc. O arquivo fica localizado fisicamente em /usr/share/doc/sambadoc/Registry/WinXP_SignOrSeal.reg. Transfira esse arquivo para a estação WindowsXP e dê um duplo clique no mesmo para que a chave de registro necessária seja modificada. 358 PROGRAMA TÉCNICO CIDADÃO Compartilhamentos Devido a importância do tópico, reservamos um espaço para falar exclusivamente sobre as definições de compartilhamentos no samba. Compartilhamentos públicos É comum existir a necessidade de criação de pelo menos um compartilhamento público em uma implantação Samba. O compartilhamento público é um compartilhamento que fornece acesso irrestrito (leitura e gravação) a todos os documentos que armazena. O mesmo é útil para armazenamento de documentos não confidenciais e de interesse comum a todos os usuários da rede. Porém, independente do conteúdo do compartilhamento público não ser confidencial, é importante liberar o acesso ao mesmo somente para os usuários Samba da rede e não para todos os usuários de forma geral. Pense em um cliente ou parceiro que chega a empresa do cliente, conecte seu notebook na rede para ter acesso a Internet e ler suas mensagens e, com isso, passa também a ter acesso aos documentos existentes no compartilhamento público. O compartilhamento público é público somente para os funcionários da empresa do cliente e não para clientes e/ou colaboradores que conectam suas estações em sua rede. Para restringir o acesso ao compartilhamento público somente aos funcionários da empresa, os quais já possuem uma conta válida devidamente criada e possuem como grupo primário o grupo comum, podemos usar a técnica de liberar o acesso ao mesmo somente para os usuários de nosso grupo comum. Isso simplifica enormemente o trabalho de atribuir permissões corretas a esse compartilhamento, pois simplesmente liberamos o acesso ao compartilhamento para o grupo comum ao invés de liberar acesso a cada um dos usuários Samba. Um exemplo de compartilhamento público configurado dessa forma seria : 359 PROGRAMA TÉCNICO CIDADÃO [publico] comment = Compartilhamento publico path = /home/samba/publico valid users = @grupo public = no writeable = yes printable = no directory security mask = 0770 create mask = 0770 force create mode = 0770 directory mask = 0770 force group = @grupo No compartilhamento público de exemplo acima, o parâmetro valid users garante que o acesso ao compartilhamento só será liberado para os usuários do grupo grupo. Simplesmente substitua @grupo por @ seguido do nome do grupo comum a todos os usuários Samba. Repare também que, propositalmente, o parâmetro public não não está definido com o valor yes. A razão é que, apesar do compartilhamento ser público, a intenção é que o mesmo seja público para todos os usuários Samba e não realmente público para todos. Isso é importante porque o parâmetro public é um sinônimo para o parâmetro guest ok, o qual, caso definido com o valor yes, libera acesso ao compartilhamento em questão sem necessidade de fornecimento de senhas. O acesso, nesse caso, seria feito com as permissões do usuário indicado pelo parâmetro guest account, geralmente o usuário nobody. No mínimo, o acesso de leitura seria liberado para todos, independente do fornecimento de senhas para acesso ao compartilhamento. O parâmetro force group , com o valor definido para o mesmo nome do grupo comum definido no parâmetro valid users, garante que todos os arquivo e diretórios criados sob o diretório físico compartilhado serão criados tendo como grupo o grupo comum a todos os usuários Samba. 360 PROGRAMA TÉCNICO CIDADÃO Compartilhamentos de grupos (departamentais) A maneira mais comum de organizar o acesso aos dados armazenados em um servidor Samba é criar grupos que representam os diversos departamentos de uma empresa, incluir os usuários nesses grupos de acordo com o departamento do qual fazem parte (por exemplo, grupo financeiro para usuários do departamento financeiro) e criar compartilhamentos para cada grupo, atribuíndo as permissões desejadas para o grupo e não para cada usuário individual. Existem várias formas de fazê-lo, mas, como exemplo, a seguir temos um exemplo de um compartilhamento para um grupo que pode auxiliar no entendimento de como funciona a organização do acesso aos dados por grupos : [financeiro] comment = Dados do Departamento Financeiro path = /home/samba/financeiro valid users = @financeiro write list = @financeiro public = no writeable = yes directory security mask = 0770 create mask = 0770 force create mode = 0770 directory mask = 0770 force group = @financeiro No compartilhamento de exemplo acima, o acesso aos dados armazenados no compartilhamento só será liberado aos usuários do grupo financeiro, devido ao uso do parâmetro valid users tendo como valor o grupo financeiro. IMPORTANTE É importante notar que, independente dos usuários fazerem parte do grupo financeiro, é importante que os mesmos tenham como grupo primário o grupo comum do qual todos os usuários Samba fazem parte. O grupo financeiro é somente mais um grupo secundário do qual os usuários do departamento financeiro fazem parte. 361 PROGRAMA TÉCNICO CIDADÃO O parâmetro write list também garante que o acesso a gravação no compartilhamentos financeiro só será liberado aos usuários do grupo financeiro. O parâmetro public, com o valor no, garante que o compartilhamento em questão não seja um compartilhamento público. O parâmetro force group garante que os arquivos e diretórios criados sob o diretório físico compartilhado sejam criados tendo como grupo o grupo financeiro. Compartilhamento para perfis ambulantes Um dos compartilhamentos especiais que podem ser criados no Samba é o compartilhamento que armazenará os perfis ambulantes dos usuários do domínio. Tal compartilhamento deve ter o nome de Profiles e ser usado em conjunto com o parâmetro logon path, este último definido na seção global de configuração do Samba. A configuração fornecida por padrão pelos pacotes Debian do Samba não possui nenhuma menção ao compartilhamento especial Profiles, por isso, é necessário criá-lo seguindo os padrões a seguir : [Profiles] path = /home/profiles writeable= yes valid users = @grupo browseable = yes guest ok = no security mask = 0700 directory security mask = 0700 directory mask = 0700 create mask = 0700 Na configuração do compartilhamento Profiles acima, mais especificamente no parâmetro valid users, substitua @grupo por um caracter @ (arroba) seguido do nome do grupo comum a todos os usuários do domínio. Logicamente, crie também o diretório /home/profiles no servidor Samba. Após um usuário executar o logout do domínio, todas as configurações personalizadas que o mesmo fez em seu 362 PROGRAMA TÉCNICO CIDADÃO desktop e/ou aplicativos que gravam informações no perfil do usuário serão transferidas para o compartilhamento Profiles do servidor Samba, mais especificamente, sob um diretório com o nome do usuário, criada automaticamente sob o compartilhamento Profiles. Segue abaixo um exemplo da estrutura de diretórios criada sob o o diretório pessoal de perfil do usuário aluno: # pwd /home/profiles/aluno # ls -lah total 668k drwx------ 14 aluno drwxrwx--- 48 root drwx------ 6 aluno drwx------ 2 aluno drwx------ 2 aluno drwx------ 5 aluno drwx------ 3 aluno drwx------ 11 aluno -rwx------ 1 aluno -rwx------ 1 aluno -rwx------ 1 aluno drwx------ 2 aluno drwx------ 2 aluno drwx------ 4 aluno drwx------ 2 aluno drwx------ 3 aluno drwx------ 2 aluno users users users users users users users users users users users users users users users users users 4.0k Mar 8 16:39 . 4.0k Ago 19 15:31 .. 4.0k Abr 16 2003 Application Data 4.0k Mar 8 16:39 Cookies 4.0k Out 9 2003 Desktop 4.0k Mar 8 16:39 Favorites 4.0k Out 15 2002 My Documents 4.0k Mar 4 14:37 NetHood 600k Mar 8 19:37 NTUSER.DAT 1.0k Mar 8 19:37 ntuser.dat.LOG 180 Mar 8 16:39 ntuser.ini 4.0k Abr 16 2003 pnlinks 4.0k Out 15 2002 PrintHood 4.0k Mar 8 16:39 Recent 4.0k Mar 8 16:39 SendTo 4.0k Out 15 2002 Start Menu 4.0k Out 15 2002 Templates Compartilhamento Netlogon Um outro compartilhamento Samba especial é o compartilhamento de nome netlogon. Esse compartilhamento é onde os scripts de logon dos usuários do domínio ficam armazenados. A configuração padrão dos pacotes Debian do Samba fornece um exemplo de configuração para um compartilhamento netlogon. Devido a isso, é necessário somente descomentar esse exemplo e criar o diretório apontado pelo compartilhamento netlogon para habilitá-lo. 363 PROGRAMA TÉCNICO CIDADÃO Segue abaixo uma cópia do exemplo de compartilhamento netlogon fornecido no arquivo de configuração do Samba dos pacotes Debian : [netlogon] comment = Network Logon Service path = /home/samba/netlogon guest ok = yes writable = no share modes = no Após descomentar o trecho acima no arquivo de configuração principal do Samba, crie o diretório /home/samba/netlogon no servidor Samba. O compartilhamento netlogon deve existir para possibilitar o funcionamento dos scripts de logon, executados no momento do logon dos usuários no domínio. Compartilhamento homes Outro compartilhamento especial do Samba é o compartilhamento de nome homes. Esse compartilhamento, quando criado e habilitado, compartilha o diretório pessoal de cada usuário UNIX/Samba existente para seu respectivo dono. Por exemplo, caso o compartilhamento homes esteja habilitado, e o usuário de nome joao efetue logon no domínio, o diretório pessoal do mesmo (geralmente localizado fisicamente no servidor Samba em /home/joao) ficará acessível, somente ao usuário joao, como \\servidor\joao. A configuração padrão fornecida pelos pacotes Samba do Debian já possui um compartilhamento homes funcional e habilitado por padrão. Porém, é necessário modificar o parâmetro writable para o valor yes, uma vez que esse parâmetro é definido com o valor de no na configuração padrão dos pacotes Samba do Debian. Assim, os usuários poderão gravar dentro de seus diretórios pessoais. Segue abaixo uma cópia da configuração que define o compartilhamento homes padrão do Debian, já com o parâmetro writable definido para o valor yes : [homes] 364 PROGRAMA TÉCNICO CIDADÃO comment = Home Directories browseable = no writable = yes create mask = 0700 directory mask = 0700 Com a configuração acima, os arquivos e diretórios criados sob o diretório pessoal dos usuários somente poderão ser lidos e gravados pelos próprios usuários que os criaram. Compartilhamento para impressoras Um outro compartilhamento especial do Samba é o compartilhamento de nome printers. É possível definir um compartilhamento para cada fila de impressão que se deseja compartilhar através do Samba, mas o compartilhamento especial printers, caso seja definido, simplifica essa tarefa, compartilhando todas as filas de impressão configuradas no servidor Samba. A configuração padrão dos pacotes Samba do Debian já fornece uma configuração funcional e habilitada para o compartilhamento printers. Sendo assim, não é necessário modificar e/ou acrescentar nenhuma configuração relacionada ao compartilhamento printers para que o mesmo funcione sob o Debian. Abaixo segue um exemplo de compartilhamento printers funcional, da forma como é distribuído na configuração padrão dos pacotes Samba do Debian : [printers] comment = All Printers browseable = no path = /tmp printable = yes public = no writable = no create mode = 0700 No exemplo acima, é importante notar que o diretório apontado pelo parâmetro path tem que, obrigatoriamente, ser um diretório com o stick bit ligado, como é o caso do diretório /tmp. 365 PROGRAMA TÉCNICO CIDADÃO Usuários e grupos no Samba A criação de usuários para o Samba no Debian difere ligeiramente da maneira como esse procedimento é feito em outras distribuições GNU/Linux. Na grande maioria das distribuições, é comum utilizarmos o utilitário smbadduser para cadastrar usuários Samba correspondentes aos usuários UNIX locais previamente cadastrados. No Debian, o utilitário smbadduser é fornecido somente como um utilitário de exemplo, que pode ser utilizado opcionalmente para cadastrar usuários do Samba. Por isso, o mesmo encontra-se em um diretório de exemplos fornecido com o pacote Debian que fornece documentação relacionada ao Samba, o pacote samba-doc. Esse utilitário pode ser encontrado sob o diretório /usr/share/doc/samba-doc/examples. Assim como também é possível fazer em outras distribuições, no Debian a maneira comum de cadastrar usuários do Samba é utilizar o utilitário smbpassw, o mesmo utilitário geralmente utilizado somente para troca de senhas dos usuários Samba em outras distribuições. A maneira padrão de criação de um usuário Samba no Debian é a seguinte : ● Cria-se o usuário UNIX local usando o comando adduser como de costume, conforme podemos ver a seguir : # adduser usuario Uma senha para o usuário UNIX local será requisitada e deverá ser informada. Informações adicionais como nome completo do usuário, número da sala de trabalho, telefone do local de trabalho, telefone doméstico, etc, também serão requisitadas. Fica a cargo do cliente informá-las caso julgue necessário. Esse usuário será cadastrado no arquivo de senhas padrão UNIX do sistema operacional, o arquivo /etc/passwd e a senha do mesmos será cadastrada, encriptada, no arquivo de senhas shadow padrão do sistema, o arquivo /etc/shadow. 366 PROGRAMA TÉCNICO CIDADÃO ● Após isso, cria-se o usuário Samba correspondente ao usuário UNIX local criado no passo anterior, conforme a seguir : # smbpasswd -a usuario A senha do usuário Samba será requisitada. Geralmente, a senha informada para o usuário Samba é a mesma senha do usuário UNIX local correspondente. Esse usuário será cadastrado no arquivo de usuários e senhas padrão de usuários Samba, o arquiv / etc/samba/smbpasswd. Nesse arquivo, podemos notar que, na entrada correspondente ao usuário recém-cadastrado, no segundo campo, temos o UID do usuário, que é o mesmo UID do usuário UNIX local cadastrado no passo anterior. Uma prática importante e que deve ser seguida por todas as implantações feitas pela Utah Consultores é a inserção dos usuários do Samba em um grupo comum a todos esses usuários. Como veremos posteriormente, essa prática simplificará muito o tratamento de atribuições de permissões para compartilhamentos Samba. Devido a isso, no passo de cadastro do usuário UNIX local no sistema, o comando adduser deverá informar também o grupo comum do qual o usuário fará parte. O comando usado deverá ser o comando : adduser --ingroup grupo usuario Onde grupo é o nome do grupo comum pré-existente, criado exclusivamente para os usuários Samba, e usuario é o nome do usuário sendo cadastrado. Criação de grupo comum entre os usuários Samba É importante que utilizemos um grupo comum a todos os usuários Samba, para facilitar distinguí-los de todos os demais usuários existentes no sistema e para simplificar o gerenciamento de permissões de acesso aos compartilhamentos configurados no servidor Samba. 367 PROGRAMA TÉCNICO CIDADÃO Logicamente, poderão existir grupos adicionais para identificar usuários que fazem parte de um departamento específico da empresa, como, por exemplo, um grupo de nome financeiro, do qual fariam parte todos os usuários do departamento financeiro. Porém, o grupo comum é o grupo primário de todos os usuários do Samba e, devido a isso, todos os usuários Samba deverão fazer parte desse grupo. Os grupos adicionais dos quais os mesmos farão parte serão grupos secundários dos usuários, variando de acordo com cada usuário. Por padrão, o grupo comum deverá ser criado com o nome da empresa do cliente onde o servidor Samba está sendo implantado. Por exemplo, no caso hipotético de um cliente chamado TecnoVendas Comércio de Calçados Ltda., o nome do grupo comum poderia ser tecnovendas. Esse grupo seria o grupo primário de todos os usuários do Samba e deveria ser o grupo ao qual todos os usuários seriam inseridos no momento do cadastramento dos mesmos. Verificando a configuração a procura de erros Devido a existência de inúmeros parâmetros de configuração passíveis de serem utilizados na configuração de um servidor Samba, é importante que a validade da configuração implementada seja checada para facilitar a tarefa de resolução de possíveis problemas que possam surgir. Uma maneira fácil de checar se toda a configuração utilizada no arquivo de configuração principal do Samba está sintaticamente correta é utilizar o utilitário testparm. Esse utilitário é capaz de checar o arquivo de configuração do Samba a procure de erros de sintaxe e, caso os encontre, exibí-los no terminal. A utilização do mesmo é bastante simples : basta executar o comando testparm no terminal e a saída do utilitário irá exibir a análise do arquivo de configuração, apontando quaisquer erros de sintaxe que tenham sido encontrados. Outra maneira realmente útil de utilização do utilitário testparm é na análise do motivo de um compartilhamento não permitir o acesso de uma estação da rede específica. Caso você esteja 368 PROGRAMA TÉCNICO CIDADÃO tentando entender o motivo de uma estação não conseguir ter acesso a um compartilhamento, uma maneira rápida de checar se o motivo é devido a configuração de acesso do compartilhamento é utilizando utilitário testparm da seguinte maneira : testparm /etc/samba/smb.conf 192.168.1.3 Onde 192.168.1.3 seria o endereço IP da estação para a qual desejamos verificar a possibilidade de acesso. Essa forma de execução do utilitário testparm, além de exibir as informações de checagem de sintaxe também exibidas na utilização da forma convencional, também indica, ao final uma listagem dos compartilhamentos existentes, se o acesso da estação com o endereço IP indicado a cada um dos compartilhamentos é permitido ou não. 369 PROGRAMA TÉCNICO CIDADÃO SEGURANÇA DO SISTEMA Ainda mais importante do que a correta instalação e configuração de um sistema Linux, é a segurança dos serviços. Tarefas simples como a remoção de pacotes desnecessários ou o bloqueio de acesso a serviços em determinadas ocasiões são fundamentais para manter a segurança do sistema em níveis aceitáveis. Suíte de aplicativos OpenSSH OpenSSH é uma suíte de aplicativos de código aberto (open-source) baseada nas implementações do protocolo “Secure Shell”, conforme especificado pelo grupo “secsh”, regulamentado pela IETF (Internet Engineering and Task Force). A suíte de aplicativos OpenSSH contempla diversos aplicativos cuja principal característica é o fato da comunicação entre a parte servidor e a parte cliente ser criptografada. Para instalar a suíte OpenSSH no Debian Woody 3.0, instale o pacote ssh, que já contempla os binários para o servidor e os clientes do protocolo. Características do OpenSSH no Debian pacote(s) ssh serviço(s) ssh porta(s) 22/tcp Configurações /etc/ssh/sshd_config Vejamos agora cada um dos aplicativos cliente que completam a suíte OpenSSH. 370 PROGRAMA TÉCNICO CIDADÃO ssh O principal aplicativo da suíte OpenSSH é o ssh, que nos permite, assim como o telnet, executar comandos remotamente em um servidor, com a diferença de que os dados digitados trafegam em um canal criptografado através da rede, tornando a comunicação segura o bastante para impedir que usuários “mal intencionados” interceptem a comunicação e capturem dados importantes (como senhas...). Sintaxe: ssh [opções] [usuario@]host [comando] Para a lista de opções suportadas, consulte o “--help” do comando. Por exemplo, para se conectar como usuário root ao host remoto 192.168.1.12 que esteja executando o servidor OpenSSH e “escutando” na porta padrão 22/tcp, utilize: # ssh [email protected] The authenticity of host '192.168.1.12 (192.168.1.12)' can't be established. RSA key fingerprint is 58:4c:d7:fb:19:84:5c:b0:31:66:0b:22:9c:e0:24:4f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.12' (RSA) to the list of known hosts. [email protected]'s password: Na primeira vez que nos conectamos a um servidor OpenSSH, é exibida a confirmação de recepção da chave de criptografia remota. Digite “yes” (completo) para prosseguir. Ao fazer isso, será adicionada o “Fingerprint” da chave remota no arquivo ~/.ssh/know_hosts. Em seguida será requisitada a senha do usuário, que nesse caso é a senha do usuário root no host 192.168.1.12. scp SCP (Secure Copy) é o utilitário que nos permite copiar arquivos entre hosts remotos através de um canal criptografado de dados. 371 PROGRAMA TÉCNICO CIDADÃO Podemos utilizar o scp de duas maneiras basicamente: Para copiar arquivos de nosso sistema para um sistema remoto, ou vice-versa. Enviando Arquivos Para copiar arquivos locais para um sistema remoto (Um servidor OpenSSH), utilizamos: scp /caminho/para/arquivo/local usuario@host:/pasta/remota Um exemplo prático seria copiar nosso /etc/hosts para o diretório /tmp do host 192.168.1.12, conforme abaixo: # scp /etc/hosts [email protected]:/tmp [email protected]'s password: hosts 100% 289 0.3KB/s 00:00 Um outro exemplo interessante mostra como copiar o conteúdo de um diretório recursivamente para um host remoto, neste caso é o diretório /etc na máquina local que será enviado para o diretório /tmp do host 192.168.1.12: # scp -rp /etc [email protected]:/tmp Recebendo arquivos Agora faremos a operação inversa, conectando ao servidor remoto 192.168.1.12 e trazendo arquivos para nosso sistema local. Para copiar arquivos de um sistema remoto (Um servidor OpenSSH) para o host local, utilizamos: scp usuario@host:/caminho/para/arquivo/remoto /destino/local Podemos, por exemplo, obter de volta o arquivo hosts que se encontra no diretório /tmp do host 192.168.1.12 com o comando: # scp [email protected]:/tmp/hosts /tmp 372 PROGRAMA TÉCNICO CIDADÃO [email protected]'s password: hosts 100% 289 0.3KB/s 00:00 sftp O sftp é uma implementação “segura” do protocolo FTP, e possui as mesmas características de um típico servidor ftp, assim como os comandos cliente (PWD, GET, PUT, etc...). A sintaxe de conexão do sftp é praticamente igual a do ssh: sftp [opções] [usuario@]host Após se conectar, o usuário estará num prompt como o abaixo e poderá executar comandos conhecidos do protocolo FTP. sftp> Para obter uma lista dos comandos aceitos, execute o comando “help” nesse prompt. Uma implementação interessante que não está presente em todos os clientes FTP é a possibilidade de baixar um arquivo com o comando GET e já escolher, no mesmo comando, em qual pasta no sistema local o arquivo será alocado, conforme exemplo abaixo: # sftp 192.168.1.12 Connecting to 192.168.1.12... [email protected]'s password: sftp> pwd Remote working directory: /root sftp> cd /tmp sftp> ls . .. etc hosts lost+found sftp> get hosts /var/tmp Fetching /tmp/hosts to /var/tmp/hosts /tmp/hosts 100% 289 sftp> quit 0.3KB/s 00:00 373 PROGRAMA TÉCNICO CIDADÃO DICA Nos utilitários OpenSSH, caso omitirmos o usuário remoto, o sistema levará em consideração que estamos tentando nos conectar com o nome de usuário igual ao local. O arquivo /etc/ssh/sshd_config Neste arquivo são definidos todos os parâmetros de configuração do servidor OpenSSH. Algumas das principais opções desse arquivo são: Port <num_porta>: Define em qual porta tcp o servidor escutará por conexões. O padrão é 22. ServerKeyBits <bits>: Quantidade de bits utilizada na criptografia do servidor. O Padrão “costuma ser” 768 bits. LoginGraceTime <segundos>: O tempo máximo (em segundos) que o servidor OpenSSH aguardará por um usuário autenticar-se após conectar. PermitRootLogin <yes/no>: Permite ou não que o usuário root se conecte diretamente ao servidor. AllowUsers <usuario1,usuario2>: Lista dos usuários com permissão para se autenticar no servidor. O mesmo vale para grupos com a opção AllowGroups. DenyUsers <usuario1,usuario2>: Lista dos usuários sem permissão para se autenticar no servidor. O mesmo vale para grupos com a opção DenyGroups. 374 PROGRAMA TÉCNICO CIDADÃO Controle de acesso a serviços Um item importante em qualquer nível de segurança de sistemas é definir corretamente o controle de acesso aos serviços de rede. Questões básicas como “Quais hosts devem ter acesso a tais serviços?” fazem parte de um administrador prevenido. O Linux dispões diversas ferramentas que nos auxiliam nessa tarefa, como os TCP Wrappers e o daemon inetd (xinetd em implementações mais recentes). A interação entre essas ferramentas pode ser observada no diagrama abaixo: 375 PROGRAMA TÉCNICO CIDADÃO TCP Wrappers É bem simples compreender o contexto por detrás do funcionamento do s TCP Wrappers. Esta é a implementação da biblioteca host_access nos binários dos serviços de rede. Quando uma conexão a um serviço com suporte a TCP Wrappers é requisitada, o binário verifica os arquivos /etc/hosts.allow e /etc/hosts.deny em busca de registros que definam o acesso 376 PROGRAMA TÉCNICO CIDADÃO ao serviço. Assim que encontrar a primeira ocorrência, o sistema não verificará o restante do(s) arquivo(s) em busca de novas ocorrências. DICA Para descobrir se determinado binário da rede suporta TCP Wrappers, verifique se ele reguisita a biblioteca libwrap com o comando: “ldd <binário do serviço>” ou através do comando: “strings -f <binário do serviço> | grep hosts_access” Como ocorre o controle de acesso... Os arquivos /etc/hosts.allow e /etc/hosts.deny definem regras que liberam e bloqueiam (respectivamente) acesso aos serviços através dos TCP Wrappers. Esses arquivos são verificados na seguinte ordem: 1) É verificado o arquivo /etc/hosts.allow, e caso haja uma referência que case com os aspectos da conexão atual (serviço, Host de origem, etc...) a conexão é liberada, caso contrário será verificado o arquivo /etc/hosts.deny (próximo passo). 2) Chegando aqui, o arquivo /etc/hosts.deny será lido, e caso encontre uma ocorrência que case com os aspectos da conexão a mesma será negada, caso contrário ela será liberada normalmente. Os seguintes pontos devem ser levados em consideração nas implementações de TCP Wrappers nos serviços de rede: ● As regras inseridas em /etc/hosts.allow têm precedência sobre as definidas em / etc/hosts.deny. Portanto, mesmo que o acesso a determinado serviço seja negado no hosts.deny, caso ele esteja liberado em /etc/hosts.allow a conexão será liberada e a entrada em hosts.deny nunca será lida. 377 PROGRAMA TÉCNICO CIDADÃO ● A ordem de definição das regras através dos arquivos é muito importante, e o administrador deve estar atento que o sistema lê os arquivos da primeira para a última linha. ● Caso nenhuma regra seja encontrada em nenhum dos arquivos (ou caso eles não existam), o acesso aos serviços de rede serão liberados sem interferências. ● Quaisquer alterações nos arquivos de configuração terão efeito imediatamente, não sendo necessário a reinicialização de nenhum serviço. Formato das Regras de acesso O formato das regras de acesso é o mesmo para ambos os arquivos de configuração (/etc/hosts.allow e /etc/hosts.deny). Qualquer linha em branco ou comentada com o caractere “#” será ignorada. Ar regras devem ser definidas “uma por linha”, no seguinte formato: <daemon(s)> : <cliente(s)> [: opções...] Os daemons podem ser o nome de um ou mais binários (que suportem TCP Wrappers) separados por vírgula ou então a palavra chave “ALL”, que refere-se a todos. Os clientes podem ser o IP ou hostname de um ou mais clientes de rede separados por vírgula. Podemos utilizar palavras-chave como: ALL (todos os hosts), LOCAL (somente hosts cujo hostname presente em /etc/hosts não contenha um “.”), KNOWN (Hosts conhecidos, listados em /etc/hosts), UNKNOWN (O contrário de KNOWN) e PARANOID (Qualquer host cujo hostname não “bata” com o IP do mesmo). Também é permitido utilizar o operados EXCEPT para criar regras de exceção. O campo de opções é opcional, e depende das opções aceitas pelo binário a ser controlado. Vejamos um exemplo das regras de acesso: 378 PROGRAMA TÉCNICO CIDADÃO # cat /etc/hosts.deny ALL: ALL # cat /etc/hosts.allow sshd: KNOWN Este geralmente é o arranjo mais comum, onde, antes de mais nada, todos os serviços são negados no arquivo /etc/hosts.deny, e os serviços são liberados conforme necessidade no arquivo /etc/hosts.allow. Nesse caso, somente o serviço sshd (sshd é o nome do binário em / usr/sbin para o serviço de OpenSSH) será aceito, e somente para hosts conhecidos (listados em /etc/hosts). ATENÇÃO A última linha dos arquivos /etc/hosts.allow e /etc/hosts.deny deve ser uma linha em branco. Caso contrário, a última regra não será analisada. inetd e xinetd Inetd é um daemon capaz de controlar acesso a serviços populares de rede (como FTP, IMAP, POP3, etc...)que sejam inicializados sob demanda (Ao contrário dos serviços standalone, que não dependem de outros serviços para serem inicializados). Já o xinetd é uma implementação extendida do inetd, também visto como a evolução do inetd, pois dispõe de mais opções para o controle de acesso do que o inetd, portanto, concentraremos nossos estudos no xinetd. Independente disso, a forma de ambos trabalharem é semelhante. Funcionamento Quando uma tentativa de conexão passa pelos TCP Wrappers, esta será encaminhada para a camada do xinetd. Caso o determinado serviços seja controlado pelo xinetd, as regras de acesso serão aplicadas. 379 PROGRAMA TÉCNICO CIDADÃO Instalação e Configuração do inetd Em muitas distribuições o xinetd é o “super-server” padrão do sistema, e inclusive já vem instalado. No Debian e no Conectiva a história é diferente, pois o “super-server” padrão é o inetd. Características do inetd no Debian serviço(s) inetd Configurações /etc/inetd.conf O inetd basicamente se limita em disponibilizar ou não determinados serviços de rede sob seu controle, portanto, sua sintaxe de configuração é simples. Cada serviço sob seu controle deve ser configurado e descomentado (sem o “#” no início da linha) um por linha, no formato: <serviço> <tipo_de_socket> <protocolo> <flags> <usuario> <binário> <args> Onde, serviço é o nome do serviço em relação a porta de conexão (conforme descrito no arquivo /etc/services); Tipo de socket pode ser stream (geralmente usado em conexões TCP) ou dgram (equivalente para UDP); Os protocolos podem ser quaisquer um dos listados no arquivo /etc/protocols, mas costumamos utilizar somente tcp ou udp. Consulte a man page do arquivo inetd.conf para maiores detalhes. DICA O Debian disponibiliza o comando update-inetd para gerenciamento do arquivo / etc/inetd.conf. 380 PROGRAMA TÉCNICO CIDADÃO Por exemplo, após instalar o servidor telnet (Pacote telnetd no Debian), a seguinte linha será adicionada no arquivo /etc/inetd.conf: telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd Instalação e configuração do xinetd Caso precise “migrar” o inetd para xinetd no Debian, basta instalar o pacote “xinetd”, e os scripts do debconf ajudarão na migração da configuração antiga (no arquivo /etc/inetd.conf) para a nova (/etc/xinetd.conf). Caso precise fazer isso manualmente, execute o comando “dpkg-reconfigure xinetd”. O arquivo /etc/xinetd.conf Esse é o arquivo principal de configuração do xinetd. As entradas de configuração são divididas em “blocos” delimitados por chaves (“{“ e “}”), conforme o exemplo abaixo, que mostra o bloco de configurações padrão o serviço telnet: service telnet { socket_type = stream protocol = tcp wait = no user = telnetd group = telnetd server = /usr/sbin/in.telnetd } Na primeira linha é definido o nome do serviço, que deve constar no arquivo /etc/services (Pois é assim que o xinetd associa uma porta de comunicação). 381 PROGRAMA TÉCNICO CIDADÃO Já dentro do bloco de configuração é que devem ser definidas as opções. A página de manual do arquivo xinetd.conf mostra todos os parâmetros possíveis,mas veremos os mais importantes. Os parâmetros socket_type, protocol, wait e server tem o mesmo significado que no inetd.conf (“wait = no” aqui é o mesmo que nowait no inetd.conf). Já os parâmetros user e group definem com quais permissões de usuário o serviço será iniciado. Um parâmetro de configuração que não costuma vir definido no xinetd do Debian é o “disable”. Quando ele não está definido explicitamente no bloco de configuração do serviço, o padrão é “no”, ou seja, o serviço em questão está habilitado no xinetd. Caso precise desabilitar um serviço no xinetd, adicione no bloco de configuração do respectivo serviço a linha: disable = yes Não se esqueça de que o daemon do xinetd deverá ser reiniciado para que as alterações entrem em vigor. Definindo controle de acesso no xinetd Existem uma série de opções possíveis que podem ser adicionadas nos blocos de configuração de cada serviço controlado pelo xinetd para definir regras de acesso aos mesmos. Uma lista completa dessas opções pode ser vista na man page do arquivo xinetd.conf, mas veremos as mais utilizadas: only_from – Uma lista dos hosts e/ou redes que possuem acesso ao serviço. no_access – O inverso do parâmetro only_from, pois lista os hosts e/ou redes que não possuem acesso ao serviço. 382 PROGRAMA TÉCNICO CIDADÃO access_times – especifica um espaço de tempo em que o serviço ficará disponível, no formato HH:MM-HH:MM. Definições globais Todas as opções que adicionarmos no bloco de configuração “defaults” (Inexistente por padrão em algumas versões do Debian) do arquivo de configuração /etc/xinetd.conf serão válidas para todos os serviços controlados pelo xinetd, dispensando ter que definir as mesmas diretrivas para todos. Por exemplo, digamos que seja necessário definir que somente o host local e a rede 192.168.1.0/24 deverá ter acesso aos serviços controlados pelo xinetd, e no período de 9 da manhã até às 23 horas. Nesse caso, basta adicionar o seguinte bloco de configuração* no início do arquivo /etc/xinetd.conf: defaults { only_from = 127.0.0.1 192.168.0.0/24 access_times = 09:00-22:00 } Reinicie o daemon do xinetd e refaça os testes. Firewalls no Linux Outro ponto muito importante no que tange a segurança de sistemas Linux é a correta configuração do Firewall. Logicamente, o escopo desse treinamento está longe de demonstrar todas as entranhas e infinitas possibilidades de um firewall, mas trataremos da estrutura e configuração de regras simples de firewall em sistemas Linux com ipchains e iptables. * Em algumas distribuições o bloco “defaults” já existe no arquivo /etc/xinetd.conf. 383 PROGRAMA TÉCNICO CIDADÃO ipchains Este é o mecanismo de firewall padrão dos Kernels 2.2 do Linux. (Os kernels de versão anterior, 2.0, utilizavam o ipfwadm). A estrutura do ipchains é bem simples, se comparada com o seu substituto posterior (iptables, visto adiante), conforme mostra a figura abaixo: O ipchains analiza o tráfego de pacotes com base em três cadeias (chains): input, forward e output. São nas cadeias que cadastramos as regras do firewall. É de suma importância que o administrador de um firewall ipchains conheça como o ipchains analisa os pacotes no fluxo de dados através das chains. Todos os pacotes cujo host de destino seja o firewall ou precise passar através do firewall para completar a comunicação passarão por todas as cadeias de regras do ipchains, na seguinte ordem: input, forward e output. Já os pacotes gerados localmente no firewall só passam pelas cadeias input e output. Nesse caso, as regras contidas na cadeia input serão analisadas quando o host de destino seja o firewall, e as regras da output serão analisadas quando o host de origem seja o firewall. 384 PROGRAMA TÉCNICO CIDADÃO Habilitando o ipchains em Kernels 2.4 e 2.6 O ipchains, apesar de ser o “firewall” dos kernels 2.2, também pode ser utilizado em kernels mais recentes, como os da versão 2.4 e 2.6. Para isso, basta carregar o módulo ipchains em sistemas que possuam este suporte, com o comando: # modprobe ipchains Listando regras no ipchains A opção -L instrui o ipchains a listar as regras de firewall. Essa opção é geralmente acompanhada da opção -n, que diz para o ipchains não efetuar resolução de nomes para hosts e portas nas regras, mostrando IPs e números de portas ao invés de nomes. Veja um exemplo: # ipchains -nL Chain input (policy ACCEPT): Chain forward (policy ACCEPT): Chain output (policy ACCEPT): Nesse caso, as 3 cadeias de regras do ipchains estão vazias. Mas aguarde que a história irá mudar... Definindo a política padrão do ipchains Cada uma das 3 cadeias do ipchains possui uma política padrão associada, que é mostrada entre parênteses na saída da listagem de regras, no cabeçalho de cada cadeia de regras. Por padrão, a política das cadeias de regras é ACCEPT, que instrui o firewall a aceitar o pacote analisado caso o mesmo não tenha “casado” com nenhuma regra anterior na mesma cadeia. 385 PROGRAMA TÉCNICO CIDADÃO Para definir uma política diferenciada para cada uma das cadeias, utilizamos a opção -P, seguida do nome da cadeia e a política desejada, que pode ser um dos alvos como ACCEPT ou DENY. No exemplo abaixo, definiremos a política padrão da cadeia input como DENY: # ipchains -Pinput DENY # ipchains -nL Chain input (policy DENY): target prot opt source destination ports ACCEPT tcp ------ 192.168.1.0/24 192.168.1.12 Chain forward (policy ACCEPT): Chain output (policy ACCEPT): * -> 22 Adicionando regras no ipchains Para adicionar regras no ipchains, utilizamos a opção -A, (ou -I para inserir a regra em uma posição específica na cadeia) seguida do nome da cadeia que a regra será alocada, a definição da regra e o “alvo” da regra. O alvo é justamente o que o ipchains deverá fazer com o pacote caso o mesmo “case” com as definições estabelecidas na regra. Alvos comuns (e autoexplicativos) no ipchains são: DENY, ACCEPT, REJECT, MASQ e REDIRECT (veja a lista completa na man page do comando). Vejamos um exemplo: # ipchains -Ainput -p tcp --dport 22 -i eth0 -s 192.168.1.0/24 \ -d 192.168.1.12 -j ACCEPT # ipchains -nL Chain input (policy ACCEPT): target prot opt source destination ports ACCEPT tcp ------ 192.168.1.0/24 192.168.1.12 * -> 22 Chain forward (policy ACCEPT): Chain output (policy ACCEPT): Definimos que serão aceitas conexões vindas da rede 192.168.1.0/24, com destino ao ip local 192.168.1.12, interface de entrada eth0 e porta 22/tcp. 386 PROGRAMA TÉCNICO CIDADÃO Outro exemplo: # ipchains -Ainput -i lo -j ACCEPT # ipchains -Ainput -p icmp --icmp-type echo-reply -i eth0 -j ACCEPT # ipchains -nL Chain input (policy DENY): target prot opt source destination ports ACCEPT tcp ------ 192.168.1.0/24 192.168.1.12 * -> 22 ACCEPT all ------ 0.0.0.0/0 0.0.0.0/0 n/a ACCEPT icmp ------ 0.0.0.0/0 0.0.0.0/0 0 -> * Chain forward (policy ACCEPT): Chain output (policy ACCEPT): Liberamos todo tipo de conexão de entrada na interface loopback (claro, sem isso diversos sistemas internos de rede não funcionarão) e todos as “respostas” de ping da interface eth0. Removendo regras no ipchains Utilizamos a opção -D, seguida do nome da cadeia de regras e o número da regra, que pode ser obtido com a opção --line-numbers ao listar as regras no ipchains. Veja o exemplo: # ipchains -nL --line-numbers Chain input (policy DENY): num target prot opt source destination ports 1 ACCEPT tcp ------ 192.168.1.0/24 192.168.1.12 * -> 22 2 ACCEPT all ------ 0.0.0.0/0 0.0.0.0/0 n/a 3 ACCEPT icmp ------ 0.0.0.0/0 0.0.0.0/0 0 -> * Chain forward (policy ACCEPT): Chain output (policy ACCEPT): # ipchains -Dinput 3 # ipchains -nL --line-numbers Chain input (policy DENY): num target prot opt source destination ports 1 ACCEPT tcp ------ 192.168.1.0/24 192.168.1.12 * -> 22 2 ACCEPT all ------ 0.0.0.0/0 0.0.0.0/0 n/a Chain forward (policy ACCEPT): Chain output (policy ACCEPT): Caso seja necessário remover todas as regras do firewall de uma só vez, utilize: 387 PROGRAMA TÉCNICO CIDADÃO # ipchains -F iptables O iptables é o manipulador das regras de firewall padrão dos kernels 2.4 e 2.6. Ele utiliza o mecanismo Netfilter do kernel, apresentando muito mais flexibilidade que o ipchains para a mesma tarefa, permitindo melhores resultados com um número menos de regras. A grande diferença do iptables em relação ao ipchains é sua modularidade apresentada, graças ao sistema de “Tabelas”. No iptables também existem cadeias, regras e alvos, como no ipchains, mas o grande diferencial é que o iptables organiza as cadeias em tabelas, onde cada tabela possui um conjunto de cadeias. Por exemplo, no iptables existe a tabela filter, que contém as cadeias INPUT, FORWARD e OUTPUT. Já a tabela nat do iptables contém as cadeias PREROUTING, POSTROUTING e OUTPUT. A tabela filter é a principal do iptables, e pode ser considerada como equivalente a toda a funcionalidade oferecida pelo ipchains. Porém, a forma como que os dados são analisados através das cadeias de regras é ligeiramente diferente do ipchains, como pode ser observado na figura abaixo: Cada uma das cadeias se relaciona de forma diferente com o tráfego de rede, dependendo da tabela em que ela se encontra. A inserção de tabelas no sistema de firewall permite que novas funcionalidades sejam adicionadas ao software de firewall (o iptables, no caso) sem que as regras de outras tabelas sejam afetadas, por exemplo. 388 PROGRAMA TÉCNICO CIDADÃO ATENÇÃO Caso o módulo do ipchains esteja carregado, é preciso remover todas as regras e em seguida o módulo ipchains, com o comando “rmmod ipchains”. Só assim será possível utilizar o iptables. listando regras no iptables A opção -L instrui o iptables a listar as regras de firewall. Essa opção é geralmente acompanhada da opção -n, que diz para o iptables não efetuar resolução de nomes para hosts e portas nas regras, mostrando IPs e números de portas ao invés de nomes. O funcionamento 389 PROGRAMA TÉCNICO CIDADÃO dessas opções é essencialmente parecido com o ipchains, mas no iptables podemos especificar qual tabela listar as regras, com a opção -t seguida do nome da tabela desejada. Acompanhe o exemplo abaixo: # iptables -nL # iptables -t nat -nL Definindo a política padrão do iptables Essa etapa funciona exatamente igual ao ipchains, com exceção de que os alvos possíveis são diferentes, podendo ser DROP (no lugar de DENY) e ACCEPT, basicamente. No exemplo abaixo, definiremos a política padrão da cadeia INPUT da tabela filter como DROP: # iptables -PINPUT DROP ATENÇÃO Nunca faça isso remotamente sem que sua conexão esteja explicitamente liberada no firewall. Adicionando regras no iptables Assim como no ipchains, as opções -A ou -I servem para adicionar regras no firewall, com a diferença que a opção -A sempre adiciona as regras no final da lista, e a opção -I seguida do número de posição permite inserir regras na ordem desejada dentro da cadeia de regras especificada. Vejamos um exemplo, onde adicionaremos as mesmas regras que foram adicionadas no exemplo do ipchains, porém agora com o iptables: # iptables -AINPUT -p tcp --dport 22 -i eth0 -s 192.168.1.0/24 \ -d 192.168.1.12 -j ACCEPT # iptables -AINPUT -i lo -j ACCEPT # iptables -AINPUT -p icmp --icmp-type echo-reply -i eth0 -j ACCEPT 390 PROGRAMA TÉCNICO CIDADÃO A sintaxe é praticamente igual, com pouquíssimas diferenças. Agora vejamos os resultados, e aproveitamos para conhecer a opção “-v” da listagem de regras (também existe no ipchains), que mostra mais informações na listagem de regras, como o número de pacotes que passaram por cada regra, interfaces de rede, etc: # iptables -vnLINPUT –line-numbers Removendo regras no iptables Funciona exatamente como no ipchains. Vejamos um exemplo, onde removeremos uma das regras: # iptables -DINPUT 3 Compartilhando uma conexão com a internet Uma comum utilização para qualquer tipo de firewall no Linux é compartilhar uma conexão com a Internet, permitindo que máquinas com endereços IP inválidos na internet (reservados para redes locais) possam navegar na internet. Isso é possível graças ao NAT (Network Address Translation). Considera a figura a seguir, que mostra uma pequena rede de exemplo: 391 PROGRAMA TÉCNICO CIDADÃO Esse é um arranjo muito comum em redes de pequeno porte. Nesse exemplo, temos uma rede interna 192.168.0.0/24, e um firewall com duas interfaces de rede, uma delas (eth1 por exemplo) está diretamente conectada a rede local e possui o endereço IP 192.168.0.1, a outra interface (eth0) está conectada na Internet e possui um IP válido qualquer, 200.1.2.3 por exemplo. Para compartilhar essa conexão de Internet, é preciso habilitar duas coisas no firewall: 392 PROGRAMA TÉCNICO CIDADÃO 1) Repassagem de pacotes: Essa parte é facilmente resolvida com o comando “echo 1 > / proc/sys/net/ipv4/ip_forward”. Mas podemos adicionar a linha “net.ipv4.ip_forward=1” no arquivo /etc/sysctl.conf e executar o comando sysctl -p para ativar as mudanças. De qualquer forma, isso permitirá a repassagem de pacotes entre as redes conectadas através do firewall. 2) Criar uma regra no firewall que faça o NAT dos pacotes: No ipchains, a regra para nossa rede de exemplo seria: # ipchains -A forward -s 192.168.0.0/24 -d 0.0.0.0 -j MASQ No iptables, a mesma regra teria a sintaxe: # iptables -t nat -A PREROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE Funcionamento do NAT O NAT, como já foi dito, permite que hosts com IPs reservados para redes locais possam navegar na Internet. Isso é possível porque as implementações do NAT trocam o campo do cabeçalho de origem de conexão quando os pacotes enviados por um host “interno” passam pela regra do firewall. Sendo assim, o firewall coloca o seu próprio IP no campo do endereço de origem no cabeçalho IP e mantém isso em um cache na memória. Assim, quando um host na internet responde a requisição, ele enviará a resposta para o IP do firewall, que por sua vez irá desfazer a troca do endereço no cabeçalho IP e entregar o pacote de resposta ao host interno que originou a comunicação. 393 PROGRAMA TÉCNICO CIDADÃO 394 PROGRAMA TÉCNICO CIDADÃO OpenOffice.org Este curso é uma introdução ao ambiente Open Office, suíte de aplicativos para escritório desenvolvido pelo próprio Open Office. Entre os inúmeros recursos oferecidos pelo Open Office, o curso apresenta aos alunos o OpenWriter (editor de textos), o OpenCalc (folha de cálculos), e os demais componentes da suíte. Nas aulas, os alunos aprenderão a salvar arquivos em diferentes formatos, usar o corretor de texto, formatar dados em planilhas, alterar as características das fontes, além de incluir folhas de cálculos em documentos do OpenWriter, entre outras tarefas. 395 PROGRAMA TÉCNICO CIDADÃO INTRODUÇÃO AO OPENOFFICE O que é o OpenOffice? OpenOffice.org é uma comunidade que desenvolve um conjunto de aplicativos de produtividade para escritórios, livre e multiplatafoma. Este conjunto inclui aplicativos essenciais como processador de texto, planilha eletrônica, gerador de apresentações e um programa de desenhos. Tudo com uma interface muito similar a outros produtos do gênero. Além de ser sofisticado e flexível o OpenOffice.org trabalha com diversos formatos de arquivos de forma transparente, inclusive com o Microsoft Office. O OpenOffice.org está disponível em 27 línguas diferentes, e a comunidade de desenvolvimento está constantemente acrescentando novos idiomas. O OpenOffice.org é estável e roda nativamente sob Solaris, Linux (inclusive PPC Linux) e Windows. Versões para FreeBSD, Irix e Mac Os X estão a caminho e encontram-se em diferentes estágios de desenvolvimento. Escrito em C++ e com as APIs documentadas e licenciadas sob as licenças de software livre LGPL e SISSL, o OpenOffice.org permite a qualquer desenvolvedor com os conhecimentos necessários tirar proveito do código fonte. Além disso, o formato de arquivos do OpenOffice.org é o XML, o que possibilita intercâmbio e interoperabilidade com outros aplicativos, facilitando assim a aceitação do produto. Histórico O OpenOffice é uma suíte de aplicativos, ou conjunto de programas, desenvolvidos para o uso em escritório. Nele são encontrados programas para edição de textos, cálculos em planilhas, 396 PROGRAMA TÉCNICO CIDADÃO criação de apresentações, entre outros. A grande vantagem da suíte OpenOffice está na sua gratuidade. Pode ser encontrada e baixada da internet e pode ser usada, copiada, distribuída e modificada, segundo as necessidades de cada empresa. Tudo isso com custo zero. Originalmente, a Sun Microsystems desenvolveu uma suíte de aplicativos gratuita chamada StarOffice, que rapidamente popularizou-se mundialmente. Com o lançamento da versão 6.0 do StarOffice, a Sun optou por comercializá-lo. Entretanto, liberou o código da versão anterior, 5.2, permitindo que a comunidade Open-Source desse continuidade ao trabalho gratuito. OpenOffice.org é o projeto de código aberto pelo qual a Sun Microsystems está liberando a tecnologia que move a mundialmente popular suíte de produtividade StarOffice. O projeto OpenOffice.org estabelece as facilidades necessárias para fazer esta tecnologia de código aberto disponível para as comunidades de desenvolvedores por todo o mundo. Além disso, o site do projeto é construído para prover um centro de informações completo e abrangente, reunindo todos os aspectos do projeto e sua tecnologia. Isso inclui detalhes da tecnologia e como ela pode ser utilizada, por exemplo, como base para futuras inovações, de API e documentação arquitetural até planejamento, notícias e informações promocionais. A comunidade OpenOffice.org pode ser encontrada em www.openoffice.org e a comunidade OpenOffice brasileira, em www.openoffice.org.br. A versão do OpenOffice utilizada neste curso é a versão em 1.1.3, em Português. 397 PROGRAMA TÉCNICO CIDADÃO OPENOFFICE TEXTO O OpenOffice Texto é um programa que possibilita a edição de textos e criação de páginas web, pois permite: - aplicação de uma grande variedade de formatações (tipo, tamanho e coloração das letras, impressão em colunas, alinhamento automático etc), - utilização de figuras, gráficos, símbolos e sons no texto, - movimentação de trechos de um texto dentro dele ou para outros textos, - duplicação de partes ou do texto todo, facilitando correções, - armazenamento de textos em arquivos, o que permite usá-los ou modificá-los no futuro. Através desse programa é possível abrir, editar, salvar e imprimir arquivos do MS Word e do StarOffice. Abrindo, salvando e imprimindo O Writer (ou qualquer aplicativo do OpenOffice) pode ser aberto clicando-se em 1. Menu K – Escritório – OpenOffice (Aplicativo). Com o OpenOffice Texto aberto, podemos abrir arquivos já salvos, clicando em “Arquivo” “Abrir”, ou pressionando as teclas “Ctrl + O”. Basta encontrar o diretório do arquivo e clicar duas vezes nele para que seja aberto. Quando o computador é desligado todo o conteúdo da memória RAM é apagado, portanto o texto precisa ser gravado (salvo): 398 PROGRAMA TÉCNICO CIDADÃO - de vez em quando (por segurança, para não perder todo o trabalho, como é freqüente acontecer durante uma falta momentânea de energia ) e - sempre que se for fechar o programa. Definição do formato, orientação e margens do papel O OpenOffice Texto permite usar papel de diferentes tamanhos, sendo necessário configurar o seu tamanho corretamente. Para isso: - Abra o menu Formatar e clicar em "Página" - Clique na aba "Página", na seta do campo "Formato" e escolher o formato do papel - Assinalar a "Orientação" em um dos 2 campos inferiores a orientação do papel (retrato ou paisagem) - Na parte inferior esquerda escolher o tamanho das 4 margens do papel (superior, inferior, esquerda e direita) Salvando um documento de texto 1. Se não desejar mudar o nome, a localização ou o formato do arquivo: - clicar sobre o botão "Salvar" na barra de funções 2. Se desejar mudar o nome, a localização ou a extensão do arquivo: - clicar no menu Arquivo e em "Salvar como". Aparece a janela "Salvar como" No campo superior, "Salvar em" selecionar o drive e a pasta onde se deseja salvar o arquivo - No campo "Nome do arquivo" digitar o nome desejado para o arquivo - No campo "Salvar como tipo" selecionar o tipo do arquivo, ou seja, determinar qual programa o poderá ler. 399 PROGRAMA TÉCNICO CIDADÃO Se houver vários documentos abertos, para salvar todos deve-se clicar no menu Arquivo e em Salvar Tudo. Salvando em diferentes formatos Note-se que clicando em Arquivo e em "Salvar como" o documento poderá ser salvo em diversos formatos, podendo ser lidos por diferentes programas: o próprio Open Office.org, Microsoft Word 97 / 2000 / XP, Microsoft Word 95, Microsoft Word 6.0, diferentes versões do Star Writer: 5.0, 4.0 e 3.0 e seus modelos, Texto, Texto codificado, "Rich Text Format" e Página Web. Salvamento automático (ou Gravação Automática) O Writer tem um recurso que permite o salvamento automático de documentos em um intervalo especificado de tempo, o que é muito interessante para evitar perda de dados em caso de travamento do computador ou de falta de energia súbita. Para isso basta: - Clicar no menu Ferramentas - Opções - Em "Abrir - Salvar" clicar em "Geral" - Em "Salvar" marcar o campo antes de "Salvar automaticamente a cada" e, ao lado, digitar ou selecionar o intervalo de tempo em que deseja salvar os documentos. Clicar em Ok. Se deixar marcado o campo "Avisar para salvar" aparecerá um aviso perguntando se deseja salvar ou não. (Evidentemente, quanto menor for o período de tempo - ou maior for a freqüência de salvamentos - com que o Writer salve arquivos, mais informações serão recuperadas se ocorrer algum problema). 400 PROGRAMA TÉCNICO CIDADÃO Como trocar o padrão de salvamento do Writer Quando se salva um documento no Writer clicando sobre o botão "Salvar" na barra de funções o formato padrão de salvamento é o nativo, ou seja, "Open Office.org 1.0 Texto" que é evidenciado pela extensão sxw. Mas se sempre for necessário salvar os arquivos com outra extensão e, para facilitar, não usar "Salvar como", pode-se alterar o padrão da extensão do arquivo criado no OpenOffice: - Clicar em Ferramentas - Opções - Abrir a opção "Abrir / Salvar" - Clicar em "Geral" - Selecionar "Texto" em "Formato de arquivo padrão" e - ao lado, em "Sempre salvar como" selecionar qual a extensão em que deseja salvar os arquivos. Notar que: 1. Dependendo do documento pode-se perder formatação pois algumas funções simplesmente desaparecem quando salvas em formatos MS Office. 2. É possível formatar a extensão tanto do Writer como dos outros programas do OpenOffice.org. Proteção de textos O Writer oferece várias maneiras de impedir alterações em documentos. Pode-se proteger um documento com uma senha: - abrir o texto a ser protegido 401 PROGRAMA TÉCNICO CIDADÃO - clicar no menu "Arquivo" e em "Salvar Como" - marcar o campo antes de "Salvar com senha" e clicar em "Salvar" Aparecerá a janela "Digitar senha" Digitar uma senha no campo após "Senha" Redigitar a senha, no campo após "Confirmar" e clicar em "OK". Para alterar esta senha, no campo "Senha", selecionar a linha de asteriscos que representa a senha existente e digitar a nova senha. Para excluir a senha pressionar Delete. Impressão de textos Para imprimir um arquivo rapidamente, em que o texto inteiro será impresso uma única vez. - clicar sobre o botão "Imprimir" Mas, para escolher a impressora, a área de impressão e o número de cópias deve-se definir opções de impressão. Como definir opções de impressão - Clicar no menu Arquivo e em Imprimir ou clicar em <Ctrl>P 402 PROGRAMA TÉCNICO CIDADÃO Algumas dicas de impressão: Imprimir múltiplas cópias de um documento: - digitar ou selecionar o número de cópias desejadas no campo "Cópias". Imprimir somente uma página: - em "Intervalo de impressão" digitar o número daquela página. Imprimir uma parte do texto: 403 PROGRAMA TÉCNICO CIDADÃO - antes selecionar o texto desejado. Em "Intervalo de impressão" selecionar a opção "Seleção". os Imprimir um intervalo contínuo de páginas: - selecionar a opção "Páginas" e digitar o intervalo com um hífen entre números. Imprimir páginas não contínuas: - selecionar a opção "Páginas" e digitar os números separados por vírgulas. Tabulação e parágrafos Pode-se alterar a aparência de blocos de texto, como o espaçamento entre as linhas ou o alinhamento do texto. Para modificar a formatação de um ou mais parágrafos: - Selecionar os parágrafos desejados - Clicar em “Formatar” - “Parágrafo” 404 PROGRAMA TÉCNICO CIDADÃO Aba Recuar espaçamento Campo Avanços de parágrafo Selecionar o parágrafo que deseja recuar e, também, o valor do recuo: Em "Avanços de parágrafo" especificar o recuo em centímetros a partir - da esquerda - da direita - nas "Primeiras Linhas" (refere-se ao avanço em todas as primeiras linhas dos parágrafos). 405 PROGRAMA TÉCNICO CIDADÃO - automático (refere-se apenas à primeira linha do parágrafo, com um espaço pré-determinado). Campo Distância Pode-se definir um espaçamento maior entre os parágrafos, acima deles e/ou abaixo deles - Superior: Espaçamento em centímetros antes do parágrafo onde se encontra o cursor. - Inferior: Espaçamento em centímetros depois do parágrafo onde se encontra o cursor. Campo Entrelinhas O espaçamento entre linhas determina a quantidade de espaço vertical entre as linhas do texto. Há algumas opções: - Simples: é o espaçamento entre linhas que possa acomodar a maior fonte possível nessa linha e um pequeno espaço adicional. - 1,5 linha: é um espaçamento uma vez e meia maior que o espaçamento simples entre linhas. - Duplo: é um espaçamento duas vezes maior que o simples. E pode-se especificar o tamanho do espaçamento em Proporcional - Mínimo - Entrelinha – Fixo: - Proporcional: o espaçamento entre linhas é aumentado ou diminuído de acordo com uma porcentagem especificada. (Por exemplo, se for um múltiplo de 1,2, aumentará o espaçamento em 20%, e se for um múltiplo de 0,8, diminuirá o espaçamento em 20%). - Mínimo: é o espaçamento entre linhas mínimo para acomodar tamanhos de fonte grandes ou elementos gráficos que, de outro modo, não se ajustariam ao espaçamento especificado. - Fixo: é um espaçamento fixo entre linhas que é ajustado pelo usuário. Todas as linhas ficam espaçadas uniformemente. Aba Alinhamento 406 PROGRAMA TÉCNICO CIDADÃO Alinhamento é a posição do texto em relação às margens. O Writer é pré definido para alinhar o texto pela margem esquerda deixando a borda direita desalinhada. Pode-se mudar o alinhamento, selecionando os parágrafos que se deseja alinhar e clicando sobre um dos botões de alinhamento na barra de ferramentas padrão ou clicando em Formatar/ Parágrafo e escolhendo a opção de alinhamento desejada (Centralizado, Esquerdo, Direito ou Justificado ). No alinhamento Justificado o parágrafo é alinhado tanto à direita quanto à esquerda da linha. Para tal aparecem espaçamentos entre as palavras. Notar que o Writer apresenta a possibilidade de definir o alinhamento da última linha do parágrafo justificado. Aba Fluxo do Texto No campo "Divisão silábica" pode-se configurar a hifenização. Se o campo "Automaticamente" for marcado será ativada a hifenização do parágrafo podendose definir quantos caracteres devem permanecer no final da linha e no início da linha. No último campo pode-se definir o número máximo de linhas que ´podem apresentar as hifenizações. No campo "Opções" pode-se definir as quebras, ou seja, se um grupo de linhas ou parágrafos será quebrado ficando uma parte em uma página e outra parte em outra página. Aqui é necessário entender o conceito de linhas viúvas e órfãs: - Isolada (ou viúva) é a última linha de um parágrafo que fica sozinha na parte superior de uma página. – Órfã é a primeira linha de um parágrafo que fica sozinha na parte inferior de uma página. Para evitar a quebra de linhas deve-se selecionar o campo 407 PROGRAMA TÉCNICO CIDADÃO - "Manter linhas juntas" Para evitar a quebra de parágrafos deve-se selecionar o campo - "Manter parágrafos juntos" Nos 2 últimos campos "Controle de linhas órfãs" e "Controle de linhas isoladas" define-se o número de linhas que poderão ficar nessas condições. Aba Numeração Aqui pode-se escolher o estilo da numeração Aba Tabulação Aqui pode-se definir quanto e qual o tipo de tabulação (direita, esquerda, centro, ou decimal) Aba Capitular Letra capitulada: é a primeira letra de um parágrafo realçada por tamanho e formato diferente do restante do texto. Aqui pode-se capitular uma letra, uma palavra ou um conjunto de texto. O campo "Exibir Iniciais" deve ser marcado para permitir visualizar o efeito. O campo "Palavra Inteira" permite que toda a palavra seja capitulada. As outras opções referem-se a - números de caracteres que se deseja capitular, - número de linhas reservado para as letras capituladas e - distância das letras capituladas do restante do texto. 408 PROGRAMA TÉCNICO CIDADÃO O campo "Conteúdos" permite digitar o texto a ser capitulado e definir o estilo de caracteres. Formatando o texto Depois de digitado pode-se desejar alterar a aparência do texto produzido. Como no OpenOffice Texto estão disponíveis muitos tipos de letra, diferentes tamanhos e várias cores, o texto pode ter a aparência desejada, possibilitando que se realce adequadamente cada parte do documento. A aplicação desses formatos pode ser feita de modo personalizado. Seleção do texto Porém deve-se lembrar, antes de fazer qualquer modificação deve-se indicar ao programa onde ela será feita, ou seja, é necessário selecionar o texto que se deseja alterar. A aplicação dos formatos exige que o texto desejado já esteja selecionado O texto pode ser selecionado, utilizando: - o Mouse Para selecionar uma palavra basta clicar duplo sobre ela. Para selecionar uma linha basta dar um clique triplo sobre qualquer palavra da linha. - o Teclado Por meio do teclado, pode-se acessar diferentes partes do texto: Pressionar SHIFT seta para direita Será selecionado Um caracter para a direita 409 PROGRAMA TÉCNICO CIDADÃO SHIFT seta para esquerda Um caracter para a esquerda SHIFT CTRL seta para direita Palavras inteiras para frente SHIF CTRL seta para esquerda Palavras inteiras para trás SHIFT END Posição do cursor até o fim da linha SHIFT HOME Posição do cursor até o início da linha SHIFT seta para baixo Posição do cursor e uma linha para baixo SHIFT seta para cima Posição do cursor e uma linha para cima SHIFT CTRL END Posição do cursor até a última linha da página final SHIFT CTRL HOME Posição do cursor até a primeira linha da página inicial CTRL A Todo o texto Page Down Uma tela para baixo Page Up Uma tela para cima CTRL A (com o cursor na célula) Uma célula preenchida de uma tabela CTRL A A (com o cursor na tabela) Tabela inteira Formatação personalizada Para mudar a aparência dos caracteres é necessário selecionar o texto e aplicar um ou mais atributos ou formatos de caracteres, que podem ser letras, números, símbolos, marcas de pontuação ou espaços. Os tipos diferentes de letras (fontes) que o Writer disponibiliza são os mesmos instalados no Windows e podem ter vários tamanhos. Primeiramente seleciona-se o que se deseja formatar e depois formata-se. Os formatos podem ser aplicados por meio de diferentes maneiras: 1. Usar os atalhos existentes na barra de ferramentas Objetos 410 PROGRAMA TÉCNICO CIDADÃO Há botões para alterar estilo, tipo de fonte, tamanho da fonte, negritar, aplicar o formato itálico, sublinhar simples, alinhar à esquerda, centralizar, alinhar à direita, justificar, aplicar marcadores (numerados ou não), colorir a fonte ou o parágrafo... ou 2. Clicar em algum lugar vazio do texto com o botão direito do mouse. No menu de contexto, clicar em "Caractere" ou 3. Clicando-se em “Formatar” e em “Caractere”. A seguinte janela é aberta: Aparecerá a janela “Caractere” com diversas abas: Fonte, Efeitos de Fonte, Posição Hiperligação e Plano de Fundo. 411 PROGRAMA TÉCNICO CIDADÃO Aba Fonte Clicando-se sobre a aba "Fonte" pode-se escolher a fonte, estilo, tamanho, cor e língua. - Fonte: dá acesso a vários tipos de letras já disponíveis - Estilo: refere-se aos efeitos Normal, Negrito, Itálico ou os 2 últimos. - Tamanho: Aqui aparece a lista de possíveis tamanhos para a fonte selecionada. Pode-se selecionar um tamanho entre as opções existentes ou digitar o valor no campo apropriado. - Cor: Permite alterar a cor da fonte. - Língua: idioma. Escolher o que desejar (dando duplo clique) e observar o resultado no "Campo de visualização", na parte inferior da janela. Depois de escolher os formatos, clicar no botão "Ok". Os novos parágrafos acrescentados posteriormente, já serão formatados. Aba Efeitos de Fonte Clicando-se sobre a aba "Efeitos de fonte" pode-se selecionar efeitos sobre a fonte. Eles incluem: - Sublinhar: em formas diferentes e colorido ou não, - Hachurar: também em formas diversas. - Campo Relevo: Pode ser colocado de duas maneiras - "Em relevo" e "Baixo relevo" aos quais podem ou não ser adicionados efeitos extras de "Contorno", "Sombra" e "Intermitente". Notar que o "Intermitente", não aparece no "Campo de visualização". 412 PROGRAMA TÉCNICO CIDADÃO - Campo Efeitos: Maiúscula: Altera para maiúsculas todas as letras do texto selecionado. Minúscula: Altera para minúsculas todas as letras do texto selecionado. Títulos: Altera Para Maiúscula A Primeira Letra De Cada Palavra Do Texto Selecionado. Caixa alta: Aplica caixa alta em todo o texto selecionado. Escolher o que desejar e clicar no botão "Ok". Aba Posição Permite aplicar Sobrescrito e Subscrito, o grau de rotação e dimensionamento e escolher o tipo de espaçamento entre os caracteres (padrão, expandido e condensado). Aba Hiperlink Permite inserir e editar um hiperlink no texto selecionado. Aba Plano de Fundo Na janela que aparece, pode-se escolher uma cor para o fundo do texto selecionado. "Sem preenchimento" não inclui cor. Escolher o que desejar e clicar no botão "Ok". Configuração da página Pode-se alterar as configurações de uma série de ítens: - Clicar em “Formatar” - “Página”: 413 PROGRAMA TÉCNICO CIDADÃO Aba Organizador Aqui pode-se definir os estilos e há informações sobre o texto no campo "Contém". 414 PROGRAMA TÉCNICO CIDADÃO Aba Página É aconselhável configurar a página do texto antes de iniciar a edição, para sempre ter uma boa idéia de como ficará a posição do texto na(s) folha(s). Aqui se pode definir as margens da folha, o tamanho do papel utilizado pela impressora, a direção da impressão. Campo Formato Permite selecionar entre os tamanhos do papel aquele que será usado, entre os formatos padrão, já existentes. Campos Largura e Altura Permite definir tamanhos diferentes dos formatos padrão existentes, digitando as medidas nos campos "Largura" e "Altura" para um tamanho de papel personalizado. Campo Orientação Esse campo possibilita definir a posição do papel: retrato ou paisagem. Campo Bandeja do Papel Para impressoras com múltiplas bandejas de papel, aqui se pode definir qual bandeja será utilizada. Para impressoras comuns pode-se deixar a configuração padrão da impressora. Campo Margens Aqui pode-se definir as margens, ou seja, a distância entre o texto e o início do papel. O valor padrão é 2 cm em todas as direções. Em geral esse valor está acima do mínimo do padrão comum dos diferentes modelos de impressoras. Portanto, há mais garantia extra de que o texto não será cortado na impressão. 415 PROGRAMA TÉCNICO CIDADÃO Selecionar ou digitar as medidas desejadas em "Esquerda", "Direita", "Superior", "Inferior". Se forem escolhidos valores que excedam a área de impressão, recerá um aviso com a solicitação de confirmação. Então, pode-se celar, pressionando o botão "Não". Os números serão reajustados os valores válidos mais próximos dos anteriormente definidos. vas. apacanpara Configurações de layout Pode-se especificar em quais páginas do texto as escolhas feitas serão efeti- Configurar Página Pode-se definir a Paginação, ou seja a numeração das páginas. Permite escolher entre "Direita e esquerda", "Invertido", "Somente direita" e "Somente esquerda", para textos que serão impressos em ambos os lados do papel, somente na página impressa à direita (configuração padrão da primeira página), à esquerda ou em ordem invertida. Formato Possibilita escolher o formato do número - algarismos romanos ou letras (em maiúsculas ou minúsculas) ou algarismos arábicos. Como funcionam os estilos do OpenOffice Estilos são modelos pré-concebidos de formatação de parágrafos usados para padronizar os textos. Você pode utilizar o “Estilista” para aplicar, criar, editar, adicionar e remover estilos de formatação. Para acessar esta função, basta clicar em “Formatar” - “Estilista”, clicar no botão “Estilista na barra de funções” ou teclar F11. 416 PROGRAMA TÉCNICO CIDADÃO Como aplicar um estilo: Selecione o texto. Para aplicar um estilo de caractere a uma palavra, selecione a palavra. Para aplicar um estilo de parágrafo, selecione o parágrafo. Na janela do Estilista, clique duas vezes no estilo. eles: A barra de ferramentas “Estilista” também contém ícones para formatar documentos. São 1- Estilos de Parágrafo: Exibe estilos de formatação para parágrafos. Utilize “estilos de parágrafo” para aplicar a mesma formatação, como fonte, numeração e layout, aos parágrafos do documento. 2- Estilos de Caractere: Exibe estilos de formatação para caracteres. Utilize estilos de caracteres para aplicar estilos de fonte ao texto selecionado em um parágrafo. 3- Estilos de Quadro: Exibe estilos de formatação para quadros. Utilize estilos de quadro para formatar o layout e a posição dos quadros. 4- Estilos de Página: Exibe estilos de formatação para páginas. Utilize estilos de página para determinar layouts de página, incluindo a presença de cabeçalhos e rodapés. 5- Estilos de Numeração: Exibe estilos de formatação para listas numeradas e com marcadores. Utilize estilos de numeração para formatar caracteres de número e de marcador e para especificar recuos. 6- Modo de Formato de Preenchimento: Aplica o estilo selecionado ao objeto ou texto que você selecionar no documento. Clique neste ícone e, em seguida, arraste uma seleção no documento para aplicar o estilo. Para sair deste modo, clique novamente no ícone ou pressione Esc. 417 PROGRAMA TÉCNICO CIDADÃO do 7- Novo Estilo a partir da Seleção: Cria um novo estilo com base na formatação parágrafo, página ou seleção atual. 8- Atualizar Estilo: Substitui o estilo de parágrafo selecionado no Estilista pelo estilo de parágrafo selecionado. O navegador Através do navegador você poderá ir rapidamente para diferentes partes do documento. Você também pode utilizar o Navegador para inserir elementos do documento atual, ou de outros documentos abertos, e para organizar Documentos Mestre. Para abrir o navegador clique em “Editar” - “Navegador”, ou tecle F5 ou clique no botão “Ativar/desativar navegador” na barra de funções. 418 PROGRAMA TÉCNICO CIDADÃO Clique no sinal de adição (+), ao lado de uma categoria no Navegador, para exibir os ítens da categoria. Para exibir o número de ítens de uma categoria, escolha Ajuda e certifique-se de que Dica esteja selecionado e, em seguida, repouse o ponteiro do mouse sobre a categoria do Navegador. Para acessar um ítem do documento, clique duas vezes nele no Navegador. Para acessar um ítem anterior ou o próximo em um documento, dê um clique longo no ícone navegação a fim de abrir a barra de ferramentas flutuante Navegador, clique na categoria do ítem e, em seguida, clique na seta para cima ou para baixo. Abaixo segue uma lista dos botões que compõem o Navegador: 419 PROGRAMA TÉCNICO CIDADÃO 1- Alternar: Alterna entre exibição principal e exibição normal quando um documento mestre é aberto. 2- Navegação: Abre a barra de ferramentas flutuante Navegação, através da qual você poderá ir rapidamente até o próximo ítem ou até o anterior, na categoria selecionada. Selecione a categoria e, em seguida, clique nas setas "Anterior" e "Próximo". Para continuar a pesquisa, clique no ícone Repetir Pesquisa na função da barra de ferramentas flutuante Navegação. 3- Anterior: Vai para o ítem anterior do documento. Para especificar o tipo de ítem que pretende acessar, dê um clique longo no ícone Navegação e, em seguida, clique em uma categoria do ítem - por exemplo, "Figuras" 4- Próximo:Vai para o próximo ítem no documento. Para especificar o tipo de ítem que pretende acessar, dê um clique longo no ícone Navegação e, em seguida, clique em uma categoria do ítem - por exemplo, "Figuras". 5- Número da Página: Digite o número da página para a qual deseja ir e, em seguida, pressione Enter. Você também pode utilizar as teclas Page Up ou Page Down para inserir o número da primeira ou última página. 6- Modo de Arrastar: Define as opções de arrastar e soltar para inserir ítens do Navegador em um documento, por exemplo, como um hyperlink. Dê um clique longo nesse ícone e, em seguida, escolha a opção que você deseja utilizar. Inserir como Hyperlink Cria um hyperlink quando você arrasta e solta um ítem dentro do documento atual. Clique no hyperlink no documento a fim de ir até o ítem para o qual ele aponta. Inserir como Link Insere o ítem selecionado como um link onde você arrasta e solta no documento atual. Textos são inseridos como seções protegidas. O conteúdo do link é automaticamente atualizado quando a fonte é alterada. Para atualizar manualmente os links em um documento, escolha Ferramentas - Atualizar – Links. Não é possível criar links para figuras, objetos OLE, referências e índices. 420 PROGRAMA TÉCNICO CIDADÃO Insere como Cópia Insere uma cópia do ítem selecionado onde você arrasta e solta no documento atual. Não é possível arrastar e soltar cópias de figuras, objetos OLE, referências e índices. 7- Ascender Capítulo: Move o título selecionado, bem como o texto abaixo do título, uma posição acima no Navegador e no documento. Para mover somente o título selecionado, e não o texto associado ao título, mantenha pressionada a tecla Ctrl e, em seguida, clique neste ícone. 8- Rebaixar Capítulo: Move o título selecionado, bem como o texto abaixo do título, uma posição abaixo no Navegador e no documento. Para mover somente o título selecionado, e não o texto associado ao título, mantenha pressionada a tecla Ctrl e, em seguida, clique neste ícone. 9- Ativar/Desativar Caixa de Listagem: Mostra ou oculta a lista do Navegador , desde que o Navegador não esteja encaixado. 10- Exibição de Conteúdo: Alterna entre a exibição de todas as categorias do Navegador e a categoria selecionada. 11- Definir Lembrete: Clique aqui para definir um lembrete na posição atual do cursor. Você pode definir até cinco lembretes. Para ir até um lembrete, clique no ícone Navegação . Na janela Navegação, clique no ícone Lembrete e, em seguida, clique no botão Anterior ou Próximo. 12- Cabeçalho: Move o cursor até o cabeçalho, ou do cabeçalho para a área de texto do documento. 13- Rodapé: Move o cursor até o rodapé, ou do rodapé para a área de texto do documento. 14- Ancorar <-> Texto: Vai para a área entre o texto e a âncora da nota de rodapé. 15- Níveis de Títulos Mostrados: Clique neste ícone e, em seguida, escolha, na estrutura de tópicos, o número de níveis de títulos que você deseja exibir na janela do Navegador. Você também pode acessar este comando clicando com o botão direito do mouse em um título na janela do Navegador. 421 PROGRAMA TÉCNICO CIDADÃO 1-10 Clique em 1 para exibir somente os níveis superiores de títulos na janela do Navegador e em 10 para exibir todos os títulos. 16- Ascender Nível: Aumenta o nível do título selecionado na estrutura de tópicos e dos títulos abaixo dele, exceto um. Para aumentar somente o nível do título selecionado, mantenha pressionada a tecla Ctrl e, em seguida, clique neste ícone. 17- Rebaixar Nível: Rebaixa o nível do título selecionado na estrutura de tópicos e dos títulos abaixo dele, exceto um. Para rebaixar somente o nível do título selecionado, mantenha pressionada a tecla Ctrl e, em seguida, clique neste ícone. Localizando e substituindo Procura por ou substitui texto ou formatos no documento atual. Para acessar este comando, clique em “Editar” - “Localizar e substituir”, ou tecle “Ctrl +F”, ou clique no botão “Localizar e substituir”. A seguinte janela se abre: 422 PROGRAMA TÉCNICO CIDADÃO Procurar por Insira o texto pelo qual você deseja procurar ou selecione uma pesquisa anterior da lista. As opções de pesquisa estão listadas na área Opções da caixa de diálogo. Substituir por Insira o texto de substituição, ou selecione um texto ou um estilo de substituição recente na lista. As opções de substituição estão listadas na área Opções da caixa de diálogo. Opções Somente Palavras Inteiras Palavras inteiras que correspondem exatamente ao texto de pesquisa são encontradas; se o texto de pesquisa corresponde somente a uma parte da palavra, a pesquisa não obterá resultados. Recuar A pesquisa inicia na posição atual do cursor e recua até o início do arquivo. Expressões regulares Permite o uso de caracteres coringa na pesquisa. Diferenciar Maiúsculas de Minúsculas Distingue os caracteres em maiúsculas e minúsculas. Somente a Seleção Atual Pesquisa somente no texto selecionado. 423 PROGRAMA TÉCNICO CIDADÃO Procurar por Estilos Procura pelo estilo que você especificou. Marque esta caixa de seleção e, em seguida, selecione um estilo da lista Procurar por . Para especificar um estilo de substituição, selecione um estilo da lista Substituir por. Pesquisa por similaridade Localize os termos que forem semelhantes ao texto na caixa Procurar por. Marque essa caixa de seleção e, em seguida, clique no botão ... para definir as opções de similaridade. Localizar Tudo Localiza e seleciona todas as ocorrências do texto ou do formato que você está procurando no documento. Localizar Localiza e seleciona a próxima ocorrência do texto ou do formato que você está procurando no documento. Substituir Tudo Substitui todas as ocorrências do texto ou do formato que você deseja substituir. Substituir Substitui o texto ou o formato selecionado pelo qual você procurou e, em seguida, procura pela próxima ocorrência. Atributos Escolha os atributos de texto gerais que você deseja procurar. Por exemplo, se você procurar por um atributo de Fonte, serão localizadas apenas as instâncias de texto que não utilizam o estilo de fonte padrão. Para localizar uma fonte específica, clique no botão Formato . Formatação Localiza recursos de formatação de texto específicos, como tipos de fonte, efeitos de fonte e características de fluxo do texto. 424 PROGRAMA TÉCNICO CIDADÃO Sem Formatação Clique na caixa Procurar por ou Substituir por e, em seguida, clique neste botão para remover os critérios de pesquisa baseados em formatos. Como utilizar a auto correção e a auto-formatação Define as opções para a correção automática de erros à medida que você digita. Para acessar este comando basta ir em “Ferramentas” - “Auto-correção/auto-formatação”. As configurações de auto correção serão aplicadas quando você pressionar a tecla “Enter” após ter inserido uma palavra. 425 PROGRAMA TÉCNICO CIDADÃO Para ativar ou desativar o recurso de auto correção, no OpenOffice.org.br Texto, escolha “Formatar” - “auto formatar” - “Ao Digitar”. Para aplicar as configurações de auto formatação a um documento de texto inteiro, escolha “Formatar” - “auto formatação” - “Aplicar”. Aba Substituir Edita a tabela de substituição para correção ou substituição automática de palavras ou abreviações no documento. 426 PROGRAMA TÉCNICO CIDADÃO Aba Exceções Especifique as combinações de letras ou abreviações que você não deseja que o OpenOffice.org.br corrija automaticamente. Aba Opções Selecione as opções para a correção automática de erros ao digitar e, em seguida, clique em OK. Aba Aspas Personalizadas Especifique as opções de auto correção para as aspas no documento. Aba Completar Palavra Defina as opções para completar palavras que ocorram com freqüência enquanto você digita. auto formatação Formata automaticamente o arquivo de acordo com as opções que definidas em “Ferramentas” - “auto correção”. Para acessar esta função, vá em “Formatar” - “Auto formatar”. Ao Digitar Formata automaticamente o documento ao digitar. Para ajustar as opções de formatação, abra Ferramentas – auto correção/auto formatação e, em seguida, clique na guia Opções. Aplicar Formata automaticamente o arquivo de acordo com as opções que você definiu Ferramentas – auto correção. em 427 PROGRAMA TÉCNICO CIDADÃO Aplicar e Editar Alterações Formata automaticamente o arquivo de acordo com as opções definidas Ferramentas - auto correção/auto formatação. Antes de aplicar a formatação, o OpenOffice.org.br pede que você aceite ou rejeite as alterações. em Para abrir a caixa de diálogo auto formatação de Tabelas, clique em uma célula da tabela e, em seguida, escolha Formatar – auto formatação. Como utilizar o auto texto O OpenOffice.org.br Writer permite que você armazene texto, texto com figuras, tabelas e campos como auto texto para que possa inseri-lo rapidamente em um documento quando desejar. Se quiser, você também pode armazenar textos formatados. Criação de uma Entrada de auto texto 1. Selecione o texto, o texto com figuras, a tabela ou o campo que você deseja salvar como entrada de auto texto. Uma figura pode ser armazenada somente se estiver ancorada como um caractere e estiver precedida e seguida de, pelo menos, um caractere de texto. 2. Escolha “Editar” - “auto texto”. 3. Selecione a categoria em que deseja armazenar o auto texto. 4. Digite um nome que contenha mais que quatro caracteres. Isso lhe permite usar a opção de auto texto Exibir o restante do nome como sugestão durante a digitação. Se desejar, você pode modificar o atalho proposto. 5. Clique em auto texto e, em seguida, escolha Novo. Para inserir um auto texto, faça o seguinte: 1. Clique no documento em que deseja inserir uma entrada de auto texto. 2. Escolha “Editar” - “auto texto”. 3. Selecione o auto texto que você deseja inserir e, em seguida, clique em Inserir. 428 PROGRAMA TÉCNICO CIDADÃO Você também pode digitar o atalho para uma entrada de auto texto e, em seguida, pressionar F3. Outra alternativa seria dar um longo clique no ícone Editar auto texto na Barra de Ferramentas Principal e, em seguida, escolher uma entrada de auto texto. A caixa de diálogo auto texto lista as categorias e entradas do auto texto. Para acessá-la, vá em “Editar” - “auto texto”. Exibir o restante do nome como sugestão durante a digitação Exibe uma sugestão para completar uma palavra como uma Dica de Ajuda depois que você digita as três primeiras letras de uma palavra que corresponde a uma entrada do auto texto. Para aceitar uma sugestão, pressione Enter. Se mais de uma entrada de auto texto corresponder às letras que você digitou, pressione Ctrl+Tab para avançar pelas entradas. Por exemplo, para inserir um texto provisório, digite "Prov" e depois pressione Enter. Para exibir uma lista em ordem inversa, pressione Ctrl+Shift+Tab. 429 PROGRAMA TÉCNICO CIDADÃO Nome Lista o nome da entrada de auto texto selecionada no momento. Se você selecionou um texto no documento, digite o nome da nova entrada de auto texto, clique no botão auto texto e depois escolha Novo. Atalho Exibe o atalho para a entrada de auto texto selecionada. Se você estiver criando uma nova entrada de auto texto, digite o atalho que deseja utilizar para ela. Caixa de listagem Lista as categorias de auto texto. Para ver as entradas de auto texto em uma categoria, clique duas vezes na categoria ou clique no sinal de adição (+) na frente da categoria. Para inserir uma entrada de auto texto no documento atual, selecione a entrada na lista e depois clique em Inserir. Inserir Insere o auto texto selecionado no documento atual. Fechar Fecha a caixa de diálogo e salva todas as alterações. auto texto Clique para exibir comandos de auto texto adicionais, por exemplo, para criar uma nova entrada de auto texto a partir de uma seleção de texto no documento atual. Novo Cria uma nova entrada de auto texto a partir da seleção que você fez no atual. A entrada é adicionada à categoria de auto texto selecionada no momento. documento 430 PROGRAMA TÉCNICO CIDADÃO Novo (somente texto) Cria uma nova entrada de auto texto somente a partir do texto na seleção que você fez no documento atual. Figuras, tabelas e outros objetos não são incluídos. Copiar Copia o auto texto selecionado para a área de transferência. Substituir Substitui o conteúdo da entrada de auto texto selecionada pela seleção feita no documento atual. Renomear Abre a caixa Renomear Bloco de Texto, na qual você poderá alterar o nome da entrada de auto texto selecionada. Excluir Exclui o(s) elemento(s) selecionado(s) após a confirmação. Editar Abre a entrada de auto texto selecionada para edição em um documento separado. Faça as alterações desejadas e escolha Arquivo - Salvar auto texto e depois escolha Arquivo – Fechar. Macro Abre a caixa de diálogo Atribuir Macro, onde você pode anexar uma macro para a entrada de auto texto selecionada. Você também pode usar macros que estejam vinculadas a algumas das entradas de auto texto oferecidas em entradas de auto texto que você criar. As entradas de auto texto devem ser criadas com a opção "somente texto". Por exemplo, se você inserir a seqüência 431 PROGRAMA TÉCNICO CIDADÃO <campo:empresa> em uma entrada de auto texto, o OpenOffice.org.br substituirá a seqüência pelo conteúdo do campo do banco de dados correspondente. Importar Abre uma caixa de diálogo na qual você poderá selecionar o modelo ou documento do Word MS 97/2000/XP que contém as entradas de auto texto que deseja importar. Categorias Abre a janela Editar Categorias. Editar Categorias Adiciona, renomeia ou exclui categorias de auto texto. Categoria Exibe o nome da categoria de auto texto selecionada. Para alterar o nome da categoria, digite um novo nome e depois clique em Renomear. Para criar uma nova categoria, digite um nome e depois clique em Novo. Caminho Exibe o caminho atual para o diretório onde os arquivos de categoria de auto texto selecionados estão armazenados. Se você estiver criando uma categoria de auto texto, selecione onde deseja armazenar os arquivos de categorias. Lista de seleção Lista as categorias de auto texto existentes e os caminhos correspondentes. Caminho Abre a caixa de diálogo Selecionar Caminhos, na qual você poderá selecionar o diretório para armazenar o auto texto. 432 PROGRAMA TÉCNICO CIDADÃO Para adicionar um novo caminho, clique no botão Caminho na caixa de diálogo Selecionar Caminhos , localize o diretório que deseja adicionar e depois clique em Adicionar. Você também pode escolher Ferramentas - Opções - OpenOffice.org.br - Caminhos, selecionar auto texto na lista e depois clicar em Editar. Salvar links relativos a Use esta área para definir como o OpenOffice.org.br insere links no diretório de auto texto. Sistema de arquivos Links para diretórios de auto texto no computador são relativos. Internet Links para arquivos na Internet são relativos. Mostrar Visualização Mostra uma visualização da entrada de auto texto selecionada. Molduras e letras especiais Para inserir uma moldura no documento vá em “Inserir” - “Moldura”. Será aberta uma tela contendo várias opções de ajuste ou definição da moldura, tais como bordas e fundo. Esta opção insere uma moldura no texto com várias opções de plano de fundo, cor, imagem, etc. Pode-se também usar as opções do próprio OpenOffice.org ou uma moldura ou imagem escolhida pelo próprio usuário. 433 PROGRAMA TÉCNICO CIDADÃO É possível inserir também molduras flutuantes, acessando o menu “Inserir” - “Moldura flutuante”. Como inserir uma moldura de texto Basta selecionar o texto e depois ir em “Inserir” - “Moldura”. A mesma caixa de diálogo mostrada acima é aberta, através da qual o usuário pode formatar a moldura conforme o desejado. 434 PROGRAMA TÉCNICO CIDADÃO Uso de tabela e formatação Uma tabela possibilita ordenar os dados dentro de um documento de texto de forma semelhante a uma planilha, facilitando a organização de trabalhos comparativos ou que exijam pequenas operações matemáticas – a tabela possui vínculos com o OpenOffice.org Planilha, o que possibilita a criação de fórmulas dentro de uma tabela. Para inserir uma tabela existem duas formas: 1. Pela Barra de Menu: Clique na Barra de Ferramentas em “Inserir” – “Tabela”. Ou também pode-se inserir uma tabela pelo botão na Barra de Ferramentas. Em seguida aparecerá esta tela: No campo Tamanho, deve-se escolher o número de Colunas ou de Linhas necessárias para a Tabela. Uma vez escolhida, é só clicar em OK para inserir a tabela. Para inserir uma tabela com cores e bordas formatadas clique no botão auto formatar, escolha a formatação e clique em OK. 435 PROGRAMA TÉCNICO CIDADÃO 2. Pela Barra de ferramentas: Para inserir uma tabela pela barra de ferramentas clique no botão Inserir e mantendo-o pressionado escolha o ítem Tabela. Para definir o tamanho da tabela, o usuário deverá arrastar o tabela para a direita e para baixo, definindo as células da tabela. Depois de selecionar o tamanho da tabela, dê um clique com o botão esquerdo. A tabela será exibida em seguida. Formatando a Tabela Para formatar uma tabela já inserida no seu documento: 1. Selecione a tabela; 436 PROGRAMA TÉCNICO CIDADÃO 2. Clique na barra de menus em Formatar – Tabela 3. Aparecerão estas opções: (estas opções só estarão disponíveis na barra de menus quando uma tabela estiver selecionada). Aba Tabela Este recurso possibilita renomear a tabela, reajustar o alinhamento – se automático, à direita, à esquerda etc., e também o espaçamento de um texto em relação à tabela. 437 PROGRAMA TÉCNICO CIDADÃO Aba Fluxo de Texto Este recurso possibilita reajustar o texto dentro da tabela. Aba Colunas Esta opção possibilita reajustar a largura das colunas da tabela. Aba Bordas Esta opção possibilita fazer ajustes nos contornos da tabela. Aba Plano de Fundo Esta opção possibilita formatar o plano de fundo de uma tabela, inserindo uma cor ou uma imagem. Corrigir erros datilográficos É possível verificar os erros ortográficos do documento ou da seleção atual. O OpenOffice.org.br inclui cabeçalhos, rodapés, entradas de índice e notas de rodapé na verificação ortográfica. A verificação ortográfica inicia na posição atual do cursor e avança até o final do documento ou da seleção. Depois, você pode escolher continuar a verificação ortográfica a partir do início do documento. Para acessar este comando escolha “Ferramentas” - “Verificação ortográfica” - “Verificar”, tecle F7 ou clique no botão “Verificação ortográfica” na barra de ferramentas. A verificação ortográfica procura palavras com erros ortográficos e lhe oferece a opção para adicionar uma palavra desconhecida a um dicionário de usuário. Quando a primeira palavra com erros ortográficos é encontrada, a caixa de diálogo Verificação Ortográfica é exibida. Utilização de Imagens É possível que o usuário insira uma figura no texto, com as opções de procurar a figura no Editor de Imagem do OpenOffice.org ou em outra pasta. Para isso clique na Barra de Menu em Inserir - Figura. Neste ítem há duas opções: 438 PROGRAMA TÉCNICO CIDADÃO 1. Do Arquivo: Pode-se escolher uma imagem gravada no computador, selecionando-a na janela que se abre e clicando em abrir. 2. Digitalizar: Com este recurso, pode-se scannear uma foto para o seu texto. Ao acioná-lo aparecerão dois ítens: o de “Selecionar Origem” – que serve para o usuário escolher qual o recurso será usado – uma webcam ou um scanner, por exemplo, e o de “Adquirir” para acionar o programa. Utilizando Objetos de Desenho Para se inserir objetos no texto, vá no menu “Inserir” - “Objeto” e escolha umas das sete opções de objetos: Inserir Objeto OLE Esta opção insere no texto um objeto a partir de um documento feito no OpenOffice.org. Plug-in Esta opção permite inserir um objeto do tipo Plug-in no documento texto que está sendo criado ou o documento em HTML. Um Plug-in é um programa anexado ao browser que roda arquivos tipo Miniaplicativos. Som Insere um arquivo de som no documento atual. Localize o arquivo de som, em seguida, clique em Inserir. Vídeo Insere um arquivo de vídeo no documento atual. Localize o arquivo de vídeo, em seguida, clique em Inserir. 439 PROGRAMA TÉCNICO CIDADÃO Miniaplicativo Um Miniaplicativo é um programa que roda no Browser. Para inseri-lo clique na Barra de Menu em Inserir - Objeto – Miniaplicativo. Fórmula Para inserir uma fórmula no documento clique na barra de menu Inserir - Objeto Fórmula. - Gráfico Esta opção permite ao usuário inserir e configurar um gráfico no documento. Fonte de Dados: como elaborar consultas a um banco de dados e como gerar relatórios a partir de consultas a bancos de dados A "consulta" é uma exibição especial da tabela. As consultas podem exibir certos registros ou somente alguns campos por registro e, se necessário, também classificar os registros. A consulta pode se aplicar a uma tabela ou a várias tabelas se elas estiverem vinculadas por campos de dados comuns. Para acessar esse comando... Abrir Banco de Dados - Menu de Contexto de um Recipiente de Consulta Utilize as consultas para localizar registros nas tabelas de dados, com base em um determinado critério. Todas as consultas criadas para um banco de dados são listadas na entrada Consultas. Devido ao fato de essa entrada conter as consultas de banco de dados, ela também é chamada de "recipiente de consulta". Impressão de Consultas Para imprimir uma consulta ou tabela: 440 PROGRAMA TÉCNICO CIDADÃO 1. Abra um documento de texto (ou um documento de planilha se você preferir as funções de impressão desse tipo de documento). 2. Abra o banco de dados para que você possa ver o nome da consulta ou tabela como uma entrada. 3. Arraste o nome para o documento aberto. Será exibida a caixa de diálogo Inserir Colunas do Banco de Dados 4. Decida quais colunas = campos de dados você deseja incluir. Você também pode clicar no botão auto formatação e selecionar o tipo de formatação correspondente. Feche a caixa de diálogo. A consulta ou tabela será inserida no documento. Imprima o documento, escolhendo Arquivo – Imprimir. Criação, Utilização e Edição de Relatórios de Banco de Dados O Assistente de Relatório guia você através de todas as etapas necessárias para criar relatórios em tabelas ou consultas a bancos de dados. O Assistente de Relatório oferece uma seqüência de caixas de diálogos e, de acordo com as seleções feitas nessas caixas, o relatório é construído e preenchido com dados. Criação de um Relatório com o Assistente Chame o Assistente de Relatório usando o menu Arquivo - Assistente - Relatório. Estas são as etapas principais realizadas pelo Assistente de Relatório: 1. Seleção do banco de dados e da tabela ou consulta. 2. Edição dos nomes que serão impressos para os campos do banco de dados, se necessário. 3. Seleção do modo como agrupar e ordenar os campos do banco de dados. 4. Seleção de um layout para um dos modelos fornecidos. 5. O relatório será criado como um modelo ou como um relatório estático. 441 PROGRAMA TÉCNICO CIDADÃO Um modelo de relatório pode ser reutilizado a qualquer momento com os dados atuais. Um relatório estático é uma cópia instantânea dos dados no momento de criação do relatório. Utilização de um Relatório Os modelos de relatório podem ser aberto a qualquer momento no explorer do banco de dados: 1. Pressione F4 para abrir a tela de exibição de fonte de dados. 2. No explorer de fonte de dados, clique no ícone "+" à esquerda de um nome de banco de dados para exibir os componentes do banco de dados. 3. Clique no ícone "+" à esquerda da entrada Links para exibir os links. 4. Clique duas vezes em um dos links do relatório para abrir o relatório como um novo documento do OpenOffice.org.br Writer. Esses links foram adicionados à entrada Links automaticamente pelo Assistente de Relatório. Edição de um Relatório Na última página da caixa de diálogo do Assistente de Relatório, você pode optar por editar o modelo do relatório antes de usá-lo pela primeira vez. Posteriormente, você poderá editar qualquer modelo de relatório usando o respectivo menu de contexto na entrada Link na tela de exibição de fonte de dados. Você pode editar o estilo da primeira página e o estilo das demais páginas, o estilo dos parágrafos, o formato dos números, os rótulos de campos impressos, entre outros. No entanto, não deve editar a instrução SQL do relatório, o nome do banco de dados, os controles de formulários ocultos e as informações relacionadas, a menos que esteja totalmente familiarizado com a tecnologia do banco de dados em uso. Para editar a largura de uma coluna no relatório: 1. Abra o modelo de relatório no modo de edição (veja a seção anterior sobre como editar um modelo de relatório). 2. Clique na área da tabela principal, onde o conteúdo dos campos de dados será preenchido posteriormente. 3. Abra o menu de contexto e selecione o comando Tabela. 442 PROGRAMA TÉCNICO CIDADÃO 4. Na próxima caixa de diálogo, selecione a página da guia Colunas e edite a largura da coluna. Feche a caixa de diálogo com OK. 5. Salve o modelo clicando no ícone Salvar Documento. Avaliação dos tópicos aplicados 1- Redigir o texto abaixo, exatamente como está: PROGRAMA 5S O programa 5S nasceu no Japão. É composto de 5 etapas: SEIRI (descarte) SEITON (ordenação) SEISO (limpeza) SEIKETSU (higiene) SHITSUKE (disciplina) Uma das formas de se iniciar a caminhada em busca da qualidade é através da prática dos 5S!!! Isto porque a prática dos 5S cria um ambiente agradável, seguro e produtivo, facilitando o entendimento e a prática dos princípios, conceitos e ferramentas da Qualidade Total. DESCARTE - é separar o que é necessário do que é desnecessário; é separar as coisas de que se precisa das coisas que atrapalham as atividades, evitando acumular papel velho, ferro velho, ferramentas quebradas, equipamentos fora de uso e todas aquelas coisas que guardamos há muito tempo e que não são necessárias às nossas atividades. Após esta separação devemos descartar (vender, trocar ou doar) o que não precisamos. ORDENAÇÃO - é colocar as ferramentas, móveis, peças, documentos e tudo mais de que você necessita para execução das atividades no lugar certo, pronto para uso a qualquer momento e por qualquer pessoa. 443 PROGRAMA TÉCNICO CIDADÃO LIMPEZA - é remover toda a sujeira do local de trabalho, das ferramentas e equipamentos, de maneira que o ambiente fique totalmente limpo. HIGIENE - é criar condições para garantir a saúde física e mental. DISCIPLINA - é seguir e aperfeiçoar as regras e procedimentos estabelecidos, visando ao constante crescimento profissional e humano. 2- Centralize o título e utilize alguma opção de formatação, a sua escolha, que o destaque. 3- Aumente o recuo na 1ª linha de cada parágrafo. Nos parágrafos que descrevem cada um dos 5s, aumento o recuo de todo o parágrafo. 4- Destaque cada uma das 5 etapas do programa 5s, formatando a fonte, inserindo fundo, efeitos de fonte, etc. A mesma formatação deve ser usada na palavra corresponde no início do parágrafo que descreve cada etapa. 5- Insira uma tabela de duas colunas, colocando numa a palavra em japonês e na outra a correspondente em português. 444 PROGRAMA TÉCNICO CIDADÃO OPENOFFICE PLANILHA O OpenOffice Planilha possibilita a criação e edição de planilhas eletrônicas, pois permite: - aplicar fórmulas e funções a dados numéricos e efetuar cálculos - aplicação de uma grande variedade de formatações (tipo, tamanho e coloração das letras, impressão em colunas, alinhamento automático etc), - utilização de figuras, gráficos e símbolos - movimentação e duplicação dos dados e fórmulas dentro das planilhas ou para outras planilhas, - armazenamento de textos em arquivos, o que permite usá-los ou modificá-los no futuro. Planilha Uma planilha (sheet) é uma grande tabela, que é usada quando se necessita fazer cálculos, operações matemáticas, projeções, análise de tendências, gráficos ou qualquer tipo de operação que envolva números. Cada planilha se compõe de colunas e linhas, cuja intersecção delimita as células: Colunas: Estão dispostas na posição vertical e são identificadas da esquerda para a direita, começando com A até Z. Depois de Z, são utilizadas 2 letras: AA até AZ, que são seguidas por BA até BZ, e assim por diante, até a última (IV), num total de 256 colunas. Linhas: Estão dispostas na posição horizontal e são numeradas de 1 até 32.000. Portanto, a intersecção entre linhas e colunas gera 8.192.000 células disponíveis. 445 PROGRAMA TÉCNICO CIDADÃO Utilizando Fórmulas Uma fórmula é uma equação que efetua cálculos em uma célula. Pode-se criar fórmulas que efetuam operações matemáticas (adição, subtração, multiplicação, ...) ou que comparem valores. Prioridade entre operações Para efetuar qualquer combinação de cálculos sempre é necessário lembrar que o OpenOffice Planilha obedece a prioridade entre as operações. Assim sendo, multiplicação e/ou divisão têm prioridade em relação à soma e/ou subtração. Exemplo: Como obter a média entre 5 + 6 + 9 ? Se a fórmula for digitada assim: =5+6+9/3, o que acontecerá? O OpenOffice Planilha primeiramente irá dividir 9 por 3 e, depois, somará o resultado com os demais números. O resultado será 14, o que, obviamente não corresponde à média. Portanto, para obter o resultado correto, deve-se envolver a soma por parênteses: =(5 + 6 + 9)/3 Assim, primeiramente será calculado o que está dentro dos parênteses e, depois, o resultado será dividido por 3. Como fazer cálculos em planilhas O OpenOffice Planilha possibilita executar operações com maior segurança, pois permite visualizar todos os passos que se realiza e, em caso de ocorrer um erro, pode-se voltar e fazer as alterações, sem que seja necessário recomeçar tudo. Algumas operações 446 PROGRAMA TÉCNICO CIDADÃO Os operadores matemáticos que nos possibilitam fazer cálculos nas planilhas são: ADIÇÃO: soma os valores contidos nas células. Símbolo: “ + “ SUBTRAÇÃO: subtrai valores existentes nas células. Símbolo: “ - “ MULTIPLICAÇÃO: multiplica os valores contidos nas células. Símbolo: “ * “ DIVISÃO: divide os valores existentes nas células. Símbolo “/ “ Exemplos de Operações: SOMA n1+ n2 SUBTRAÇÃO n1- n2 MULTIPLICAÇÃO n1* n2 DIVISÃO n1/ n2 EXPONENCIAÇÃO (n^exp ) RADICIAÇÃO RAIZ( n ) LOGARITMO LOG10( n ) OBS.: exp = número correspondente ao expoente. Como efetuar uma operação Para exemplificar, suponha que temos os valores 3 e 2 nas células B4 e C4. Deseja-se ter na célula D4 o resultado de sua soma. - clica-se na célula onde se deseja o resultado (D4) 447 PROGRAMA TÉCNICO CIDADÃO - na barra de fórmulas digita-se =B4+C4 (sem espaços) (isso também aparece na célula D4) - clica-se em Enter ou no símbolo em verde - para não visualizar o resultado ( 5 ) selecionado basta clicar em uma célula vazia É importante notar que pode-se somar quaisquer valores, inclusive em células não contíguas. Para criar uma fórmula deve-se saber onde se localizam as informações que serão usadas no cálculo. 1. Digitar os dados 2. Clicar na célula onde desejar que apareça o resultado 3. Na Barra de Fórmulas digitar um sinal de igualdade (=) 4a. Clicar na célula que contém o primeiro valor que entra na fórmula. (O endereço dela aparecerá na Barra de Fórmulas) 4b. Na Barra de Fórmulas digitar um operador matemático 5. Repetir os passos 4a e 4b até que a fórmula esteja completa 6. Clicar em <Enter>. (A fórmula aparecerá na barra de fórmula e o resultado na célula ativa). Ou pode-se seguir os passos 1 a 3 e digitar a fórmula corretamente na Barra de Fórmulas e clicar em <Enter>. É importante notar que as fórmulas não aparecem na planilha, mas somente o seu resultado. 448 PROGRAMA TÉCNICO CIDADÃO Operações com seqüências de números Exemplo: =A1 + B3 + D7, cujo resultado será a soma dos valores existentes nas células A1, B3 e D7. Procede-se como descrito acima: - uma seqüência direta de células. Então, usa-se o sinal “ : ” entre a primeira e a última célula da seqüência. Por exemplo: =SOMA(B2:B5), cujo resultado será a soma de todos os valores existentes nas células: B2+B3+B4+B5, ou seja no intervalo entre o primeiro valor da seqüência: B2 e o último: B5. - clica-se na célula onde se deseja o resultado (B6) - na barra de fórmulas digita-se =SOMA(B2:B5) (sem espaços) - clica-se em Enter ou no símbolo em verde - para não visualizar o resultado ( 5 ) selecionado basta clicar em uma célula vazia 449 PROGRAMA TÉCNICO CIDADÃO Trabalhando com células, textos, números, data e hora Células são as unidades onde entramos com os dados. Ou seja, é cada um dos quadrinhos existentes na planilha. Célula Ativa: É a célula onde está o cursor no instante da entrada de dados, ou seja, onde os dados serão digitados. Colunas: Estão dispostas na posição vertical e variam de A a Z e de AA até IV, num total de 256. Linhas: Estão dispostas na posição horizontal e variam de 1 a 32.000. Colunas e Linhas: Coordenadas usadas para a identificação das células. Selecionando uma célula Com o mouse: dê um clique com o botão esquerdo sobre a célula. Com o teclado: TECLA POSIÇÃO DO CURSOR Seta ↑ Célula para cima Seta ↓ Célula para baixo Seta ← Célula para a esquerda Seta → Célula para Direita Enter Vai para a célula inferior Tab Vai para a célula da direita Ctrl + ← Vai para a primeira célula da linha atual Ctrl + ↑ Vai para a primeira célula da coluna atual 450 PROGRAMA TÉCNICO CIDADÃO TECLA POSIÇÃO DO CURSOR Page Up Vai uma tela para cima Page Down Vai uma tela para baixo Ctrl + Home Vai para a célula A1 End Vai para a última célula da linha Home Vai para a primeira célula da linha (*) (*) (*) A linha deve ter pelo menos uma célula preenchida. Inserindo textos e números Nas células poderão ser digitados números, caracteres, caracteres especiais, etc. Ao terminar a entrada de dados na célula, tecle Enter ou Tab. Se o texto for maior que o tamanho da célula, ele ocupará o espaço da próxima, se esta estiver vazia. Esta ocupação não significa que o espaço da próxima célula foi utilizado. Havendo a necessidade de uso da próxima célula, ao se clicar sobre ela, o conteúdo da anterior desaparecerá e a atual poderá ser ocupada, ficando o seu conteúdo sobreposto ao anterior, sem apagá-lo. Uma seta vermelha aparecerá do lado direito da célula, indicando que o conteúdo ultrapassou o tamanho da mesma. 451 PROGRAMA TÉCNICO CIDADÃO Funções As funções são excelentes ferramentas que podem ser usadas para retorno ou exibição de valores a partir de vários tipos de cálculos. Uma função contém uma fórmula que toma uma série de valores, usa-os para executar uma operação e fornece o resultado. Portanto, uma função é uma equação pré-definida. Os valores com que uma função efetua operações são denominados argumentos. Os valores retornados pelas funções são chamados de resultados. Os parênteses definem onde os argumentos começam e terminam. Note-se que os argumentos podem ser números, constantes, texto, valores lógicos ou outras fórmulas. Como inserir uma função Como já vimos, pode-se digitar a fórmula correta na barra de fórmulas. Por exemplo, para se obter uma média basta digitar: =MÉDIA (B12:B16) Felizmente várias funções já estão codificadas e disponíveis no OpenOffice Planilha. Para inserilas, basta seguir os passos abaixo: 1. Selecione a célula onde será colocada a função. 452 PROGRAMA TÉCNICO CIDADÃO 2. Selecione o menu INSERIR e em seguida FUNÇÃO, ou tecle CTRL + F2, ou ainda, na barra de fórmulas, clique no botão “Assistente:Funções”. 3. Selecione uma categoria de função na caixa Categoria. 4. Selecione o nome da função. 5. Clique no botão “Próximo >>”, ou dê um duplo clique sobre o nome da função escolhida.. 453 PROGRAMA TÉCNICO CIDADÃO 6. Preencha os argumentos solicitados para a função 7. Clique OK. Exemplos de Funções Função Soma SOMA (arg1; arg2; ... ) Retorna a soma dos valores da lista de argumentos (até 30 argumentos). Ex.: =SOMA (B8;B5;C4) Soma do conteúdo das células não adjacentes =SOMA (B3:B7) Soma o conteúdo das células adjacentes ou da seqüência B3+B4+B5+B6+B7. Função Média =MÉDIA (arg1; arg2; ...) Retorna a média aritmética da lista de argumentos (até 30 argumentos). Ex.: =MÉDIA (C4;C6;B9); =MÉDIA (C7:C14) Função Máximo =MÁXIMO (arg1;arg2; ...) Retorna o valor máximo da lista de argumentos (até 30 argumentos). Função Mínimo =MÍNlMO (arg1;arg2; ... ) Retorna o valor mínimo da lista de argumentos (até 30 argumentos). 454 PROGRAMA TÉCNICO CIDADÃO Função Data/Hora =DIA (arg) Retorna o dia do mês como um inteiro (1 a 31). =MÊS (arg) Retorna o mês da data/hora (número inteiro de l a 12). =ANO (arg) Retorna o ano da data/hora. =DIA.DA.SEMANA (arg) Retorna o dia da semana da data do argumento (número inteiro de l a 7). =HORA (arg) Retorna hora da data/hora do argumento (número inteiro de 0 a 23). =MINUTO (arg) Retorna minuto da data/hora do argumento (número inteiro de 0 a 59). Copiar dados A cópia de dados consiste na duplicação destes em outra posição na planilha. É importante ressaltar que, quando os dados que serão copiados contém fórmulas com referência a outras células, dá-se o nome de “cópia relativa”. 1. Selecione os dados a serem copiados; 2. Escolha a opção EDITAR, COPIAR; 3. Clique na primeira célula da região destino; 4. Escolha na Barra de Menu a opção EDITAR, COLAR. Também pode-se copiar usando o teclado: 1. Selecione os dados a serem copiados; 2. Tecle CTRL + Ins; (O CRTL + C também funciona). 455 PROGRAMA TÉCNICO CIDADÃO 3. Selecione a primeira célula da região onde será feita a cópia; 4. Clique CTRL + V; Para copiar dados para outras planilhas dentro do mesmo arquivo de trabalho ou mesmo para planilhas de outros arquivos de trabalho, execute os seguintes passos: 1. Selecione os dados a serem copiados; 2. Escolha a opção EDITAR, COPIAR; 3. Selecione a outra planilha pela guia no canto inferior esquerdo da tela ou abra outro arquivo de trabalho; 4. Clique na primeira célula da região escolhida como destino; 5. Escolha a opção EDITAR, COLAR. Anotações Inserindo Comentário nas Células É uma maneira de colocar uma breve descrição do conteúdo da célula, quando o ponteiro do mouse é sobreposto a essa célula. Criando um comentário: 1. Clique na célula que conterá o comentário; 2. Clique em INSERIR; 3. Clique em NOTA; 4. Aparecerá uma CAIXA DE TEXTO, onde se pode digitar o comentário; Obs.: ao passar o ponteiro do mouse sobre a célula, o texto será exibido. 456 PROGRAMA TÉCNICO CIDADÃO Referências relativas e referências absolutas Cada célula no OpenOffice Planilha possui um endereço, dado pelo cruzamento entre uma linha e uma coluna. A célula na coluna A, linha 1 é endereçada como A1, por exemplo. Endereço Relativo Você pode endereçar uma fórmula para um intervalo de células adjacentes inserindo, primeiramente, as coordenadas da célula superior esquerda da área e, em seguida, dois-pontos seguidos das coordenadas da célula inferior direita. Por exemplo, o quadrado formado pelas primeiras quatro células no canto superior esquerdo é endereçado como A1:B2. Ao endereçar uma área dessa maneira, você está fazendo uma referência relativa a A1:B2. Relativa aqui significa que a referência para essa área será ajustada automaticamente quando você copiar as fórmulas. Endereço Absoluto Referências absolutas são o oposto de endereço relativo. Um sinal de dólar é colocado antes de cada letra e número em uma referência absoluta, por exemplo, $A$1:$B$2. Referências absolutas são utilizadas quando um cálculo se refere a uma célula específica na planilha. Se uma fórmula que refere-se exatamente a essa célula for copiada para uma célula abaixo da célula original, a referência também será movida para baixo se você não definir as coordenadas da célula como absolutas. Preenchimento automático É comum, durante a construção de uma planilha, surgir a necessidade de preencher células com seqüências de dados. No OpenOffice Planilha, pode-se usar um recurso para criar 457 PROGRAMA TÉCNICO CIDADÃO automaticamente seqüências numéricas a partir de qualquer valor. Esses valores podem ser números, datas ou horas. Para isso: 1. Digite o valor inicial em uma célula; 2. Com a mesma selecionada, coloque o ponteiro do mouse na alça de preenchimento até que este se transforme em uma pequena cruz e arraste com o botão esquerdo pressionado, verticalmente, para cima ou para baixo, ou horizontalmente, para a esquerda ou para a direita, até a última célula da seqüência desejada. 3. Solte o o botão esquerdo. Formatando células, números e planilhas Formatação personalizada Para mudar a aparência dos caracteres é necessário selecionar o texto e aplicar um ou mais atributos ou formatos de caracteres, que podem ser letras, números, símbolos, marcas de pontuação ou espaços. 458 PROGRAMA TÉCNICO CIDADÃO Os tipos diferentes de letras (fontes) que o OpenOffice Planilha disponibiliza são os mesmos instalados no Windows e podem ter vários tamanhos. Primeiramente seleciona-se o que se deseja formatar e depois formata-se. Os formatos podem ser aplicados por meio de diferentes maneiras: 1. Usar atalhos existentes na barra de ferramentas Objetos Há botões para alterar estilo, tipo de fonte, tamanho da fonte, negrito, itálico, sublinhar, alinhar à esquerda, centralizar, alinhar à direita, justificar, aplicar marcadores (numerados ou não), colorir a fonte ou o parágrafo. 2. Selecionar a célula ou intervalo de células. No menu de contexto, clicar com o botão direito em Formatar células. 3. Selecionar a célula ou intervalo de células e clicar em Formatar e em Células Aparecerá a janela "Atributos da célula", com várias abas: Números, Fonte, Efeitos de Fonte, Alinhamento, Bordas, Fundo e Proteção da célula. 459 PROGRAMA TÉCNICO CIDADÃO Aba Números Clicando-se sobre a aba "Números" (que fica em negrito e relevo) pode-se formatar valor numéricos de diversas maneiras, como: Número, Porcentagem, Moeda, Data, Hora, Científico, Fração e Valor lógico. Formatando, como número: - Selecionar as células ou intervalo de células a serem formatadas - No menu "Formatar" selecionar a opção "Células" 460 PROGRAMA TÉCNICO CIDADÃO - Em "Categoria" selecionar a opção "Número" - Selecionar o formato no campo "Formato" e clicar em "OK" O campo "Opções" permite escolher o número de casas decimais e o de zeros à esquerda em campos que tem esses mesmos nomes. Após escolher o que desejar clique no botão "Ok". Se, após uma formatação, aparecerem vários símbolos # na célula, o OpenOffice Planilha estará avisando que não há espaço para mostrar o resultado numérico. Para resolver isso, deve-se alargar o tamanho da coluna. Aba Fonte Clicando-se sobre a aba "Fonte" pode-se escolher a fonte e seus estilo, tamanho, cor e a língua. - Fonte: dá acesso a vários tipos de letras já disponíveis - Estilo: refere-se aos efeitos Normal, Negrito, Itálico ou os 2 últimos. - Tamanho: Aqui aparece a lista de possíveis tamanhos para a fonte selecionada. Pode-se selecionar um tamanho entre as opções existentes ou digitar o valor no campo apropriado. - Cor: Permite alterar a cor da fonte. - Língua: idioma. Escolher o que desejar e observar o resultado no "Campo de visualização", na parte inferior da janela. Aba Efeitos de Fonte Clicando-se sobre a aba "Números" pode-se selecionar efeitos sobre a fonte. Eles incluem : 461 PROGRAMA TÉCNICO CIDADÃO - Sublinhar: em formas diferentes e colorido ou não, - Hachurar: também em em formas diversas Campo Relevo Pode ser colocado de duas maneiras - "Em relevo" e "Baixo relevo" aos quais podem ou não ser adicionados efeitos extras de "Contorno" e "Sombra". Aba Alinhamento Quando os dados são digitados, o OpenOffice Planilha os ajusta automaticamente, sendo os dados numéricos alinhados à direita nas células e os textuais à esquerda. Clicando-se sobre a aba "Alinhamento" pode-se alterar algo no alinhamento: - Selecionar as células ou intervalo de células a serem formatadas - No menu "Formatar" selecionar a opção "Células" - Em "Atributos da célula" selecionar a opção "Alinhamento" - Em "Alinhamento de texto" no campo . "Horizontal" pode-se alinhar à esquerda, centralizar, alinhar à direita ou justificar e . "Vertical" pode-se alinhar por base, centro ou topo - Pode-se, também, inclinar o texto no campo "Orientação do texto" escolhendo o valor do ângulo. A opção "Restaurar" desativa o último ajuste dos dados. Aba Bordas 462 PROGRAMA TÉCNICO CIDADÃO Clicando-se sobre a aba "Bordas" pode-se escolher sobre a existência de bordas e sua espessura e cor, entre outras possibilidades: - Selecionar as células ou intervalo de células a serem formatadas - No menu "Formatar" selecionar a opção "Células" - Em "Atributos da célula" selecionar a opção "Bordas" - Selecionar as linhas desejadas em "Disposição das linhas" - Selecionar a espessura e o formato da borda em "Linha" - Se desejar pode-se selecionar a posição, a distância e a cor da "Sombra" nos campos inferiores - Clicar em "OK" Aba Plano de Fundo Na janela que aparece, pode-se escolher uma cor para o fundo da célula. "Sem preenchimento" não inclui cor. - Selecionar as células ou intervalo de células a serem formatadas - No menu "Formatar" selecionar a opção "Células" - Em "Atributos da célula" selecionar a opção "Fundo" - Selecionar a cor desejada e clicar em "OK" Aba Proteção da célula Pode-se ocultar fórmulas ou tudo. Escolher o que desejar e clicar no botão "Ok". 463 PROGRAMA TÉCNICO CIDADÃO Formatação condicional Para se usar essa formatação, é necessário conhecer os estilos do OpenOffice Planilha. Estilos O OpenOffice Planilha já vem com vários estilos que podem ser utilizados para formatar células. No Menu "Formatar", em "Catálogo de Estilos" aparecem os estilos já existentes: Padrão, Resultado, Resultado2, Título, Título1 O estilo "Título" tem essas opções pré-definidas: - Números: Formato Geral, Idioma Padrão - Fonte: Fonte Albany, Estilo Itálico Negrito, Tamanho 16, Cor Preto - Efeitos de Fonte: Sublinhar (Sem), Hachurar (Sem), Relevo (Sem) - Alinhamento: Horizontal Centralizado, Vertical Padrão - Bordas: Nenhum - Fundo: Sem preenchimento - Proteção da célula: Protegido As opções do estilo "Resultado2" são: - Números: Formato Moeda, Idioma Português (Brasil) - Fonte: Fonte Albany, Estilo Padrão, Tamanho 10, Cor Preto - Efeitos de Fonte: Sublinhar (Sem), Hachurar (Sem), Relevo (Sem) - Alinhamento: Horizontal Padrão, Vertical Padrão 464 PROGRAMA TÉCNICO CIDADÃO - Bordas: Nenhum - Fundo: Sem preenchimento - Proteção da célula: Protegido Como aplicar um estilo existente - selecionar a célula, linha ou coluna a ser formatada - no menu "Formatar" selecionar a opção "Catálogo de Estilos" - selecionar o estilo desejado e clicar em "OK" Como criar um novo estilo - selecionar a célula, linha ou coluna a ser formatada - no menu "Formatar" selecionar a opção "Catálogo de Estilos" - clicar em "Novo" - em 'Nome do estilo" digitar um nome para o novo estilo - escolher as opções para o novo estilo em Números, Fonte, Efeitos de Fonte, Alinhamento, Bordas, etc - clicar em "OK" Notar que o estilo criado pelo usuário é válido apenas para o arquivo de trabalho que estiver em uso. Como aplicar a formatação condicional 465 PROGRAMA TÉCNICO CIDADÃO Se desejar usar um estilo Novo, ou seja, não pré-existente, é necessário criá-lo previamente. (Ver como, acima, em "Como criar um novo estilo"). - selecionar a(s) célula(s) a ser formatada - clicar no menu "Formatar" selecionar a opção "Formatação Condicional" - A opção “Condição 1” aparece selecionada. Nos campos inferiores criar a condição desejada. Em “Estilo da célula”, selecionar o estilo que deseja usar e clicar em "OK" No exemplo a seguir os resultados que tiveram valor igual ou maior que 100 são mostrados em azul e em negrito. Página 466 PROGRAMA TÉCNICO CIDADÃO Para se configurar o tamanho, formato, orientação e outros detalhes pode-se acessar a função “estilo de página”, em “Formatar” - “Página”. Imprimir planilhas Definir a área de impressão 467 PROGRAMA TÉCNICO CIDADÃO Nesta opção pode-se definir às células do documento que irão ser impressas. Este recurso possibilita a escolha de dados que serão impressos na sua planilha. Clique na Barra de Menu em “Formatar” - “Intervalos de Impressão”. São dadas as opções: Definir, Adicionar, Remover e Editar. Definir Para definir a área de impressão: - Selecione a área que deverá ser impressa, utilizando o mouse ou o teclado; Clique em “Formatar” - “Intervalo de impressão” - “Definir”. A área marcada será definida por linhas verticais e horizontais. 468 PROGRAMA TÉCNICO CIDADÃO Importante: Caso não seja definida uma área de impressão, o OpenOffice.org Planilha irá imprimir todo o documento. Adicionar Este recurso possibilita adicionar células selecionadas na área de impressão. Remover Elimina a área de impressão que foi manualmente determinadas na planilha. Se forem removidas todas às quebras de páginas de todas às folhas, a área de impressão é definida como automática, mostrando todas as planilhas existentes. Editar Este recurso possibilita a edição da área de impressão, linhas ou colunas a serem repetidas. O campo “Intervalo de impressão” possibilita a edição da área definida para impressão. Neste campo pode-se aumentar ou diminuir a área de impressão definida pelo usuário. O campo “Linhas a serem repetidas” possibilita a repetição de linhas em todas as páginas do documento a ser impresso, tais como títulos. Basta clicar no botão , selecionar a linha a ser repetida, clicar novamente no referido botão e depois em OK. O campo “Colunas serem repetidas” possibilita a repetição de colunas a serem repetidas em todas as páginas do documento a ser impresso. Importante: Caso queira selecionar todas as planilhas, clique com o botão direito do mouse sobre o nome da planilha e selecione a opção Selecionar todas as planilhas. 469 PROGRAMA TÉCNICO CIDADÃO Visualizar a impressão Para visualizar o documento a ser impresso: - Na Barra de Menu, clique em “Arquivo” - “Visualizar página”. Nesta tela é possível visualizar o documento a ser impresso e também alterar a configuração da página, tais como margens e tamanho da planilha. Para fazer as alterações, mudar de página e dar um zoom na página (para aumentar ou para diminuir a visualização da página) utilize a Barra de Impressão. Imprimindo documentos Para a impressão de documentos existem duas formas: - Pelo botão Imprimir na barra de funções; - Ou pela Barra de Menu,clique em “Arquivo” - “Imprimir”. É necessário usar esta opção quando houver a necessidade de impressão de várias cópias, configurar a impressora ou selecionar quais as páginas que deverão ser impressas. Nesta tela, basta selecionar os ítens que se deseja alterar e clicar em OK para imprimir. 470 PROGRAMA TÉCNICO CIDADÃO Base de dados com o OpenOffice Planilha Você pode acionar a exibição da fonte de dados de um documento de texto ou de uma planilha escolhendo “Ver” - “Fontes de Dados” ou pressionando a tecla F4. À esquerda, você verá o explorer de fontes de dados. Se você selecionar uma tabela ou uma consulta, verá à direita o conteúdo dessa tabela ou consulta. Na margem superior está a Barra de Banco de Dados. Definindo e classificando uma área de banco de dados Definir Intervalo 471 PROGRAMA TÉCNICO CIDADÃO Esta opção permite definir uma área de dados atribuindo um nome para que sejam efetuadas algumas operações nos dados (ordenação dos campos, filtragem dos dados e etc). Clique na Barra de Menu em “Dados” - “Definir Intervalo”. A seguinte janela aparecerá: Ao selecionarmos uma área de dados, será definida a primeira linha de dados como cabeçalho dos dados. Selecionar intervalo Permite a seleção de uma área de dados que foi criada anteriormente em Definir Intervalo. Para executar esta função, siga os seguintes passos: Clique em Dados na Barra de Menu e depois em Selecionar Intervalo. Informe a área de dados que deverá ser selecionada, após a escolha, clique no botão OK. 472 PROGRAMA TÉCNICO CIDADÃO Classificar Esta opção ordena a coluna ou a linha selecionada pelo usuário. A ordenação pode ser numérica ou alfanumérica, crescente ou decrescente. Selecione as células que deseja ordenar, clique na Barra de Menu em “Dados” - “Ordenar”. Aqui, é possível escolher numa planilha, a ordem em que os valores irão aparecer na tela. Filtrar, agrupar dados e calcular sub totais No menu “Dados” - “Filtro”, temos a possibilidade de fazer uma pesquisa de valores utilizando filtros. Selecione a área das células onde deseja fazer a pesquisa; Clique na Barra de Menus em “Dados” - “Filtro”. Em seguida, selecione uma das opções a seguir: auto filtro Esta opção faz do cabeçalho do texto selecionado uma camble box, isto é, cria uma seta no cabeçalho de todas as colunas selecionadas, possibilitando ao usuário escolher os ítens que desejar. 473 PROGRAMA TÉCNICO CIDADÃO Filtro Padrão Abre uma Janela com as opções de qual tabela se deseja fazer a pesquisa e qual o ítem a ser procurado. Filtro Avançado Abre uma janela com os critérios de filtro para uma pesquisa e qual o ítem a ser procurado. Remover Filtro 474 PROGRAMA TÉCNICO CIDADÃO Esta opção faz a remoção do filtro aplicado na planilha. Ocultar auto filtro Esta opção oculta os filtros aplicados na planilha ativa. Sub totais Dentro do menu “Dados” há a opção “Sub totais”, que permite o cálculo automático de sub totais dentro das células selecionadas. - Selecione as células que se deseja fazer os sub totais; - Clique na barra do menu em “Dados” - “Sub totais”. Importando dados de um banco de dados para uma planilha Para trocar dados com um banco de dados que não tenha um link ODBC e não permita a importação e exportação de dBase, você pode utilizar um formato de texto comum. Importação de Dados para o OpenOffice.org.br Para trocar dados em um formato de texto, utilize o filtro de importação/exportação do OpenOffice.org.br Calc. 1. Exporte os dados desejados do banco de dados de origem em um formato de texto. O formato de texto CSV é o formato recomendado, pois ele separa campos de dados utilizando delimitadores como vírgula e ponto-e-vírgula e separa registros inserindo quebras de linha. 2. Escolha “Arquivo” - “Abrir” e selecione "Texto CSV" na caixa de combinação Tipo de arquivo. Selecione o arquivo e clique em Abrir. 475 PROGRAMA TÉCNICO CIDADÃO 3. A caixa de diálogo “Importar Texto” aparecerá. Escolha quais dados do documento de texto que deseja incluir. Assim que os dados estiverem em uma planilha do OpenOffice Calc, você poderá editá-la quando necessário. Há duas maneiras de salvar dados como uma fonte de dados do OpenOffice.org.br: • Salve a planilha atual do OpenOffice Calc em formato dBase na pasta de um banco de dados do dBase. Para isso, escolha Arquivo - Salvar como e, em seguida, escolha o Tipo de arquivo "dBase" e a pasta do banco de dados dBase. Selecione o intervalo de dados na planilha do OpenOffice Calc e arraste para um recipiente de tabela na exibição da fonte de dados. O recipiente de tabela é a linha "Tabelas" (veja ilustração) no Explorer do banco de dados. Um Assistente será iniciado automaticamente. Gráficos Com o OpenOffice Planilha é possível criar gráficos a partir de dados inseridos nas tabelas da planilha. Vamos aprender de forma sucinta, a criação de um gráfico simples, utilizando o recurso de formatação automática de gráficos. Para isso, primeiro selecionamos os dados que farão parte do gráfico: Depois vamos no menu “Inserir” e selecionamos a opção “Gráfico”. Abre-se então a janela de “auto formatação de Gráfico”: 476 PROGRAMA TÉCNICO CIDADÃO Do lado direito, pode-se escolher em que planilha deverá ser inserido o gráfico. As janelas seguintes são para definir o tipo de gráfico, o tipo de variante e o nome que será dado ao gráfico. No final do assistente, deve-se clicar em criar, e o gráfico será inserido na planilha selecionada. 477 PROGRAMA TÉCNICO CIDADÃO Estruturando uma planilha Você pode criar uma estrutura de tópicos para os dados e agrupar linhas e colunas de modo a poder recolher e expandir os grupos com um único clique do mouse. Para fazer isso, vá no menu “Dados” - “Esquema”. As seguintes opções são apresentadas: Ocultar Detalhes Oculta os detalhes das linhas ou colunas agrupadas que contém o cursor. Para ocultar todas as linhas ou colunas agrupadas, selecione a tabela esquematizada e, em seguida, escolha este comando. 478 PROGRAMA TÉCNICO CIDADÃO Mostrar Detalhes Mostra os detalhes da linha ou coluna agrupada que contém o cursor. Para mostrar os detalhes de todas as linhas ou colunas agrupadas, selecione a tabela esquematizada e, em seguida, escolha este comando. Agrupar Define o intervalo de células selecionado como um grupo de linhas ou colunas. Desfazer Agrupamento Desfaz o agrupamento da seleção. Em um grupo aninhado, as últimas linhas ou colunas adicionadas são removidas do grupo. auto esquema Se o intervalo de células selecionado tiver fórmulas ou referências, o OpenOffice.org.br esquematizará a seleção automaticamente. Remover Remove o esquema do intervalo de células selecionado. 479 PROGRAMA TÉCNICO CIDADÃO Inserindo tabelas em documentos de texto Há várias maneiras de criar uma tabela em um documento de texto. Você pode inserir uma tabela usando a barra de ferramentas flutuante Inserir, usando um comando do menu ou usando uma planilha do OpenOffice.org.br Calc. Para inserir uma tabela usando a barra de ferramentas flutuante: 1. Posicione o cursor no documento em que deseja inserir a tabela. 2. Na Barra de Ferramentas Principal, dê um longo clique em Inserir na barra de ferramentas flutuante. 3. Posicione o ponteiro do mouse sobre o ícone Inserir tabela até que a grade da tabela apareça. 4. Na grade da tabela, arraste o ponteiro do mouse para selecionar o número de linhas e colunas desejado e, em seguida, libere-o. Para cancelar, arraste para cima ou para a esquerda até que apareça Cancelar na área de visualização da grade. Para inserir uma tabela com um comando do menu: 1. Posicione o cursor no documento em que deseja inserir a tabela. 2. Escolha Inserir - Tabela. 3. Na área Tamanho, insira o número de linhas e colunas. 4. Selecione as opções que você deseja e clique em OK. 480 PROGRAMA TÉCNICO CIDADÃO Inserção a partir do OpenOffice.org.br Calc usando a área de transferência 1. Abra a planilha do OpenOffice.org.br Calc que contém o intervalo de células que você deseja inserir. 2. Na planilha, arraste o ponteiro do mouse para selecionar as células. 3. Escolha Editar - Copiar. 4. No documento de texto, adote um dos seguintes procedimentos: • Escolha Editar - Colar. O intervalo de células é colado como um objeto OLE. Para editar o conteúdo das células, clique duas vezes no objeto. • Escolha Editar - Colar Especial para abrir a caixa de diálogo Colar Especial, que oferece várias opções de escolha. As mesmas opções também podem ser encontradas no submenu do ícone Colar na Barra de Funções: Opções É inserido como... Planilha do Objeto OLE - como com Ctrl+V ou com arrastar e OpenOffice.org.br 1.1.3 soltar GDIMetaFile Figura Bitmap Figura HTML Tabela HTML Texto sem formatação Somente texto, paradas de tabulação como separadores Texto formatado [RTF] Tabela de texto Link DDE (somente no Estrutura e conteúdo da tabela, sem formatação. Windows) Com atualização 481 PROGRAMA TÉCNICO CIDADÃO Avaliação dos tópicos aplicados 1- Crie uma tabela semelhante à tabela abaixo: 2- Insira uma linha nova entre as linhas 1 e 2. Edite o tamanho das colunas. 3- Formate os títulos da linha 1 de forma a destacá-los, centralizando-os na célula. Insira diferentes cores de fundo para os títulos, para a descrição de materiais e para os valores. 4- Calcule a fórmula para as colunas “Total” e “Total Dólar”, utilizando referências relativas e absolutas e copiando as fórmulas. 5- Insira um gráfico na planilha 2 da tabela, com os dados da planilha 1. 6- Supondo os seguintes dados: x: 27 28 31 29 32 24 28 27 27 27 28 22 33 31 29 y: 77 76 75 72 82 67 77 71 69 69 73 58 81 76 73 Calcular em uma planilha: a. Somatório de x 482 PROGRAMA TÉCNICO CIDADÃO b. Somatório de y c. Média de x d. Média de y 483 PROGRAMA TÉCNICO CIDADÃO OPENOFFICE APRESENTAÇÃO O que é uma Apresentação? É um arquivo em que são exibidos textos, gráficos, imagens, sons e animações, que podem ser combinados com efeitos especiais de exibição na tela do computador ou em forma de slides e transparências. Atualmente, em universidades, esses arquivos são muito usados em seminários e defesas de dissertações e teses. O Impress torna muito mais fácil: - apresentar uma idéia ou um material didático, - divulgar um evento ou um produto - Utilizando esse programa é possível fazer: a. Apresentação - Conjunto de slides, folhetos, anotações do apresentador e estruturas de tópicos, agrupados em um arquivo. b. Slide - É a página individual da apresentação. Pode conter títulos, textos, elementos gráficos, desenhos (clipart) e etc. c. Folheto - É uma pequena versão impressa dos slides, para distribuir entre os ouvintes. d. Anotações do apresentador - Consiste em folhas com slide em tamanho reduzido e suas anotações. e. Estrutura de Tópicos - É o sumário da apresentação, aí aparecem apenas os títulos e os textos principais de cada slide. 484 PROGRAMA TÉCNICO CIDADÃO Cuidados a serem tomados É importante notar que quando se faz uma apresentação o conteúdo deve ser o foco central de atenção. Assim, as ferramentas que podem ser usadas, (exemplo: animações, aplicação de sons), devem enfatizar os tópicos, mas não devem desviar a atenção para os efeitos especiais. Por exemplo: - como a leitura de português é feita da esquerda para a direita, pode-se projetar imagens animadas de modo que os tópicos deslizem para a direita. Depois, para enfatizar um tópico específico, faça com que ele deslize para a esquerda. Essa alteração destacará o tópico, chamando a atenção. - a inserção de uma música ou som ocasional concentra a atenção na apresentação de slides. No entanto, o uso freqüente de efeitos sonoros pode desviar a atenção. - o ritmo da apresentação não pode ser muito rápido, pois torna-se cansativo, nem muito lento pois deixa todos sonolentos. Portanto, deve-se fazer testes antes de fazer uma apresentação e escolher um bom ritmo. - não deve existir nada em grande quantidade: nem texto, nem figuras. Cuidado com o tamanho da fonte: as pessoas no fundo da sala devem ser capazes de ler todos os slides. Criando uma apresentação simples Ao abrir o OpenOffice Apresentação será aberto o Assistente de Apresentação, que permite escolher entre: • Apresentação vazia • A partir do modelo 485 PROGRAMA TÉCNICO CIDADÃO • Abrir uma apresentação existente Apresentação vazia Fase 1: O botão "Segue", na parte inferior da janela permite escolher algumas configurações, antes de criar uma apresentação com a opção "Apresentação vazia". O botão "Criar" não permite fazer tais escolhas. Fase 2. Aqui se escolhe um estilo de página para a apresentação. Para visualizar o estilo escolhido marcar a opção Visualizar. 486 PROGRAMA TÉCNICO CIDADÃO O campo "Selecione a mídia de saída" permite escolher como será visualizada a apresentação: - Tela (tela do monitor de um computador) - Transparência (impressão em papel de acetato - transparência) - Slide (diapositivo) - Papel (impressão em papel comum) 487 PROGRAMA TÉCNICO CIDADÃO Fase 3: Nessa etapa 3 é possível escolher o modo de transição dos slides e o tipo de apresentação. No campo "Selecione um modo de transição dos slides" pode-se escolher um dos efeitos de transição. São efeitos que ocorrem entre a exibição de um slide e outro. Criando uma apresentação a partir do modelo Para se criar uma apresentação a partir do modelo, seguimos os seguintes passos: a. Clicar em "A partir do modelo" e um estilo de apresentação. Para visualizar o estilo escolhido marque a opção Visualizar. Clicar em "Segue". b. Deve-se selecionar a mídia da apresentação. Clicar em "Segue". c. Na etapa 3 será necessário escolher o modo de transição dos slides e o tipo de apresentação. 488 PROGRAMA TÉCNICO CIDADÃO d. Na etapa 4 pode-se informar alguns dados sobre a apresentação. Não é obrigatório o preenchimento desses campos, porém eles serão úteis para facilitar a construção da apresentação. Clicar em "Segue". e. Em 5 são mostrados exemplos de slides contendo tópicos que poderão ser discutidos na apresentação. Os ítens que estiverem com uma marca verde serão inseridos na apresentação. Caso não queira algum dos ítens basta desmarcá-lo. f. Selecionando a opção "Criar resumo" será criado um slide denominado resumo onde se pode inserir os tópicos principais da apresentação. g. Finalmente, clicar em "Criar". Imediatamente surge a janela “modificar slide”. Mesa de slides Modificar slide Nela pode-se selecionar um entre "Layouts", que são os formatos de slides. 489 PROGRAMA TÉCNICO CIDADÃO Cada um deles oferece um "layout" diferente. Por exemplo - existe um "layout" que tem espaços reservados para o título, o texto e um gráfico, e há outro com espaços reservados para o título e clip-art e assim por diante. Se já tiver decidido como serão os slides, escolher o modelo correspondente e esse será o seu slide mestre, se não tiver decidido, escolher o tipo de layout "em branco". É importante notar que os espaços reservados para título, figuras e texto obedecem à formatação do slide mestre da apresentação. Mas pode-se mover, redimensionar ou reformatar os espaços reservados para que se tornem diferentes do slide mestre. Como escolher um Layout Dar um duplo clique sobre o "layout" escolhido e clicar no botão "Ok" Notar que no campo Exibir, no lado inferior da janela, devem estar selecionados - Plano de fundo 490 PROGRAMA TÉCNICO CIDADÃO - Objetos no plano de fundo Nesse primeiro slide, podem ser digitados os dados essenciais para a abertura da apresentação - por exemplo, o título do trabalho, seu nome, a data, e o cabeçalho. Inserção de um novo slide Para colocar outros slides na mesma apresentação é necessário adicioná-los, à medida que haja necessidade. Para inserir um novo slide, - clicar no menu "Inserir" - "Slide" Aparecerá a tela "Inserir slide", semelhante à tela "Modificar Slide" (ver figura acima), que permitirá novamente escolher o layout. Duplicação de um slide Quando se deseja repetir as mesmas configurações já escolhidas em um slide, ao invés de inserir outro e repetir tudo o que já foi feito pode-se duplicá-lo e modificar o que for necessário. Para duplicar um slide, - clicar no menu "Inserir" - "Duplicar Slide" Introduzindo efeitos na exibição de slides Pode-se inserir efeitos especiais na apresentação que determinam como figuras ou textos serão exibidas na tela. - Selecione o texto ou figura desejada. 491 PROGRAMA TÉCNICO CIDADÃO - No menu clicar em "Apresentação de slides" - "Efeitos". 1. Efeitos: Mostra as opções de efeito. 2. Efeitos de Texto: Exibe as opções para o texto. 3. Extras: 492 PROGRAMA TÉCNICO CIDADÃO a. O objeto escolhido se torna invisível após ter aparecido. b. O objeto escolhido se torna invisível após ter aparecido. c. Permite inserir sons d. Indica se o som vai ser inteiramente executado. e. Pode-se escolher um arquivo wav pré-existente. 4. Ordem: Possibilita determinar a ordem em que os elementos do slide surgirão, arrastando-se os ítens para a posição desejada 5. Atualizar 6. Atribuir (Aplicar) 7. Visualizar: Permite pré-visualizar o slide Escolher todas as opções que quiser e clicar no botão X para fechar a janela "Efeitos". Selecionando essa opção pode-se escolher um som para tocar ao aparecer o objeto escolhido. Deve-se escolher um tipo de som na caixa de listagem que se encontra abaixo do botão. - Na tela Seqüência pode-se configurar a ordem em que os objetos do slide irão aparecer. - Só aparecerão na caixa acima os objetos que possuam algum tipo de efeito especial. Para alterar a ordem em que eles irão aparecer na apresentação, basta arrastar o texto que descreve o objeto desejado para cima ou para baixo. Os 493 PROGRAMA TÉCNICO CIDADÃO objetos que são descritos na caixa acima se referem aos objetos que estão apontados na figura a seguir. - Após realizada as configurações desejadas clique no botão Atribuir para aplicálas ao slide atual. - Clique no botão para fechar as opções de efeitos. Projeção da apresentação Logo abaixo do canto superior direito há uma pequena barra com 6 botões. É a barra de botões de controle da apresentação, que controla o modo de visualização dos slides. Cada botão é descrito abaixo: Desenho É o modo de edição, ou seja, possibilita inserir textos, imagens e sons e usar os recursos presentes na barra de ferramentas e os comandos do menu suspenso na criação e modificação de cada slide. Exibe os slides, um de cada vez. 494 PROGRAMA TÉCNICO CIDADÃO Tópicos O modo "Tópicos" permite inserir ou modificar o conteúdo dos tópicos dos slides, ordená-los, e reestruturar os tópicos. Quando se clica ao lado de uma figura, à esquerda, ela é visualizada à direita. 495 PROGRAMA TÉCNICO CIDADÃO Slide Esse modo mostra todos os slides da apresentação, na mesma página, em tamanho reduzido, facilitando a visualização. Não permite a edição do conteúdo dos slides. O modo "Slide" permite alterar a posição de um slide na ordem de apresentação, bastando clicar sobre o slide desejado e arrastá-lo para a nova posição. 496 PROGRAMA TÉCNICO CIDADÃO É importante ressaltar que nessa fase aparece uma nova barra, que possibilita incluir efeitos de transição em cada página Efeitos de transição São efeitos que ocorrem entre a exibição de um slide e do seguinte. Em cada um dos campos, abrir o menu, clicando na flecha, para ver as opções existentes. "Efeitos": clicar no efeito desejado para inserí-lo. "Velocidade": Permite escolher entre 3 velocidades de transição entre os slides: Lento, Médio e Rápido. "Transição": Pode-se escolher entre Manual, Semi-automático ou Automático. Selecionando a opção "Automático", o tempo de duração da transição pode ser determinado no campo seguinte. O botão de "Apresentação cronometrada" permite fazer uma apresentação com o tempo cronometrado. O botão "Mostrar / Ocultar Slide" não exclui slides, apenas não exibe o slide clicado. (O slide fica marcado). Para que ele volte a aparecer basta clicar no botão novamente. O último campo mostra o total de slides da apresentação. Anotações Possibilita a inclusão de anotações extras (que não poderão ser vistas durante a apresentação dos slides), mas não permite a edição do conteúdo dos slides. 497 PROGRAMA TÉCNICO CIDADÃO Para incluir uma anotação, clicar na parte de baixo e selecioná-la . Então será possível escrever. Folheto Permite imprimir vários slides na mesma página. Não permite a edição do conteúdo dos slides. 498 PROGRAMA TÉCNICO CIDADÃO Iniciar Clicando-se nesse botão a apresentação é iniciada. Pode-se também visualizar a apresentação clicando em "Apresentação de slides" - "Apresentação de slides" ou a tecla F9. Para terminar a apresentação pode ser clicada a tecla ESC. Para configurar os últimos detalhes da apresentação, clicar no menu "Apresentação de slides" "Configuração da apresentação de slides”. 499 PROGRAMA TÉCNICO CIDADÃO Em "Intervalo" pode-se escolher: - Todos os slides: As configurações escolhidas serão aplicadas em todos os slides da apresentação. - A partir de: As configurações só serão válidas para alguns slides. No campo à direita selecionar a partir de qual slide as configurações devem ser aplicadas. - Apresentação personalizada: Para utilizar essa opção deve-se fechar a janela e clicar em "Apresentação na tela" - "Apresentação personalizada" e, depois, ver explicações mais abaixo. Em "Tipo" pode-se optar por: - Padrão: Os slides serão exibidos em tela cheia. 500 PROGRAMA TÉCNICO CIDADÃO - Janela: Os slides serão exibidos dentro da janela do Impress. - Auto: Determina apresentação em "loop". Ou seja, após o término da apresentação a mesma é reiniciada. Pode-se especificar o tempo que deve passar para reiniciar no campo abaixo. Em "Opções" pode-se selecionar ou não: - Transição manual de slides: Marcando essa opção os slides serão passados manualmente. - Ponteiro do mouse visível: Determina se o ponteiro aparece ou não - Ponteiro do mouse como caneta: Determina que o ponteiro surge na forma de uma caneta. - Navegador visível: - Permitir animações - Mudar os slides clicando no plano de fundo - Apresentação sempre em primeiro plano. Personalizando a apresentação Aqui pode-se selecionar apenas alguns slides de uma apresentação já pronta. Ou seja, é útil quando não se deseja apresentar todos os slides. Então, ao invés de excluir os slides não desejados pode-se montar uma outra apresentação com apenas alguns deles. 1. A apresentação completa deve estar aberta. 2. No menu clicar em "Apresentação de slides" - "Apresentação de slides personalizada". 501 PROGRAMA TÉCNICO CIDADÃO 3. Clicar no botão Novo. 4. Em "Nome" deletar "Nova apresentação personalizada" e digitar um nome para a apresentação. 5. Em "Slides existentes" são listados todos os slides presentes na apresentação. 502 PROGRAMA TÉCNICO CIDADÃO Selecionar os slides que deseja que permaneçam na apresentação menor e clicar no botão OK. Os slides escolhidos aparecerão em "Slides selecionados". 6. Para excluir algum slide selecione o mesmo e clique no botão . 7. Quando tudo tiver sido escolhido clicar no botão "Ok". 8. Para exibí-la marcar a opção "Usar apresentação personalizada". 9. Para iniciar a apresentação clicar no botão "Iniciar". Modificar o estilo da página Exibe a caixa de diálogo Esboço do Slide, onde você pode selecionar um esquema de layout para o slide atual. Qualquer objeto no esboço do slide será inserido atrás dos objetos do slide atual. Para modificar o estilo da página vá no menu “Formatar”, opção “Estilos”, “Esboço de slide”. 503 PROGRAMA TÉCNICO CIDADÃO Esboço de slide Exibe os designs de slide que você pode aplicar em seu slide. Selecione um design e clique em OK para aplicá-lo ao slide atual. Trocar página de plano de fundo: Aplica o plano de fundo do design do slide selecionado a todos os slides do documento. Excluir planos de fundo não utilizados: Exclui do documento layouts de apresentação e slides de plano de fundo sem referência. Carregar...: Exibe a caixa de diálogo Carregar o esboço de slide, onde você pode selecionar designs de slide adicionais. 504 PROGRAMA TÉCNICO CIDADÃO Segundo plano Pode-se inserir um fundo (ou segundo plano) no slide de várias maneiras: - Clicar, com o botão direito do mouse, em uma área vazia do slide e, no menu que aparece, clicar em "Slide" - "Configurar página" - Clicar em Formatar - Página. Abre-se a janela "Configurar página" com 2 abas: Página e Plano de fundo Aba Página Nela pode-se escolher formato, largura e altura. E, também: Orientação: Esse campo possibilita definir a posição: retrato ou paisagem 505 PROGRAMA TÉCNICO CIDADÃO Margens: Aqui pode-se definir as margens, ou seja, a distância entre o texto e o início da tela ou do papel. Usar as pequenas setas ou digitar as medidas desejadas em "Esquerda", "Direita", "Superior", "Inferior”. Aba Plano de Fundo Nela pode-se escolher entre: Nenhum: Nenhum fundo será adicionado Cor: Abre-se a janela com as várias opções de cores. Clicar na cor desejada e em "Ok". Gradiente: Vários fundos com gradientes coloridos ficam disponíveis. (Ver figura acima). Clicar no gradiente desejado e em "Ok". Preenchimento padrão: Vários fundos com hachurados em diferentes sentidos ficam disponíveis. Clicar no desenho desejado, que aparecerá à direita, Depois clique em "Ok". Bitmap: Vários pequenos arquivos de imagem ficam disponíveis. Clicar no desenho desejado e em "Ok". Estilos de objetos de apresentação Designer Há algumas formatações pré-configuradas que tornam mais fácil alterar a formatação do texto. - Clicar em Formatar - Designer. - Surgirá a janela "Estilos de Figuras". 506 PROGRAMA TÉCNICO CIDADÃO - Para alterar o estilo do texto, clicar duplo sobre uma das opções de estilo e o texto será automaticamente alterado. - Clicar no botão "X". Trabalho de fonte É uma opção que permite criar vários efeitos no texto. - selecionar o texto que será alterado. - no menu, clicar em Formatar - Trabalho de Fonte. 507 PROGRAMA TÉCNICO CIDADÃO - Para alterar o estilo do texto, clicar duplo sobre um dos botões da janela "Fontwork" e o texto será alterado. - Clicar no botão "X". Obs.: Esses efeitos só podem ser aplicados em textos criados com o uso dos atalhos presentes na barra de ferramentas lateral Efeitos 3D É outra opção que permite criar efeitos tridimensionais. 508 PROGRAMA TÉCNICO CIDADÃO - selecionar o texto que será alterado. - no menu, clicar em Formatar - Efeitos 3D. - Para alterar o estilo do texto, clicar duplo sobre um ou mais dos botões da janela "Efeitos 3D" e o texto será alterado. Efeitos de cor e de relevo estão disponíveis. - Clicar no botão "Aplicar". - Clicar no botão "X". Obs.: Esses efeitos só podem ser aplicados em textos criados com o uso dos atalhos presentes na barra de ferramentas lateral. 509 PROGRAMA TÉCNICO CIDADÃO Transição de slides, efeitos e animação Transição de slides Efeitos de transição: São efeitos que ocorrem entre a exibição de um slide e do seguinte. No menu, clicar em "Apresentação de slides" - "Transição de slides". Os botões têm as seguintes funções: 510 PROGRAMA TÉCNICO CIDADÃO No último campo pode-se definir a velocidade do efeito (Devagar, Média, Rápida) 2. Extras: Ver abaixo 3. Atualizar 4. Atribuir (Aplicar) no slide atual 5. Visualizar: Permite pré-visualizar o slide Botão extra Os botões têm as seguintes funções: a. A transição de slides será automática No campo abaixo do botão especificar o tempo de transição b. A transição de slides será semi-automática. c. A transição de slides será manual d. Permite inserir sons (Escolher um som no campo abaixo do botão). 511 PROGRAMA TÉCNICO CIDADÃO e. Pode-se escolher um arquivo wav pré-existente. Escolher todas as opções que quiser e clicar no botão X para fechar a janela "Transição de slides". Animando Textos Clicar no menu “Formatar” - “Texto”. (Essa opção estará indisponível se o slide estiver no formato "Tópicos"). Na janela que aparece, há duas abas "Texto" e "Texto animado ". Selecionando a opção "Ajustar largura ao texto" a caixa de texto ficará do tamanho do texto. Selecionando a opção "Ajustar para o frame" o texto será estendido para o tamanho da caixa. 512 PROGRAMA TÉCNICO CIDADÃO Em "Espaçamento da margem" pode-se determinar os 4 valores das margens da caixa de texto: Esquerda. Direita, Superior, Inferior. Em Âncora do texto pode-se escolher a posição em que o texto ficará dentro da caixa, assinalando um dos campos. Aba Texto animado Nessa aba pode-se configurar efeitos de animação para o texto. - Em "Efeito" selecionar um efeito. (Se a opção for do tipo "rolar", em "Direção" será preciso especificar em que sentido o texto rolará.) Após realizar as configurações desejadas no texto clique no botão "Ok". Como inserir imagens Clicar no menu "Inserir" - “Figura” e escolher um arquivo de imagem em seu computador. A imagem estará selecionada e seu tamanho e localização podem ser modificados . Animando Imagens Primeiro, selecionar a figura que se deseja animar. No menu, clicar em "Apresentação de slides" - "Animação". A seguinte janela se abre: 513 PROGRAMA TÉCNICO CIDADÃO Nessa janela estão os seguintes botões: Suas funções são: 1. Primeira imagem 514 PROGRAMA TÉCNICO CIDADÃO 2. Para trás 3. Parar 4. Tocar (para frente) 5. Última imagem 6. Número da imagem 7. Duração 8. Contagem de seqüências Os demais botões têm as seguintes funções: 1. Aplicar objeto: capturar a imagem presente no slide. 2. Aplicar objetos um por um: capturar as imagens de uma animação 3. Elimina a imagem ativa: excluir a figura atual. 4. Elimina as imagens todas: remover todas as figuras capturadas Depois de selecionar a imagem e ter a janela “Animação” aberta, clicar no primeiro botão (Aplicar objeto) para capturá-la. A figura deve aparecer na parte de cima da janela. Em "Grupo de animação" selecionar a opção "Objeto de bitmap". Em "Alinhamento" selecionar a opção desejada (Direita superior, Direita inferior, Centrado, ...) 515 PROGRAMA TÉCNICO CIDADÃO Usando a barra de botões pode-se visualizar todas as figuras da animação e em "Contagem de seqüências" pode-se determinar quantas vezes a animação será executada. Clicar no botão "Criar" para inserir a animação no slide. Apresentação – exportando e imprimindo No OpenOffice Apresentação é possível exportar arquivos em outros formatos. Exportação Escolha “Arquivo” - “Exportar”. Os formatos de arquivos a seguir lhe oferecerão opções adicionais de exportação depois que você clicar em Salvar: • Documento HTML • JPEG • SVM/WMF/PICT/MET • BMP • GIF • EPS • PNG • PBM • PPM • PGM. 516 PROGRAMA TÉCNICO CIDADÃO Se você selecionar "Macromedia Flash (SWF)" como formato de arquivo, o documento atual do Impress ou do Draw será exportado no formato Macromedia Flash. Se você selecionar "Documento HTML" como formato de arquivo, será exibido o Assistente de Exportação de HTML. Esse Assistente o guiará durante todo o processo de exportação e lhe oferecerá a opção de salvar as figuras da apresentação no formato GIF ou JPG. Além disso, é possível exportar uma apresentação no formato .pdf: Escolha “Arquivo” - “Exportar como PDF” E também é possível exportar arquivos no formato do MS Office ou outras suítes de escritório, podendo ser abertos em máquinas sem o OpenOffice: Escolha “Arquivo” - “Salvar como”. Você verá a caixa de diálogo “Salvar como”. Na caixa de listagem “Salvar como tipo”, selecione o formato desejado. Insira um nome na caixa “Nome do arquivo” e clique em “Salvar”. Se você sempre desejar salvar os documentos do OpenOffice.org.br em outro formato, selecione esse formato em “Ferramentas” - “Opções” - “Carregar/Salvar” - “Geral” na área “Formato de arquivo padrão”. Imprimindo Imprime o presente documento, a seleção ou as páginas que você especificar. Também é possível definir as opções da impressão para o documento atual. As opções de impressão podem variar de acordo com a impressora e o sistema de impressão que você usa. Escolha “Arquivo” - “Imprimir”, ou pressione “Ctrl + P”, ou clique no botão “Imprimir Arquivo Diretamente” na barra de funções. A seguinte janela é aberta: 517 PROGRAMA TÉCNICO CIDADÃO Impressora Lista a impressora padrão para o documento atual. As informações para a impressora são mostradas abaixo desta caixa. Se você selecionar uma outra impressora, as informações serão atualizadas. Nome Lista as impressoras instaladas no sistema operacional. Para mudar a impressora padrão, selecione um nome de impressora na lista. Status Descreve o status atual da impressora selecionada. 518 PROGRAMA TÉCNICO CIDADÃO Tipo Exibe o tipo de impressora que você selecionou. Local Exibe a porta para a impressora selecionada. Comentário Exibe informações adicionais sobre a impressora. Propriedades Altera as configurações da impressora do sistema operacional para o documento atual. Para alterar as configurações da impressora do OpenOffice.org.br, clique no botão Opções . As propriedades da impressora variam de acordo com a impressora que você seleciona. Imprimir em arquivo Imprime em um arquivo em vez de em papel. Selecione esta opção e, em seguida, escolha um local para salvar o arquivo. Intervalo de impressão Define a área de impressão para o documento atual. Tudo Imprime o documento inteiro. Páginas Imprime somente as páginas que você especificar na caixa Páginas . Para imprimir um intervalo de páginas, use o formato 3-6. Para imprimir páginas avulsas, use o formato 7;9;11. Também é possível imprimir uma 519 PROGRAMA TÉCNICO CIDADÃO combinação de intervalos de páginas e páginas avulsas, usando-se o formato 3-6;8;10;12. Seleção Imprime somente as áreas ou objetos selecionados no documento atual. Cópias Especifica o número de cópias que você quer imprimir e as opções de classificação. Cópias Insira o número de cópias que deseja imprimir. Intercalar Conserva a ordem das páginas do documento original. Avaliação dos tópicos aplicados Exercícios 1. Criar duas apresentações vazias com 3 slides cada. A primeira no modo Apresentação em branco e a segunda a partir do modelo. 2. Colocar fundo nas apresentações: Na primeira, usar a cor que desejar. Na segunda, usar o gradiente ou o bitmap que desejar. 3. Criar e formatar duas frases (uma em cada apresentação) escolhendo fonte, tamanho e cor, conforme desejar. Uma delas deve estar formatada com "Trabalho de fonte". A outra deve estar formatada com um "Efeito 3D". 520 PROGRAMA TÉCNICO CIDADÃO 4. Em uma apresentação, inserir uma animação de imagem. Na outra inserir uma animação de texto e som. 5. Incluir efeitos de transição de slides diferentes em cada arquivo. 521 PROGRAMA TÉCNICO CIDADÃO Navegador Internet Neste curso você irá aprender a utiliza o navegador de internet Mozilla Firefox. O Mozilla Firefox é um browser que implementa uma serie de recursos para facilitação da navegação como as abas que permitem que em uma única janela tenhamos várias páginas em aberto e apenas clicando em uma das abas trocamos de site. Os bookmarks do Firefox permite também que sejam registradas para abrir na inicialização do browser, como home, um conjunto de abas. Existem as extensões do browser que são implementadas por plugins que estão disponíveis no próprio site da organização mozilla... e que são desenvolvidas pela comunidade e também pela própria equipe da mozilla dev. Além destas características o browser firefox implementa uma melhor visualização dos sites haja visto que utiliza na renderização das páginas, após a interpretação, todos os padrões do W#c. 522 PROGRAMA TÉCNICO CIDADÃO CONHECENDO O NAVEGADOR MOZILLA FIREFOX O “verdadeiro” firefox é um panda. Um firefox não é uma raposa de fogo. É como é conhecido o panda-vermelho (Ailurus fulgens), devido a sua cor e tamanho serem parecidos com os de uma raposa. Um panda-vermelho mede de 50 a 63cm e pesa entre 4 e 6kg. Abas Utilizando as abas Com as abas você abre vários sites dentro de uma só janela. O Firefox pode abrir várias páginas em uma mesma janela. É a “navegação com abas”. Clique em um link com o botão do meio para abrí-lo em uma nova aba. Clique na aba para visualizar a página correspondente. Métodos para abrir uma aba • Clique no link com o botão do meio (ou clique na rodinha do mouse). • Clique no link com o botão direito e selecione Abrir em nova aba. • Clique no link enquanto pressiona Ctrl. • Abra uma aba vazia com o menu Arquivo > Nova aba. • Use o botão Nova aba na barra de ferramentas. • Dê um duplo clique em uma região vazia da barra de abas. 523 PROGRAMA TÉCNICO CIDADÃO Adicione o botão “Nova aba” na barra de ferramentas Clique em Exibir > Barras de ferramentas > Personalizar. Agora você tem uma janela com todos os itens disponíveis. Para remover arraste o item da barra para a janela. Para adicionar arraste da janela para a posição desejada em uma das barras. Como abrir links sempre em abas em vez de abrir janelas? O Firefox 1.0 possui uma configuração que impede as páginas de abrirem novas janelas. Em vez disso, o Firefox abre em uma nova aba ou na mesma janela. Entretanto, estas opções não aparecem por padrão na janela de preferências. Elas causam problemas em algumas situações e os desenvolvedores do Firefox acharam mais prudente deixá-la “escondida”. Para que o Firefox mostre a opção, siga os passos abaixo: • Digite about:config na barra de endereços do Firefox e clique no botão Ir. • Na lista de opções, localize browser.tabs.showSingleWindowModePrefs. • O valor padrão dessa opção é false. • Clique na opção com o botão direito e selecione Inverter valor. • O valor agora é true. Pode sair dessa janela. Agora o Firefox mostrará a preferência. Siga os passos abaixo para ativá-la: • Abra a janela de configuração. No Windows: Ferramentas > Opções. • Selecione o painel Avançado e abra a opção Abas. • Marque o item Forçar links que abrem janelas a abrir. 524 PROGRAMA TÉCNICO CIDADÃO • Clique em OK. Troque de aba utilizando o teclado. • Ir para a aba da esquerda: Ctrl+Shift+Tab ou Ctrl+PgUp. • Ir para a aba da direita: Ctrl+Tab ou Ctrl+PgDn. • Ativar da primeira a nona aba: Ctrl+1 até Ctrl+9. Navegação Palavras acentuadas Isto ocorre porque o Firefox está mostrando a página utilizando o conjunto de caracteres errado. A página pode ser corrigida através do menu Exibir > Codificação. Nas páginas em português normalmente a codificação é “Unicode (UTF-8)” e “Ocidental (ISO-88591)”. Na maioria dos casos, o servidor envia errado o mapeamento de caracteres da página. Por exemplo, a página foi feita na codificação UTF-8 mas o servidor diz que é ISO-8859-1. O servidor pode simplesmente não enviar a codificação. Então o Firefox tenta adivinhar a codificação certa. Quando ele não consegue detectar aparecem os caracteres estranhos. 525 PROGRAMA TÉCNICO CIDADÃO Navegue por páginas web usando o teclado. O cursor de teclado, quando ativado, insere um cursor de texto na página. Deste modo é possível navegar pela página como se você estivesse num editor de texto. Para ativá-lo tecle F7 ou use a janela de configuração: • Abra a janela de configuração (no Windows está no menu Ferramentas > Opções). • Selecione o painel Avançado. • Abra o item Acessibilidade. • Marque a opção Navegar pela página utilizando o cursor de teclado. Endereços que não possuem links. Não é necessário copiar e colar. Apenas selecione o texto e arraste para a barra de abas ou para o botão Ir. Por exemplo: selecione o parágrafo abaixo e arraste para uma aba: www.sun.com.br É possível arrastar endereços não só do próprio Firefox, mas também de outros aplicativos. Utilize Ctrl para selecionar células de tabelas. O Firefox tem um método para selecionar tabelas utilizando a tecla Ctrl junto com o mouse. Apenas pressione Ctrl e clique com o botão esquerdo em alguma célula. Ele será selecionada, então é só usar o comando Editar > Copiar. 526 PROGRAMA TÉCNICO CIDADÃO Também é possível selecionar várias células utilizando Ctrl ao arrastar o mouse com o botão esquerdo pressionado. Caso o clique seja na fora da tabela, mas próximo a ela, a tabela inteira é pressionada. Faça o teste com a tabela abaixo: Coluna A Coluna B Coluna C Coluna D Coluna E Célula A1 Célula B1 Célula C1 Célula D1 Célula E1 Célula A2 Célula B2 Célula C2 Célula D2 Célula E2 Célula A3 Célula B3 Célula C3 Célula D3 Célula E3 Congelando imagens Basta pressionar Esc e as animações serão congeladas. Este recurso só funciona em animações com imagens GIF. Outras animações, como as do plugin Flash, não serão interrompidas. Uma tentativa é clicar na animação com o botão direito e desmarcar a opção Play. Entretanto, alguns autores de animações Flash ocultam o item Play. Favoritos Conheça o sistema de favoritos do Firefox. Os favoritos do Firefox são equivalentes aos favoritos do Internet Explorer. Eles guardam os endereços de páginas que você quer acessar posteriormente. 527 PROGRAMA TÉCNICO CIDADÃO O Firefox importa automaticamente os favoritos do IE e coloca na pasta Favoritos > Importado do Internet Explorer. Você também pode importá-los a qualquer momento pelo menu Arquivo > Importar. Assim como no IE, você pode categorizar as páginas em pastas e acessá-las através do menu Favoritos, através do painel, da barra de ferramentas ou do gerenciador de favoritos. O Firefox tem muitos recursos extras. O comando Abrir tudo em abas abre todos os favoritos da pasta na mesma janela. Ele existe em todas as pastas do menu Favoritos. Outro diferencial do Firefox é a facilidade em localizar uma página. O campo Localizar nome do painel de favoritos permite achar uma página digitando uma parte do nome da página. Este campo existe também no gerenciador de favoritos. Adicionando uma página ao menu Favoritos Há diversos modos: • Arraste o ícone a esquerda do endereço da página para o menu Favoritos. O menu se abrirá e você pode soltar o ícone na posição desejada. • Se o painel Favoritos estiver aberto, você pode arrastar o endereço para lá também. • Links em páginas também podem ser arrastados para o menu Favoritos ou para o botão Favoritos. • Através do menu Favoritos > Adicionar página. • Através do menu de contexto da página (botão direito), comando Adicionar aos favoritos. 528 PROGRAMA TÉCNICO CIDADÃO Outras dicas • O comando Adicionar aos favoritos é também acessível pelo atalho Ctrl+D. • A janela Novo favorito tem uma opção que permite criar favoritos de todas as abas da janela em um só passo. • Para abrir o painel de favoritos use o menu Exibir > Painel > Favoritos. Ou então use o atalho Ctrl+B ou ainda adicione o botão na barra de ferramentas. • Para abrir o gerenciador de favoritos, selecione o menu Favoritos > Organizar. • Para excluir rapidamente uma página, abra o menu Favoritos, clique com botão direito no nome da página e selecione Excluir. Arrastando pastas no menu Favoritos Por padrão, o Firefox não permite que se arraste as pastas no menu Favoritos. Mas isso pode ser realizado usando as teclas Shift e Ctrl. Abra o menu Favoritos, pressione Shift e arraste a pasta para outra posição. Pressionando Ctrl a pasta será copiada em vez de ser movida. Faça um backup dos seus favoritos. 529 PROGRAMA TÉCNICO CIDADÃO Abra o menu Favoritos > Organizar. Na janela do gerenciador selecione Arquivo > Exportar. Agora para restaurar os favoritos em outra instalação do Firefox basta selecionar Arquivo > Importar no gerenciador de favoritos. O que são os favoritos dinâmicos? Um favorito dinâmico (Live Bookmark no Firefox em inglês) é um recurso do Firefox que usa arquivos RSS para criar uma pasta auto-atualizável de favoritos. Um favorito dinâmico funciona como uma pasta de favoritos, você as diferencia pelo ícone. O conteúdo do favorito dinâmico é periodicamente atualizado pelo Firefox. O Firefox detecta se a página está associada a um favorito dinâmico e mostra um ícone na barra de status (este é o ícone do tema padrão, outro tema poderá definir um ícone diferente). Clique no ícone e selecione o arquivo-fonte RSS que servirá como um favorito dinâmico. Então selecione a pasta onde o favorito dinâmico será criado. O recomendado é usar a pasta da barra de favoritos. Observe que o Firefox não é um agregador RSS. Instale uma extensão RSS para usar o Firefox como um agregador ou use o agregador RSS do Thunderbird. 530 PROGRAMA TÉCNICO CIDADÃO Crie favoritos dinâmicos manualmente Algumas página não dizem ao Firefox que podem ser associadas a favoritos dinâmicos. Ainda assim você pode criar um. Procure pela página algum ícone de arquivo-fonte RSS. Normalmente são ícones de fundo laranja com as siglas RSS ou XML. Se a extensão LiveBookmarkThis estiver instalada é só clicar no ícone com o botão direito e selecionar Add Live Bookmark. Se não quiser usar a extensão siga os passos abaixo: • Clique com o botão direito no ícone e selecione Copiar link. • Agora abra o gerenciador em Favoritos > Organizar. • Na janela selecione Arquivo > Novo favorito dinâmico. • Cole o endereço copiado no campo End. da fonte. Interface Impeça que páginas web mexam na barra de status. Algumas páginas colocam textos animados ou escondem a barra de status do navegador. O Firefox permite impedir esses abusos. 531 PROGRAMA TÉCNICO CIDADÃO Abra a janela de opções do Firefox. No Windows, está em Ferramentas > Opções. Clique no ícone Facilidades e, na linha referente a JavaScript, clique no botão Permissões. Na janela, desmarque as opções Modificar o texto da barra de status e Ocultar a barra de status. Como excluir um mecanismo do campo de pesquisa? O Firefox não possui um método para excluir um mecanismo. Você pode adicionar essa interface através da extensão SearchPluginHacks. Instale-a, então clique no ícone no campo de pesquisa para aparecer a lista de opções. Clique com o botão direito em cima do mecanismo indesejado e selecione Delete. Remoção manual Se não quiser usar a extensão, você pode retirar um mecanismo apagando dois arquivos no seu computador. 532 PROGRAMA TÉCNICO CIDADÃO Verifique a pasta onde está instalado o Firefox. No Windows, normalmente está em C:\Arquivos de Programas\Mozilla Firefox. Nesta pasta existe a subpasta searchplugins, que armazena todos os mecanismos. Um mecanismo de pesquisa é composto por dois arquivos com o mesmo nome, diferindo nas extensões. Por exemplo, para excluir o Google, apague os arquivos google.gif e google.src. Reinicie o Firefox e o Google não estará mais disponível na lista de mecanismos. Ganhe espaço ocultando os menus que você não usa. É possível ocultar menus através da extensão Compact Menu. Após instalar, abra a janela de personalização do Firefox e desmarque os menus indesejados. Arrastando o item Menu para a barra todos os menus sumirão e estarão disponíveis apenas através deste item. Coloque o botão “Pesquisar” no campo de pesquisa. A extensão Search Button fornece um botão para personalizar a barra de ferramentas. O botão inicia a pesquisa, substituindo a tecla Enter. Use imagens da web como papel de parede. O Firefox pode definir imagens das páginas web como papel de parede (wallpaper). Clique com o botão direito em cima da imagem desejada e selecione Definir como papel de parede. A janela de confirmação permite visualizar como ficará a área de trabalho, além de definir o posicionamento da imagem e a cor de fundo. 533 PROGRAMA TÉCNICO CIDADÃO Extensões e Plugins O que são “plugins”? Plugins são programas que permitem que páginas web usem recursos não presentes na linguagem HTML, na qual são criadas as páginas. Um exemplo comum de plugin é o Flash Player que é um visualizador de programas escritos em flash. Este plugin é usado pelo Firefox quando for necessário executar um programa em flash no navegador (normalmente uma animação). Outro exemplo muito comum é o plugin para java. É uma programa que permite executar aplicações Java muito usadas pelos sites de bancos para criar teclados virtuais e por outros sites para fazer sistemas de notícias. Além destes há uma variedade enorme de outros plugins. Dúvidas freqüentes Por que os plugins não vêm inclusos no Firefox? Devido a uma questão de licença de software, que não permite que se distribua programas de outras empresas junto com o Firefox. Além disso existem muitos plugins, o que tornaria o download mais demorado. Onde encontrar? Um bom ponto de partida para encontar plugins é no site www.mozilla.org. Outro bom conteúdo sobre os plugins está no plugindoc. No próprio site do desenvolvedor do plugin sempre é encontrado um link para baixá-lo. Como instalar? 534 PROGRAMA TÉCNICO CIDADÃO Geralmente os plugins instalam-se automaticamente pelo Assistente do Firefox, sem que seja necessária nenhuma iniciativa do usuário. Alguns plugins necessitam de uma pequena configuração no software (no plugin) como no caso do Quicktime em que é necessário entrar em opções (do Quicktime) e alterar algumas configurações. Geralmente as instruções para a instalação do plugin constam no site do autor. Qual é a diferença entre plugin e extensão? Um plugin é um programa instalado no Firefox que adiciona recursos que podem ser usados por páginas web. Por exemplo, os plugins Flash, Java e Windows Media Player permitem que as páginas tenham recursos que não são suportados por padrão, como som e vídeo. Já uma extensão é um programa feito especialmente para o Firefox para criar ou modificar alguma funcionalidade. A existência ou não de alguma extensão não interfere na visualização das páginas. Como instalar uma extensão? Normalmente basta visitar a página da extensão e clicar no link de instalação fornecido. Entretanto, se a página não estiver em update.mozilla.org, o Firefox o impedirá de continuar (por questões de segurança). Nesse caso uma barra aparecerá no topo da janela. Clique no botão para autorizar a instalação de extensões a partir daquele site. Após isso tente instalar novamente (clicando no link da página). Como salvar uma extensão? É possível salvar um arquivo de extensão (formato XPI) no seu HD para instalar depois. Basta clicar no link de instalação com o botão direito e selecionar Salvar destino como. 535 PROGRAMA TÉCNICO CIDADÃO Para instalar no Firefox o arquivo XPI salvo no seu HD use um dos métodos abaixo: • Arraste o arquivo XPI para a janela de extensões (Ferramentas > Extensões). • Use o menu Arquivo > Abrir arquivo e selecione o arquivo XPI. • Arraste o arquivo XPI para uma janela do Firefox (nem sempre funciona). Como acelerar o abertura de páginas PDF? Quando um arquivo PDF é aberto dentro do Firefox geralmente ocorre um atraso até o arquivo começar a ser mostrado. Isso ocorre devido a abertura do Acrobat Reader, que sempre carrega vários plugins que normalmente não são usados. É possível acelerar a abertura do Reader fazendo-o carregar os plugins apenas quando eles forem necessários. No Windows, a maneira mais simples de fazer isso é através do Adobe Reader Speed-Up, um programa gratuito. Para configurar manualmente, siga estes passos: • Localize a pasta onde o Acrobat Reader está instalado. No Windows, geralmente é C:\Program Files\Adobe\Acrobat5.x\Reader ou C:\Program Files\Adobe\Reader. • Nessa pasta existe a pasta plug_ins e optional. • Abra a pasta plug_ins e mova todas as pastas e arquivos .API para a pasta optional. Na próxima vez que você abrir um PDF (no Acrobat Reader ou no Firefox) notará que será muito mais rápido. Como instalar um tema salvo no computador? • Primeiro localize o arquivo contendo o tema (deve ter a terminação JAR). • Então abra a janela de temas do Firefox (Ferramentas > Temas). 536 PROGRAMA TÉCNICO CIDADÃO • Agora arraste o arquivo para a janela de temas. Como salvar um tema? Procure o link de instalação e clique nele com botão direito. Então selecione Salvar destino como. Para instalar o tema siga os passos do início da página. 537