191
Curso de Pós-Graduação “Lato Sensu” (Especialização) a Distância Administração em Redes Linux GERENCIAMENTO DE SISTEMAS LINUX 3 a Edição Joaquim Quinteiro Uchôa Universidade Federal de Lavras – UFLA Fundação de Apoio ao Ensino, Pesquisa e Extensão – FAEPE Lavras – MG

GERENCIAMENTO DE SISTEMAS LINUX

Embed Size (px)

DESCRIPTION

APOSTILA GERENCIAMENTO DE SISTEMAS LINUX

Citation preview

Page 1: GERENCIAMENTO DE SISTEMAS LINUX

Curso de Pós-Graduação“Lato Sensu” (Especialização) a Distância

Administração em Redes Linux

GERENCIAMENTO DE SISTEMAS LINUX

3a Edição

Joaquim Quinteiro Uchôa

Universidade Federal de Lavras – UFLAFundação de Apoio ao Ensino, Pesquisa e Extensão – FAEPE

Lavras – MG

Page 2: GERENCIAMENTO DE SISTEMAS LINUX

PARCERIAUniversidade Federal de Lavras – UFLAFundação de Apoio ao Ensino, Pesquisa e Extensão – FAEPE

REITORAntônio Nazareno Guimarães Mendes

VICE-REITORRicardo Pereira Reis

DIRETOR DA EDITORAMarco Antônio Rezende Alvarenga

PRÓ-REITOR DE PÓS-GRADUAÇÃOJoel Augusto Muniz

PRÓ-REITOR ADJUNTO DE PÓS-GRADUAÇÃO “LATO SENSU”Marcelo Silva de Oliveira

COORDENADOR DO CURSOJoaquim Quinteiro Uchôa

PRESIDENTE DO CONSELHO DELIBERATIVO DA FAEPELuiz Antônio Lima

EDITORAÇÃOGrupo Ginux (http://www.ginux.ufla.br/)

IMPRESSÃOGráfica Universitária/UFLA

Ficha Catalográfica preparada pela Divisão de Processos Técnicosda Biblioteca Central da UFLA

Uchôa, Joaquim QuinteiroGerenciamento de Sistemas Linux/ Joaquim Quinteiro Uchôa. - - 3.ed.

Lavras: UFLA/FAEPE, 2007.191 p. : il. - Curso de Pós-Graduação “Lato Sensu” (Especialização) a

Distância: Administração em Redes Linux.

Bibliografia.

1. Administração de Sistemas. 2. Sistemas Operacionais. 3. Linux.4. Configuração e Instalação. 5. Gerenciamento de Usuários. I. DCC II.Universidade Federal de Lavras. III. Fundação de Apoio ao Ensino, Pesquisa eExtensão. IV. Título.

CDD-005.43

Nenhuma parte desta publicação pode ser reproduzida, por qualquermeio ou forma, sem a prévia autorização da FAEPE.

Page 3: GERENCIAMENTO DE SISTEMAS LINUX

SUMÁRIO

1 Introdução 13

2 Visão Geral de um Sistema Linux 17

2.1 Comentários Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.2 Breve Histórico do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.3 O Kernel do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.4 Aplicações Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.5 Distribuições Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.6 A Questão da Padronização . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.7 Instalação o Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2.8 Obtendo Ajuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2.9 Comentários Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3 Configuração de Dispositivos 41

3.1 Comentários Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

3.2 Obtendo Informação sobre Hardware em Linux . . . . . . . . . . . . . . . . . 41

3.3 Drivers e Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

3.4 O Arquivo /etc/modules.conf . . . . . . . . . . . . . . . . . . . . . . . . 54

3.5 Criação de Arquivos de Dispositivos . . . . . . . . . . . . . . . . . . . . . . . 55

3.6 Gerenciamento Dinâmico de Dispositivos com udev, D-Bus e HAL . . . . . . 57

3.7 O Diretório /etc e Configurações Básicas do Sistema . . . . . . . . . . . . . 58

3.8 Configuração do Locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.9 Configuração de Rede . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

3.10 Modems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

3.11 Interface Gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

3.11.1 Configuração do X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

3.12 Impressoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

3.13 Gravadores de CDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

3.14 Placas de Som . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

Page 4: GERENCIAMENTO DE SISTEMAS LINUX

3.15 Outros Dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

4 Sistema de Arquivos 87

4.1 Comentários iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

4.2 Estrutura de Diretórios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

4.2.1 O diretório /usr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.2.2 O diretório /var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

4.2.3 Outros diretórios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4.3 Uso de Dispositivos de Armazenamento . . . . . . . . . . . . . . . . . . . . . 94

4.4 Uso de Memória Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

4.5 Montagem de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

4.6 Partições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

4.7 Tipos de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

4.8 Atributos de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

4.9 Comentários Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

5 Gerenciamento de Processos 115

5.1 Comentários Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

5.2 Gerenciamento de memória em Linux . . . . . . . . . . . . . . . . . . . . . . 115

5.2.1 Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

5.2.2 Buffer cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

5.3 Componentes de um Processo . . . . . . . . . . . . . . . . . . . . . . . . . . 118

5.4 Sinais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

5.5 Monitoração de Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

5.6 Iniciando e Encerrando o Sistema . . . . . . . . . . . . . . . . . . . . . . . . 126

5.6.1 Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

5.6.2 O Processo init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

5.6.3 O Arquivo /etc/inittab . . . . . . . . . . . . . . . . . . . . . . . . 129

5.6.4 Encerramento e Reinicialização do Sistema . . . . . . . . . . . . . . . 129

5.6.5 Modo Monousuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

5.7 Gerenciamento de Serviços . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

5.8 Disquetes de Emergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Page 5: GERENCIAMENTO DE SISTEMAS LINUX

5.9 Gerenciadores de Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

5.9.1 LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

5.9.2 GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

5.10 Comentários Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

6 Gerenciamento de Usuários 139

6.1 Comentários iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

6.2 Contas de Usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

6.3 O Arquivo /etc/passwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

6.4 Escolha de Senhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

6.5 Senhas Sombreadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

6.6 Tipos de Contas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

6.6.1 Pseudo-Usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

6.7 Grupos de Usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

6.8 Variáveis de Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

6.9 Uso de Quotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

6.10 Criando e Alterando Contas de Usuários . . . . . . . . . . . . . . . . . . . . . 157

6.11 Remoção e Desabilitação de Usuários . . . . . . . . . . . . . . . . . . . . . . 159

6.12 Tornando-se root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

6.13 PAM (Pluggable Authentication Modules) . . . . . . . . . . . . . . . . . . . . 162

6.14 Configuração Básica do PAM . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

6.14.1 Usando o Arquivo /etc/pam.conf . . . . . . . . . . . . . . . . . . . 165

6.14.2 Utilizando o Diretório /etc/pam.d . . . . . . . . . . . . . . . . . . . 166

6.14.3 Configurando o Parâmetro /etc/control-flag . . . . . . . . . . . 167

6.14.4 Exemplo de Configuração de um Serviço via Linux-PAM . . . . . . . . 168

6.15 Comentários Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

7 Configurações Diversas 173

7.1 Arquivos de Registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

7.2 Gerenciamento de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

7.3 Automatizando tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

7.3.1 O uso do cron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Page 6: GERENCIAMENTO DE SISTEMAS LINUX

7.3.2 O uso do at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

7.4 Cópias de Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

7.5 Configuração de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

Referências Bibliográficas 187

Page 7: GERENCIAMENTO DE SISTEMAS LINUX

LISTA DE FIGURAS

2.1 Camadas Típicas de um Sistema Operacional Baseado em UNIX . . . . . . 20

2.2 Xfce Rodando AbiWord, Gnumeric, GIMP e XMMS . . . . . . . . . . . . . . . 22

2.3 Processador de Texto do OpenOffice . . . . . . . . . . . . . . . . . . . . . . . 23

2.4 Navegador Firefox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.5 Editor Vetorial Inkscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.6 Player Multimídia Audacious . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.7 Jogo Bzflag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.8 Editores de Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.9 Editor Bluefish . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.10 Execução do Comando man . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.11 Execução do pinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.1 Trechos de Saída do dmesg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.2 Exemplo de Saída do lspci . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

3.3 Exemplo de Saída do lsusb . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

3.4 Trecho de Saída do lshal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

3.5 Obtendo Informações de Hardware com o hal-device-manager . . . . . 47

3.6 Arquivo /proc/interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

3.7 Arquivo /proc/cpuinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

3.8 Obtendo Informações de Hardware via sysfs . . . . . . . . . . . . . . . . . . 50

3.9 Exemplo de Uso do systool . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

3.10 Exemplo de Uso do dmidecode . . . . . . . . . . . . . . . . . . . . . . . . . 52

3.11 Módulos Carregados e em Uso . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3.12 Arquivo /etc/modules.conf . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.13 Uso do Comando makedev . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.14 Exibindo Informações de um Dispositivo . . . . . . . . . . . . . . . . . . . . . 56

3.15 Exemplo de Uso do Comando mknod . . . . . . . . . . . . . . . . . . . . . . 56

3.16 Trecho de listagem do Diretório /dev com uso do udev . . . . . . . . . . . . 58

3.17 Trechos do Diretório /etc/sysconfig . . . . . . . . . . . . . . . . . . . . . 59

Page 8: GERENCIAMENTO DE SISTEMAS LINUX

3.18 Trechos do Diretório /etc/conf.d . . . . . . . . . . . . . . . . . . . . . . . 60

3.19 Exemplo de Uso dos Comandos loadkeys e setfont . . . . . . . . . . . . 61

3.20 Uso do comando locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

3.21 Exemplos de Uso dos Comando ifconfig e ip . . . . . . . . . . . . . . . . 66

3.22 Exemplo de Arquivo resolv.conf . . . . . . . . . . . . . . . . . . . . . . . 67

3.23 Seção Module do /etc/X11/xorg.conf . . . . . . . . . . . . . . . . . . . 72

3.24 Seção Files do /etc/X11/xorg.conf . . . . . . . . . . . . . . . . . . . . 72

3.25 Seção InputDevice do /etc/X11/xorg.conf . . . . . . . . . . . . . . . 72

3.26 Seções Monitor e Device do /etc/X11/xorg.conf . . . . . . . . . . . 73

3.27 Seção Screen do /etc/X11/xorg.conf . . . . . . . . . . . . . . . . . . . 73

3.28 Exemplo de Comandos de Impressão . . . . . . . . . . . . . . . . . . . . . . 76

3.29 Um Exemplo de Arquivo /etc/printcap . . . . . . . . . . . . . . . . . . . 77

3.30 Configurando o CUPS via Navegador . . . . . . . . . . . . . . . . . . . . . . 79

3.31 Configurando Impressora no CUPS . . . . . . . . . . . . . . . . . . . . . . . 80

3.32 Arquivo /etc/printers.conf . . . . . . . . . . . . . . . . . . . . . . . . . 81

3.33 Exemplos de DeviceURI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

3.34 Exemplos de Uso do lpoptions . . . . . . . . . . . . . . . . . . . . . . . . 82

3.35 Exemplo de Uso do cdrecord . . . . . . . . . . . . . . . . . . . . . . . . . . 83

4.1 Árvore Raiz de Diretórios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

4.2 Árvore de Diretórios em /usr . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.3 Árvore de Diretórios em /var . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

4.4 Encadeamento de I-nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

4.5 Hard Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

4.6 Exemplo de /etc/fstab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

4.7 Exemplo de Uso de Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

4.8 Uso do Comando file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

4.9 Atributos de Permissão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

4.10 Exemplos de uso do chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.11 Cálculo de permissões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.12 Uso do umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Page 9: GERENCIAMENTO DE SISTEMAS LINUX

5.1 Script que Cria uma Árvore de Diretórios Extremamente Profunda . . . . . . 126

5.2 Arquivo /etc/inittab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

5.3 Exemplo de /etc/lilo.conf . . . . . . . . . . . . . . . . . . . . . . . . . . 135

5.4 Arquivo /boot/grub/menu.lst . . . . . . . . . . . . . . . . . . . . . . . . 137

6.1 Sistema Multiusuário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

6.2 Trecho do arquivo /etc/passwd . . . . . . . . . . . . . . . . . . . . . . . . . 142

6.3 Codificação de Senhas em Linux . . . . . . . . . . . . . . . . . . . . . . . . . 143

6.4 Codificação de Senhas Usando DES e MD5 . . . . . . . . . . . . . . . . . . 143

6.5 Exemplo de uso Comando passwd . . . . . . . . . . . . . . . . . . . . . . . . 143

6.6 Decodificação de Senhas em Linux . . . . . . . . . . . . . . . . . . . . . . . 144

6.7 Uso do Campo GECOS pelo finger . . . . . . . . . . . . . . . . . . . . . . 145

6.8 Trecho do Arquivo /etc/shadow . . . . . . . . . . . . . . . . . . . . . . . . 147

6.9 Execução do Comando chage -l jsilva . . . . . . . . . . . . . . . . . . 149

6.10 Execução do Comando chage jsilva . . . . . . . . . . . . . . . . . . . . . 149

6.11 Arquivo /etc/group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

6.12 Usos dos Comandos id e newgrp . . . . . . . . . . . . . . . . . . . . . . . . 152

6.13 Editando a quota de um usuário . . . . . . . . . . . . . . . . . . . . . . . . . 155

6.14 Editando a quota de um usuário . . . . . . . . . . . . . . . . . . . . . . . . . 156

6.15 Execução do Comando repquota -a . . . . . . . . . . . . . . . . . . . . . 161

6.16 Funcionamento do PAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

6.17 O Arquivo /etc/pam.d/system-auth . . . . . . . . . . . . . . . . . . . . . 169

6.18 Exemplo de Configuração do pam_access . . . . . . . . . . . . . . . . . . . 169

7.1 Script para Implementar Rotação de Logs . . . . . . . . . . . . . . . . . . . . 174

7.2 Script para Implementar Rotação de Logs Usando Sinais . . . . . . . . . . . 174

7.3 Exemplo de um Arquivo /etc/syslog.conf . . . . . . . . . . . . . . . . . 175

7.4 Exemplo de crontab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

7.5 Exemplo de /etc/crontab . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

7.6 Exemplos de Uso do Comando at . . . . . . . . . . . . . . . . . . . . . . . . 183

7.7 Configurando Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

Page 10: GERENCIAMENTO DE SISTEMAS LINUX

LISTA DE TABELAS

3.1 Divisão do endereço IP e Classes . . . . . . . . . . . . . . . . . . . . . . . . 66

3.2 Variáveis do Arquivo /etc/printcap . . . . . . . . . . . . . . . . . . . . . . 77

3.3 Variáveis do Arquivo /etc/cups/printers.conf . . . . . . . . . . . . . . 79

4.1 Principais Comandos Associados aos Dispositivos de Armazenamento . . . 95

4.2 Nomenclatura de Dispositivos Usuais . . . . . . . . . . . . . . . . . . . . . . 98

4.3 Principais Opções Utilizadas no fstab . . . . . . . . . . . . . . . . . . . . . 100

4.4 Símbolos Associados ao Tipo de Arquivo ao Utilizar o “ls -l” . . . . . . . . 110

4.5 Valores Possíveis ao Campo Destinado ao Atributo de Execução . . . . . . . 111

5.1 Sinais Comuns Utilizados em Ambientes UNIX-like . . . . . . . . . . . . . . . 121

5.2 Informações Exibidas na Saída do Comando ‘ps aux’ . . . . . . . . . . . . . 124

5.3 Notações Utilizadas pelo Campo STAT . . . . . . . . . . . . . . . . . . . . . . 124

5.4 Campos da Saída do ‘ps lax’ que Diferem da Execução do ‘ps -aux’ . . . 125

5.5 Arquivos Importantes de Configuração do Kernel Localizados no /proc . . . 127

5.6 Modos de Iniciação de Sistemas Derivados do UNIX . . . . . . . . . . . . . . 128

5.7 Possíveis Ações do Campo Action do inittab . . . . . . . . . . . . . . . 130

5.8 Principais Comandos a Serem Utilizados em /boot/grub/menu.lst . . . 136

6.1 Alguns Pseudo-Usuários Comuns . . . . . . . . . . . . . . . . . . . . . . . . 151

6.2 Variáveis de Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

6.3 Opções do Comando useradd . . . . . . . . . . . . . . . . . . . . . . . . . . 158

6.4 Argumentos Padrões do PAM . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

7.1 Recursos do syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

7.2 Recursos do syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

7.3 Formas de Uso do Comando rpm . . . . . . . . . . . . . . . . . . . . . . . . 177

7.4 Definição dos Campos do crontab . . . . . . . . . . . . . . . . . . . . . . . 180

7.5 Opções Usuais do Comando crontab . . . . . . . . . . . . . . . . . . . . . 180

7.6 Opções do Comando at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

Page 11: GERENCIAMENTO DE SISTEMAS LINUX

7.7 opções válidas para o campo momento do comando at . . . . . . . . . . . . 183

Page 12: GERENCIAMENTO DE SISTEMAS LINUX
Page 13: GERENCIAMENTO DE SISTEMAS LINUX

1INTRODUÇÃO

Este texto tem por principal objetivo instruir o seu leitor nos passos básicos neces-sários à configuração e gerenciamento de uma estação Linux. Por estação, em geral,compreende-se qualquer computador que esteja direcionado ao usuário final. Isso implicaque, na maioria dos casos, um servidor não é considerado uma estação. A esse processode gerenciamento de uma estação, também dá-se o nome de administração de sistemas:

Administração de sistemas é o conjunto de tarefas necessárias para manter ocomputador em boas condições de uso. Isso inclui atividades como efetuar có-pias de segurança (e restaurá-las, se necessário), instalar novos programas, criarcontas de usuários (e apagá-las quando não mais forem necessárias), garantirque os sistemas de arquivos estejam íntegros, e assim por diante. Se um com-putador fosse, por exemplo, uma casa, a administração de sistemas poderia sercomparada à manutenção, a qual inclui a limpeza, o conserto de vidraças quebra-das e outras tarefas do gênero. (WIRZENIUS et al., 2005).

Seguindo essa abordagem, esta obra pretende orientar o usuário nos passos necessá-rios à uma adequada configuração de um computador individual para uso pessoal. Dessamaneira, não será abordado aqui a configuração de nenhum serviço de rede. A única eóbvia excessão será a configuração de acesso a rede, i.e., a configuração dos dispositivose endereçamento de rede. Mas não será abordado, por exemplo, configuração de servidorde e-mail ou servidor Web.

A configuração e o gerenciamento de uma estação Unix envolve várias etapas, envol-vendo configuração de dispositivos, gerenciamento de processos e usuários, entre outros.Nesse sentido, o texto foi organizado de forma que o leitor possa abordar cada aspectode configuração individualmente. Cada capítulo foi pensado de forma que possa ser lidoindividualmente, mas fazendo parte de um todo organizado e dirigido.

Inicialmente, o Capítulo 2 apresenta uma visão geral de um sistema Linux, definindo,entre outros, o que é o Linux e o que é uma distribuição. Além disso, um breve histórico doLinux é apresentado, bem como os seus principais usos e aplicações.

Page 14: GERENCIAMENTO DE SISTEMAS LINUX

14 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

A configuração de dispositivos diversos é vista no Capítulo 3. Esse capítulo apresentaos passos básicos para a configuração de dispositivos comuns, como placas de vídeo,dispositivos multimídia e impressoras. Uma atenção especial é dada para interfaces deredes, em especial placas Ethernet, Wireless e modems.

O Capítulo 4 apresenta a árvore de diretórios do Linux, sob a perspectiva do FilesystemHierarchy Standard (FHS) (RUSSELL; QUINLAN, 2001). Além disso, esse capítulo abordaa configuração de partições, sistemas de arquivos e pontos de montagem. Uma atençãoextra é dada ao uso de memória virtual (swap).

O gerenciamento de processos é visto em detalhes no Capítulo 5. Entre outros itens,abordados nesse capítulo, encontram-se: os componentes de um processo, o uso de sinaise os comandos top, nice, renice, ps e kill. Um assunto bastante explorado é a inici-alização e o encerramento do sistema operacional. Esse capítulo foi escrito com o auxíliode Fernando Cortez Sica, bacharel em Ciência da Computação pela Universidade EstadualPaulista (UNESP), campus de Bauru/SP, mestre em Engenharia Elétrica pela UNICAMP edoutorando em Ciência da Computação pela UFMG.

Esses capítulos abordam os mecanismos básicos para a configuração de uma estaçãosob o ponto de vista de uso do equipamento. De nada adianta, entretanto, uma estaçãototalmente operacional sem um gerenciamento adequado de seus usuários, o que é expla-nado em profundidade no Capítulo 6. Além do processo de manutenção geral dos usuários(criação, manutenção, etc.), o capítulo também apresenta o Pluggable Authentication Mo-dules (PAM) (MORGAN, 2002), (SAMAR; SCHEMERS, 1995), (MORGAN, 2001), que é omecanismo de autenticação utilizado por padrão no Linux.

Outras configurações da estação, mas não menos importantes, são vistas no Capítulo 7.Esse capítulo aborda, entre outros, como automatizar tarefas ou acertar data e hora. Tam-bém são explanados os mecanismos de registros de atividades (logs), bem como maneirassimples de se fazer cópias de segurança de arquivos e diretórios.

Este texto foi escrito pensando em um usuário básico do sistema operacional Linux(ou equivalente). Ele foi produzido principalmente a partir da experiência adquirida pelosautores em administração de laboratórios e uso de diversos sistemas operacionais. Essaexperiência em administração de sistemas foi enriquecida pela leitura de diversos materiais,destacando-se, principalmente: (NEMETH et al., 1995), (NEMETH et al., 2001), (STANFI-ELD; SMITH, 2001), (WIRZENIUS et al., 2005), (FRAMPTON, 1999), (MANN; MITCHELL,

Page 15: GERENCIAMENTO DE SISTEMAS LINUX

Introdução 15

2000), (ANONYMOUS, 2000), (FRAMPTON, 1999). A essas referências devem ser acres-cidos vários Howtos1 disponibilizados pela The Linux Documentation Project 2.

Joaquim Quinteiro Uchôa, autor deste texto, é licenciado em Matemática pela Univer-sidade Federal de Mato Grosso (UFMT), com mestrado em Ciência da Computação pelaUniversidade Federal de São Carlos (UFSCar). Antes de adotar o Linux, em 1998, já haviatrabalhado com Solaris, MS-DOS (lembram-se do CISNE?) e OS/2, passando, obviamentepelos Windows 2.0, Windows 3.1 (e 3.11) e Windows 95. Segundo amigos, ele já superou otrauma do uso desses três últimos SOs(?), apesar de ter desenvolvido aversão a alguns ti-pos de janelas. Foi o responsável pela instalação do primeiro laboratório baseado em Linuxna UFLA e um dos maiores disseminadores desse sistema operacional na universidade,tendo sido o principal responsável pela criação do curso de especialização em Administra-ção em Redes Linux (ARL). Professor da UFLA, desde 1997, atua principalmente nas áreasde Teoria da Computação, Inteligência Artificial, Segurança Computacional e Educação aDistância.

O autor sentira realizado com a escrita desta obra se ela contribuir para disseminarainda mais o uso de Linux no Brasil e deseja um bom aprendizado ao leitor.

1Um Howto é um pequeno guia que ensina um usuário a configurar um serviço ou fazer uma dada tarefa.2The Linux Documentation Project: http://www.tldp.org/. A tradução de parte dos documentos

desse projeto podem ser encontrados em http://br.tldp.org/.

Page 16: GERENCIAMENTO DE SISTEMAS LINUX

16 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Page 17: GERENCIAMENTO DE SISTEMAS LINUX

2VISÃO GERAL DE UM SISTEMA LINUX

2.1 COMENTÁRIOS INICIAIS

Linux pode ser definido como um sistema operacional multitarefa e multiusuário que teveo seu desenvolvimento voltado, inicialmente, para plataformas computacionais baseadasnos processadores da linha Intel (computadores pessoais do tipo PC). Entretanto, diversasdistribuições atuais incluem outras plataformas tais como SPARC, sistemas embarcados(embedded systems) e dispositivos móveis.

Como ponto de partida, o Linux teve sua concepção baseada no padrão UNIX1 quantoao comportamento de seu kernel, interfaces e modelos de abstração e de acesso aos perifé-ricos. Porém, ao Linux foram adicionadas novas funcionalidades de modo a torná-lo versátile funcional quanto aos requisitos impostos pelas aplicações e equipamentos de hardwareatuais. Dessa forma, o Linux incorpora, como características principais, a flexibilidade, aconfiabilidade, a robustez e o alto nível frente ao seu desempenho computacional.

Mesmo tendo como ponto de partida o UNIX, o Linux não segue especificamente a umpadrão, ou seja, representa uma fusão dos padrões BSD Unix2 e System V3 em função desuas características primordiais. Porém apresenta obediência aos padrões POSIX4, ANSI5,IETF6 e W3C7.

Em relação à manipulação de sistemas de arquivos, o Linux suporta vários padrões, taiscomo: ext3, ext2, ntfs, cdromfs, os/2, fat, fat32, hpfs e vfat. O suporte a váriostipos de sistema de arquivos torna-se altamente atraente quando se trabalha, por exem-

1UNIX: www.unix.org/. A especificação UNIX atual encontra-se descrita em (THE OPEN GROUP,2004).

2BSD Unix: www.en.wikipedia.org/wiki/BSD.3System V: http://en.wikipedia.org/wiki/SystemV.4POSIX: http://www.pasc.org/.5ANSI: http://www.ansi.org/.6IETF: http://www.ietf.org/.7W3C: http://www.w3.org/.

Page 18: GERENCIAMENTO DE SISTEMAS LINUX

18 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

plo, com equipamentos dotados de discos rígidos particionados para a carga de diversossistemas operacionais.

Um outro ponto de atratividade do Linux baseia-se no fato de que o seu pacote de distri-buição conta com ferramentas para a implementação e teste de aplicativos (compiladores edepuradores C/C++, Fortran, Pascal, Lisp, Perl, Smalltalk e outros), gerenciadores de siste-mas de banco de dados (como o PostgreSQL e o MySQL), servidores de HTTP (por exem-plo, o Apache), diversos serviços de rede (tais como e-mail, NIS, Samba, DNS, roteamento,impressão, firewall e FTP), interfaces gráficas baseadas no padrão X-Windows (como oGNOME, KDE e Xfce), ferramentas de administração de sistemas (como o edquota euseradd) e diversas outras aplicações que abrangem distintas áreas da informática.

Atualmente, uma grande atenção está se dando aos sistemas baseados em Linux de-vido à facilidade de criação de clusters de processamento, obtendo-se assim, máquinaspara processamento paralelo. Estas formadas por computadores pessoais interconectadospor intermédio de uma rede de comunicação de dados. Além disso, outro grande interesseé a facilidade de uso do Linux como plataforma de virtualização, para execução de sistemasoperacionais hospedeiros.

2.2 BREVE HISTÓRICO DO LINUX

O Linux foi desenvolvido por Linus Torvalds (nascido em dezembro de 1969 em Helsinki- Finlândia) durante sua graduação na Universidade de Helsinki. Interessado no sistemaMinix, Linus decidiu desenvolver um sistema para computadores do tipo PC que excedessea sua funcionalidade (TORVALDS; DIAMOND, 2001). A primeira versão disponível (versão0.02) foi lançada em 1991 e, em 1994 o kernel versão 1.0 foi finalmente lançado. No mo-mento da edição desta apostila (setembro de 2007), anuncia-se a disponibilidade da versão“beta” 2.6.23-rc6.

Linux é desenvolvido sob GNU General Public License8, permitindo-se o acesso ao seucódigo (open source). Mesmo baseado em versões do UNIX, o Linux não utiliza códigode sistemas UNIX (os sistemas UNIX são comerciais), evitando-se assim a incorporaçãode taxas e licenças vinculadas a tais sistemas, tendo por conseqüência a sua propaga-ção a custo mínimo. Porém existem distribuições comerciais de Linux, principalmente nocaso de incorporação de funcionalidades específicas para, por exemplo, operações críticas.Exemplos de tais distribuições serão ilustrados mais adiante neste capítulo.

8GPL: http://www.gnu.org/licenses/gpl.html.

Page 19: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 19

Parte do sucesso do Linux deve-se à existência de uma oportunidade histórica criadapelas incertezas legais quanto ao copyright de Unix na época de seu lançamento. Por causadessas pendências, desenvolvimentos do BSD para a arquitetura i386 foram interrompidospor um certo período. Isso fomentou a migração de vários sistemas baseados em BSDpara o kernel do Linux nessa época. Outro motivo do sucesso do Linux foi a adoção deuma metodologia de desenvolvimento extremamente livre, como descrito em (RAYMOND,1999). Isso permitiu que vários desenvolvedores se juntassem ao projeto, o que foi emparte facilitado pela evolução da internet à época.

Hoje o Linux ocupa posição de destaque e respeito no mercado de software, sendoapontado como um dos melhores exemplos de possibilidade de sucesso em projetos co-laborativos distribuídos, ao lado da Wikipedia9. Ele tem sido adotado não somente pelacomunidade de software livre, mas por várias empresas, como a IBM. Recentemente tem-se assistido cada vez mais o surgimento de cordos comerciais entre grandes empresas deinformática envolvendo o Linux, inclusive empresas que antes tomavam o Linux como umferoz inimigo a ser combatido. Um exemplo são os acordos comerciais entre a Novell e Mi-crosof envolvendo interoperabilidade entre o Linux e o Windows, seu principal compelidorno mercado geral de SOs.

2.3 O KERNEL DO LINUX

O kernel (ou núcleo) de um sistema operacional representa a codificação responsávelpelo gerenciamento do processamento em seu mais baixo nível de abstração. Tal proces-samento ocorre de forma segura e restrita aos usuários. O acesso, pelos usuários, àsfunções que compõem o kernel se dá por intermédio de interfaces bem definidas (interfa-ces de chamadas de sistema - system call interface). Para melhor diferenciar o kernel frenteaos aplicativos desenvolvidos pelos usuários, a Figura 2.1 ilustra as camadas típicas de umsistema operacional baseado em UNIX (TANENBAUM, 1992).

Como funcionalidades típicas de um kernel de um sistema operacional, podem ser cita-das as seguintes:

• criação e término de processos (instanciação e remoção de estruturas internas etransferência para memória e desalocação de espaços previamente alocados naRAM);

• escalonamento e controle de processos;

• sincronização de processos e suporte a comunicação inter-processos;

9Wikipedia: http://www.wikipedia.org/.

Page 20: GERENCIAMENTO DE SISTEMAS LINUX

20 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Usuários

Aplicativos e Programasdos Usuários

Funções das bibliotecas padrão(open, close, read, write, fork, etc.)

Kernel − gerenciamento de processos, memóriasistemas de arquivos, I/O, etc.

Hardware − CPU, memória, discos, terminais, etc.

Modo Kernel

Modo Usuário

Interface das Bibliotecas

Interface deChamadas de Sistema

Interface do Usuário

Figura 2.1: Camadas Típicas de um Sistema Operacional Baseado em UNIX

• gerenciamento de blocos de controle de processos (process control blocks - PCB);

• alocação de espaço de endereçamento aos processos;

• swapping;

• gerenciamento de páginas e segmentos;

• gerenciamento de buffers de I/O;

• alocação de canais de I/O e de devices aos processos;

• manipulação de interrupções;

• monitoramento do sistema.

O kernel do Linux foi desenvolvido, originalmente, para ser executado em modo prote-gido de um processador Intel 80386. Tal processador era subtilizado pelos sistemas opera-cionais DOS devido ao fato de que foram projetados com instruções para suporte a multita-refa (multitasking). Dentre as características do kernel do Linux, podem ser destacadas asseguintes:

a) permite copy-on-write – tal processo consiste na utilização de códigos executáveis com-partilhados, ou seja, caso haja várias instâncias de um certo programa, o seu código écarregado na memória apenas uma única vez, permitindo-se, desta forma, uma utiliza-ção mais eficiente da memória;

b) utilização de unified memory pool – essa técnica permite que todo o espaço livre daRAM seja utilizado como cache de disco;

Page 21: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 21

c) suporte a demand paging – isso denota que apenas as seções necessárias de um pro-grama são carregadas na memória RAM, permitindo-se a manipulação mais eficiente deum número maior de processos;

d) utilização intensa de dynamically shared libraries (DLLs) – mapeamento das bibliotecasdinâmicas em uma região específica da memória denominada commom library section,implicando na redução do tamanho do código das aplicações uma vez que as funçõesda biblioteca não são link -editadas ao restante da codificação. Mas, para manter com-patibilidade e, em certos casos, conveniência, o Linux também admite a utilização debibliotecas estáticas.

É conveniente citar que a atualização do kernel do Linux pode ser realizada através desua compilação, nova instalação ou através da aplicação de patches.

2.4 APLICAÇÕES LINUX

Diversos aplicativos podem ser encontrados atualmente para Linux, desde aplicativosde uso residencial e pessoal até aqueles utilizados por empresas de modo geral. Dentreestes aplicativos, podem ser encontradas as seguintes classes:

Gerenciadores de Janelas: Gerenciadores de Janela são aplicativos responsáveis porcontrolar a interface gráfica do usuário. Assim, em uma mesma instalação Linux,é possível haver uma interface gráfica totalmente distinta de um usuário para outro.Os mais conhecidos e usados por usuários iniciantes são com certeza o KDE10 eo GNOME11. Mas existem várias alternativas, como pode ser verificado em http:

//xwinman.org/.Merecem destaques os gerenciadores “leves”, que exigem pouco do equipamento.Esses gerenciadores oferecem, é óbvio, menos recursos que os mais pesados, masoferecem o suficiente para um uso prazeirozo do ambiente gráfico do Linux, mesmoem máquinas de menor desempenho. Nesse sentido, merecem destaque o WindowMaker12, desenvolvido em sua maior parte por um brasileiro, e o Xfce13, um gerenci-ador extremamente leve e funcional, como ilustra a Figura 2.2.

Aplicativos de Escritório: Os aplicativos de escritório (editores e processadores de texto,planilhas eletrônicas e software de apresentação) representam uma boa porcenta-gem em relação à utilização dos computadores. Em alguns casos, esses aplicativos

10KDE: http://www.kde.org/.11GNOME: http://www.gnome.org/.12Window Maker: http://www.windowmaker.info/.13Xfce: http://www.xfce.org/.

Page 22: GERENCIAMENTO DE SISTEMAS LINUX

22 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Figura 2.2: Xfce Rodando AbiWord, Gnumeric, GIMP e XMMS

são agrupados, formando suítes. Entre as suítes disponíveis para Linux, merecemdestaque o Gnome Office14, o Koffice15, e, principalmente o OpenOffice.org16. NaFigura 2.3, pode ser visualizado o processador de texto do OpenOffice.org, que ébastante poderoso em termos de recursos.Entre os editores de texto distribuídos isoladamente, pode ser citado o AbiWord17, umeditor extremamente leve. Além dos editores, existem também os visualizadores comoo Acrobat Reader18, Xpdf19 e o Evince20 que permitem abrir aquivos PDF. Entre asplanilhas eletrônicas, merece destaque o Gnumeric. Ainda nesse item, não pode ser

14Gnome Office: http://www.gnome.org/gnome-office/.15Koffice: http://www.koffice.org/.16OpenOffice.org: http://www.openoffice.org/. Por questões legais, no Brasil a versão adaptada do

OpenOffice ao idioma português chama-se BrOffice.org (http://www.broffice.org/.17AbiWord: http://www.abisource.com/18Acrobat Reader: http://www.adobe.com/br/.19Xpdf: http://www.foolabs.com/xpdf/.20Evince: http://www.gnome.org/projects/evince/.

Page 23: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 23

Figura 2.3: Processador de Texto do OpenOffice

esquecido o LATEX21, um poderoso sistema de editoração eletrônica utilizado na produ-ção desta apostila. Existem ainda editores de diagramas, como o Dia22, e aplicativospara controle financeiro, como o KmyMoney223 ou o Gnucash24.

Clientes Internet: É possível valer-se de uma grande diversidade de navegadores internetem Linux, como: SeaMonkey25, Galeon26 e Firefox27, mostrado na Figura 2.4. Mastambém não podem ser esquecidos o Konqueror28 e o Opera29, ou mesmo clientesem modo texto, como o Lynx30, Links31 ou Elinks32 .Exitem também clientes de mensagens instantâneas, como o Pidgin33. Entre os cli-entes de e-mail, podem ser destacados o Thunderbird34 e o Evolution35. Para acesso

21LATEX: http://www.latex-project.org/.22Dia: http://live.gnome.org/Dia.23KmyMoney2: http://kmymoney2.sourceforge.net/index-home.html.24Gnucash: http://www.gnucash.org/.25SeaMonkey: http://www.mozilla.org/projects/seamonkey/.26Galeon: http://galeon.sourceforge.net/.27Firefox: http://www.mozilla.com/en-US/firefox/.28Konqueror: http://www.konqueror.org/.29Opera: http://www.opera.com/.30Lynx: http://lynx.isc.org/.31Links: http://links.twibright.com/.32Elinks: http://elinks.or.cz/.33Pidgin: http://www.pidgin.im/.34Thunderbird http://www.mozilla.com/en-US/thunderbird/.35Evolution: http://www.gnome.org/projects/evolution/.

Page 24: GERENCIAMENTO DE SISTEMAS LINUX

24 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Figura 2.4: Navegador Firefox

à rede IRC, é possível utilizar-se do Irssi36 ou o XChat37. Como clientes FTP, podemser citados o NcFTP38 ou o gFTP39, que suporta, inclusive, conexão segura via SSL.

Editores Gráficos: Para edição gráfica de arquivos bitmap, nos mais variados formatos(como GIF, PNG ou JPEG), é possível valer-se do GIMP40, um poderoso editor deimagens, comparado freqüentemente ao Adobe Photoshop. Para edição vetorial, aescolha geralmente recai sobre o Inkscape41, apresentado na Figura 2.5, ou QCad42.Não se pode esquecer o ImageMagick43, um conjunto de utilitários para conversão etratamento de imagens. Entre os visualizadores, podem ser citados o GQview44 e ogThumb45.

36Irssi: http://irssi.org/.37XChat: http://www.xchat.org/.38NcFTP: http://www.ncftp.com/.39gFTP: http://gftp.seul.org/.40GIMP: http://www.gimp.org/.41Inkscape: http://www.inkscape.org/.42QCad: http://www.ribbonsoft.com/qcad.html.43ImageMagick http://www.imagemagick.org/.44GQview: http://gqview.sourceforge.net/.45gThumb: http://gthumb.sourceforge.net/.

Page 25: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 25

Figura 2.5: Editor Vetorial Inkscape

Aplicativos Multimídia: Existem diversos aplicativos multimídia em Linux, sendo o maisconhecido o XMMS (X Multimedia System), um excelente visualizador multimídia. Elesuporta arquivos de CD de áudio, MP3, Vorbis e inclusive arquivos de vídeo no for-mato MPEG. Recentemente, seus usuários tem migrado para um de seus forks, oAudacious46, ilustrado na Figura 2.6. Entre os visualizadores de vídeo, inclusive comsuporte a DVD, merecem destaque o Xine47, o MPlayer48 e o VLC49. Também existeuma versão do Real Player50 para Linux.

Aplicativos de Entretenimento: Atualmente a oferta de jogos para Linux vem aumen-tando de forma bastante satisfatória, o que pode ser confirmado visitando os site: TheLinux Game Tome51 ou Linuxgames52 Jogos comerciais, como Unreal Tournament53,já possuem versões para Linux. Mas também existem soluções gratuitas de alto nível,

46Audacious: http://audacious-media-player.org/Main_Page.47Xine: http://xinehq.de/.48MPlayer http://www.mplayerhq.hu/.49Videolan http://www.videolan.org/.50Real Player: http://www.real.com/linux/.51The Linux Game Tome: http://happypenguin.org/.52Linuxgames: http://www.linuxgames.com/.53Unreal Tournament: http://www.epicgames.com/.

Page 26: GERENCIAMENTO DE SISTEMAS LINUX

26 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Figura 2.6: Player Multimídia Audacious

como o Freeciv54 e Glest55 ou mesmo Doom e Quake56. A Figura 2.7 mostra uma telaextraída de uma partida de Bzflag.

Emuladores: O Linux também oferece a possibilidade de executar aplicativos construídospara outras plataformas como o DOS e o Windows. Tal possibilidade é oferecidapelos emuladores, tais como: o DOSEMU57 e Wine58. Existem também emuladoresplataformas de jogos, objetivando entretenimento, como: o Snes9x59, emulador deSuper Nintendo, e Xmame60, um emulador para vários arcades, como o Atari.

Gerenciadores de Banco de Dados: os gerenciadores de banco de dados (SGBDs) per-mitem a construção e manutenção de bases de dados afim de armazenar diver-sos tipos de informações. Dentre os SGBDs, os mais comuns utilizados atualmentesão aqueles voltados ao modelo relacional e ao modelo orientado a objetos. Comoexemplos do primeiro modelo, podem ser destacados os aplicativos PostgreSQL61,

54Freeciv: http://freeciv.wikia.com/.55Glest: http://www.glest.org/.56Doom e Quake são produtos da ID Software: http://www.idsoftware.com/.57DOSEMU: http://dosemu.sourceforge.net/.58Wine: http://www.winehq.com/.59Snes9x: www.snes9x.com.60Xmame: http://x.mame.net/.61PostgreSQL: http://www.postgresql.org/.

Page 27: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 27

Figura 2.7: Jogo Bzflag

MySQL62, Oracle63, Sybase64, Firebird65 e DB266 e, em relação aos orientados a ob-jetos, tem-se Shore67 e Zope68. Cabe observar ainda que O PostgreSQL implementa,além do modelo relacional padrão, algumas características e recursos de orientaçãoa objeto.

Linguagens de programação: para as pessoas que desenvolvem aplicativos, o Linux contacom uma gama muito vasta de compiladores e interpretadores para diversas lingua-gens de programação, tais como: C/C++, Fortran, Python, Perl, Modula-3, Prolog,TCL/TK, Smalltalk e Pascal. Merece destaque o GCC69, um conjunto de diversoscompiladores.

Desenvolvimento de aplicações: associado às linguagens, existem aqueles aplicativosúteis para o desenvolvimento de aplicativos visando, por exemplo, o controle de ver-

62MySQL: http://www.mysql.org/.63Oracle: http://www.oracle.com/.64Sybase: http://www.sybase.com/.65Firebird: http://www.firebirdsql.org/.66IBM DB2: http://www-306.ibm.com/software/data/db2/.67Shore: www.cs.wisc.edu/shore.68Zope: http://www.zope.org/.69GCC (GNU Compiler Collection): http://gcc.gnu.org/.

Page 28: GERENCIAMENTO DE SISTEMAS LINUX

28 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

sões e o controle de bugs e a depuração dos mesmos. Dentro do campo de controlede versões, existem o CVS70, o Subversion71 e o Git72. Em relação ao controle debugs e à depuração (debug) encontram-se o Bugzilla73, GNATS74, GVD75, DDD76 e oGDB77. Entre os editores de código, além dos tradicionais Emacs78, XEmacs79 e vi80,merecem destaque Anjuta81, Glimmer82, Eclipse83 e Code::Blocks84. A Figura 2.8mostra os editores XEmacs, Anjuta e Glimmer usados para edição de código C++ ouLATEX.Para desenvolvimento de aplicações Web, é possível valer-se de ferramentas pode-rosas, como o PHP85, uma linguagem interpretada no servidor, com facilidades deacesso a Bases de Dados. Para edição de código HTML, é possível valer-se doNvu86 ou do Seamonkey Composer87, editores gráficos. Caso se pretenda uma edi-ção pura de código, é possível utilizar os editores de código já comentados, ou utilizaro SCREEM88 ou o Bluefish89, um editor HTML extremamente funcional, como ilus-trado na Figura 2.9.

Serviços de Rede: existem diversas sub-classes dentro dos aplicativos de rede, tais comoservidores de correio eletrônico (por exemplo, Sendmail90, Postfix91 e Exim92), ser-vidor HTTP (Apache93), gerenciadores de listas de discussão (mlmmj94, Mailman95),

70CVS: http://www.nongnu.org/cvs/.71Subversion: http://subversion.tigris.org/.72Git: http://git.or.cz/.73Bugzilla: http://www.bugzilla.org/.74GNATS: http://www.gnu.org/software/gnats/.75GVD: http://libre.adacore.com/gvd/.76DDD: http://www.gnu.org/software/ddd/.77GDB: http://sourceware.org/gdb/.78Emacs: http://www.gnu.org/software/emacs/.79XEmacs: http://www.xemacs.org/.80vi: http://www.vim.org/.81Anjuta: http://anjuta.sourceforge.net/.82Glimmer: http://glimmer.sourceforge.net/.83Eclipse:http://anjuta.sourceforge.net/.84Code::Blocks: http://www.codeblocks.org/.85PHP: http://www.php.net/.86Nvu: http://www.nvu.com/.87Seamonkey: http://www.mozilla.org/projects/seamonkey/.88SCREEM: http://www.screem.org/.89Bluefish: http://bluefish.openoffice.nl/.90Sendmail: http://www.sendmail.org/.91Postfix: http://www.postfix.org/.92Exim: http://www.exim.org/.93Apache: http://www.apache.org/.94mlmmj: http://mlmmj.mmj.dk/.95Mailman: http://www.gnu.org/software/mailman/index.html.

Page 29: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 29

Figura 2.8: Editores de Código

monitoramento de rede (tcpdump96, Cacti97, Nagios98 e Zabbix99) e outros serviços,tais como: Proxy server, DNS server, News Server, Firewall, FTP server, roteadorTCP/IP, servidor de arquivo e de impressão, servidor dial-up, etc. Alguns desses ser-viços são nativos do próprio Linux, alguns deles fazendo parte do próprio kernel.

O leitor deve observar que foram listadas apenas algumas classes de aplicativos e tam-bém apenas alguns exemplos de cada classe. O Linux apresenta uma gama muito maiorde aplicabilidade do que aqui apresentada, gama essa que tende a crescer ainda mais de-vido à constante popularização do sistema operacional, aumento das empresas que o vêmadotando e aumento da oferta de distribuições Linux no mercado. Um outro motivo para acrescente demanda consiste em que muitos aplicativos implementados para Linux seguemo paradigma de software livre ou similar.

96tcpdump: http://www.tcpdump.org/.97Cacti: http://cacti.org/.98Nagios: http://www.nagios.org/.99Zabbix: http://www.zabbix.org/.

Page 30: GERENCIAMENTO DE SISTEMAS LINUX

30 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Figura 2.9: Editor Bluefish

Caso o leitor esteja procurando por um dado aplicativo, existem diversos sites que faci-litam essa busca, como o Freshmeat100 e o Linux Online101. O Freshmeat, além de ser umsite de busca, contém notícias de atualizações de aplicativos e artigos diversos, merecendovisitas periódicas. Também não é possível esquecer o Sourceforge102, um grande reposi-tório para aplicações distribuídas sob licenças de código aberto. Para busca de aplicaçõescientíficas, o melhor site é o SAL (Scientific Applications on Linux)103.

2.5 DISTRIBUIÇÕES LINUX

Raramente o usuário instala o Linux isoladamente, geralmente o Linux é instalado pormeio de uma distribuição. Uma distribuição consiste em um conjunto de programas quesão acrescidos ao kernel, a configuração básica desses programas e do kernel e umafilosofia de uso e administração. A distribuição Linux mais antiga ainda em desenvolvimentoé a Slackware104, surgida em abril de 1993. Ela foi baseada no SLS, que teve problemas

100Freshmeat: http://www.freshmeat.net/.101Linux Online: http://www.linux.org/.102Sourceforge: http://sourceforge.net/.103SAL: http://sal.kachinatech.com/.104Slackware http://www.slackware.com/.

Page 31: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 31

sérios de manutenção, tendo criado frustação não só para Patrick Volkerding, criador doSlackware, como também para Ian Mundock, criador do projeto Debian.

A Slackware é uma distribuição de Linux para uso geral e que tenta se aproximar aomáximo de outras versões de UNIX. Vários usuários reclamavam, entretanto, da forma deinstalação de aplicativos no formato “tar.gz” ou similar. Em 1994, surge a distribuiçãoRedHat105. Com essa distribuição, surge o RPP, uma forma de instalação de software viapacotes.

A idéia na base desse conceito era que a administração de software poderia ser fa-cilitada se os aplicativos fossem distribuídos em pacotes gerenciáveis e que permitissemfácil instalação, atualização e desinstalação, sem problemas de dependência de biblioteca.Do RPP, utilizando algumas idéias do PM e PMS (outros sistemas de gerenciamento depacotes da época), surge a primeira versão do RPM (RedHat Package Manager) (BAILEY,1998).

Apesar de ter sido desenvolvido pela RedHat, o RPM foi disponibilizado em GPL e é,certamente, a forma mais usada para manutenção de software no Linux. Por causa disso,o nome do RPM foi modificado para RPM Package Manager. O uso do RPM mostrou-setão eficiente, que já é possível encontrar versões do RPM para Solaris, IRIX ou AIX. Dessamaneira, várias distribuições atuais inicialmente eram versões modificadas do RedHat.

As mais comuns e talvez as mais conhecidas são aquelas de propósito geral, as quaisequipam os computadores caseiros. Além de equipar computadores pessoais, elas tambémpodem ser encontradas em diversos segmentos da sociedade (como indústrias, comércio,etc) tendo a função de servidor de diversos serviços, tais como rede, arquivos e aplica-ções. Dentre essas distribuições, podem ser destacadas as variações regionais, como oTurboLinux106, uma distribuição enfocada em usuários e empresas da Ásia, especialmenteChina, Japão e Índia.

Esse era também o caso da SUSE107, uma distribuição Linux recentemente adquiridapela Novell. Apesar de ser uma distribuição geral, com usuários no mundo inteiro, elaera sediada na Alemanha e tinha um foco grande no mercado europeu. Cabe ressaltarque SUSE, apesar de também usar o formato de pacote RPM, foi baseada inicialmente noSlackware.

Uma observação a ser feita é que a regionalização é feita geralmente sob a configura-ção da máquina. Boa parte dos aplicativos Linux são desenvolvidos de forma internaciona-lizada. Isso significa que eles suportam várias línguas, bastando o usuário informar qual a

105RedHat: http://www.redhat.com/.106TurboLinux: http://www.turbolinux.com/.107SUSE: http://www.novell.com/linux/.

Page 32: GERENCIAMENTO DE SISTEMAS LINUX

32 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

linguagem preferida por ele. Dessa maneira, é possível utilizar o RedHat, uma distribuiçãoamericana, com aplicativos apresentando menus em português.

Algumas distribuições comuns possuem versões empresariais, a exemplo da própriaRedHat e da SUSE. Em geral, não é incomum que essas versões tenham custo, mesmoporque em alguns casos elas incluem aplicativos comerciais que não podem ser distribuí-dos livremente. Mesmo assim, as empresas que possuem versões empresariais geralmentetambém mantém versões livres de suas distribuições, caso do Fedora108 para a RedHat edo openSUSE109 para a Novell. Isso quando a própria comunidade não provê uma alterna-tiva, caso do CentOS110, um concorrente direto da distribuição comercial da RedHat.

Uma outra distribuição de uso comum que merece destaque é a Debian111, que utilizaum sistema de pacotes próprio: o DEB. Essa distribuição, que não é ligada a nenhumaempresa comercial, tenta ater-se ao máximo às diretrizes do movimento Software Livre.Dessa maneira, ela raramente inclui em sua distribuição aplicativos que não sejam distri-buídos com licença de código aberto. O interesse no Debian tem crescido fortemente nosúltimos anos, por causa do surgimento e disseminação do Ubuntu112.

O Ubuntu surgiu como uma iniciativa do milionário Mark Shuttleworth, e seu nome é umconceito sul-africano que significa “humanidade para com os outros”. Sua proposta pautaem ofertar um SO completo que possa ser utilizado sem dificuldades e que seja baseadototalmente em software livre. Há vários meses, ocupa a primeira colocação entre as dis-tribuições mais populares na DistroWatch113, site especializado em distribuições Linux eBSD.

O Ubuntu é baseado no GNOME, possuindo três versões oficiais alternativas: Kubuntu,baseada no KDE; Xubuntu, baseada no XFCE; e Edubuntu, uma versão projetada para usoescolar ou com crianças. Além disso, o Ubuntu possui uma versão para estação e outrapara servidores. Ao possuir versões específicas para cada ambiente e/ou preferência dousuário, o Ubuntu consegue ser uma distribuição sem excesso de aplicativos, relativamentesimples para instalação e com um bom desempenho, comparado às outras distribuições deuso geral.

Outra distribuição popular baseada no Debian é o Knoppix114, que é um LiveCD. Ouseja, é possível executá-lo diretamente a partir de um CDROM, ou equivalente, sem a ne-

108Fedora: http://fedoraproject.org/.109openSUSE: http://www.opensuse.org/.110CentOS: http://www.centos.org/.111Debian: http://www.debian.org/.112Ubuntu: http://www.ubuntu.com/.113DistroWatch: http://distrowatch.com/.114Knoppix: http://www.knoppix.org/.

Page 33: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 33

cessidade de instalação. Isso permite o uso do Linux em locais onde ele não possa serinstalado, como laboratório de terceiros, além de facilitar a demostração do Linux em diver-sos momentos. Essa técnica tem-se mostrado tão bem sucedida, que várias distribuiçõespassaram a adotar um LiveCD como forma de instalação. Dessa maneira, à medida quevai instalando o SO, o usuário já pode ir experimentando-o, mesmo que com algumas li-mitações. Esse é o caso do Gentoo, Fedora, Ubuntu e suas variantes. No Brasil, umadistribuição derivada do Knoppix é bastante conhecida e utilizada, o Kurumin115, com umrelativo bom suporte ao hardware encontrado no território brasileiro. É uma distribuiçãomantida por Carlos Morimoto, mantenedor do site Guia do Hardware116, importante refe-rência na área de tecnologia.

Em geral, as distribuições oferecem aos seus usuários pacotes pré-compilados, ou seja:software pronto a ser executado. Na prática, quase nenhuma opção de compilação ou oti-mização é dada ao usuário. Uma excessão a essa regra é o Gentoo117, que permite facil-mente a sua adaptação a diferentes perfis de hardware e usuários. Isso ocorre porque noGentoo cada pacote é compilado locamente, antes da instalação. Isso é feito de forma au-tomatizada, atendendo a opções pré-definidas pelo usuário. Além disso, os são compiladascom opções globais ou locais de otimização, o que permite ao usuário extrair o máximo dedesempenho das aplicações.

A flexibilidade e poder de customização e otimização do Gentoo é conseguido graçasao Portage, um sistema extremamente poderoso de gerenciamento de pacotes, baseado nosistema de pacotes Ports, do FreeBSD. Como resultado de sua flexibilidade e otimização,o Gentoo é muitas vezes denominado de meta-distribuição, pois pode ser configurado paraatender a diferentes necessidades. Existem, inclusive, variantes do Gentoo utilizando okernel do FreeBSD ou do Mac OS X como base. Além disso, o Gentoo pode ser instaladoem diversas arquiteturas de hardware, como: SPARC, PowerPC, etc.

No que diz respeito ao hardware, várias distribuições são próprias para uma dada ar-quitetura, como o Yellow Dog118, uma distribuição para PowerPC (incluíndo o Sony PS3),ou o UltraLinux119, uma distribuição para processadores SPARC. Dessa maneira, existemdistribuições otimizadas para executarem tarefas específicas ou assumirem característicascompatíveis com o equipamentos nos quais irão ser executados. É o caso das distribuiçõesvoltadas para sistemas dedicados (também conhecidos como embarcados, embutidos ou,em inglês, embedded systems). Sistemas embarcados é a denominação genérica de siste-mas construídos utilizando, por exemplo, hardware específico ou hardware reconfigurável,

115Kurumin: http://www.guiadohardware.net/gdhpress/kurumin/.116Guia do Hardware: http://www.guiadohardware.net/.117Gentoo: http://www.gentoo.org/.118Yellow Dog: http://www.terrasoftsolutions.com/products/ydl/.119UltraLinux: http://www.ultralinux.org/.

Page 34: GERENCIAMENTO DE SISTEMAS LINUX

34 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

onde as instruções serão executadas diretamente pelo hardware. Muitos dos sistemas em-butidos têm a necessidade de executar um sistema operacional para tornar compatível ouflexível as operações a eles destinados. Nesse caso, o sistema operacional deverá caberem uma restrita área de memória da ordem dos kilobytes apenas.

Dentre os Linux para sistemas embutidos, existem aqueles genéricos, como o BlueCatLinux120 ou orientados para serem servidores de rede ou executarem serviços específicosde rede de computadores, podendo-se destacar o Coyote Linux121, voltado para exercer opapel de roteador de rede e firewall. Ainda dentro das distribuições Linux para sistemasembarcados, existem aqueles destinados a operações críticas, como os sistemas de temporeal. Nessa última categoria pode ser encontradas as distribuições RTOS122 e RTLinux123.

2.6 A QUESTÃO DA PADRONIZAÇÃO

O mercado de distribuições Linux é extremamente dinâmico, com várias delas surgindoe desaparecendo em um dado momento, com a predominância de um pequeno conjuntodominando a maior parte do mercado. A existência de tantas distribuições, e a dinamicidadedo mercade fomenta o levantamento de questões sobre a padronização no Linux. Muitosdefendem a existência de um único formato de empacotamento e uma maior padronizaçãonos arquivos e diretórios de configuração.

Entre os argumentos utilizados pelos que defendem uma maior padronização encontra-se o fato que a fragmentação do UNIX contribuiu bastante para evitar a sua disseminação,abrindo espaço para outros SOs no mercado, durante a disputa entre as várias versõesde UNIX. Alguns argumentam ainda que a ausência de um maior nível de padronizaçãodificulta a adoção do Linux pelo mercado, uma vez que não há garantias que o softwarecompilado em uma dada distribuição irá rodar em outra.

Este autor, entretanto, adota uma posição mais cautelosa quanto à necessidade deimposição de novos padrões em Linux. O mundo da Informática é extremamente dinâmicoe nem sempre aceita padrões de forma natural. Um exemplo dessa situação é o fato queo modelo OSI124 (Open Systems Interconnection Basic Reference Model) para redes decomputadores perdeu há muito tempo espaço para o TCP/IP, sendo utilizado atualmentemais com finalidades didáticas que práticas. E isso apesar desse padrão ter sido criadocom finalidades extremamente bem-intencionadas:

120BlueCat Linux: http://www.lynuxworks.com/.121Coyote Linux: http://www.coyotelinux.com/.122RTOS: http://www.lynuxworks.com/.123RTLinux: http://midas.psi.ch/rtlinux/.124OSI: http://en.wikipedia.org/wiki/OSI_model.

Page 35: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 35

O desenvolvimento dos padrões OSI é uma tarefa bastante desafiadora, com re-sultados que irão impactar todo o futuro do desenvolvimento da comunicação dedados entre computadores. Se os padrões vierem muito tarde ou forem inade-quados, a interconexão de sistemas heterogêneos não serão possíveis ou serãomuito custosos. (ZIMMERMANN, 1980)

De forma relativamente irônica, o TCP/IP acabou por se estabelecer como um padrãode facto, mesmo tendo contra ele poderosas empresas de informática (a própria Microsoftse manifestou contra o TCP/IP antes da explosão da Web). Note que houve realmente aadoção de um padrão, mas ele não era o previsto ou desejado pelos órgãos que criaram ospadrões. É esse fato que este autor faz questão de ressaltar.

O Linux suporta muito mais padrões que vários de seus concorrentes, especialmenteos padrões abertos. Além disso existe muito menos fragmentação entre as distribuiçõesLinux que entre as versões UNIX no passado. Isso ocorre principalmente por causa dopoder do software livre dentro do Linux: uma solução que resolva bem um problema emuma distribuição e que chame a atenção é rapidamente copiada por outras distribuições,sem que seja preciso pedir autorização para isso. E distribuições que não adotam essepadrão acabam sendo vistas como “” pela comunidade.

Por outro lado, a inexistência de um padrão de juri faz com que soluções otimizadase flexíveis possam ser utilizadas sem que haja preocupação com a infração a padrõesestabelecidos formalmente. A existência de vários gerenciadores de ambiente, por exemplo,surgiu de necessidades diferentes de seus usuários, sendo que cada um desses ambientesacabou por se especializar em um conjunto de soluções. Assim, mais importante que umpadrão no desktop é a garantia de interoperabilidade entre os vários desktops existentes.Indiferente se KDE, GNOME ou Xfce, por exemplo, aplicativos como o Pidgin irão criar umícone na área de notificação do painel e deve ser possível copiar e colar entre aplicativosusando as bibliotecas gráficas Qt125 ou GTK126.

Assim, ressalta-se mais uma vez a necessidade de cautela para um posicionamentoem prol de uma padronização extrema no Linux, o que poderia em muito lhe tirar poder eflexibilidade. Algum nível de padronização é necessário, obviamente, mas esses padrõesnão podem ser criados apenas para satisfazer desejos pessoais de alguns poucos, emdetrimento da comunidade.

Nesse contexto, um exemplo extremamente positivo que merece destaque é o sur-gimento da Freedesktop.org127, que é um esforço para desenvolvimento de padrões e

125Qt: http://trolltech.com/products/qt.126GTK: http://www.gtk.org/.127Freedesktop.org: http://www.freedesktop.org/.

Page 36: GERENCIAMENTO DE SISTEMAS LINUX

36 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

software para garantir a interoperabilidade dos vários gerenciadores de ambiente. É gra-ças aos padrões do Freedesktop.org que desenvolvedores podem implementar entradas nomenu de programas, sem se preocupar se o usuário utiliza KDE, GNOME ou Xfce. Tambéma esse grupo cabe a responsabilidade de software que garanta um grau de interoperabili-dade entre esses desktops, como o HAL, D-Bus e GStreamer.

Outro esforço que merece ser comentado é a criação, recentemente, da The LinuxFoundation128, a partir da fusão da Open source Development Labs e do Free StandardsGroup. Na época da criação, essa fundação contava com o apoio de setenta fabricantes,incluindo IBM, HP, Oracle , Novell e Intel, além de Fujitsu, Hitachi e NEC. O principal trabalhodessa fundação é o Linux Standard Base (LSB) (FREE STANDARDS GROUP, 2006), umconjunto de padrões para garantir interoperabilidade de aplicações entre distribuições Linux,definindo uma interface de sistema para aplicações compiladas e um ambiente mínimo paraexecução de scripts. O LSB é um padrão em franca adoção no mundo Linux e deve serampliado cada vez mais em seu alcance.

Além do LSB, a Linux Foundation cuida também do FHS (RUSSELL; QUINLAN; YEOH,2004), um conjunto de padrões para o sistema de arquivos. Também é responsável pelaLANANA, uma organização responsável pela atribuição de nomes a dispositivos. Tambémé responsável pela OpenPrinting, organização responsável por um conjunto de padrões naárea de impressão e pelo footmatic, um software para integração de drivers de impressorascom gerenciadores de impressão (como CUPS129 ou LPRng130).

2.7 INSTALAÇÃO O LINUX

O processo de instalação de um sistema Linux varia de uma distribuição para outra.A maioria das distribuições atuais de uso geral possuem interface gráfica de instalação,tornando o processo relativamente simples. Mesmo alguns instaladores em modo textonão oferecem dificuldade. De uma forma sintética, uma instalação Linux consiste em trêspassos:

1. particionamento do disco e formatação dos sistemas de arquivo;

2. seleção, por parte do usuário, de quais aplicativos (pacotes) serão instalados inicial-mente;

128The Linux Foundation: http://www.linux-foundation.org/.129CUPS: http://www.cups.org/.130LPRng: http://www.lprng.org/.

Page 37: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 37

3. estabelecimento de configurações básicas, como senha de root e informações derede e instalação do gerenciador de boot.

Em geral, as distribuições mais conhecidas disponibilizam bons manuais (impressos oueletrônicos) que orietam o processo de instalação. Dada a existência dessa documentação,aliada às diferenças de instalação entre as distribuições, este texto não se aterá nesseponto.

2.8 OBTENDO AJUDA

Qualquer usuário que não tenha experiência com um software abrangente, como umprocessador de texto ou o kernel do Linux, irá precisar de ajuda, cedo ou tarde. Em Linux,essa ajuda pode vir de várias formas. Uma forma muito usual de conseguir ajuda emLinux é através de listas de discussão. Geralmente, as distribuições e os desenvolvedoresdos servidores mais utilizados mantém listas próprias, visando facilitar o intercâmbio deinformações entre seus usuários. Dependendo do nível de experiência dos participantes, épossível obter soluções rápidas para problemas comuns no uso do Linux.

Na maioria das vezes, também é possível obter auxílio através de arquivos de ajudadisponibilizados junto com o software. Em geral, os arquivos de ajuda dos programas UNIXsão disponibilizados em páginas de manuais (man pages), acessadas via comando man

nome-do-programa. A Figura 2.10 mostra o resultado da execução do comando man

route.

Algumas páginas man vem sendo acompanhadas ou substituídas por páginas de infor-mações (info pages). Essas páginas acrescentam alguma funcionalidade extra às páginasman, como, por exemplo, links entre seções. As páginas info podem ser acessadas atravésdos comandos info ou pinfo, ilustrado na Figura 2.11.

Além das informações locais, é possível coletar documentação farta sobre Linux emvários sites. Entre esses sites, merece destaque o mantido pelo The Linux DocumentationProject – TLDP (http://www.tldp.org/). Esse site possui uma ramificação brasileiraem http://br.tldp.org/, que disponibiliza traduções de alguns documentos do pro-jeto.

Várias man pages são mantidas pelo TLDP, mas esse não é o único tipo de documentodisponibilizado. Também podem ser encontrados guias (na verdade, livros ou manuais,alguns dos quais publicados por vias tradicionais), revistas eletrônicas sobre Linux e pe-quenos textos sobre problemas específicos (os HOWTOs). Esses HOWTOs ajudam o ad-ministrador a resolver um problema particular. Por exemplo, o gerenciamento de Quota é

Page 38: GERENCIAMENTO DE SISTEMAS LINUX

38 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Figura 2.10: Execução do Comando man

muito bem explicado no “Quota mini howto” (DOOREN, 2002). A opinião dos administrado-res Linux ligados ao ARL é que o melhor material sobre Linux pode ser obtido diretamentedo TLDP em formato eletrônico.

2.9 COMENTÁRIOS FINAIS

Dada a fartura de material sobre o Linux é inconcebível a postura de administradoresque se negam a consultar HOWTOs e man pages sob a alegação de que a leitura dosmesmos toma-lhe muito tempo. Essa postura reflete uma atitude preguiçosa, de quemespera tudo pronto e não está disposto a procurar as bases de conhecimento para o queintenciona fazer.

Na verdade, o uso de recursos como man pages e HOWTOs é tão vivo no mundo Linux,que seu uso não é recomendado só para administradores, mas mesmo pelo usuário final.Isso deve ser feito porque estimula uma postura ativa frente aos recursos da informática.

Page 39: GERENCIAMENTO DE SISTEMAS LINUX

Visão Geral de um Sistema Linux 39

Figura 2.11: Execução do pinfo

Afinal esses documentos foram criados para não somente explicar como fazer as coisas emLinux, mas as bases em que elas são feitas.

Page 40: GERENCIAMENTO DE SISTEMAS LINUX

40 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Page 41: GERENCIAMENTO DE SISTEMAS LINUX

3CONFIGURAÇÃO DE DISPOSITIVOS

3.1 COMENTÁRIOS INICIAIS

A configuração de dispositivos em Linux em geral não é uma tarefa complexa. E, aocontrário do que é comumente disseminado, o Linux suporta muito mais dispositivos nati-vamente que outros SOs, como discutido em (KROAH-HARTMAN, 2006). Isso implica queo suporte é feito de forma coerente e integrada, o que garante um alto grau de estabilidadeao sistema computacional como um todo.

O real problema com a dificuldade de instalação de alguns dispositivos advém do fatode que esses dispositivos são instalados com software de seus fabricantes, sendo proje-tado, em sua grande maioria, para funcionarem apenas no WindowsTM. Mais ainda, pormotivos os mais diversos, incluindo-se medo de processos legais por quebra de patentes,esses fornecedores também não costumam liberar a especificação desses equipamentos,dificultando o desenvolvimento de um driver para Linux pela comunidade software livre.

Além disso, cabe ressaltar que as distribuições em geral possuem diversas ferramen-tas que facilitam a configuração de hardware, em geral com um grau de reconhecimentobastante poderoso. Com isso, o tempo de configuração da maior parte dos dispositivosinstalados em um computador é, em geral, inferior ao de outros SOs. Mais ainda, boa partedessa configuração é feita de forma automática, sem a necessidade de intervenção direta.

3.2 OBTENDO INFORMAÇÃO SOBRE HARDWARE EM LINUX

Quando um hardware não é configurado de forma automática, existem alguns procedi-mentos que podem auxiliar o usuário nessa tarefa. Inicialmente recomenda-se verificar se odispositivo foi reconhecido pelo kernel e, em caso positivo, como isso ocorreu. Nesse sen-tido, é extremamente útil consultar os logs do kernel, geralmente em /var/log/kern.log

ou /var/log/kernel/. Também pode ser útil verificar as mensagens do buffer do kernel,inclusive as geradas durante o processo de inicialização do sistema (boot). Isso pode ser

Page 42: GERENCIAMENTO DE SISTEMAS LINUX

42 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

feito por meio do utilitário dmesg. É importante esclarecer que esse utilitário irá imprimiras últimas mensagens no buffer do kernel, podendo já não mais apresentar mensagens doboot, em um sistema já há mais tempo ativo. Como ilustrado na Figura 3.1, o kernel imprimeuma série de informações sobre o hardware encontrado, inclusive aqueles não suportados.

eth0: forcedeth.c: subsystem: 01043:8239 bound to 0000:00:08.0

netconsole: not configured, aborting

Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2

ide: Assuming 33MHz system bus speed for PIO modes;

override with idebus=xx

NFORCE-MCP55: IDE controller at PCI slot 0000:00:04.0

NFORCE-MCP55: chipset revision 161

NFORCE-MCP55: not 100% native mode: will probe irqs later

NFORCE-MCP55: 0000:00:04.0 (rev a1) UDMA133 controller

ide0: BM-DMA at 0xf000-0xf007, BIOS settings: hda:DMA, hdb:DMA

Probing IDE interface ide0...

hda: HL-DT-ST DVDRAM GSA-4167B, ATAPI CD/DVD-ROM drive

ide0 at 0x1f0-0x1f7,0x3f6 on irq 14

Probing IDE interface ide1...

hda: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(33)

Uniform CD-ROM driver Revision: 3.20

sata_nv 0000:00:05.0: version 3.4

ACPI: PCI Interrupt Link [APSI] enabled at IRQ 22

ACPI: PCI Interrupt 0000:00:05.0[A] -> Link [APSI]

-> GSI 22 (level, low) -> IRQ 22

PCI: Setting latency timer of device 0000:00:05.0 to 64

scsi0 : sata_nv

scsi1 : sata_nv

Figura 3.1: Trechos de Saída do dmesg

Assim, em parte dos dispositivos, tem-se a indicação, via dmesg, de como eles foramsuportados e como são reconhecidos no sistema. Também pode ser bastante útil o co-mando lsmod, que lista os módulos carregados pelo kernel. Outros utilitários essenciaissão o lspci, lsusb, systool, dmidecode, lshal e hal-device-manager. O lspci

lista todos os dispositivos PCl do sistema, incluindo-se dispositivos onboard e placas devídeo AGP. Essa ferramenta é extremamente útil para se descobrir o chipset de um dadodispositivo, como ilustrado na Figura 3.2.

Page 43: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 43

00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a1)

00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a2)

00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a2)

00:01.2 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a2)

00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller (rev a1)

00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller (rev a2)

00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1)

00:05.0 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a2)

00:05.1 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a2)

00:05.2 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a2)

00:06.0 PCI bridge: nVidia Corporation Unknown device 0370 (rev a2)

00:06.1 Audio device: nVidia Corporation MCP55 High Definition Audio

(rev a2)

00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a2)

00:0a.0 PCI bridge: nVidia Corporation Unknown device 0376 (rev a2)

00:0b.0 PCI bridge: nVidia Corporation Unknown device 0374 (rev a2)

00:0c.0 PCI bridge: nVidia Corporation Unknown device 0374 (rev a2)

00:0d.0 PCI bridge: nVidia Corporation Unknown device 0378 (rev a2)

00:0e.0 PCI bridge: nVidia Corporation Unknown device 0375 (rev a2)

00:0f.0 PCI bridge: nVidia Corporation Unknown device 0377 (rev a2)

00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron]

HyperTransport Technology Configuration

00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron]

Address Map

00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron]

DRAM Controller

00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron]

Miscellaneous Control

07:00.0 VGA compatible controller: nVidia Corporation GeForce 6200

TurboCache(TM) (rev a1)

Figura 3.2: Exemplo de Saída do lspci

A saída do lspci, que pode conter ainda um nível maior de detalhes é útil para confi-gurações em que são necessárias informações extras, tais como: porta I/O e endereço dememória. Além disso, o suporte em Linux a um dispositivo é feito sobre seu chipset. Comovárias placas são feitas por um fabricante incorporando-se chipset de terceiros, o usuáriopode não conseguir informações sobre o suporte dessa placa em Linux apenas por seunome/modelo. A informação apresentada pelo lspci, obtida diretamente do hardware, éportanto, em geral, mais confiável para a correta configuração do equipamento.

Page 44: GERENCIAMENTO DE SISTEMAS LINUX

44 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

No mesmo caminho, o comando lsusb lista os dispositivos conectados ao barramentoUSB, como ilustrado na Figura 3.3, que lista um gamepad, dois HDs externos e um mouseUSB. A Figura 3.3 apresenta ainda trechos da saída mais detalhada desse comando, des-tacando o mouse USB. Essa saída foi cortada em suas 20 primeiras linhas, com uso docomando head, por questões de espaço na figura.

$ lsusb

Bus 002 Device 003: ID 046d:c21a Logitech, Inc.

Bus 002 Device 002: ID 0458:0036 KYE Systems Corp. (Mouse Systems)

Bus 002 Device 001: ID 0000:0000

Bus 001 Device 017: ID 05e3:0702 Genesys Logic, Inc. USB 2.0 IDE Adapter

Bus 001 Device 007: ID 04cf:8818 Myson Century, Inc. Fast 3.5"

External Storage

Bus 001 Device 001: ID 0000:0000

$ lsusb -v -d 0458:0036 | head -20

Bus 002 Device 002: ID 0458:0036 KYE Systems Corp. (Mouse Systems)

Device Descriptor:

bLength 18

bDescriptorType 1

bcdUSB 1.10

bDeviceClass 0 (Defined at Interface level)

bDeviceSubClass 0

bDeviceProtocol 0

bMaxPacketSize0 8

idVendor 0x0458 KYE Systems Corp. (Mouse Systems)

idProduct 0x0036

bcdDevice 1.07

iManufacturer 2 Genius

iProduct 1 NetScroll+Mini Traveler

iSerial 0

bNumConfigurations 1

Configuration Descriptor:

bLength 9

bDescriptorType 2

Figura 3.3: Exemplo de Saída do lsusb

Outra forma de se obter informação sobre hardware em Linux é por meio do HAL,do /proc e do sysfs. O HAL (Hardware Abstraction Layer)1 é um software mantido

1HAL: http://www.freedesktop.org/wiki/Software/hal.

Page 45: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 45

pela Freedesktop.org, uma organização responsável pelo desenvolvimento de padrões esoftware para garantir a interoperabilidade dos vários gerenciadores de ambiente sob XWindows. O HAL provê informações sobre os dispositivos aos gerenciadores de ambiente.Assim, ele acessa informação do hardware, enviando-as ao desktop, facilitando a configu-ração automática do mesmo.

Apesar de se destinar aos gerenciadores de ambiente, o pacote de instalação do HALprovê um utilitário de linha de comando, o lshal que lista informações dos dispositivos aque o HAL tem acesso. Na Figura 3.4 é apresentado um trecho de saída desse comando,mostrando a detecção do gamepad listado na Figura 3.2 pelo HAL. Uma alternativa grá-fica, com navegação em forma de árvore, é possibilidada pelo hal-device-manager, umutilitário distribuído com o HAL, ilustrado na Figura 3.5.

O diretório /proc, por sua vez é obtido pela montagem do procfs um pseudo sis-tema de arquivos em sistemas UNIX ou Unix-like. Esse pseudo sistema de arquivos émontado durante o processo de inicialização do sistema e não consome espaço de ar-mazenamento, apenas uma quantidade limitada de memória. O diretório montado, /procdisponibiliza uma série de informações do kernel, sendo também utilizado para algumasconfigurações dinâmicas do sistema. As informações são disponibilizadas por meio dearquivos-textos na árvore de diretório do /proc. A Figura 3.6 mostra a conteúdo do arquivo/proc/interrupts, que pode ser útil na configuração de algum dispositivo.

Várias outras informações importantes sobre o hardware são disponibilizadas no /proc,como as instruções suportadas pelo processador (Figura 3.7) e que podem ser determi-nantes para saber se a máquina suporta ou não uma determinada opção de compilaçãodo kernel. Além disso, é possível obter informações sobre memória (/proc/meminfo),dispositivos (/proc/devices) e dados sobre os processos em execução pelo kernel. Onome procfs advém, inclusive, de Process File System, sistema de arquivos de processos.Sua função principal, portanto, é disponibilizar todas as informações possíveis que o kernelpossua sobre os processos gerenciados por ele.

Como o diretório /proc começou a ser utilizado para disponibilizar diversas informa-ções do sistema, a partir do kernel 2.6 foi criado o sysfs, descrito com detalhes em (MO-CHEL, 2005). O sysfs é um sistema de arquivos virtual que exporta para a camada deusuário informações sobre dispositivos e drivers, também permitindo a configuração de al-guns elementos do sistema. Esse sistema de arquivos é montado geralmente no diretório/sys, e ele é formado por arquivos-texto, com geralmente um único valor por cada arquivo.Isso é conseguido mapeando-se objetos do kernel são mapeados em diretórios, atributosem arquivos regulares e relacionamentos em links simbólicos.

Page 46: GERENCIAMENTO DE SISTEMAS LINUX

46 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

udi = ’/org/freedesktop/Hal/devices/usb_device_46d_c21a_noserial’

info.bus = ’usb_device’ (string)

info.linux.driver = ’usb’ (string)

info.parent =

’/org/freedesktop/Hal/devices/usb_device_0_0_0000_00_02_0’ (string)

info.product = ’Logitech(R) Precision(TM) Gamepad’ (string)

info.subsystem = ’usb_device’ (string)

info.udi =

’/org/freedesktop/Hal/devices/usb_device_46d_c21a_noserial’ (string)

info.vendor = ’Logitech, Inc.’ (string)

linux.device_file = ’/dev/bus/usb/002/003’ (string)

linux.hotplug_type = 2 (0x2) (int)

linux.subsystem = ’usb’ (string)

linux.sysfs_path =

’/sys/devices/pci0000:00/0000:00:02.0/usb2/2-3’ (string)

usb_device.bus_number = 2 (0x2) (int)

usb_device.can_wake_up = false (bool)

usb_device.configuration_value = 1 (0x1) (int)

usb_device.device_class = 0 (0x0) (int)

usb_device.device_protocol = 0 (0x0) (int)

usb_device.device_revision_bcd = 4 (0x4) (int)

usb_device.device_subclass = 0 (0x0) (int)

usb_device.is_self_powered = false (bool)

usb_device.linux.device_number = 3 (0x3) (int)

usb_device.linux.sysfs_path =

’/sys/devices/pci0000:00/0000:00:02.0/usb2/2-3’ (string)

usb_device.max_power = 50 (0x32) (int)

usb_device.num_configurations = 1 (0x1) (int)

usb_device.num_interfaces = 1 (0x1) (int)

usb_device.num_ports = 0 (0x0) (int)

usb_device.product = ’Logitech(R) Precision(TM) Gamepad’ (string)

usb_device.product_id = 49690 (0xc21a) (int)

usb_device.speed = 1.5 (1.5) (double)

usb_device.speed_bcd = 336 (0x150) (int)

usb_device.vendor = ’Logitech, Inc.’ (string)

usb_device.vendor_id = 1133 (0x46d) (int)

usb_device.version = 1.1 (1.1) (double)

usb_device.version_bcd = 272 (0x110) (int)

Figura 3.4: Trecho de Saída do lshal

Page 47: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 47

Figura 3.5: Obtendo Informações de Hardware com o hal-device-manager

Page 48: GERENCIAMENTO DE SISTEMAS LINUX

48 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

CPU0

0: 12668905 IO-APIC-edge timer

1: 46111 IO-APIC-edge i8042

8: 1 IO-APIC-edge rtc

9: 0 IO-APIC-fasteoi acpi

12: 4 IO-APIC-edge i8042

14: 111933 IO-APIC-edge ide0

16: 800709 IO-APIC-fasteoi nvidia

20: 0 IO-APIC-fasteoi sata_nv

21: 530421 IO-APIC-fasteoi sata_nv, HDA Intel

22: 622481 IO-APIC-fasteoi sata_nv, ohci_hcd:usb2

23: 897 IO-APIC-fasteoi ehci_hcd:usb1

281: 1963707 PCI-MSI-edge eth0

NMI: 0

LOC: 12669618

ERR: 0

Figura 3.6: Arquivo /proc/interrupts

processor : 0

vendor_id : AuthenticAMD

cpu family : 15

model : 95

model name : AMD Athlon(tm) 64 Processor 3500+

stepping : 2

cpu MHz : 2200.000

cache size : 512 KB

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 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt

rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm svm extapic cr8_legacy

bogomips : 4842.90

TLB size : 1024 4K pages

clflush size : 64

cache_alignment : 64

address sizes : 40 bits physical, 48 bits virtual

power management: ts fid vid ttp tm stc

Figura 3.7: Arquivo /proc/cpuinfo

Page 49: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 49

A obtenção de informações do sysfs pode ser feita de forma direta, acessando-se odiretório montado com esse sistema de arquivos. Isso é ilustrado na Figura 3.8, em queé mostrado o conteúdo de um arquivo associado a um dado dispositivo. Um utilitário queauxilia nessa tarefa é o systool, integrante do pacote sysfs-utils. Esse utilitário facilitaa obtenção de informações do sysfs, agregando entradas, como ilustrado na Figura 3.9.

Um utilitários extra também importante na tarefa de obtenção de informações sobre ohardware é o dmidecode, ilustrado na Figura 3.10. Esse utilitário permite o acesso a infor-mações DMI (Desktop Management Interface), parte integrante das BIOS atuais. Com isso,é possível obter uma descrição dos componentes de hardware, bem como outras informa-ções úteis, como números seriais e revisão da BIOS. Como essas informações são obtidasdiretamente da BIOS, sem acesso ao hardware em si, elas são acessadas rapidamente,mas podem não ser totalmente confiáveis.

Por fim, com o uso dos utilitários apresentados nesta seção, o usuário consegue obterum conjunto muito grande de informações sobre seu hardware. Isso facilitará em muito atarefa de configuração, e a busca por auxílio na internet, seja em mecanismos de busca,seja em listas ou fóruns de discussão, seja consultando os manuais de configuração dadistribuição instalada no sistema.

3.3 DRIVERS E MÓDULOS

Em Linux, o driver de um dado dispositivo de hardware é geralmente disponibilizado dequatro maneiras:

1. como parte integrante do próprio kernel;

2. como um módulo carregável distribuído junto com o próprio kernel;

3. como um módulo carregável que precisa ser compilado e instalado;

4. como um código que deve ser adicionado ao código do kernel para recompilação (ouseja: um patch).

Essas maneiras estão dispostas em ordem de dificuldade de uso para o administrador desistemas. Alguns dispositivos podem ter suporte nativo dentro do próprio kernel do Linux.Isso depende das opções de compilação do kernel, o que pode variar de uma distribuiçãopara outra. Em geral, as distribuições costumam customizar a configuração do kernel deacordo com alguma diretriz.

Page 50: GERENCIAMENTO DE SISTEMAS LINUX

50 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

$ dir /sys/bus/usb/devices/usb2/2-3/

total 0

drwxr-xr-x 4 root root 0 2007-09-17 08:19 2-3:1.0

-r--r--r-- 1 root root 4096 2007-09-17 05:15 bcdDevice

-rw-r--r-- 1 root root 4096 2007-09-17 08:19 bConfigurationValue

-r--r--r-- 1 root root 4096 2007-09-17 08:19 bDeviceClass

-r--r--r-- 1 root root 4096 2007-09-17 08:19 bDeviceProtocol

-r--r--r-- 1 root root 4096 2007-09-17 08:19 bDeviceSubClass

-r--r--r-- 1 root root 4096 2007-09-17 08:19 bmAttributes

-r--r--r-- 1 root root 4096 2007-09-17 13:23 bMaxPacketSize0

-r--r--r-- 1 root root 4096 2007-09-17 08:19 bMaxPower

-r--r--r-- 1 root root 4096 2007-09-17 08:19 bNumConfigurations

-r--r--r-- 1 root root 4096 2007-09-17 08:19 bNumInterfaces

-r--r--r-- 1 root root 4096 2007-09-17 13:23 busnum

-r--r--r-- 1 root root 4096 2007-09-17 08:19 configuration

-r--r--r-- 1 root root 4096 2007-09-17 13:23 dev

-r--r--r-- 1 root root 4096 2007-09-17 08:19 devnum

lrwxrwxrwx 1 root root 0 2007-09-17 05:15 driver ->

../../../../../bus/usb/drivers/usb

lrwxrwxrwx 1 root root 0 2007-09-17 13:23 ep_00 ->

../../../../../devices/pci0000:00/0000:00:02.0/

usb2/2-3/usb_endpoint/usbdev2.3_ep00

-r--r--r-- 1 root root 4096 2007-09-17 05:15 idProduct

-r--r--r-- 1 root root 4096 2007-09-17 05:15 idVendor

-r--r--r-- 1 root root 4096 2007-09-17 05:15 manufacturer

-r--r--r-- 1 root root 4096 2007-09-17 08:19 maxchild

drwxr-xr-x 2 root root 0 2007-09-17 05:15 power

-r--r--r-- 1 root root 4096 2007-09-17 05:15 product

-r--r--r-- 1 root root 4096 2007-09-17 13:23 quirks

-r--r--r-- 1 root root 4096 2007-09-17 08:19 speed

lrwxrwxrwx 1 root root 0 2007-09-17 05:15 subsystem ->

../../../../../bus/usb

-rw-r--r-- 1 root root 4096 2007-09-17 05:15 uevent

drwxr-xr-x 3 root root 0 2007-09-17 05:15 usb_device

drwxr-xr-x 3 root root 0 2007-09-17 05:15 usb_endpoint

-r--r--r-- 1 root root 4096 2007-09-17 08:19 version

$ cat /sys/bus/usb/devices/usb2/2-3/product

Logitech(R) Precision(TM) Gamepad

Figura 3.8: Obtendo Informações de Hardware via sysfs

Page 51: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 51

$ systool -b usb -d 2-3 -v

Bus = "usb"

Device = "2-3"

Device path = "/sys/devices/pci0000:00/0000:00:02.0/usb2/2-3"

bConfigurationValue = "1"

bDeviceClass = "00"

bDeviceProtocol = "00"

bDeviceSubClass = "00"

bMaxPacketSize0 = "8"

bMaxPower = " 50mA"

bNumConfigurations = "1"

bNumInterfaces = " 1"

bcdDevice = "0004"

bmAttributes = "80"

busnum = "2"

configuration =

devnum = "3"

dev = "189:130"

idProduct = "c21a"

idVendor = "046d"

manufacturer = "Logitech"

maxchild = "0"

product = "Logitech(R) Precision(TM) Gamepad"

quirks = "0x0"

speed = "1.5"

uevent = "MAJOR=189

MINOR=130

DEVTYPE=usb_device

DRIVER=usb

DEVICE=/proc/bus/usb/002/003

PRODUCT=46d/c21a/4

TYPE=0/0/0

BUSNUM=002

DEVNUM=003"

version = " 1.10"

Figura 3.9: Exemplo de Uso do systool

Page 52: GERENCIAMENTO DE SISTEMAS LINUX

52 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

$ dmidecode -t 2

# dmidecode 2.9

SMBIOS 2.4 present.

Handle 0x0002, DMI type 2, 8 bytes

Base Board Information

Manufacturer: ASUSTeK Computer INC.

Product Name: M2N-E

Version: 1.XX

Serial Number: 123456789000

Figura 3.10: Exemplo de Uso do dmidecode

A forma preferencial, entretanto, é oferecer o suporte a dispositivos através dos módu-los carregáveis. O kernel do Linux é um sistema modular. Isso significa que um móduloé uma biblioteca que não é ligada (incluída) diretamente no kernel. Essas bibliotecas po-dem ser inseridas e removidas dentro do kernel a qualquer momento, dando ao Linux umaflexibilidade muito grande para uso de dispositivos.

Tome-se por exemplo o uso de um zipdrive. No Windows 95 ou 98, se o sistema nãofoi inicializado tendo o zipdrive paralelo ligado ao micro, não adianta, na maioria dos casos,tentar usar o aparelho. Será preciso reiniciar a máquina para que ele funcione. Em Linux, épossível adicionar o zipdrive com o micro funcionando, carregar o módulo associado, usaro equipamento, remover o módulo do kernel e remover o zipdrive do equipamento, semnenhum transtorno.

Assim, para evitar que o kernel fique muito grande, para poder oferecer suporte a váriosdispositivos, geralmente esse suporte é oferecido preferencialmente na forma de módulos.Esses módulos são, em geral, armazenados em algum subdiretório de /lib/modules.Uma forma de ver os módulos em uso é visualizar o arquivo /proc/modules ou digitar ocomando lsmod. A saída desses dois processos é bastante similar e um exemplo pode servisualizado na Figura 3.11.

Na seqüência da saída apresentada na Figura 3.11, tem-se: o nome do módulo, ta-manho dele em memória, quantos dispositivos dependem dele e uma lista dos módulosque dependem do mesmo. Para remover um módulo da memória, basta digitar o comandormmod modulo. Um módulo só poderá ser removido se não estiver em uso. No caso daFigura 3.11, o módulo usb-uhci poderia ser removido sem problemas.

Uma forma interessante de uso do comando rmmod é chamá-lo com a opção “-a”, quefaz uma limpeza dos módulos sem uso. Em alguns casos, é preciso rodar rmmod -a duas

Page 53: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 53

nfs 79840 4 (autoclean)

nfsd 71232 8 (autoclean)

lockd 53184 1 (autoclean) [nfs nfsd]

sunrpc 64816 1 (autoclean) [nfs nfsd lockd]

eepro100 17680 2

usb-uhci 21668 0 (unused)

usbcore 51808 1 [usb-uhci]

ext3 62624 8

jbd 41092 8 [ext3]

aic7xxx 114624 7

sd_mod 11900 7

scsi_mod 98584 2 [aic7xxx sd_mod]

Figura 3.11: Módulos Carregados e em Uso

vezes, por causa da referência entre módulos. Assim, um módulo que estivesse carregadosomente por causa de outro, poderia ser removido da memória em uma segunda execuçãodo comando.

Para carregar um módulo em memória, basta executar o comando insmod modulo.Assim, insmod ppa iria carregar o módulo necessário ao suporte do zipdrive paralelo.Em certos casos, um módulo precisa de outros para poder funcionar corretamente. Porexemplo, o módulo ppa precisa do módulo parport, que oferece suporte à porta paralelado computador.

Dessa maneira, a execução do comando insmod ppa iria gerar erro se o móduloparport já não estivesse carregado. Para simplificar esse processo de instalação de mó-dulos, foi disponibilizado o comando modprobe. Esse comando irá utilizar-se do arquivo/lib/modules/xxx/modules.dep, onde xxx é a versão do kernel instalado para carre-gar os módulos de forma inteligente. O comando modprobe checa as dependências de ummódulo antes de instalá-lo. Assim, se o administrador invoca modprobe ppa e o móduloppa precisa do módulo não-instalado parport, então o módulo parport será carregadoantes do módulo ppa.

Para saber qual módulo é necessário para suporte de um dado dispositivo, é possí-vel consultar a documentação do kernel, caso ela tenha sido instalada. Em geral, ela éencontrada no diretório /usr/share/doc/kernel-doc-xxx/, onde xxx é a versão dokernel. A maioria dos dispositivos de uso geral são suportados com as versões normais dokernel. Assim, o trabalho do administrador é carregar o módulo associado ao dispositivo econfigurá-lo. Em alguns casos, esse módulo não encontra-se integrado ao kernel, por estar

Page 54: GERENCIAMENTO DE SISTEMAS LINUX

54 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

em versão inicial ou não ser distribuído sob a GPL. Nesse caso, o administrador precisa efe-tuar download do arquivo do módulo e, em alguns casos, compilá-lo. Esse era o processo,até pouco tempo atrás, para obter suporte a UDF no Linux. A maioria dos softmodems2

também funcionam dessa forma, o mesmo ocorrendo com algumas placas de vídeo. Tendoo módulo compilado, o próximo passo é instalá-lo com o comando insmod modulo.o,onde modulo.o é o nome do módulo compilado.

Em alguns casos, esse módulo não pode ser compilado independente do kernel. Assim,ele é desenvolvido como um patch. Em geral, são módulos em fases extremamente iniciaise que são liberados posteriormente ou integrados ao kernel ou como módulos compiláveisde forma independente. Dessa maneira, não são módulos em fase estável e não são deuso geral recomendável.

Dada essa situação, essa apostila não entrará em detalhes de compilação do kernel,uma vez que não é uma medida necessária à maioria das tarefas administrativas. Na mai-oria dos casos, inclusive, é possível administrar excelentemente bem um sistema, semprecisar sequer pensar nisso.

Além disso, a compilação do kernel não é uma tarefa trivial e requer suficiente experi-ência e conhecimento no uso do Linux, não sendo recomendável a usuários iniciantes oumesmo intermediários, uma vez que corre-se o risco de deixar o sistema inutilizável ou al-tamente instável. Ainda assim, caso o leitor queira saber como isso é feito, recomenda-seantes a leitura de (VASUDEVAN, 2003), (HENDERSON, 2002). Também existem bons do-cumentos em português sobre o assunto, mas o processo de compilação exige suficientedomínio da língua inglesa.

3.4 O ARQUIVO /ETC/MODULES.CONF

Em alguns casos, o kernel necessita de informações adicionais a respeito de comocarregar um módulo. Para se configurar algumas placas, por exemplo, pode ser impor-tante informar o número de interrupção associado, o endereço físico e o uso de DMA. Parafacilitar o uso desses módulos, o kernel utiliza um arquivo de configuração que fica em/etc/modules.conf. A Figura 3.12 mostra um exemplo desse arquivo.

O caso mais freqüente de uso do arquivo /etc/modules.conf é informar ao kernelqual é o driver associado a um determinado tipo de dispositivo. Assim, por exemplo, noexemplo da Figura 3.12, é informado ao kernel que a primeira placa de rede é controlada

2Um softmodem é um modem com capacidades mínimas em hardware, dependendo em muito do softwarepara seu funcionamento. Também são chamados de winmodems, dado que os primeiros modelos objetivavamunicamente usuários de Windows.

Page 55: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 55

alias parport_lowlevel parport_pc

alias scsi_hostadapter aic7xxx

alias usb-controller usb-uhci

alias eth0 eepro100

alias eth1 8139too

alias sound-slot-0 cmpci

Figura 3.12: Arquivo /etc/modules.conf

pelo driver eepro100 (no caso uma IBM Ethernet Pro 100) e a segunda é controlada pelodriver 8139too (no caso, uma Realtek).

Ainda quanto à Figura 3.12, a controladora SCSI é controlada pelo driver aic7xxx (nocaso, uma Adaptec) e a placa de som é uma CMI8338, controlada pelo driver cmpci. Porfim, a controlodora USB usa um driver genérico, indicado para a maioria dos casos, que é ousb-uhci. Note que alias é apenas a opção mais usada, mas não é a única. É possível,por exemplo, interrupções e endereços de hardware, bem como informar o que deve serfeito imediatamente após carregar ou descarregar um determinado módulo. Em algunssistemas, como Debian e Gentoo, esse arquivo é mantido pelo utilitário update-modules,que facilita o gerenciamento dinâmico desse arquivo.

3.5 CRIAÇÃO DE ARQUIVOS DE DISPOSITIVOS

Quase todo dispositivo de hardware interno do computador é mapeado em um arquivono diretório /dev em Linux. Assim, para grande maioria dos dispositivos, deve haver umarquivo no diretório /dev associado ao dispositivo. Além disso, o kernel, ou as aplicaçõesque utilizam esse dispositivo devem saber como controlar esse item de hardware.

A maioria dos arquivos de dispositivos serão criados e estarão disponíveis após a insta-lação do sistema. Se por algum motivo, o administrador precisar criar algum desses arqui-vos, a primeira tentativa deve ser a utilização do script MAKEDEV em /dev/. A Figura 3.13mostra um exemplo de uso desse comando.

# /dev/MAKEDEV -v ttyS0

create ttyS0 c 4 64 root:dialout 0660

Figura 3.13: Uso do Comando makedev

O comando emitido na Figura 3.13 irá criar um arquivo de dispositivo de caracter comnúmero maior 4 e número menor 64. O proprietário desse dispositivo será o usuário root,

Page 56: GERENCIAMENTO DE SISTEMAS LINUX

56 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

pelo grupo dialout, com permissões de leitura e escrita pelo usuário e pelo grupo e sempermissão para qualquer outro usuário.

Os números (ou nós) maior e menor são utilizados pelo kernel para associar cada dis-positivo ao driver correspondente. O número maior identifica o tipo de dispositivo, em outraspalavras: a qual driver aquele arquivo está associado. O número menor indica qual o itemparticular daquele tipo de dispositivo que está sendo endereçado, sendo chamado tambémde número de unidade. O número maior e menor de um dado dispositivo pode ser verifi-cado com o comando ls -l, como mostra a Figura 3.14. Nessa figura, tem-se /dev/hda

e /dev/hda1 como dispositivos de bloco e com o mesmo número maior, sendo controla-dos, portanto, pelo mesmo driver.

# ls -l /dev/hda /dev/hda1

brw-rw---- 1 root disk 3, 0 Abr 11 2002 /dev/hda

brw-rw---- 1 root disk 3, 1 Abr 11 2002 /dev/hda1

Figura 3.14: Exibindo Informações de um Dispositivo

Existem dois tipos de arquivos de dispositivos em Linux: arquivos de dispositivos decaracteres e arquivos de dispositivos de bloco. Um dispositivo de bloco é lido ou escrito emblocos de bytes, geralmente 512. Já um dispositivo de caracter precisa ser lido ou escritoum byte por vez. É importante observar que alguns dispositivos, como fitas, podem sertratados das duas formas. Outros, como a porta de impressão, só podem ser tratados deuma única maneira.

O script MAKEDEV é o mecanismo preferido para criação de arquivos de dispositivosausentes em /dev/. Em alguns casos, entretanto, MAKEDEV pode não sabe como essearquivo deve ser criado. Nesse caso, o administrador deve utilizar-se do comando mknod.Para tanto, ele precisa saber os números maior e menor do dispositivo que pretente criar.Uma pesquisa no arquivo devices.txt, disponibilizado junto ao código ou à documenta-ção do kernel pode auxiliar na busca dessa informação. A Figura 3.15 mostra o processode criação do arquivo /dev/ttyS0 com número maior 4 e número menor 64.

# mknod /dev/ttyS0 c 4 64

# ls -l /dev/ttyS0

crw-rw---- 1 root root 4, 64 Oct 23 18:23 /dev/ttyS0

Figura 3.15: Exemplo de Uso do Comando mknod

Page 57: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 57

Os números maiores e menores de dispositivos, bem como os nomes dos dispositi-vos mais comuns, são definidos pela LANANA3 (The Linux Assigned Names And Num-bers Authority), parte da Linux Foundation4, uma organização dedicada a promover, prote-ger e padronizar o Linux. A Linux Foundation mantém o LSB (Linux Standard Base), umconjunto de padrões para aumentar a compatibilidade entre as distribuições Linux (FREESTANDARDS GROUP, 2006). Entre outros itens, o LSB estipula as bibliotecas básicas dosistema (como libncurses e libpam), os comandos básicos (como md5sum, sendmaile uname), usuários básicos do sistema (root, bin e daemon) e a adoção do RPM comoformato preferencial de empacotamento.

3.6 GERENCIAMENTO DINÂMICO DE DISPOSITIVOS COM UDEV, D-BUS E HAL

Um problema recente em projetos de sistemas operacionais é o suporte a dispositivosplugáveis e removíveis. No caso do Linux, a criação de uma árvore estática de dispositivosem /dev totalmente estática tornou-se inviável recentemente, dado o número crescente detipos de dispositivos, bem como as dificuldades do usuário em verificar quais dispositivosno /dev estariam realmente disponíveis no sistema.

Assim, surgiram alguns projetos com o objetivo de permitir um gerenciamento dinâmicode dispositivos, como o hotplug e o devfs. Na série 2.6 do kernel, essa tarefa foi repassadaao udev5, que permite ao Linux ter um /dev dinâmico, refletindo o hardware, e com ahabilidade de nomes de dispositivos de forma mais consistente (KROAH-HARTMAN, 2003).O udev permite, por exemplo, a montagem de um dispositivo por ser número de série ou ID,ao invés de sua posição no barramento IDE. A Figura 3.16 ilustra isso apresentando umarelação de dispositivos de armazenamento plugados em um computador, ressaltando-seo fato que só foram criadas entradas /dev/hdX e /dev/sdX para dispositivos realmentedisponíveis.

O udev reside totalmente em espaço de usuário, o que facilita em muito sua configura-ção. Ele é executado como um daemon no Linux e fica à “escuta” de eventos enviados pelokernel quando um dispositivo é conectado ou removido. O udev gera mensagens D-Bus,o que facilita em muito sua integração com gerenciadores de ambiente e outras aplicaçõesno espaço de usuário, como HAL.

D-Bus e HAL são duas importantes aplicações mantidas pela Freedesktop.org. D-Busé um sistema de mensagens entre processos, facilitando a comunicação entre aplicações.

3LANANA http://www.lanana.org/.4Linux Foundation http://www.linux-foundation.org/.5udev: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html.

Page 58: GERENCIAMENTO DE SISTEMAS LINUX

58 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

lrwxrwxrwx 1 root root 3 2007-09-17 05:15 cdrom -> hda

lrwxrwxrwx 1 root root 3 2007-09-17 05:15 cdrw -> hda

crw------- 1 root tty 5, 1 2007-09-17 08:20 console

lrwxrwxrwx 1 root root 11 2007-09-17 05:15 core -> /proc/kcore

drwxr-xr-x 3 root root 60 2007-09-17 05:15 cpu

drwxr-xr-x 5 root root 100 2007-09-17 10:39 disk

lrwxrwxrwx 1 root root 9 2007-09-17 08:19 dsp -> sound/dsp

lrwxrwxrwx 1 root root 3 2007-09-17 05:15 dvd -> hda

lrwxrwxrwx 1 root root 3 2007-09-17 05:15 dvdrw -> hda

(...)

brw-rw---- 1 root cdrom 3, 0 2007-09-17 05:15 hda

(...)

brw-rw---- 1 root disk 8, 0 2007-09-17 05:15 sda

brw-rw---- 1 root disk 8, 1 2007-09-17 05:19 sda1

brw-rw---- 1 root disk 8, 2 2007-09-17 05:15 sda2

brw-rw---- 1 root disk 8, 3 2007-09-17 05:15 sda3

brw-rw---- 1 root disk 8, 4 2007-09-17 05:15 sda4

brw-rw---- 1 root disk 8, 5 2007-09-17 05:19 sda5

brw-rw---- 1 root disk 8, 6 2007-09-17 05:19 sda6

brw-rw---- 1 root disk 8, 7 2007-09-17 05:19 sda7

brw-rw---- 1 root disk 8, 16 2007-09-17 05:15 sdb

brw-rw---- 1 root disk 8, 17 2007-09-17 05:19 sdb1

Figura 3.16: Trecho de listagem do Diretório /dev com uso do udev

Ele permite que aplicações se registram para ofertar serviços a outras. De maneira similar,permite que aplicações clientes chequem quais serviços estão disponíveis. O HAL, comocomentado anteriormente, provê informações sobre os dispositivos aos gerenciadores deambiente. Assim, ele acessa informação do hardware, tornando seu acesso transparente,permitindo que um dispositivo possa ser utilizado imediatamente, dada a existência de su-porte ao mesmo.

Dessa maneira, a utilização de dispositivos tem-se tornado cada vez mais uma tarefatransparente ao usuário, graças ao udev, HAL e D-Bus. Note que para que isso ocorra, énecessário que o dispositivo seja suportado em Linux.

3.7 O DIRETÓRIO /ETC E CONFIGURAÇÕES BÁSICAS DO SISTEMA

A maior parte das configurações de uma instalação Linux pode ser encontrada no dire-tório /etc/. Isso vale também para configurações referentes ao hardware. Entretanto nãoexiste uma padronização para a configuração de vários itens, incluíndo-se, por exemplo, osserviços iniciados automaticamente e a configuração de rede.

Page 59: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 59

Algumas distribuiçoes costumam centralizar essas configurações em um diretório es-pecífico. RedHat e Fedora, por exemplo, utilizam o diretório /etc/sysconfig para umasérie de configurações. A Figura 3.17 apresenta mostra trechos de uma listagem dessediretório, obtida através do comando ls -lF. Segue-se uma breve descrição da utilidadedos arquivos aí localizados:

-rw-r--r-- 1 root root 39 Mai 13 2002 clock

-rw-r--r-- 1 root root 11 Mai 13 2002 desktop

-rw-r--r-- 1 root root 1331 Fev 22 2002 harddisks

-rw-r--r-- 1 root root 3273 Fev 5 14:05 hwconf

-rw-r--r-- 1 root root 139 Mai 13 2002 i18n

-rw-r--r-- 1 root root 952 Ago 27 2001 init

-rw------- 1 root root 1471 Nov 19 10:47 iptables

-rw-r--r-- 1 root root 20 Mai 13 2002 keyboard

-rw-r--r-- 1 root root 104 Nov 27 10:37 mouse

-rw-r--r-- 1 root root 56 Mai 13 2002 network

drwxr-xr-x 2 root root 4096 Mai 13 2002 network-scripts/

-rw-r--r-- 1 root root 38 Mai 13 2002 pcmcia

Figura 3.17: Trechos do Diretório /etc/sysconfig

clock: informações sobre o fuso horário da máquina.

desktop: qual o gerenciador de desktop (ex.: KDE, GNOME ou XFCE) padrão utilizado.

harddisks: configurações de acesso a discos rígidos (ex.: uso de DMA).

hwconf: informações e configurações diversas sobre dispositivos PCI e USB instalados.

i18n: informações para a localização (linguagem padrão) do sistema.

init: configurações de cor para o script de inicialização do sistema.

iptables: configuração de firewall através do iptables.

keyboard: configuração do teclado para o modo texto de uso do Linux.

mouse: qual o tipo de mouse utilizado.

network: habilitação do uso recursos de rede, o nome e o roteador utilizado pela máquina.

network-scripts: diretório contendo arquivos de configuração das diversas interfacesde rede da máquina.

pcmcia: configuração de cartões PCMCIA, utilizados principalmente em notebooks.

Outras distribuições, como o Gentoo, utilizam o diretório /etc/conf.d/, ilustrado naFigura 3.18, aprentando alguns dos principais arquivos de configuração do sistema, porexemplo: clock para configuração do fuso horário; consolefont para a fonte utilizadano modo texto; net para configuração de rede; e xdm para configuração do gerenciador de

Page 60: GERENCIAMENTO DE SISTEMAS LINUX

60 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

logins no ambiente gráfico. O Ubuntu não possui, por outro lado, um subdiretório em /etc

para configuração dos dispositivos, inserindo as principais diretamente no /etc ou em umsubdiretório específico a cada configuração.

-rw-r--r-- 1 root root 903 2007-06-23 10:49 clock

-rw-r--r-- 1 root root 808 2007-06-23 10:49 consolefont

-rw-r--r-- 1 root root 233 2007-06-18 22:41 cpufrequtils

-rw-r--r-- 1 root root 580 2007-03-23 08:09 gpm

-rw-r--r-- 1 root root 410 2007-02-10 15:41 hddtemp

-rw-r--r-- 1 root root 430 2007-07-24 22:45 hdparm

-rw-r--r-- 1 root root 78 2007-06-23 10:49 hostname

-rw-r--r-- 1 root root 715 2007-06-23 10:49 keymaps

-rw-r--r-- 1 root root 123 2007-06-23 10:49 local.start

-rw-r--r-- 1 root root 217 2007-06-23 10:49 local.stop

-rw-r--r-- 1 root root 336 2007-06-23 10:49 net

-rw-r--r-- 1 root root 542 2007-06-19 20:16 ntp-client

-rw-r--r-- 1 root root 553 2007-09-09 21:38 xdm

Figura 3.18: Trechos do Diretório /etc/conf.d

Esses exemplos servem para destacar um ponto onde existe pouca padronização. Issoocorre na verdade porque a configuração desses elementos não é feita diretamente nos ar-quivos, mas por aplicativos ou scripts chamados durante a inicialização do sistema. Assim,este texto irá dar preferência para a configuração via aplicativos de linha de comando quepor arquivos de configuração, sempre que houver falta de padronização quanto à localiza-ção e, principalmente, quanto ao formato do arquivo de configuração em si.

Após instalado o sistema, pode ser necessário configurar uma série de elementos bá-sicos do sistema, como a localização, fuso horário, entre outros. Boa parte dessas confi-gurações é feita em geral pela ferramenta de instalação ou por utilitários da distribuição. OFedora, por exemplo, possuía uma série de aplicativos denominados system-config-X,em que X representava um serviço ou item a ser configurado. O SUSE é clássico no usodo YaST (Yet another Setup Tool), uma ferramenta de configuração bastante poderosa. OUbuntu possui uma série de ferramentas gráficas para configurar os elementos essenciaisdo sistema.

O autor deste não é contra o uso dessas ferramentas para configuração do sistema,mas sim contra a dependência do uso das mesmas. O administrador que não puder repetira configuração sem o auxílio das ferramentas corre o risco de ter seu conhecimento postoà prova quando for efetuar a configuração em um ambiente que não possua a ferramentainstalada ou quando tiver que utilizar uma outra distribuição. Um conhecimento mais sólido

Page 61: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 61

é garantido entendendo onde as configurações efetuadas pelas ferramentas são armaze-nadas e como elas são chamadas pelo sistema.

Algumas configurações dependem de um serviço em específico. Esse é o caso doambiente gráfico, que depende de um servidor X-Window instalado. Também é o casode impressoras e scanners, que irão depender de aplicativos específicos, abordados maisà frente neste capítulo. Outras configurações dependem da configuração de variáveis deambiente ou da utilização de utilitários básicos do sistema.

A configuração do teclado em modo texto, por exemplo, é feito por meio do comandoloadkeys, ilustrado na Figura 3.19. Esse comando é parte integrante do pacote kbd,que também disponibiliza o comando setfont, também ilustrado na Figura 3.19. Os ma-pas de teclado e as fontes de console disponíveis podem ser encontrados nos diretórios/usr/share/keymaps e /usr/share/consolefonts, respectivamente.

$ loadkeys -u br-abnt2

Loading /usr/share/keymaps/i386/qwerty/br-abnt2.map.gz

$ setfont LatArCyrHeb-16+ -v

Loading 512-char 8x16 font from file

/usr/share/consolefonts/LatArCyrHeb-16+.psfu.gz

Loading Unicode mapping table...

Figura 3.19: Exemplo de Uso dos Comandos loadkeys e setfont

Para configuração do mouse no modo texto, é utilizado o comando gpm, disponível noaplicativo de mesmo nome. Esse pacote disponibiliza ainda um serviço e um arquivo deconfiguração, o que facilita o carregamento automático durante a inicialização. Um exem-plo de uso do comando gpm seria: gpm -m /dev/input/mice -t ps2, que carregao mouse disponível em /dev/input/mice, usando o barramento PS/2. O uso de Cabedestacar que as configurações feitas com loadkeys, setfont e gpm dizem respeito aomodo texto do Linux somente. A configuração do teclado e mouse no X-Window é feita àparte e será vista mais à frente neste capítulo.

3.8 CONFIGURAÇÃO DO LOCALE

Uma configuração essencial é a localização do sistema (locale), especificando a lín-gua padrão e a codificação de caracteres adotadas, se UTF-8, ISO8859-1, por exemplo.As aplicações em Linux geralmene são internacionalizadas, ao invés de traduzidas. Ouseja: ao invés de se obter uma versão de um dado programa em português, obtém-se oprograma original com mensagens e configurações para vários idiomas. Obviamente exis-

Page 62: GERENCIAMENTO DE SISTEMAS LINUX

62 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

tem aplicativos que ainda não foram internacionalizados e aplicativos que são realmentetraduzidos ou adaptados a um idioma ou país, caso do BrOffice.org, uma adaptação doOpenOffice.org ao território nacional. Além das mensagens traduzidas, o BrOffice.org, pos-sui alguns utilitários específicos ao Brasil, como dicionários, ferramentas de correção, etc.Mas, casos como esse são excessões e em geral os aplicativos de uso mais frequente sãointernacionalizados.

O locale do sistema não é configurado por meio de um aplicativo, mas sim por meiode variáveis de ambiente. Isso é feito dessa forma para permitir que em um dado sistemapossam ser executadas várias aplicações ao mesmo tempo com variáveis de ambiente dife-rentes. Ou seja, bastaria o usuário alterar localmente as variáveis de locale em um terminalpara ter a possibilidade de iniciar aplicativos com localização diferenciada de sua padrão.Por outro lado, o usuário deve se atentar que essas configurações não são permanentes,ou seja: é necessário redefinir os valores das variáveis a cada sessão. A configuração delocale é feita geralmente configurando-se as variáveis:

LC_COLLATE: altera o comportamento de funções utilizadas para comparar strings no al-fabeto local.

LC_CTYPE: define o comportamento de funções para classificar e manusear caracteres,como conversão para maiúsculas, por exemplo.

LC_MONETARY: define o comportamento da função localeconv(), que descreve a ma-neira como valores monetários são impressos, com detalhes sobre uso de vírgula ouponto decimal.

LC_MESSAGES: altera a localização das mensagens do sistema, informando ainda comofrases afirmativas ou negativas devem se parecer.

LC_NUMERIC: determina a forma de impressão de valores numéricos, informando sobre ouso de separadores de milhares, por exemplo.

LC_TIME: define o comportamento do locale para formatação de horários e datas, especi-ficando, por exemplo, se os horários serão impressas utilizando-se 12 ou 24 horas porpadrão.

Essas variáveis podem ser configuradas todas de uma única vez, usando-se para isso avariável geral LANG ou LC_ALL. A variável LANG especifica um valor padrão para variáveisde internacionalização que não estão configuradas ou são nulas. Já LC_ALL sobrescrevetodos os valores das variáveis de localização e tem precedência sobre as demais. Comoespecificado em (THE OPEN GROUP, 2004), ao se buscar uma configuração de localepara uma dada categoria, é retornado o valor que satisfaça primeiro uma das seguintescondições:

Page 63: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 63

1. Se a variável LC_ALL estiver configurada, então seu valor é utilizado.

2. Se uma variável de localização (LC_* estiver configurada para a categoria solicitada,então o valor dessa variável é utilizado.

3. Se a variável LANG estiver configurada, então seu valor é utilizado.

4. Se LANG não estiver configurada, ou estiver vazia, então é utilizado o locale padrãodo sistema operacional.

A Figura 3.20 mostra como obter as localizações disponibilizadas no sistema, comoobter a localização atual e como configurar uma determinada localização (utilizando o co-mando export). É recomendável que a configuração da localização seja chamada poralgum script de inicialização, o que geralmente é feito na grande maioria das distribuições.Caso a localização de interesse não esteja disponibilizada no sistema, outras podem sercriadas utilizando-se o comando localedef.

Uma observação adicional é que é recomendável, cada vez mais, a adoção do UTF-8(8-bit Unicode Transformation Format) como padrão de codificação de caracteres. Esseformato, apresentado inicialmente em (PIKE; THOMPSON, 1993) e especificado em (YER-GEAU, 2003), tem-se disseminado como padrão para várias aplicações. Isso ocorre porqueo UTF-8 consegue representar qualquer caracter universal padrão do Unicode6, sendo tam-bém relativamente compatível com o ASCII.

O UTF-8 é requerido como pela IETF (Internet Engineering Task Force)7 para ado-ção nos protocolos utilizados na internet (ALVESTRAND, 1998) e pelo IMC (Internet MailConsortium)8 nos aplicativos de e-mail, que devem ser capazers de ler e criar mensagensusando UTF-8 (INTERNET MAIL CONSORTIUM, 1998). Isso acaba por gerar toda umanecessidade pela adoção do UTF-8 como codificação padrão de caracteres, o que é reco-mendado fortemente por este autor.

Outro elemento de localização é a configuração do fuso horário (timezone), facilitandoa indicação correta da hora local. Essa configuração é feita atribuindo-se um valor para avariável de ambiente TZ. Por exemplo, para especificar o fuso horário na região sudeste,bastaria se executar o comando TZ=’America/Sao_Paulo’. Para localizar a zona ho-rária da região onde o usuário se encontra, pode-se utilizar o tzselect, um comandointerativo que vai refinando o fuso, a partir dos continentes até o Estado ou província emquestão.

6Unicode: http://www.unicode.org/.7IETF: http://www.ietf.org/.8IMC: http://www.imc.org/.

Page 64: GERENCIAMENTO DE SISTEMAS LINUX

64 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

$ locale -a

C

en_GB

en_GB.utf8

en_US

en_US.utf8

POSIX

pt_BR

pt_BR.utf8

$ export LANG=pt_BR.utf8 LC_ALL=pt_BR.utf8

$ locale

LANG=pt_BR.utf8

LC_CTYPE="pt_BR.utf8"

LC_NUMERIC="pt_BR.utf8"

LC_TIME="pt_BR.utf8"

LC_COLLATE="pt_BR.utf8"

LC_MONETARY="pt_BR.utf8"

LC_MESSAGES="pt_BR.utf8"

LC_PAPER="pt_BR.utf8"

LC_NAME="pt_BR.utf8"

LC_ADDRESS="pt_BR.utf8"

LC_TELEPHONE="pt_BR.utf8"

LC_MEASUREMENT="pt_BR.utf8"

LC_IDENTIFICATION="pt_BR.utf8"

LC_ALL=pt_BR.utf8

Figura 3.20: Uso do comando locale

3.9 CONFIGURAÇÃO DE REDE

A configuração de rede envolve, em geral, dois processos. Inicialmente é necessário in-formar ao kernel qual o módulo associado às placas de rede instaladas, se ele não tiver car-regado por padrão. Isso é feito, como já comentado, através do arquivo /etc/modules.confou de forma dinâmica pelo udev. O segundo passo é informar a configuração básica derede associada a esse dispositivo. Entre as informações necessárias, constam:

• nome da máquina no ambiente de rede;

• o roteador (gateway) utilizado para o acesso à internet;

• o endereço IP e a máscara de rede utilizada;

• endereço do servidor responsável pela resolução de nomes (DNS).

Page 65: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 65

Observe que, além das interfaces tradicionais, a máquina possui uma interface deloopback, com IP 127.0.0.1. Essa interface é usada para tráfego TCP ou UDP local.Mesmo que a máquina não esteja conectada a uma rede, essa interface é essencial paravários serviços, entre eles o servidor gráfico. Isso ocorre porque a arquitetura do Linux foimontada sobre TCP/IP. Assim, mesmo não estando conectado à internet, se a rede nãoestiver habilitada, vários serviços deixam de funcionar. Para isso, ao menos a interface deloopback precisa estar habilitada, o que geralmente ocorre por padrão.

A configuração de rede pode ser feito pelo uso do comando ifconfig ou ip addr,atribuindo-se um IP a uma interface de rede. Além disso, é necessário a configuração dasrotas da rede local, em especial a rota padrão, através do comando route ou ip. A últimainformação necessária à configuração da rede é o IP do servidor de nomes, utilizando oarquivo /etc/resolv.conf.

Um endereço IP, na versão 4, é um conjunto de 4 números de 0 até 255, separadospor ponto, ex: 192.168.4.1. Esse endereço é dividido em duas partes: o endereço darede e o endereço do host, sendo que primeira parte é o endereço da rede, e o restanteé o endereço do host. Existe uma versão recente do endereço IP, o IPv6, mas ainda nãoencontra-se totalmente difundido. De qualquer maneira, a configuração de rede ocorre deforma relativamente similar, apenas com endereços maiores, ou abreviados de acordo coma especificação do IPv6.

O tamanho da rede, ou o número de hosts que uma rede pode ter, depende do tama-nho do endereço da rede, e do tamanho do endereço do host. E para organizar melhor asredes, elas foram divididas em classes, definidas a partir do endereço da rede. As redesclasse ’A’ possuem endereços entre 1.0.0.0 e 127.255.255.255, sendo o endereçoda rede o primeiro número. As redes classe ’B’ possuem endereços entre 128.0.0.0

e 191.255.255.255, sendo o endereço da rede os dois primeiros números. As redesclasse ’C’ possuem endereços entre 192.0.0.0 e 223.255.255.255, e o endereço darede são os três primeiros números. Por fim, as redes classes ’D’ possuem endereçoentre 224.0.0.0 e 239.255.255.255 e as redes classes ’E’ possuem endereço entre240.0.0.0 e 255.255.255.255. As duas últimas são experimentais ou tem uso especí-fico, e por isso não definem nenhuma rede.

Os números 0 e 255 tem características especiais, e por isso não podem ser usadospara definir o endereço de um host. O primeiro define uma rede, e é chamado de endereçode broadcast. Então o IP 192.168.4.1 é um host da rede 192.168.4.0. O segundonúmero se refere a todos os hosts de uma rede. Portanto o IP 192.168.4.255 significatodos os hosts da rede classe C 192.168.4.0. A Tabela 3.1 ilustra esses conceitos.

Page 66: GERENCIAMENTO DE SISTEMAS LINUX

66 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Tabela 3.1: Divisão do endereço IP e Classes

Endereço Endereço da rede Endereço do host Classe192.168.4.1 192.168.4.0 1 C135.33.140.29 135.33.0.0 140.29 B97.44.150.32 97.0.0.0 44.150.29 A

Para suportar a grande variedade de hardware disponível no mercado, o protocoloTCP/IP define uma interface abstrata através da qual o hardware é acessado. Essa interfaceoferece um conjunto de funções idênticas para todos os tipos de hardware. Para cadahardware que se deseje utilizar na rede, uma interface correspondente deve estar presenteno núcleo do sistema.

O nome das interfaces varia de acordo com tipo de hardware a ela associado, comopor exemplo as interfaces ethernet chamam-se eth0, eth1 . . . ethn, as interfaces PPPchamam-se ppp0, ppp1 . . . pppn, assim por diante. Além disso, para que uma interfacepossa ser utilizada em uma rede, a mesma precisa ter um endereço IP associado a ela,o qual serve como sua identificação ao comunicar-se com o resto do mundo. Como co-mentado anteriormente, a configuração dos dispositivos de rede pode ser feito através docomando ifconfig ou ip, como ilustrado na Figura 3.21, onde # indica comentários e $

indica comandos executados em um terminal.

# Atribuíndo o IP 10.100.100.1 para eth0

$ ifconfig eth0 10.200.100.1 netmask 255.0.0.0

# Criando eth0:0 e definindo seu IP como 192.168.50.1

ifconfig eth0:0 192.168.50.1 netmask 255.255.255.0

# Definindo rota padrao

route add default gw 10.200.0.1

# Definindo uma rota estática para a rede 10.200.200.0

route add -net 10.200.200.0 netmask 255.255.255.0 gw 10.200.200.1

# Repetindo os comandos usando o comando ip apenas

$ ip addr add 10.100.200.1/8 dev eth0

$ ip addr add 192.168.25.1/24 dev eth0 label eth0:0

$ ip route add default via 10.100.0.1 dev eth0

$ ip route add 10.100.100.0/24 via 10.100.100.1 dev eth0

Figura 3.21: Exemplos de Uso dos Comando ifconfig e ip

Page 67: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 67

Como visto na Figura 3.21, o comando ip, parte integrante do pacote iproute2 éextremamente poderoso, substituindo, com grandes vantagens, os comandos ifconfig,route, além de outros. Com ele é possível definir firewall via filtro de pacotes, tunelamento,entre outros controles. Recomenda-se ao leitor a leitura de sua documentação (incluindosua página de manual) para maiores detalhes. Cabe observar ainda na Figura 3.21 quefoi criada uma inteface virtual eth0:0 para atribuição de dois endereços IPs no mesmodispositivo de hardware.

A rota padrão de uma rede é especificada indicando-se o gateway responsável pelaligação da rede local com a internet. Em geral, na maioria dos casos, essa é a únicarota que necessita ser especificada. Para se visualizar as rotas atuais, basta digitar o co-mando route ou ip route show. Para verificar a configuração de rede de uma dadainterface xxxn, é possível utilizar o comando ifconfig xxxn ou ip addr show xxxn.Caso esses comandos sejam executados sem especificar a interface, então será listado aconfiguração de todos os dispositivos de rede detectados pelo sistema.

O endereço IP de um host é um número de 32 bits, que muitas vezes não é fácil deser lembrado. Entretanto, é possivel chamar um host de “superhomem” ou “hamster”. Oprocesso de transformar esses nomes comuns em endereços IP é chamado resolução donome de um host. Existem formas diferentes de transformar nomes em IP. Uma delas, ea mais simples, é adicionar um IP associado a um nome no arquivo /etc/hosts. Esseprocesso, entretanto, é pouco eficiente, por ser estático e manual. O mecanismo maisutilizado para resolver nomes é o DNS (Domain Name System), um sistema hierárquicopara associação de nomes a endereços IPs. A configuração do servidor DNS da estação éfeita editando-se o arquivo resolv.conf, ilustrado na Figura 3.22.

# indica os domínios locais para buscas sem ser necessário

# digitar todo o domínio (ex.: www, ao invés de www.dominio.com.br)

search dominio.com.br

# servidor DNS primário

nameserver 200.131.101.21

# servidor DNS secundário (caso exista)

nameserver 200.131.102.1

Figura 3.22: Exemplo de Arquivo resolv.conf

Em algumas redes, as configurações apresentadas nesta seção são atribuídas de formadinâmica (endereço IP, gateway, servidor DNS). Isso é feito por meio do DHCP (DynamicHost Configuration Protocol), um protocolo para configuração dinâmica de estações. Nessecaso, basta que esteja instalado no computador um cliente DHCP e que ele seja iniciado.Em geral, a maior parte das distribuições atuais possui um cliente DHCP e inicializa-o au-

Page 68: GERENCIAMENTO DE SISTEMAS LINUX

68 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

tomaticamente caso não seja especificao um endereço de rede fixo para os dispositivos deredes instalados no computador.

3.10 MODEMS

A configuração de um Modem em Linux pode ser uma tarefa trivial ou uma verdadeirabatalha, dependendo de qual a marca e modelo do Modem. Isso ocorre porque a mai-oria dos Modems vendidos atualmente na verdade não são equipamentos baseados emhardware. Em geral, eles dependem de um software específico para funcionar adequa-damente. Como a maioria dos fabricantes só no ano passado começaram a abrir os olhospara o mercado de usuários Linux, o suporte a esse tipo de Modem ainda não é o desejado.

Os equipamentos que são baseados totalmente em hardware costumam ser chamadosde hardmodems. Esses dispositivos não precisam de nenhuma configuração especial, poiso Linux já associa a ele o dispositivo /dev/modem, faltando informar apenas os dados deconexão ao provedor.

Os modelos que necessitam de uso de software, por sua vez, são chamados de softmo-dems ou, como a maioria só funcionava inicialmente em Windows 9x, winmodems. Nessecaso, a primeira coisa a fazer é saber se o dispositivo já é suportado em Linux. Em algunscasos, o fabricante se nega a dar informações sobre o mesmo, o que dificulta imensa-mente esse suporte. Para saber se um dado softmodem é suportado, basta visitar http://www.linmodems.org/ ou http://www.idir.net/~gromitkc/winmodem.html.

No caso do softmodem ser suportado, em geral é necessário baixar os arquivos, compilá-los localmente, instalá-los e carregar os respectivos módulos, conforme processo descritona Seção 3.3. A partir daí, caso não haja falha, também basta informar os dados de cone-xão ao provedor.

A configuração do provedor pode ser feita de várias maneiras e com o uso de inúmerosaplicativos. Entre os aplicativos mais comuns em modo texto, merece destaque o wvdial.Em modo gráfico, recomenda-se o uso do vppp, KPPP, ou mesmo o linuxconf. Consultea documentação desses programas para maiores detalhes.

3.11 INTERFACE GRÁFICA

A interface gráfica mais utilizada em ambiente UNIX é denominada X Window, X WindowSystem, ou simplesmente X. O X é responsável, portanto, por oferecer uma GUI (GraphicalUser Interface) ao usuário, baseada em menus e botões, acessíveis a cliques do mouse.

Page 69: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 69

Em geral, o usuário Linux já possui experiência com outros ambientes gráficos, entretantoo X possui algumas características que o tornam totalmente peculiar.

A maior parte dessa peculariedade reside no fato que ele é uma ferramenta orientadaà rede. Dessa maneira é extremamente simples redirecionar a saída gráfica de uma apli-cação para outras máquinas. Em outras palavras: ferramentas como o Terminal Server daMicrosoft existem há muito tempo no mundo UNIX e de uma forma muito melhor. Assim,limitado apenas pela velocidade e largura de banda da rede, é possível iniciar uma se-ção gráfica na máquina local, acessar um computador remoto, iniciar um programa gráficonesse computador remoto, mas visualizando-o na máquina local.

Uma observação a ser feita é que o servidor X reside na máquina local do usuário. Ele“serve” uma interface gráfica que pode ser usada por clientes remotos. Dada a forma comoo X trabalha, algumas de suas características destacam-se:

1. X pode ser configurado para utilizar um servidor de fontes, para controlar a renderi-zação de fontes. Dessa maneira, é possível ter uma única máquina como servidorade fontes em um ambiente de redes, simplificando o processo de instalação e ma-nutenção de fontes. Em ambientes comuns, entretanto, para evitar tráfego de rede,recomenda-se o uso de servidores locais, o que é feito na maioria das distribuições.

2. Por causa da habilidade de executar aplicativos gráficos remotos, pode ser necessáriocuidados extras com a segurança. Isso pode ser conseguido com uso simples defirewall.

3. X é extremamente flexível, permitindo combinações ilimitadas de configuração do am-biente de trabalho, aumentando o grau de personalização de uso da máquina. Alémdisso, é uma ferramenta poderosa para administração gráfica remota, bem como paraconfiguração de terminais.

4. Obviamente, por causa das características de rede, X tende a ser levemente maislento que outros ambientes GUI, dado que é processado através de um protocolo.Em hardware moderno isso é imperceptível mesmo com ferramentas de análise dedesempenho.

Como X pode ser usado em rede, uma máquina precisa saber onde ela irá exibir apli-cações gráficas. Isso é feito através da variável de ambiente DISPLAY. Em geral, clientesSSH configuram essa variável para o usuário. Caso não esteja configurada basta digitar:

# export DISPLAY=host:dispnum

Page 70: GERENCIAMENTO DE SISTEMAS LINUX

70 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Nesse caso host é o nome da máquina onde a aplicação será exibida e dispnum onúmero do display gráfico. Geralmente displaynum vale 0, mas em máquinas com maisde um servidor X rodando, pode receber valores maiores. Para iniciar um segundo ambientegráfico, basta digitar:

startx -- :1 vt8

Isso iniciará o X no terminal virtual 8. Em Linux, é possível ter vários consoles em umamesma máquina. Os consoles de 1 a 6 são consoles de modo texto. O console 7, porpadrão, é utilizado para o ambiente gráfico primário. Para ir de um console a outro basta di-gitar Ctrl+Alt+F#, onde # é o número do console. Assim, bastaria digitar Ctrl+Alt+F7para ir ao primeiro ambiente gráfico e Ctrl+Alt+F8 para ir ao segundo, desde que eleesteja ativado.

Observe que, como os gerenciadores de janela suportam múltiplos ambientes de tra-balho, não faz muito sentido utilizar dois ambientes gráficos. A única excessão para isso équando se quer iniciar um segundo ambiente gráfico para outro usuário ou quando se queriniciar uma nova sessão com outra resolução gráfica que não a padrão. Como será vistono Capítulo 5 é possível configurar a máquina para iniciar automaticamente em ambientegráfico. Caso isso não tenha ocorrido, entretanto, basta executar startx no prompt.

Para controlar o acesso remoto, basta utilizar-se o comando xhost. De uma forma geral“xhost +” permite que qualquer máquina exiba programas gráficos no servidor X local e“xhost -” nega esse acesso a qualquer máquina e usuário que não o que está logado noambiente gráfico. Note que o comando xhost efetua essas configurações individualmente.Caso pretenda-se uma configuração geral para todos os usuários, o ideal é usar recursosde firewall.

3.11.1 Configuração do X

A implementação do X utilizada preferencialmente no Linux é a X.Org, disponível emhttp://www.x.org/. Essa implementação foi derivada do XFree869, por conflito entreos desenvolvedores a respeito da metodologia de desenvolvimento e mudança no licencia-mento do XFree86 em versões mais recentes. O desenvolvimento de uma versão própriada Fundação X trouxe um aceleramento ao processo de desenvolvimento, melhorando emmuito o uso de interface gráfica no Linux. Com o X.Org, é possível:

Múltiplos Displays: o usuário pode instalar várias placas de vídeos no computador usar oX para para criar um único ambiente virtual que transpõe os displays das placas.

9XFree86: http://www.xfree86.org/.

Page 71: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 71

Estrutura Modular: O X.Org, como a versão 4 do XFree86, utiliza um único servidor, quecarrega um módulo associado à placa. Essa estrutura, similar ao kernel, permite umamaior flexibilidade, pois pode incorporar módulos compilados, desenvolvidos pelosfabricantes das placas gráficas.

Suporte ao DDC: O canal de display de dados (DDC – Data Display Channel) é um proto-colo para comunicação em máxima velocidade entre placas de vídeos, driver da placade vídeo e monitores. O suporte ao DDC foi inserido com o XFree86 4 e incorporadoao X.Org.

Suporte à Fontes True Type: XFree86 4 adicionou suporte nativo à fontes True Type, re-curso também incorporado ao X.Org.

Suporte DRI: DRI (Direct Rendering Infraestructure) é um padrão para uso acelerado dehardware de vídeo. O uso de DRI permite que aplicações Linux tirem o máximo deproveito de placas gráficas com aceleração 3D (em especial as que oferecem suporteOpenGL).

Para o administrador, além dessas vantagens, a melhor de todas é um arquivo de con-figuração bastante amigável. Esse arquivo, localizado em /etc/X11/xorg.conf é com-posto, em geral, das seguintes seções:

ServerLayout: Essa seção configura aspectos gerais do servidor, como dispositivos deentrada e saída. Grandes chances existem de nada precisar ser alterado nessa seçãoa partir de uma configuração padrão.

Module: Nessa seção, ilustrada na Figura 3.23, são informados os módulos que o servidordeve carregar, como o suporte DRI ou ao Video4Linux. Também não é preciso modi-ficar muita coisa, exceto se DRI não está habilitado e inseriu-se uma placa com essesuporte

DRI: Aqui são definidas as permissões de acesso ao suporte DRI. Uma simples linha nessaseção, com a informação “Mode 0666”, permite acesso a todos os usuários.

Files: Essa seção inclui o caminho de diretórios importantes ao X. O mais importante é ocaminho das fontes. Caso essa seção esteja como a da Figura 3.24 é porque o X estáusando um servidor de fontes local, na porta 7100.

InputDevice: Nessa seção, são configuradas as informações sobre teclado e mouse. AFigura 3.25 mostra uma configuração típica para teclado ABNT2 e mouse PS/2. Parateclado internacional, basta remover a linha XkbModel e trocar a linha XkbLayout

de br para us-intl.

Device: Essa seção informa o driver utilizado pela placa de vídeo. A Figura 3.26 mostraum exemplo dessa seção, configurada para uma ATI Radeon.

Page 72: GERENCIAMENTO DE SISTEMAS LINUX

72 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Section "Module"

Load "dbe" # Double-buffering

Load "GLcore" # OpenGL support

Load "dri" # Direct rendering infrastructure

Load "glx" # OpenGL X protocol interface

Load "extmod" # Misc. required extensions

Load "v4l" # Video4Linux

# Load "record" # X event recorder

# You only need the following two modules if you do not use xfs.

# Load "freetype" # TrueType font handler

# Load "type1" # Adobe Type 1 font handler

EndSection

Figura 3.23: Seção Module do /etc/X11/xorg.conf

Section "Files"

FontPath "unix/:7100"

EndSection

Figura 3.24: Seção Files do /etc/X11/xorg.conf

Section "InputDevice"

Identifier "Keyboard0"

Driver "keyboard"

Option "XkbModel" "abnt2"

Option "XkbLayout" "br"

EndSection

Section "InputDevice"

Identifier "Mouse0"

Driver "mouse"

Option "Device" "/dev/mouse"

Option "Protocol" "PS/2"

Option "Emulate3Buttons" "on"

Option

EndSection

Figura 3.25: Seção InputDevice do /etc/X11/xorg.conf

Page 73: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 73

Section "Monitor"

Identifier "Samsung SyncMaster 753dfx"

VendorName "Unknown"

ModelName "Unknown"

HorizSync 30-70

VertRefresh 50-160

Option "dpms"

EndSection

Section "Device"

Identifier "ATI|Radeon VE QY"

Driver "radeon"

BoardName "Unknown"

EndSection

Figura 3.26: Seções Monitor e Device do /etc/X11/xorg.conf

Monitor: Essa seção, também ilustrada na Figura 3.26, configura as especificações domonitor. As principais especificações são a freqüência horizontal de sincronização e ataxa de atualização vertical. Essas informações são disponibilizadas com os manuaisdos monitores.

Screen: Na seção Screen é configurada a resolução e o número de cores utilizadas. A Fi-gura 3.27 mostra um exemplo de configuração utilizando a placa de vídeo e o monitorconfigurados na Figura 3.26.

Section "Screen"

Identifier "Screen0"

Device "ATI|Radeon VE QY"

Monitor "Samsung SyncMaster 753dfx"

DefaultDepth 24

Subsection "Display"

Depth 24 16

Modes "1400x1050" "1280x1024" "1024x768" "800x600"

EndSubSection

EndSection

Figura 3.27: Seção Screen do /etc/X11/xorg.conf

Page 74: GERENCIAMENTO DE SISTEMAS LINUX

74 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Maiores detalhes sobre a edição do arquivo /etc/X11/xorg.conf podem ser en-contradas na respectiva página de manual: man xorg.conf e nas páginas de manuaisdos módulos. Usuários de placas SiS, por exemplo, podem obter auxílio usando man sis.Também é possível utilizar o xorgconfig, ou xorgcfg, ferramentas de configuração doX.

3.12 IMPRESSORAS

Por motivos históricos, programas UNIX utilizam impressoras fazendo a consideraçãoque ou a impressora não possui formatação alguma (portanto só imprime caracteres detexto) ou então a impressora disponível é uma impressora PostScript. PostScript é umalinguagem de descrição de página (PDL – Page Description Language), criada pela Adobee descrita em (ADOBE SYSTEMS INCORPORATED, 1999). A maioria das impressorasPostScript utilizam um interpretador licenciado pela Adobe. Outra PDL bastante conhecidatambém é PCL (de Printer Command Language), desenvolvida pela HP e utilizada quaseque exclusivamente em suas impressoras. Com raríssimas excessões, aplicações UNIXnão conseguem gerar saída PCL, portanto é necessário um estágio intermediário de con-versão.

O leitor talvez se questione: porque PostScript? Inicialmente, a grande maioria das im-pressoras laser eram caríssimas e suportavam essa PDL. Assim, a linguagem PostScriptparecia apontar como uma padronização futura para impressoras, simplificando a tarefa.Isso acabou não acontecendo e os modernos SOs acabam por colocar uma camada in-termediária entre impressora e aplicação: a aplicação aciona comandos para imprimir emuma impressora genérica e o SO converte esses comandos em comandos próprios da im-pressora.

No mundo UNIX, essa impressora genérica é uma impressora PostScript. Caso a im-pressora do usuário seja inclusive PostScript é possível enviar arquivos PS diretamentepara impressora. Como a grande maioria das impressoras de início de linha não aceitamessa linguagem, é necesário converter o arquivo PostScript gerado pela aplicação para umformato compreensível pela impressora. Isso é feito utilizando-se um “filtro”.

Para ser mais exato, considera-se um filtro qualquer programa que intermedie o pro-cesso de impressão, seja entre a aplicação e o gerenciador de impressão, seja entre ogerenciador de impressão e a impressora. Assim, por exemplo, existem filtros para conta-bilidade de impressão, bem como filtros para converter de um formato para PostScript.

Assim, dependendo dos filtros instalados, é possível imprimir diretamente um arquivoPDF. O arquivo PDF é convertido por um filtro, como o apsfilter ou magicfilter, em

Page 75: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 75

um arquivo PS que é enviado ao gerenciador de impressão. Esse gerenciador, tambémchamado de “spooler”, utiliza-se de outro filtro para converter o arquivo PS em comandospróprios da impressora ou o envia diretamente, no caso de uma impressora PostScript.

Um spooler exerce outras funções, obviamente: ele é responsável por armazenar traba-lhos de impressão, de forma que é possível mandar um arquivo para impressão, mesmo quea impressora já esteja imprimindo. Assim, o spooler recebe, armazena e prioriza trabalhosde impressão, enviando-os posteriormente para a impressora.

Como PostScript é a linguagem nativa do sistema de impressão do UNIX, o administra-dor irá precisar de um filtro que converta um arquivo nesse formato para a linguagem daimpressora. Apesar que atualmente existem inúmeros filtros para isso, a maioria das im-pressoras irá utilizar um filtro baseado no uso do Ghostscript. Ghostscript é uma aplicaçãomultiplataforma que disponibiliza uma série de ferramentas e bibliotecas para trabalhar comarquivos PostScript. Todas as distribuições Linux direcionadas a um usuário final disponibi-lizam o Ghostscript em suas mídias de instalação.

Para saber se uma impressora é suportada em Linux (e a maioria o é), é recomendávelvisitar a OpenPrinting10, antiga Linux Printing. O leitor irá descobrir que essa organizaçãotem um esforço forte de disponibilização de filtro (ou drivers) para a maioria das impressorasem uso atualmente. O esforço de criar uma camada à parte do Ghostscript para a confi-guração desses filtros recebe o nome de Foomatic. Sabendo da existência do driver, restaagora a escolha do spooler. Apesar de não serem os únicos, havendo inclusive alternativascomerciais, os spoolers mais utilizados são o BSD lpd, o LPRng e o CUPS.

O lpd (de Line Print Daemon) é a alternativa tradicional e vem aos poucos sendo subs-tituído pelo LPRng ou pelo CUPS, à escolha das distribuições ou do administrador. Observeque a grande maioria das impressoras de rede ou gerenciadores de impressão utilizam, abem da verdade, uma implementação do lpd. O lpd consiste, principalmente, dos se-guintes aplicativos: o lpd (o servidor), o lprm (para remover impressões da fila), o lpq

(para listar a fila de impressões) e o lpc para controlar a fila (reordenando-a, por exemplo)ou impressora. Para enviar arquivos para a impressora, existe ainda o comando lpr. AFigura 3.28 ilustra o exemplo de envio de um trabalho para a impressora, a listagem dostrabalhos pendentes e o cancelamento de uma impressão.

A opinião dos autores deste texto é que o administrador não deve fazer uso do BSDlpd por vários motivos, entre eles o fato desse spooler possuir mais brechas de segurançaque as alternativas. Essa opinião também é defendida em (STANFIELD; SMITH, 2001) e(NEMETH et al., 2001). Assim, a escolha deve recair sobre o LPRng ou o CUPS.

10OpenPrinting: http://www.linux-foundation.org/en/OpenPrinting/.

Page 76: GERENCIAMENTO DE SISTEMAS LINUX

76 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

# lpr admsis.ps

# lpq

hp4l is ready and printing

Rank Owner Job File(s) Total Size

active joukim 39 admredes.ps 1823744 bytes

1st joukim 40 admsis.ps 4931521 bytes

# lprm 40

#lpq

hp4l is ready and printing

Rank Owner Job File(s) Total Size

active joukim 39 admredes.ps 1823744 bytes

Figura 3.28: Exemplo de Comandos de Impressão

O LPRng é um spooler bastante recente baseado numa reescrita do BSD lpd. Assim,ele é altamente compatível com esse sistema, aceitando os comandos citados anterior-mente. Com a reescrita, entretanto, o LPRng (de Line PRinter new generation tornou-seum servidor mais estável e seguro (por poder ser executado sem poderes de root) e seusaplicativos oferecem novos recursos ao administrador e ao usuário.

Observe que tanto o lpd quanto o LPRng seguem o Line Printer Daemon Protocol,apresentado em (III, 1990). Uma característica interessante do LPRng é que ele é umservidor mais leve que o BSD lpd e permite redirecionamento de filas de impressão emúltiplas impressoras em uma única fila. O LPRng pode ser obtido em http://www.

lprng.com/.

Quanto à configuração de impressoras, tanto o LPRng quanto o BSD lpd geralmenteutilizam um arquivo denominado /etc/printcap. Obviamente o LPRng suporta maisopções para esse arquivo. A Figura 3.29 mostra um exemplo desse arquivo e a Tabela 3.29explica as opções mais comuns.

Note que o arquivo /etc/printcap usa ‘:’ para separar os campos. Além disso as li-nhas lp|hp4l|hp e sc|stylus|epson são nomes das impressoras instaladas. Observeque, dessa maneira, uma impressora pode ser ter vários nomes. A impressora de nome lp

é assumida como sendo a impressora padrão. Caso não haja uma impressora com essenome, é utilizada a primeira na fila do /etc/printcap. Uma forma melhor de configurara impressora é utilizar-se do printtool, disponibilizado com o LPRng.

Page 77: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 77

lp|hp4l|hp:\

:sd=/var/spool/lpd/hp4l:\

:mx#0:\

:sh:\

:lp=/dev/lp0:\

:if=/var/spool/lpd/hp4l/filter:

sc|stylus|epson:\

:sd=/var/spool/lpd/stylus:\

:mx#0:\

:sh:\

:rm=server3:\

:rp=printer1:\

:if=/var/spool/lpd/stylus/filter:

Figura 3.29: Um Exemplo de Arquivo /etc/printcap

Tabela 3.2: Variáveis do Arquivo /etc/printcap

Nome Tipo Significado

sd string diretório de spoollf string arquivo de loglp string nome do dispositivo de impressãoaf string arquivo de contabilidaderm string nome da máquina remota onde está a impressorarp string nome da impressora na máquina remotaof string filtro de saídaif string filtro de entradamx número tamanho máximo do arquivo impresso (0 = infinito)sh booleano suprimir cabeçalho

Uma alternativa totalmente radical para impressão é o CUPS (Common Unix PrintingSystem). Disponível em http://www.cups.org/, o CUPS não utiliza o /etc/printcappara configuração e usa novos protocolos de rede para impressão. Para impressão em rede,o CUPS implementa e utiliza a versão 1.1 do IPP (Internet Printing Protocol), descritos em(HERRIOT, 2000), (HASTINGS, 2000) e (HASTINGS et al., 2001).

Como comentado em (SWEET, 2002), o IPP extende o protocolo HTTP, descrito em(FIELDING et al., 1999), para adicionar suporte à impressão remota. Além disso, o IPP estáse tornando bastante aceito pela indústria de impressoras e servidores de impressão. O

Page 78: GERENCIAMENTO DE SISTEMAS LINUX

78 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

IPP é protocolo para impressão e gereciamento de impressão sobre IP, podendo ser usadolocalmente ou via internet. Uma diferença drástica do IPP sobre padrão POSIX, entretanto,é que ele oferece um suporte forte a controle de acesso, autenticação e encriptação (oCUPS já oferece suporte TLS). Uma observação final a ser feita sobre o IPP é que ele foidesenvolvido para se tornar padrão em vários SOs11. Por esses e outros motivos, a maiorparte da equipe técnica do ARL prefere o CUPS em seus sistemas.

Pelo fato de usar o HTTP como base, a configuração do CUPS e das impressoras éextremamente semelhante à configuração do servidor Web, o Apache. Uma forma extre-mamente prática de configurá-lo é apontar um navegador para a porta utilizada pelo CUPS(a padrão é 631). Em algumas instalações é disponibilizado o aplicativo cupsconfig

ou cupswebconfig que nada mais faz do que chamar o navegador padrão no endereçohttp://localhost:631/. A Figura 3.30 apresenta a tela principal de configuração doCUPS. Observe, que se o servidor CUPS permitir isso, é possível, inclusive, fazer configu-ração remota.

É importante observar na Figura 3.30 que é possível criar classes de impressoras.Dessa maneira um trabalho enviado para imprimir numa classe será direcionado para aprimeira impressora livre dessa classe. O gerenciamento de impressoras também não écomplicado, como mostra a Figura 3.31.

Além da configuração por navegador, existem aplicativos que permitem configuraçãográfica do CUPS, podendo ser destacados o KUPS (http://kups.sourceforge.net)e o XPP (http://cups.sourceforge.net/xpp/). Entretanto, como já comentado, aconfiguração básica do CUPS segue o formato do Apache, não sendo complicado editá-lausando apenas um editor de textos.

Os arquivos de configuração do CUPS ficam disponibilizados no diretório /etc/cups.Os mais importantes são os arquivos /etc/cups/cupsd.conf, que configura o servi-dor, e /etc/cups/printers.conf, responsável pela configuração das impressoras. Noarquivo /etc/cups/cupsd.conf é possível informar os diretórios utilizados pelo CUPS,bem como impor controle de acesso de forma semelhante ao Apache. Mais detalhes so-bre o controle de acesso do Apache (e que podem ser usados no CUPS) serão vistos em(UCHÔA, 2008).

Um arquivo de configuração de impressoras no CUPS é mostrado na Figura 3.32. Aconfiguração de uma impressora inicia-se com <Printer nome_da_impressora> e éterminada com </Printer>. No caso de impressora padrão, é possível iniciar essa confi-guração também com <DefaultPrinter nome_da_impressora>. A Tabela 3.3 explicaos principais campos utilizados nessa configuração.

11O IPP é suportado, inclusive, em sistemas não-UNIX, como o Windows 2000.

Page 79: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 79

Figura 3.30: Configurando o CUPS via Navegador

Tabela 3.3: Variáveis do Arquivo /etc/cups/printers.conf

Nome Tipo Significado

Info string nome descritivo da impressoraLocation string localização física da impressoraDeviceURI string localização em URI do dispositivo associado à

impressoraPageLimit número limite de páginas (0 = infinito)KLimit número limite de tamanho do arquivo (0 = infinito)

Uma atenção especial deve ser dada ao campo DeviceURI. É ele que informa a locali-zação da impressora, tanto localmente como em rede, utilizando URIs (Universal Resource

Page 80: GERENCIAMENTO DE SISTEMAS LINUX

80 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Figura 3.31: Configurando Impressora no CUPS

Indentifiers), uma forma geral de URLs. Em rede, o campo DeviceURI especifica não só alocalização, mas também o protocolo utilizado na comunicação de dados.

Para saber quais os protocolos utilizados, basta executar o comando lpinfo -v. Aopção ‘-v’ informa os dispositivos suportados. Os mais comuns são o ipp (para impres-soras em rede, nesse caso também poderia ser usado o http), o lpd (para impressorasem servidores UNIX), o paralel (para impressoras paralelas), o usb (para impressorasUSB) e o smb (para impressoras em máquinas Windows). A Figura 3.33 mostra exemplosde URIs que poderiam ser usadas nesse campo.

Após adicionar a impressora no arquivo /etc/cups/printers.conf é necessáriocopiar um arquivo PPD associado a essa impressora para o diretório /etc/cups/ppd.Um PPD é um arquivo, proposto pela Adobe, para descrição de impressoras PostScript(PPD: PostScript Printer Description File), descrito em (ADOBE SYSTEMS INCORPORA-

Page 81: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 81

# Printer configuration file for CUPS v1.1.14

# Written by cupsd on Qui 12 Dez 2002 10:43:36 GMT

<DefaultPrinter hp4l>

Info hp4l a4

Location Impressora Local

DeviceURI parallel:/dev/lp0

State Idle

Accepting Yes

JobSheets none none

QuotaPeriod 0

PageLimit 0

KLimit 0

</Printer>

Figura 3.32: Arquivo /etc/printers.conf

parallel:/dev/lp1

usb:/dev/usb/lp0

file:/path/to/filename.prn

http://hostname:631/ipp/

ipp://hostname/ipp/

lpd://hostname/queue

smb://server/sharename

smb://user:pass@workgroup/server/sharename

Figura 3.33: Exemplos de DeviceURI

TED, 1996). Atualmente, principalmente no caso do CUPS, é utilizado em qualquer impres-sora. Esse arquivo irá informar ao CUPS a configuração da impressora (a resolução, o filtroutilizado, etc.). O pacote cups-drivers oferece PPDs para a maioria das impressoras emuso atualmente.

Além da edição manual, uma opção mais fácil é utilizar o comando lpadmin, com aseguinte sintaxe:

/usr/sbin/lpadmin -p printer -E -v device -m ppd

Nesse caso, printer é o nome da impressora. A opção -E informa que é para habilitá-la. Com as opções -v e -m são informadas, respectivamente, a URI e o PPD da impressora

Page 82: GERENCIAMENTO DE SISTEMAS LINUX

82 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

em questão. Maiores detalhes podem ser obtidos em (EASY SOFTWARE PRODUCTS,2002a) ou na página de manual desse comando.

Outro comando importante no CUPS é o lpoption que mostra ou configura uma dadaimpressora. A Figura 3.34 apresenta dois exemplos de uso desse comando: um para con-figurar o tamanho do papel e outro para listar as opções correntes. Maiores detalhes sobreesse comando podem ser obtidos em sua página de comando ou em (EASY SOFTWAREPRODUCTS, 2002c).

# lpoptions -php4l -o PageSize=A4

# lpoptions -php4l -l

HPLJDensity/Density: 1 2 *3 4 5

Economode/Economy mode: Economy *Standard

Dithering/Floyd-Steinberg Dithering: FSDithered *Normal

Manualfeed/Manual Feed of Paper: Off On

Resolution/Resolution: 75 150 *300 600

REt/REt Setting: Dark Light *Medium Off

InputSlot/Media Source: Envelope Manual *Default Tray1 Tray2 Tray3 Tray4

PageSize/Page Size: 11x17 A3 *A4 A5 B5 Env10 EnvISOB5 EnvC5 EnvDL

EnvMonarch Executive Legal Letter

PageRegion/PageRegion: 11x17 A3 A4 A5 B5 Env10 EnvISOB5 EnvC5 EnvDL

EnvMonarch Executive Legal Letter

Figura 3.34: Exemplos de Uso do lpoptions

Ainda sobre o CUPS, é importante observar que ele oferece um suporte aos coman-dos lpd. Assim, o usuário pode continuar utilizando comandos como lpr, lprm e lpq.Para maiores detalhes sobre o CUPS, consulte (SWEET, 2002), (EASY SOFTWARE PRO-DUCTS, 2002a) e (EASY SOFTWARE PRODUCTS, 2002c).

3.13 GRAVADORES DE CDS

O suporte a gravadores de CDs em Linux é extremamente simples. Caso o gravadorseja um dispositivo SCSI, não é necessário fazer nada: o dispositivo já deve estar habi-litado. Caso o dispositivo seja IDE, o que é mais comum, pode ser necessário habilitaremulação SCSI para esse dispositivo. Isso é necessário porque o programa de gravação(o cdrecord) utilizava comandos SCSI para fazer a gravação. As versões mais recentesdesse software já não possuem essa limitação.

Page 83: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 83

Existem duas maneiras de habilitar a emulação SCSI. Uma é informar ao kernel, namomento do boot, que aquele dispositivo IDE deve ser tratado como se fosse SCSI. As-sim, por exemplo, se o gravador de CDs é o dispositivo /dev/hdc, basta acrescentarhdc=ide-scsi na linha de inicialização. A Seção 5.9 apresenta exemplos práticos decomo essa linha pode ser inserida na configuração do LILO ou do GRUB. Essa alternativaé feita em sistemas RedHat, desde a versão 7.3.

Outra forma é carregar o módulo ide-scsi. Até a versão 8.0 do Conectiva, essaera a única forma de conseguir fazer o dispositivo ser habilitado. A alternativa anterioré preferível, porque corre-se menos riscos de emulação SCSI ser habilitada a drivers deCD-ROM (quando for o caso da máquina ter gravador e leitor de CDs). Para carregar omódulo automaticamente, no momento de inicialização da máquina, basta incluir a linha/sbin/modprobe ide-scsi no arquivo /etc/rc.d/rc.local.

Para saber se o gravador já está habilitado basta executar em um terminal o comandocdrecord -scanbus. Caso esteja, ele deverá informar o número do dispositivo e suadescrição, como mostra a Figura 3.35. Caso esteja tudo funcionando, o processo de grava-ção pode ser feito com o uso dos utilitários mkisofs e cdrecord. Esses utilitários são emmodo texto, caso prefira utilitários gráficos, podem ser usados o xcdroast ou o gcombust.Consulte a documentação desses comandos para maioires detalhes.

# cdrecord -scanbus

Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jörg Schilling

Linux sg driver version: 3.1.24

Using libscg version ’schily-0.5’

scsibus0:

0,0,0 0) ’HL-DT-ST’ ’CD-RW GCE-8320B ’ ’1.01’ Removable CD-ROM

0,1,0 1) *0,2,0 2) *0,3,0 3) *0,4,0 4) *0,5,0 5) *0,6,0 6) *0,7,0 7) *

Figura 3.35: Exemplo de Uso do cdrecord

Page 84: GERENCIAMENTO DE SISTEMAS LINUX

84 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

3.14 PLACAS DE SOM

A configuração de placas de som é feita no arquivo modules.conf. Nesse arquivodevem ser informados os módulos a serem carregados e quais as opções utilizadas. Umaobservação a ser feita é que existem atualmente duas tecnologias gratuitas de som para Li-nux: a OSS (http://www.opensound.com/) e a ALSA (http://www.alsa-project.org/). Open Sound System(OSS) foi a primeira tentativa em unificar a arquitetura de somem UNIX. A maioria das distribuições vem com suporte nativo à OSS.

Já a ALSA (Advanced Linux Sound Architecture) tenta ser uma estrutura avançada desom, mas exclusiva ao Linux. A ALSA proporciona várias vantagens sobre o OSS (comodrivers modulares e uma estrutura mais segura contra falhas) e, inclusive, suporta aplica-ções baseadas em OSS. Assim, caso pretenda-se um melhor desempenho em termos desom, ALSA é uma melhor alternativa. Nesse caso, a configuração por ser feita por meio doutilitário alsaconf, integrante do pacote lsa-utils.

3.15 OUTROS DISPOSITIVOS

A configuração de dispositivos USB depende do tipo de dispositivo em questão. Seé uma impressora, por exemplo, utiliza-se o procedimento normal para configuração deimpressoras, informando-se o dispositivo local (no caso, /dev/usb/lp0). Recomenda-se que o leitor visite http://www.linux-usb.org/ para saber se o seu dispositivo já ésuportado. Outra visita recomendada é ao site http://linuxusbguide.sourceforge.net/, que possui informações gerais sobre uso USB em Linux. Os autores desta apostilaacreditam que em pouco tempo a maioria dos dispositivos USB devem ser suportados semproblemas em Linux.

No caso específico de scanners, a maioria dos dispositivos SCSI é suportado peloSANE (Scanner Access Now Easy) sem problemas. Na página do SANE, http://www.mostang.com/sane/, pode ser encontrada uma relação dos dispositivos suportados. Casoseja suportado pelo SANE, para verificar se ele pode ser usado, basta utilizar o aplicativosane-find-scanner. Se ele for informado, pode ser acessado via aplicações gráficas,como o Gimp.

Um auxílio extremamente útil na configuração de qualquer equipamento em Linux sãoos HOWTOs. Esses pequenos manuais, disponíveis em http://www.tldp.org, ofere-cem ajuda para assuntos específicos. Esses documentos oferecem auxílio valoroso para aresolução de diversos problemas, inclusive o de instalação de dispositivos. A leitura des-

Page 85: GERENCIAMENTO DE SISTEMAS LINUX

Configuração de Dispositivos 85

ses manuais, feitos a partir da experiência de vários usuários com o mesmo problema, sãoessenciais a uma boa administração Linux.

Page 86: GERENCIAMENTO DE SISTEMAS LINUX

86 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Page 87: GERENCIAMENTO DE SISTEMAS LINUX

4SISTEMA DE ARQUIVOS

4.1 COMENTÁRIOS INICIAIS

Quando do desenvolvimento do Linux, Linus Torvalds tinha a pretensão de evitar proble-mas encontrados durante seu uso do Minix. Dessa maneira, o sistema de arquivos adotadono Linux baseia-se numa camada virtual (VFS – Virtual FileSystem), construída para su-portar múltiplos sistemas de arquivos. Essa estrutura permitiu ao Linux um gerenciamentopoderoso desse recurso.

O objetivo principal deste capítulo é apresentar ao leitor a filosofia existente sob o usode arquivos em Linux, incluíndo-se: estrutura de diretórios, criação uso e manutenção departições. Além disso, ele apresenta os vários tipos de arquivos usados nos sistemas dearquivos compatíveis com o Linux.

4.2 ESTRUTURA DE DIRETÓRIOS

Um problema prático existente no início do desenvolvimento do Linux era referente aouso do sistema de arquivos. Dessa maneira, administradores e distribuições nem sem-pre utilizavam o mesmo diretório para colocar um dado arquivo. Isso gerava um esforçoadicional na administração dos sistemas, dada a confusão criada. Em agosto de 1993,Olaf Kirsh, um programador postou uma mensagem em um dos grupos de discussão sobreLinux, discutindo a possibilidade de criação de um padrão para a estrutura de diretórios.

Em fevereiro de 1994, a primeira versão desse padrão foi disponibilizada sob o nomede FSSTND (de FileSystem STaNDard). Duas outras versões foram disponibilizadas em1995, incluíndo-se a FSSTND 1.2, a última versão disponibilizada. A maior limitação dessepadrão é que ele aplicava-se somente ao Linux e dificultava o uso em ambientes mistos,com vários sistemas operacionais.

Page 88: GERENCIAMENTO DE SISTEMAS LINUX

88 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Esse problema levou a comunidade a avançar da FSSTND em direção a um novo pa-drão. Assim, um esforço para criar um padrão hierárquico do sistema de arquivos que pu-desse ser aplicada também a outros sistemas baseados em UNIX foi iniciado em 1995,comajuda de desenvolvedores do BSD. O nome do padrão foi alterado para Filesystem Hie-rarchy Standard (FHS) (RUSSELL; QUINLAN; YEOH, 2004), que poderia ser aplicado aqualquer sistema de arquivos:

• que utilizasse uma estrutura hierárquica (árvores de diretórios);

• que controlasse dados de arquivos de forma consistente;

• que incluísse mecanismos de proteções de dados.

Dessa maneira, o FHS inicialmente estabelece uma distinção entre dados compartilhá-veis e não-compartilháveis e entre dados estáticos e variáveis:

Dados compartilháveis são aqueles que podem ser distribuídos entre diferentesmáquinas; não compartilhável são aqueles específicos a um dado sistema. Porexemplo, os diretórios pessoais dos usuários são dados compartilháveis, mas ar-quivos de dispositivos não o são.

Dados estáticos incluem binários, bibliotecas e documentação, e tudo aquilo quenão é alterado sem intervenção do administrador; dados variáveis incluem tudoque pode ser modificado sem a intervenção do administrador do sistema(RUSSELL; QUINLAN, 2001).

O objetivo dessa distinção é fazer com que o FHS facilite o compartilhamento de infor-mações em um ambiente distribuído. Dessa maneira, dados não-compartilháveis devemestar em árvores de diretório próprias. Ainda, dados estáticos podem ser montados so-mente para leitura, aumentando a segurança do sistema e até mesmo o uso de mídiaestática (como CD-ROMs) como parte estrutural do sistema de arquivos. A Figura 4.1 apre-senta a árvore raiz de diretórios proposta no FHS. Itens em itálico não precisam existir naárvore, mas se existirem devem estar no diretório raiz.

Obviamente, cada entrada na árvore de diretórios descrita na Figura 4.1 pode ter sobsi uma subárvore própria e, para algumas dessas entradas, freqüentemente isso ocorre.Observe que algumas dessas entradas podem ser links para outros diretórios. Segue-seuma descrição mais detalhada dessas entradas (obs: os diretórios /usr e /var, por seremmais complexos, serão tratados em seções próprias).

/bin: O diretório /bin contém aqueles comandos essenciais a qualquer usuário, quandonenhum outro sistema de arquivos encontra-se montado. Assim, é requerido que

Page 89: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 89

Diretório Raiz

Arquivos de disposistivosArquivos de configuraçao do sistema

Arquivos estáticos para boot do sistemaComandos binários essenciais

Diretório para Montagem de Mídia Removível

Dados de serviços do sistema

Diretório do usuário rootBibliotecas essenciais em formato alternativoDiretórios pessoais dos usuários

Arquivos temporáriosHierarquia SecundáriaDados variáveis

Pontos de montagem de sistemas de arquivos temporáriosPacotes extras de softwareComandos de sistema essenciais

Bibliotecas (DLLs) essenciais e módulos do kernel

/

bootbin

etcdev

media

srv

rootlib<qual>home

tmpusrvar

mntoptsbin

lib

Figura 4.1: Árvore Raiz de Diretórios

ele contenha os seguintes comandos: cat, chgrp, chmod, chown, cp, date, dd,df, dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more,mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount e uname.Se forem instalados, os seguintes comandos também devem ser colocados em /bin:csh, ed, tar, cpio, gzip, gunzip, zcat, netstat, ping. Dada a importânciasdesses comandos, recomenda-se ao leitor que consulte as respectivas páginas demanuais, em busca de mais informações. Os comandos [ e test precisam estardisponíveis ambos em /bin ou /usr/bin.

/sbin: Os utilitários essenciais usados na administração do sistema são disponibilizadosem /sbin. Assim, nesse diretório devem estar os aplicativos essenciais à iniciali-zação, restauração e reparação do sistema, por exemplo: fdisk, fsck, shutdown,halt, reboot, getty, ifconfig, init, mkfs, mkswap, route, swapon, swapoffe update. Novamente, recomenda-se ao leitor a consulta às páginas de manuaisdesses comando, em busca de mais informações.

/boot: Esse diretório deve conter todos os arquivos essenciais ao processo de boot, comexcessão de arquivos de configuração. Opcionalmente, o kernel do sistema operacio-nal deve ser colocado em /boot, estratégia mais adotada, ou no diretório raiz.

Page 90: GERENCIAMENTO DE SISTEMAS LINUX

90 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

/dev: O diretório /dev/ contém os arquivos especiais de dispositivos. A maioria dos dis-positivos de hardware é mapeado em um arquivo nos sistemas UNIX. Assim, porexemplo, o arquivo /dev/hda representa o disco rígido mestre (master) da primeiracontrolodora IDE. O arquivo /dev/hda1 representa, portanto, a primeira partiçãodesse disco. O primeiro disco SCSI, por sua vez, é mapeado no arquivo /dev/sda.

/lib: Esse diretório contém todas as bibliotecas dinâmicas utilizadas para inicializar osistemas e executar as aplicações disponíveis em bin e sbin. Os módulos do kerneldevem ser dispostos no subdiretório /lib/modules. Em alguns casos, podem haverdiretórios específicos de bibliotecas, por exemplo /lib64 para bibliotecas de 64 bits.

/etc: É no diretório /etc/ que ficam os arquivos e diretórios utilizados para a configu-ração do sistema. Vários desses arquivos e diretórios serão abordados em detalhesmais à frente nesta apostila. É um dos diretórios mais importantes ao se pensar embackups do sistema.

/home: O diretório /home contém as pastas de trabalho dos usuários. A organização in-terna desse diretório depende de cada sistema. Alguns administradores, por exemplo,utilizam um subdiretório próprio em /home para cada usuário. Outros, criam um sub-diretório para cada grupo, ficando os diretórios dos usuários em terceiro nível. Essaúltima alternativa é indicada quando há muitos usuários e vários grupos em um sis-tema.

/root: Esse é o diretório pessoal do usuário root. Se ele não existir, o sistema iráassumir o diretório raiz / como sendo o diretório pessoal.

/media: Esse diretório é utilizado para montagem de mídia removível, como disquetes(geralmente montados em /media/floppy), CDROMs (geralmente montados em/media/cdrom) e pendrives (geralmente montados em /media/usdisk).

/mnt: Diretório utilizado para montagem temporária de sistema de arquivos. Não deve serutilizado para mídia removível.

/srv: Esse diretório é utilizado para armazenar dados específicos dos serviços do sis-tema, como WWW, CVS ou FTP. Não existe ainda um consenso sobre a forma decriar subdiretórios nesse local, uma metodologia é o uso de subdiretórios associadosa protocolos, e.g.: /srv/ftp, /srv/rsync, etc. Em sistemas mais complexos, podeser útil estruturar /srv por contexto administrativo, por exemplo: /srv/ginux/www,/srv/bazar/rsync, /srv/arl/rsync. O leitor deve observar que diretórios atu-almente existentes no /var podem migrar para /srv, a critério do administrador ouda distribuição.

/opt: O diretório /opt é reservado para a instalação de pacotes adicionais de software.Esse deve ser o local preferido para a instalação de programas desenvolvidos local-mente (facilitando atualizações do sistema). Distribuições podem instalar software em

Page 91: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 91

/opt, mas não podem modificar ou apagar arquivos instalados pelo administradorsem o seu consentimento.

/tmp: Como o nome sugere, o diretório /tmp é disponibilizado para uso de arquivos tem-porários. Esses arquivos costumam ser apagados periodicamente, geralmente a cadadez dias.

4.2.1 O diretório /usr

Depois do diretório raiz, o diretório /usr é a maior seção utilizada no sistema de ar-quivos. Esse diretório contém dados compartilháveis e pode ser montado apenas paraleitura. Isso o torna altamente capacitado para compartilhamento em rede com sistemascompatíveis com FHS. A Figura 4.2 apresenta a árvore de diretórios /usr proposta no FHS.Novamente, itens em itálico não precisam existir na árvore, mas se existirem devem estarnesse diretório.

/usr

include

share

bin

locallib

sbin

X11R6gameslib<qual>src

Hierarquia Secundária

Bibliotecas (DLLs) de uso comumHierarquia local do sistemaComandos de sistema não−essenciaisDados independentes de arquitetura

Jogos e aplicativos educacionaisBibliotecas (DLLs) em formato alternativoCódigo−fonte (incluindo kernel)

Arquivo de cabeçalho C/C++Comandos binários de usuários

Sistema gráfico (X Window System)

Figura 4.2: Árvore de Diretórios em /usr

Os diretórios /usr/bin e /usr/sbin têm objetivos semelhantes aos diretórios /bine /sbin, respectivamente. A única diferença é que os comandos disponibilizados em/usr/bin e /usr/sbin são considerados como não essenciais à inicialização, manu-tenção e recuperação do sistema. Isso ocorre porque, como o diretório /usr pode sermontado via rede, ele não pode conter aplicativos e arquivos desse perfil.

O diretório /usr/lib inclui arquivos objetos, bibliotecas e comandos binários que nãosão disponibilizados para serem executados diretamente por usuários e shell scripts. AsDLLs de suporte aos aplicativos existentes em /usr/bin e /usr/sbin, que já não es-tiverem em /lib, são colocadas em /usr/lib. Os arquivos de cabeçalhos C/C++ são

Page 92: GERENCIAMENTO DE SISTEMAS LINUX

92 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

colocados no diretório /usr/include ou um de seus subdiretórios. Código-fonte de apli-cativos não-locais utilizam o diretório /usr/src como árvore raiz (incluindo o kernel).

Em /usr/X11R6, encontram-se os arquivos relacionados ao sistema gráfico do UNIX,o X Window System, em sua versão 11, release 6. Para facilitar o acesso do usuário, osseguintes links devem existir:

/usr/bin/X11 -> /usr/X11R6/bin

/usr/lib/X11 -> /usr/X11R6/lib/X11

/usr/include/X11 -> /usr/X11R6/include/X11

O objetivo da existência desses links é facilitar a transição entre releases do X11. Observeque os arquivos de configuração do X11 devem ficar no diretório /etc/X11.

O objetivo do diretório /usr/share é servir como um repositório de dados indepen-dentes de arquitetura e que não sejam alterados entre instalações. Assim, nesse diretórioficam as páginas de manuais (em /usr/share/man), as páginas de informações (em/usr/share/info). No subdiretório /usr/share/locale, encontram-se os arquivosde localização (internacionalização do sistema). Alguns ícones podem ser encontrados em/usr/share/pixmaps ou /usr/share/icons. O diretório /usr/share/fonts é umdos preferidos para instalação de fontes em diversos formatos (ex.: TrueType, Type 1 ouType 3).

A intenção do diretório /usr/local é funcionar como uma hierarquia para instalaçãolocalizada de software. O objetivo de utilizar /usr/local/bin para instalação de aplicati-vos locais é evitar substituir ou atualizar, inadvertidamente, aplicativos em /usr/bin. Entreos subdiretórios de /usr/local, encontram-se: /usr/local/bin, /usr/local/sbin,/usr/local/man, /usr/local/share, /usr/local/include e /usr/local/lib.

4.2.2 O diretório /var

O diretório /var contém os dados variáveis do sistema, como cache de aplicações,arquivos de spool e informações de registros (logs). Ele foi pensado dessa maneira paraque o diretório /usr pudesse ser montado somente para leitura. Todo arquivo que ne-cessita ser escrito durante operação do sistema, excluíndo-se instalação e manutenção desoftware. Em servidores de rede, é desejável que /var esteja em uma partição separada.A Figura 4.3 apresenta a árvore de diretórios /var proposta no FHS. Como atividade, édeixado ao leitor a tarefa de descobrir para que servem esses diretórios.

Page 93: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 93

/var

libcache

locklocal

logoptrunspooltmp

accountmail

Dados Variáveis

Dados variáveis para /usr/localArquivos de lock de aplicaçõesArquivos de registros (logs)

Spool de aplicaçõesArquivos temporários preservados entre reboots

Informações variáveis de aplicaçõesCache de aplicações

Dados variáveis para /optDados relevantes de processos em execução

Registros de contabilidades de processosCaixas−postais de e−mail

Figura 4.3: Árvore de Diretórios em /var

4.2.3 Outros diretórios

Em uma seção específica ao Linux, o FHS apresenta detalhes desse padrão aplicáveissomente a esse sistema operacional. A observação mais pertinente é a existência do di-retório /proc. Esse diretório é um sistema de arquivos virtual que armazena informaçõessobre o kernel os processos em execução e o sistema como um todo.

Assim, por exemplo, o arquivo /proc/kcore representa a memória do computadorem questão. O arquivo /proc/partitions apresenta detalhes sobre as partições dosdiscos rígidos disponíveis. As interrupções (IRQs) do sistema podem ser visualizadas em/proc/interrupts e informações sobre os dispositivos PCI ou USB podem ser encon-trados, respectivamente, em /proc/pci e /proc/bus/usb/devices. Dessa maneira,uma visita aos arquivos desse diretório podem facilitar, e muito, a instalação de dispositivosde hardware em Linux.

Ainda, caso o sistema de arquivos usado seja ext2 ou ext3, então, para cada partiçãoexistente, será criado um diretório /lost+found. Esse diretório, “achados e perdidos”,é utilizado pelo fsck, um utilitário de checagem do sistema de arquivos que ali aloca osblocos de arquivos “perdidos”, ou seja, i-nodes sem nomes de arquivos.

Page 94: GERENCIAMENTO DE SISTEMAS LINUX

94 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

4.3 USO DE DISPOSITIVOS DE ARMAZENAMENTO

Assim como a maioria dos sistemas operacionais, o Linux tem a possibilidade de ma-nipular diversos dispositivos de armazenamento. Dentre tais dispositivos podem ser desta-cados: disquetes, discos Zip, CD-R e CD-RW, discos rígidos (removíveis ou não), fitas (porexemplo, 8 mm, DAT, Travan, ADR onStream, DLT, AIT e Mammoth), pendrives e discosexternos USB.

Cada tipo de mídia tem as suas características de custo, taxa de transferência, capa-cidade de armazenamento, cuidados de manipulação, etc. Cabe ao administrador verificaras necessidades e possibilidades relativas ao sistema sob administração. Quanto à utiliza-ção, pode-se dizer que os dispositivos de armazenamento servem para acondicionar, alémdo sistema e arquivos relacionados à ele, os arquivos dos usuários na forma corrente demanipulação e na forma de backups

Para a manipulação, existem diversos comandos: aqueles para backups (que serão vis-tos oportunamente), para montagem de dispositivos do tipo discos magnéticos (abordadosna Seção 4.5), movimentação da cabeçote em fitas magnéticas (por exemplo, o comandomt) e leitura e gravação em fitas e discos magnéticos (por exemplo, tem-se os comandos:tar, cpio, e dd. A Tabela 4.1 fornece uma descrição sumária dos comandos aqui listados.

4.4 USO DE MEMÓRIA VIRTUAL

Um outro item importante relacionado aos sistemas de arquivos é representado pelamemória virtual. Genericamente falando, memória virtual consiste em se utilizar memóriasecundária afim de descarregar imagens de processos que não estiverem em execução emum certo momento. Desta forma, consegue-me mapear uma região maior de espaço deendereçamento (memória principal em conjunto à memória secundária).

Com a finalidade de liberar espaço para a carga de outros processos, aqueles quenão estiverem em execução são retirados da memória principal e sua imagem (estado deregistradores, código, etc) são gravados em disco em uma região de swap. Quando volta àtona, um processo pode ocupar uma região de memória principal distinta em relação àquelaocupada anteriormente. Sendo assim, o endereço de, por exemplo, uma variável ou umalinha de código de um processo é virtual, ou seja, precisa ser traduzido para o endereçoreal a fim de ser acessado.

Para o gerenciamento da memória virtual, o Linux utiliza, como algoritmos de alocaçãoem memória principal, o buddy e o slab e, para a substituição de páginas, o mecanismo declock. Conforme mencionado, a região em memória secundária (no hard disk) é denomi-

Page 95: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 95

Tabela 4.1: Principais Comandos Associados aos Dispositivos de Armazenamento

Comando Descrição Exemplo de utilização

mt Movimentar a cabeça magnética deuma fita, verificar e alterar o seu es-tado

Para ver o status de uma fita:# mt -f/dev/rmt8 status

Para retroceder a fita ao início:# mt -f/dev/rmt8 rew

tar Permite criar, ler e escrever arquivosque contém uma hierarquia de dire-tórios e seus conteúdos. Possibilitaainda compactação e descompacta-ção pelo mesmo algoritmo do gzip oudo bzip2.

Para ler um “arquivo” comprimido:# tar -zxvf arquivo.tar.gz

Para escrever o /home em uma fita:# tar -cvf /dev/rmt8 /home

cpio Funcionalidade semelhante ao tar Para extrair de arq apenas os arquivos“dir1/f1” e “dir1/b*” (opção ‘i’), cri-ando os diretórios necessários (opção‘d’). A opção ‘c’ é usada quando o ar-quivo foi gerado com um header portável:# cat arq | cpio -icd \

"dir/f1" "dir1/b*"

dd Permite cópia de arquivos ou conver-são de bits (por exemplo, utilizando-seblocos de tamanhos distintos)

Para copiar de uma fita para arquivo:# dd if=/dev/rmt8 \

of=/tmp/arq cbs=16b

nada como área de swap. Para ambientes que atendem um grande número de processose de usuários, é conveniente criar vários espaços de swap em discos distintos afim de seaumentar a eficiência computacional do sistema. Para verificar como proceder a criação,consulte a Seção 5.2 desta apostila.

4.5 MONTAGEM DE DISPOSITIVOS

Pode-se falar que a estrutura de diretórios de sistemas derivados do UNIX é bem trans-parente, sob o ponto de vista de uso, frente aos usuários. Tal transparência é resultante,por exemplo, do não conhecimento, por parte do usuário, da localização real (física) de umdiretório específico, ou seja, qual dispositivo está mapeando o diretório. Os dispositivos

Page 96: GERENCIAMENTO DE SISTEMAS LINUX

96 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

que fornecem pontos de montagem podem ser locais ou remotos e são representados pordiscos rígidos e flexíveis, unidades de CD, dentre outros.

Para poder ser utilizado, o dispositivo deverá ser “montado”. A montagem correspondeà uma etapa de criação de tabelas e instanciação de i-nodes na memória principal do com-putador. Para tanto, utiliza-se o comando mount com a seguinte sintaxe:

# mount -t sist_de_arquivos dispositivo local_de_montagem opções

O mount suporta diversos tipos de sistemas de arquivos, dentre os quais podem serdestacados: msdos (FAT), vfat (windows9x), ntfs (Windows NT/2K), ext2 (nativo doLinux), ext3 (nativo do Linux nas novas distribuições), iso9660 (para manipulação deCDs) e nfs (Network File System – para dispositivos remotos).

Pelo fato de ser nativo, um dos sistemas de arquivos mais importante no mundo Linux éo ext2. O ext2, assim como todos sistemas de arquivos derivados do UNIX, utiliza o con-ceito básico de que os arquivos são mapeados por i-nodes e diretórios são simplesmentearquivos que contém uma lista de entradas e de dispositivos que poderão ser acessados.

I-nodes são estruturas que contém as descrições dos arquivos, tais como: tipo de ar-quivo, direitos de acessos, proprietário, momento de criação e ponteiros aos blocos dedados. Sob o ponto de vista de implementação, cada i-node armazena uma lista de en-dereços físicos que representam o posicionamento da informação no disco, por exemplo.Caso o arquivo seja pequeno, todos os endereços físicos poderão estar armazenados nopróprio i-node. Caso contrário, o i-node apontará para um bloco que conterá informaçõesadicionais acerca dos outros endereços físicos do arquivo. Esse bloco é denominado comosingle indirect block. Caso não seja ainda suficiente para abranger todo arquivo um novobloco é evocado (double indirect block). Esse encadeamento é ilustrado na Figura 4.4.

Um dos atributos contidos na estrutura do i-node consiste no número de hard links(campo i_nlink da estrutura inode). Esse campo informa a quantidade de hard-links as-sociados a um i-node específico. Em um hard-link é realizado um mapeamento direto entreos i-nodes (ao contrário do link simbólico onde é feita uma tradução de nome para se acharo i-node associado – conforme descrito na Seção 4.7), ou seja, hard-links são mapeadoscom o mesmo i-node em relação ao arquivo referenciado, como mostra a Figura 4.5.

Como pode ser verificado na Figura 4.5, um hard link pode ser entendido como o “nome”do arquivo. Assim um arquivo com dois hard links pode, a grosso modo, ser enxergadocomo um arquivo com dois “nomes”. É importante salientar que hard-links somente sãopossíveis dentro de um mesmo dispositivo e são aplicáveis somente a arquivos para evitarloops. Os hard-links apresentam a vantagem de não consumirem espaços adicionais parao seu mapeamento e podem ser criados com o comando ln e removidos com rm.

Page 97: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 97

Infos

I−nodeblocksDouble indirect

Direct Blocks

Indirect blocks

Figura 4.4: Encadeamento de I-nodes

Arquivo: algo.txtI−node: 3429

Arquivo: soma.docI−node: 3431

Arquivo: prog1I−node: 3430

Arquivo: prog2I−node: 3430

Diretório

I−nodesI−node: 3429

etc.

I−node: 3430Tamanho: 123456 bytesetc.

I−node: 3431Tamanho: 74123 bytesetc.

Tamanho: 5674 bytes

Figura 4.5: Hard Link

Um outro sistema de arquivos extremamente importante é representado pelo ext3 (oqual equipa as distribuições de Linux mais atuais). O ext3 é um exemplo de journallingfilesystem que apresenta como principal vantagem sobre o ext2 o fato de ser mais con-sistente em relação à falhas, o que resulta em um tempo de manutenção extremamente

Page 98: GERENCIAMENTO DE SISTEMAS LINUX

98 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

menor, não sendo, geralmente, necessário executar aplicativos do tipo fsck. Para migrarde ext2 para ext3 ou para criar novos sistemas de arquivos baseados em ext3, bastaexecutar aplicativos como tune2fs e mke2fs, respectivamente.

Outros exemplos de journalling filesystems compatíveis com o Linux são o JFS for Linux(desenvolvido pela IBM), o XFS (desenvolvido pela Silicon Graphics) e o ReiserFS (desen-volvido inicialmente com o apoio da SUSE). A maioria das distribuições atualmente adota oext3 como padrão. Observe que o limite do tamanho de arquivo do ext3 e do ReiserFSé o mesmo do ext2: 4 GB. Com o JFS e o XFS, esses limites vão para acima de 4 Pb (4Petabytes – 1 Petabyte = 1024 Terabytes). Para maiores detalhes sobre journalling filesys-tems e outros sistemas de arquivos suportados pelo Linux, consulte (HINNER, 2000). Caberessaltar ainda que encontra-se em processo de testes o ext4, que não será totalmentecompatível com ext3 e ext2 e possui como principal inovação o uso de extents, umaárea contígua reservada para o arquivo e que reduz a fragmentação, aumentando assim odesempenho do sistema de arquivos.

Tabela 4.2: Nomenclatura de Dispositivos Usuais

Dispositivo Descrição

/dev/hda Disco master da primeira interface IDE/dev/hdb Disco slave da primeira interface IDE/dev/hdc Disco master da segunda interface IDE/dev/hdd Disco master da segunda interface IDE/dev/cdrom Esse dispositivo é muito usado, porém é apenas um link simbólico para

um dispositivo real (por exemplo, /dev/hdX, se for ATAPI). Onde X= a,b, c ou d.

/dev/sda Primeiro disco SCSI (ou USB)/dev/sdb Segundo disco SCSI (ou USB)/dev/scd0 Primeira unidade de CD SCSI (ou USB)/dev/scd1 Segunda unidade de CD SCSI (ou USB)/dev/fd0 Primeira unidade de floppy disk/dev/Xda1 Primeira partição do disco IDE (caso X == h) ou do disco SCSI (caso

X == s)/dev/Xda5 Primeira partição lógica (independente do número de partições primá-

rias existentes) – o X segue a mesma notação em relação à linha an-terior

Com relação aos dispositivos, existe uma nomenclatura seguida pelo Linux. A Ta-bela 4.2 ilustra a nomenclatura de alguns dispositivos mais usuais. A seguir são apre-sentadas dois exemplos de utilização do comando mount:

Page 99: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 99

# mount -t vfat /dev/fd0 /mnt/floppy

# mount -t nfs machine.host.com:/usr/local /usr/local/app

Nos exemplos anteriores, tem-se, primeiramente, a montagem de um floppy disk cujoponto de montagem é /mnt/floppy. Já no segundo exemplo, é utilizado um ponto demontagem /usr/local/app cujo conteúdo está sendo coletado do diretório /usr/localda máquina remota machine.host.com (nota-se a utilização, neste caso, do tipo de sis-tema de arquivos NFS).

A montagem de dispositivos pode ser auxiliado pelo arquivo /etc/fstab. Tal ar-quivo contém as especificações dos pontos a serem montados (tipo de sistema de arquivo,dispositivo, momento de montagem e permissões associados). Um exemplo de arquivo/etc/fstab é mostrado na Figura 4.6.

/dev/hda2 / ext2 defaults 1 1

/dev/hda5 /home ext2 defaults 1 2

/dev/hda3 /mnt/win vfat noexec,uid=100,gid=100 0 0

/dev/hdb /mnt/cdrom iso9660 defaults, noauto, user 0 0

/dev/fd0 /mnt/disquete auto defaults, noauto, user 0 0

/dev/hda1 swap swap defaults 0 0

none /proc proc defaults 0 0

Figura 4.6: Exemplo de /etc/fstab

No exemplo apresentado na Figura 4.6, tem-se na primeira linha a identificação doponto de montagem “raiz” (identificado como “/”). Esse ponto está associado à segundapartição primária do disco master da primeira interface IDE (/dev/hda2). A segunda linhareferencia o ponto de entrada “/home”. A terceira faz menção à uma partição “windows”(tipo vfat). Como vfat não suporta mecanismos de permissão de acesso, pode-se alte-rar o proprietário do ponto de montagem com a opção uid (o default é ter o root comoproprietário) – opções, tal como uid, serão vistas mais adiante.

A seguir, no exemplo da Figura 4.6 encontram-se as definições de montagem do CDROMe do disco flexível. Nota-se a presença das opções noauto que determina que a monta-gem não deverá ocorrer durante o boot e a opção user, permitindo que os usuários possammontar e desmontar tais pontos de montagem. Desta forma, os usuários poderão manipulartranqüilamente seus CDs e disquetes. As duas últimas linhas do exemplo (swap e /proc)são obrigatórias a todos os sistemas e quase não necessitam ser editadas manualmente.

Utilizando-se o fstab, pode-se omitir alguns parâmetros do comando mount. Porexemplo, para montar o CDROM no exemplo anterior, basta:

Page 100: GERENCIAMENTO DE SISTEMAS LINUX

100 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

# mount /mnt/cdrom

A Tabela 4.3 mostra as principais opções utilizadas pelo arquivo fstab. Além das op-ções acima listadas, pode-se também utilizar as opções usrquota e grpquota com afinalidade de habilitar o controle de quotas na partição associada. Como indica a nomen-clatura das opções, usrquota habilita a checagem de quotas para usuários e o grpquotapara grupos de usuários. A configuração de quotas e usuários pode ser vista no Capítulo 6desta apostila. Outras opções podem ser verificadas consultando-se a página de manualdo comando mount.

Tabela 4.3: Principais Opções Utilizadas no fstab

Opção Descrição

noauto evita-se a montagem automática durante o processo de bootuser permite que qualquer usuário possa montar e desmontar o dispositivonoexec com essa opção, os usuários não poderão executar o conteúdo do ponto de

montagemuid permite definir o proprietário do ponto de montagem (utilizando o UID do usuá-

rio)gid equivalente ao uid, porém aplicável ao grupo (GID)ro força que um dispositivo seja montado apenas para leitura (read only)

Caso pretenda-se ativar o uso de quotas, após a modificação no arquivo /etc/fstab

adicionando-se as opções referentes às quotas, deve-se executar o comando quotacheckafim de ativar as alterações:

# quotacheck -avug

Caso o daemon relativo ao monitoramento de quotas não esteja ativo, pode-se iniciá-lodigitando-se:

# /usr/sbin/quotaon -avug

Para maiores informações sobre uso de quota, pode-se consultar (MOURANI, 2001) e(DOOREN, 2002), além das páginas de manuais dos comandos quotacheck, quotaon,quotaoff e edquota.

A desmontagem dos dispositivos ocorre pela utilização do comando umount, que re-cebe como parâmetro o caminho do ponto de montagem a ser desmontado, ou o dispositivoassociado, conforme exemplo a seguir:

Page 101: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 101

# umount /mnt/cdrom

# umount /dev/hda3

Cabe destacar que, com a proliferação dos dispositivos removíveis, como pendrives,câmaras digitais e mp3players, surgiu no Linux a necessidade de se automatizar o acessoa esses recursos. Assim, os principais gerenciadores de ambiente possuem mecanismosque permitem a montagem automática de dispositivos removíveis. No caso do GNOME,isso é conseguido pelo pacote gnome-mount. No KDE, em geral utiliza-se o pmount ouivman. No Xfce, isso é conseguido com o gerenciador de arquivos Thunar e o pacotethunar-volman.

4.6 PARTIÇÕES

Partições consistem em divisões lógicas do disco rígido de modo que ele possa contervários sistemas de arquivos distintos (do mesmo tipo ou não). O Linux requer, basicamente,duas partições para o seu funcionamento: uma partição de linux swap (tipo 82) e outra dotipo linux native (tipo 83) ou correlata. Pode ser interessante criar partições de modo aacomodar as contas dos usuários, diretório /tmp e o diretório /var. A criação de taispartições pode facilitar o processo de administração principalmente em relação ao backup.

O trabalho de particionar exige cuidados e conhecimento sobre o sistema. Uma dasprincipais dificuldades a ser encontradas é relacionada ao dimensionamento das partições.Apesar de que mídias de armazenamento possuem baixa relação custo/capacidade, é pre-ciso planejamento para um particionamento adequado. Uma das primeiras dúvidas a esserespeito é justamente sobre a necessidade ou não da partição de swap. Com o baratea-mento de memória RAM, esse item deixou de ser crítico em instalações. Entretanto, dadoque o custo do espaço em discos rígidos é muito inferior, ainda é recomendável a utiliza-ção de swap, seja sob a forma de partição ou de um arquivo de swap (ver mais detalhesa esse respeito no Capítulo 5). O dimensionamento adequado de uma partição de swapenvolve avaliar a utilização de memória, o que não é tarefa simples. Em geral, constuma-sedimensionar o swap com tamanho igual ou em dobro à memória RAM disponível.

Além do swap, alguns diretórios merecem especial atenção quando do particionamento.Em uma máquina pessoal, onde o diretório /home esteja armazenado localmente, é alta-mente desejável que esse diretório esteja em uma partição à parte. Durante uma reins-talação, essa partição pode ser mantida (não formatando-a), evitando a necessidade derestauração do sistema. Além disso, essa separação impõe uma divisão física entre os da-dos do usuário e os aplicativos, facilitando imensamente o processo de backup, dado queé mais rápido copiar uma partição fisicamente do que um dados dispostos em um diretório.

Page 102: GERENCIAMENTO DE SISTEMAS LINUX

102 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

O tamanho do diretório /home deve condizer com o espaço em disco disponível. Emgeral, recomenda-se que o administrador use parcimônia e sabedoria ao determinar essetamanho. Caso contrário, o administrador nunca iria imaginar que precisava de 80Gb atépassar duas semanas depois de instalado o novo HD de 40Gb. O tamanho do diretóriohome deve ser calculado tendo-se em vista duas variáveis: número de usuários e espaçode trabalho necessário a cada um. Esse espaço de trabalho é apenas para documentos earquivos pessoais. Observe que as necessidades de um profissional de área gráfica (quetrabalha com arquivos muito grandes) é diferente das de um profissional da área contábil.Além disso, o administrador deve levar em conta que vários programas criam arquivos deconfiguração e áreas de cache na área do usuário.

Com exemplo, em um ambiente onde o usuário utiliza navegador com cache pessoal,recomenda-se ao menos 10 Mb para o uso do navegador. A esse valor deve ser acrescidomais 2 Mb para o OpenOffice e 1 MB para o Gimp. Somando-se mais 3 MB para arquivosdiversos de configuração, é recomendável atualmente que as contas de usuário tenhampelo menos 30 MB disponíveis, contando-se aí 10 Mb para arquivos pessoais e e-mail.Caso haja espaço disponível, valores razoáveis nos dias de hoje vão de 50 a 100 MB.Assim, em uma máquina com dez usuários, pode-se reservar 500 Mb para o /home.

Em relação ao /var, é útil criar uma partição em separado pois o espaço no raiz égeralmente limitado, não suportando o crescimento, por exemplo, do /var/spool. Issoé especialmente válido em servidores, não havendo necessidade desse diretório estar empartição separada em máquinas pessoais. Observe que no diretório /var ficam, alémdos logs do sistema, os arquivos de e-mail e o site local do servidor Web1. Assim, otamanho desse diretório deve levar em conta essas informações. Mais ainda: como o tipode informações armazenadas nos logs é configurável, pode ser necessário deixar maisespaço para esses arquivos.

A prática mostra que o tamanho de uma partição para o /var depende dos tipos deserviços oferecidos. Em geral, para um servidor oferecendo serviços Web e serviços de e-mail e SAMBA para 200 usuários, recomenda-se para o /var uma partição de, ao menos,2GB. Esse valor pode ser diminuído, caso o diretório /var/spool/mail esteja em outrapartição ou seja um link para outro diretório. Em muitos casos, para impor uma única quotapara arquivos pessoais e e-mail, é interessante que esse diretório seja um link para umdiretório em /home.

Quanto ao /usr, pode ser interessante que ele esteja em uma partição à parte, parapoder ser montada em modo de leitura apenas, aumentando a segurança do sistema. O

1A localização dos arquivos Web pode ser modificador, a critério do administrador. Além disso, a localiza-ção padrão pode mudar para /srv no futuro.

Page 103: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 103

tamanho dessa partição depende do número e tipo de aplicativos instalados. Em um ser-vidor, 1GB é, em geral, mais do que suficiente. Se não for instalado o servidor gráfico, asnecessidades caem para menos de 500 MB. Em uma máquina pessoal, com vários aplica-tivos gráficos, entretanto, o diretório /usr pode passar, com facilidade de 2 GB. Observe,entretanto, que não é comum criar uma partição separada para o /usr em estações detrabalho.

Em servidores que possuam acesso remoto, é importante também que o diretório /tmpesteja em uma partição separada. O motivo é evitar que os usuários utilizem essa parti-ção para armazenamento temporário e acabem comprometendo a partição raiz. Em geral,300 MB são suficientes para qualquer tipo de máquina, desde que o diretório /tmp nãoseja utilizado como repositório temporário ou local para se confeccionar imagens físicas deCDROMs.

A prática recomenda ater-se a um valor necessário e não resolver ser muito generosocom as partições em se tratando de servidores. É mais fácil criar uma partição em umespaço não alocado e usar essa partição em um diretório “lotado” do que redimensionarpartições existentes. Outra observação importante é que recomenda-se que todas as par-tições mencionadas sejam do tipo linux native (ext2, ext3 ou equivalentes).

Para o particionamento, pode-se utilizar os aplicativos fdisk ou sfdisk. A seguir émostrada uma seqüência para particionar um disco com o fdisk. Suponha que o ambientetenha dois discos: um para Windows (/dev/hda) e outro destinado ao Linux (/dev/hdb).Então, para particionar /dev/hdb afim de receber a instalação do Linux, basta:

a) iniciar o fdisk:

# fdisk /dev/hdb

b) criar a partição. Neste caso, supõe-se que o disco esteja vazio, caso contrário, pode-seremover as partições que lá estiverem utilizando o comando ‘d’ (delete) dentro do promptdo fdisk. Para criar, utiliza-se a opção ‘n’ (new partition):

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-526): 1

Last cylinder or +size or +sizeM or +sizeK ([1]-526): +950M

Page 104: GERENCIAMENTO DE SISTEMAS LINUX

104 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

c) Para certificar-se da criação, utiliza-se o comando ‘p’ (print information):

Command (m for help): p

Disk /dev/hdb: 64 heads, 63 sectors, 526 cylinders

Units = cylinders of 4032 * 512 bytes

Device Boot Begin Start End Blocks Id System

/dev/hdb1 1 1 483 973696+ 83 Linux native

A primeira partição necessária foi criada. Basta agora criar a partição de swap. Inicial-mente, usa-se o comando ‘n’ de forma semelhante à partição recém criada. Porém, écriada uma partição do tipo Linux Native, bastando, portanto, mudá-la para Linux Swap:

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (484-526): 484

Last cylinder or +size or +sizeM or +sizeK ([484]-526): 526

Command (m for help): t

Partition number (1-4): 2

Hex code (type L to list codes): 82

Changed system type of partition 2 to 82 (Linux swap)

d) Uma última verificação pode ser feita:

Command (m for help): p

Disk /dev/hdb: 64 heads, 63 sectors, 526 cylinders

Units = cylinders of 4032 * 512 bytes

Device Boot Begin Start End Blocks Id System

/dev/hdb1 1 1 483 973696+ 83 Linux native

/dev/hdb2 484 484 526 86688 82 Linux swap

e) Essas informações estão apenas em memória, o administrador tem a opção de digitar‘q’ para sair sem salvar ou ‘w’ para salvar e sair do fdisk.

Page 105: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 105

Um outro utilitário importante para criação de partições é o Parted2, que faz parte doProjeto GNU. Além de criar e remover partições, o GNU Parted permite redimensionar par-tições de vários tipos, incluíndo-se FAT e ext2. Após a criação das partições é necessáriocriar um sistema de arquivos. Para tanto, utiliza-se o mkfs (esse sendo apenas uma inter-face amigável ao mkfs).

Em ambientes de laboratório, freqüentemente é interessante copiar a partição de umamáquina para uma outra (com configuração e tamanho de partição semelhantes). Isso podeser feito com o comando dd, já comentado neste capítulo. Entretanto o Partimage3, é umaferramenta gratuita e de fácil uso que permite cópias de partições de diversos sistemas dearquivos, como ext2, ext3, FAT e NTFS, só para citar alguns. Ele é desenvolvido pelamesma equipe que mantém o SystemRescueCD4, um LiveCD com vários utilitários úteispara recuperação de sistemas. O autor deste texto é um usuário assíduo dessa distribuiçãopara manutenção em laboratórios.

A verificação de consistência dos sistemas de arquivos e possíveis correções poderãoser feitas ativando-se o comando fsck. Um processo de verificação é efetuado automati-camente no momento de inicialização do computador. É interessante mencionar que, casoo fsck encontre algum arquivo sem um diretório pai associado, ele o coloca no diretório“lost+found” no nível superior do sistema de arquivos.

4.7 TIPOS DE ARQUIVOS

Em sistemas derivados do UNIX, os arquivos são utilizados sob várias denotações re-lacionadas com o armazenarem informações do próprio usuário, código de aplicativos eestruturas utilizadas pelo sistema operacional. Grande parte das distribuições dos siste-mas UNIX-like define sete tipos de arquivos, os quais serão detalhados a seguir:

Arquivos Regulares: são aqueles representados pela sua forma mais simples de con-cepção. Estão relacionados aos arquivos de dados dos usuários (formato textual oubinário), código executável, bibliotecas (dinâmicas ou não e compartilhadas ou não)e demais arquivos afins. A manipulação de tais arquivos pode ser realizada de formasequencial ou aleatória de acordo com a sua construção.

Diretórios: representam a estrutura organizacional dos sistemas de arquivo. Assim comoos arquivos regulares, os diretórios podem também ser mapeados como links simbó-licos conforme será visto a seguir. Em UNIX, existem duas entradas especiais repre-

2GNU Parted: http://www.gnu.org/software/parted/.3Partimage: http://www.partimage.org/.4SystemRescueCD: http://www.sysresccd.org/.

Page 106: GERENCIAMENTO DE SISTEMAS LINUX

106 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

sentadas por “.” e “..”. Tais entradas nunca poderão ser apagadas e representam odiretório corrente e o diretório anterior (diretório pai).

Arquivos de Dispositivos de Caracteres e de Blocos: os arquivos de dispositivos repre-sentam o elo de ligação entre o hardware (incluindo-se os periféricos) e os aplicativos.Tais arquivos são gerenciados pelos drivers dos dispositivos e neles são escritos osdados que serão gerados ou consumidos pelas aplicações.Geralmente tais arquivos são localizados no diretório /dev e podem ser criados atra-vés do comando mknod ou por um script disponível em grande parte dos sistemas,denominado MAKEDEV. Por convenção, são associados aos arquivos dois númerosdenominados como números de dispositivos principal e secundário. O principal tem afunção de referenciar (ao kernel) o driver associado ao arquivo enquanto que o secun-dário informa ao driver qual a unidade física que deverá ser manipulada. Desta forma,por exemplo, em sistemas Linux, a primeira porta paralela (/dev/lp0) teria, como nú-meros principal e secundário, os valores 6 e 0, respectivamente. Uma maneira práticade verificar tais números consiste em utilizar o comando ls -l.Existem dois tipos de arquivos de dispositivos: o de caracteres e o de blocos. Osarquivos de dispositivos de caracteres (também denominados como dispositivos ori-entados a fluxo – stream-oriented) manipulam bytes como unidades básicas e têmcomo exemplo, as interfaces de rede, porta serial e impressoras. Por sua vez, os ar-quivos associados aos blocos permitem a leitura ou escrita de blocos de informações(apresentando geralmente tamanho fixo) assim como é realizado nas unidades de fitae de disco do sistema.

Sockets de Domínio UNIX os sockets de domínio UNIX são mecanismos que habilita a co-municação entre os processos em execução dentro de um computador (inter-processcommunication – IPC). A comunicação via este tipo de socket tem como vantagemque processos baseados em redes podem se comunicar por intermédio de arquivos.Uma outra característica, é que sockets permitem serviços baseados em conexão.Um cuidado que se tem que tomar na utilização de sockets consiste em se verificar seo usuário tem permissão de escrita no arquivo associado ao socket. Tais arquivos po-derão ser removidos através do comando rm ou da chamada de sistema unlink().A Figura 4.7 ilustra a criação de um servidor usando arquivo socket. Além dos co-mandos utilizados na Figura 4.7, podem ser utilizados vários outros, como write(),read(), bind(), listen(), accept() e close(). Maiores detalhes e exemplosde uso dessas funções podem ser encontrados em (LOOSEMORE et al., 2001).

Pipes Identificados (FIFO) Os pipes identificados são utilizados para a comunicação entredois processos dentro de um mesmo escopo computacional. Para tanto, a comunica-ção é realizada através de um arquivo especial de pipe, criado através do comando

Page 107: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 107

#include <sys/socket.h>

#define SERVERFILE "/tmp/server.data"

int main() {

int sock_fd;

struct sockaddr_un unix_addr;

if ((sock_fd=socket(AF_UNIX,SOCK_STREAM,0))<0)

strcpy(unix_addr.sun_path,SERVERFILE);

if(connect(sock_fd,(struct sockaddr*)&unix_addr,

sizeof(unix_addr.sun_family)+

strlen(unix_addr.sun_path))<0)

}

Figura 4.7: Exemplo de Uso de Sockets

mknod() e podendo ser removido por rm ou unlink(). Maiores detalhes podem serencontrados em (LOOSEMORE et al., 2001).

Links Simbólicos Um link simbólico, ou soft link, faz referência a um arquivo ou diretórioatravés do nome enquanto que o hard link faz uma referência direto ao arquivo oudiretório alvo utilizando, para tal, diretamente as estruturas de i-nodes. Sendo umareferência pelo nome, o kernel, ao encontrar um soft link, apenas faz uma troca do pathcorrente pelo path apontado pelo link e continua normalmente seu processamento. Acriação de um link simbólico é feita através do comando “ln -s”, conforme ilustra oexemplo a seguir:

# ln -s /usr/bin/app1ication /home/user01/applink

No caso anterior, foi criado, dentro do diretório user01, um link simbólico que apontapara /usr/bin/application. A remoção de links pode ser feita simplesmentepela utilização do comando rm. Uma preocupação que deve ser tomada em relação àcriação de links simbólicos é relacionada a evitar o surgimento de loops, ou seja, umaseqüência de links que resulta em uma lista circular.

Além do comando ls, outra ferramenta útil para determinar o tipo de um arquivo é oaplicativo file. Ele determina não só o tipo de arquivo, como também, para arquivosregulares, tenta determinar o formato do arquivo (se imagem, se documento texto, etc.). AFigura 4.8 mostra exemplo de uso desse comando.

Page 108: GERENCIAMENTO DE SISTEMAS LINUX

108 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

# file admsis.tex /dev/hdb /tmp /home cracha.svg xfce.eps xfce.jpg

admsis.tex: LaTeX 2e document text

/dev/hdb: block special (3/64)

/tmp: sticky directory

/home: directory

cracha.svg: XML document text

xfce.eps: PostScript document text conforming at level 3.0 - type EPS

xfce.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), 72 x 72

Figura 4.8: Uso do Comando file

4.8 ATRIBUTOS DE ARQUIVOS

Cada arquivo apresenta um conjunto de 16 bits que constituem informações acerca deseus atributos. Tais bits representam a permissão de acesso ao arquivo ou diretório (9bits), o modo de operação (3 bits) e o tipo associado ao arquivo (4 bits). Tais atributos,excetuando-se o tipo, podem ser alterados utilizando-se o comando chmod, assim como aidentificação do proprietário e grupo podem ser alterados usando chown e chgrp. Exem-plos de utilização do chmod serão vistos ao longo desta seção.

Os atributos de permissão denotam a acessibilidade do arquivo ou diretório frente aosusuários do sistema. Entende-se como usuários o proprietário do arquivo, aqueles perten-centes ao mesmo grupo do proprietário e demais usuários sem quaisquer tipo de vínculocom o proprietário. A disposição dos bits é ilustrada na Figura 4.9.

rwx rwx rwx

Proprietário Grupo Outros

Figura 4.9: Atributos de Permissão

Na Figura 4.9, são vistos os 9 bits divididos em 3 seções: proprietário, grupo e outros.Cada seção apresenta 3 bits indicando permissão de leitura (r – Read), escrita (w – Write)e execução (x – eXecute). É conveniente associar os bits com nu̇meros octais para facili-tar, por exemplo, a sua manipulação. Pode-se observar, portanto, que cada campo de trêsbits podem ser instanciados com valores que variam na faixa entre 0 e 7, inclusive. Taisvalores representam a combinação dos valores dos bits, por exemplo, caso haja necessi-dade de permitir o acesso de leitura e execução, então o número resultante equivale a 5(r = 1, w = 0, x = 1, 101(2) = 5(8)). Sendo assim, a conjunção das seções resulta em umaseqüência de 3 números octais.

Page 109: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 109

Como exemplo, suponha que se deseja alterar as permissões de um arquivo para:Proprietário: ler, escrever e executar (r = 1, w = 1, x = 1, 111(2) = 7(8))Grupo: ler e executar (r = 1, w = 0, x = 1, 101(2) = 5(8))Outros: nenhuma permissão associada (r = 0, w = 0, x = 0, 000(2) = 0(8))

Utilizando-se o comando chmod, tem-se:

# chmod 750 nome_arquivo

Em relação aos diretórios, o bit de execução permite que o diretório seja entrado ouatravessado durante a etapa de avaliação de caminho, porém o seu conteúdo pode não serlistado quando o bit de leitura estiver desativado.

Por outro lado, os atributos de operação podem afetar o modo de operação dos arquivosexecutáveis. Podem ser classificados como bit setuid, bit setgid e sticky bit. Os bits setuide setgid (valores octais valendo 4000 e 2000, respectivamente) são utilizados para que oaplicativo seja executado utilizando, respectivamente, o UID (user ID) e o GID (group ID) deseu proprietário mesmo que usuário quem solicitou não o seja.

Por exemplo, caso se tenha configurado o setuid de um arquivo como root e o mesmotenha sido evocado por um usuário normal, ele poderá acessar recursos somente acessí-veis ao usuário root uma vez que o processo se comporta como iniciado pelo seu propri-etário (root). Tais bits são úteis no compartilhamento de arquivos entre diversos usuáriospertencentes ao mesmo grupo. Para instanciar o bit setgid e permitir a leitura e execução atodos os usuários pode-se utilizar o comando chmod conforme ilustrado abaixo:

# chmod 2555 nome_arquivo

Caso fosse necessário instanciar tanto o setuid quanto o setgid bastaria substituir ovalor 2 pelo valor 6. Isso se explica da seguinte forma: 2(8) = 010(2)e4(8) = 100(2). Fazendo-se operação OU entre os dois valores obtém-se 110(2) que equivale ao valor 6(8). Sendoassim, o comando ficaria:

# chmod 6555 nome_arquivo

Ainda dentro dos atributos de operação, o sticky bit (valor octal 1) tem o significadode forçar a permanência do código executável na memória do computador mesmo apóso encerramento de sua execução. Este bit era útil na época em que as memórias eramlentas e tinham um preço relativamente alto, evitando-se o tempo de carga do aplicativo namemória quando este era freqüentemente utilizado pelos usuários. Desta forma, quando

Page 110: GERENCIAMENTO DE SISTEMAS LINUX

110 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

o sticky bit estava sinalizado, apenas o primeiro usuário esperava pelo tempo de carga docódigo executável.

Atualmente, devido ao aumento da capacidade de armazenamento na memória prin-cipal e diminuição no tempo de acesso às memórias principal e secundária, o sticky bit épraticamente desconsiderado pelos sistemas operacionais atuais quando aplicado a arqui-vos. Quando o sticky bit utilizado em um diretório, entretanto, a maioria das versões deUNIX não permitem que um usuário apague ou renomeie um arquivo se não for o proprie-tário ou o superusuário. Caso ele seja o proprietário do arquivo, entretanto, poderá apagarsem problemas, mesmo que não seja o proprietário do diretório (desde que o diretório es-teja com o sticky bit ativado, obviamente). Essa convenção é feita para que diretórios como/tmp sejam mais privados e seguros. Para instanciar o sticky bit basta (aplicando-se oexemplo de leitura e execução a todos os usuários):

# chmod 1555 nome_diretorio

Por último, os atributos de tipo são responsáveis por informar o tipo de arquivo asso-ciado. Conforme mencionado anteriormente, tais bits são instanciados no momento decriação do arquivo ou diretório e não mais poderão ser modificados. A Tabela 4.4 relaci-ona os tipos possíveis de arquivos aos caracteres que são exibidos quando é utilizado ocomando “ls -l”. Tais caracteres são apresentados, na saída do referido comando, naprimeira posição de informação, antes dos campos relativos às permissões.

Tabela 4.4: Símbolos Associados ao Tipo de Arquivo ao Utilizar o “ls -l”

Tipo de Arquivo Símbolo

Arquivo regular -

Diretório d

Arquivo de dispositivo de caracter c

Arquivo de dispositivo de bloco b

Socket de domínio UNIX s

Pipe identificado p

Link simbólico l

Ainda falando da saída do comando “ls -l”, existem as combinações onde o setuid,setgid e o sticky bit estão instanciados. Os três bits modificarão a forma de apresentaçãodo campo relativo à execução (‘x’) do proprietário, grupo ou outros, respectivamente. ATabela 4.5 ilustra os símbolos exibidos na saída de “ls -l” nos campos destinados ao ‘x’.

Page 111: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 111

Tabela 4.5: Valores Possíveis ao Campo Destinado ao Atributo de Execuçãobit operação seção modificada símbolo c/ exec. habilitada símb. c/ exec. não habilitada

setuid proprietário s S

setgid grupo s S

sticky bit outros t T

Por exemplo, caso tivesse um arquivo que resultasse na seguinte saída antes de ins-tanciar o setuid:

-r-xr-xr- 1 fulano grpfulano 123456 Oct 10 2000 /home/fulano/arqX

Após a instanciação do setuid ficaria:

-r-sr-xr- 1 fulano grpfulano 123456 Oct 10 2000 /home/fulano/arqX

Porém, no caso do arquivo abaixo:

-r-r-r- 1 fulano grpfulano 123456 Oct 10 2000 /home/fulano/arqY

A instanciação do setuid resultaria na exibição do ‘S’, pois o campo de execução doproprietário não havia sido ativado. Sendo assim, a saída do “ls -l” exibiria:

-r-Sr-r- 1 fulano grpfulano 123456 Oct 10 2000 /home/fulano/arqY

Uma outra observação a ser feita na saída do “ls -l” refere-se ao número de hard linksque o arquivo ou diretório apresenta. Essa informação é exibida logo após a seqüência debits de permissão. No caso do exemplo anterior, o arquivo arqY apresenta apenas umareferência (a dele mesmo). Os diretórios, por sua vez, apresentam dois hard links: o dodiretório pai e o do arquivo especial ‘.” dentro do próprio diretório. Para verificar detalhessobre o número de referências, pode-se utilizar “ls -i” para exibir o número de i-nodeassociado e verificar outros arquivos que apresentam numeração igual.

Ainda sobre o comando chmod, esse utilitário permite também a configuração de atri-butos de uma forma mnemônica. Isso é feito utilizando-se os símbolos ’+’, ’-’ e ’=’ , paraadição, remoção e atribuição, respectivamente, de um dado atributo. Nesse caso, são usa-dos os atributos ’u’, ’g’, ’o’ e ’a’ para indicar, respectivamente o usuário, o grupo, outros etodos ("all”). Por fim, utilizam-se os atributos ’r’, ’w’, ’x’, ’s’ e ’t’ para definir, respectivamenteas permissões de leitura (“read”), escrita (“write”), execução (“execute”), usuário/grupo de

Page 112: GERENCIAMENTO DE SISTEMAS LINUX

112 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

# dando permissão de execução para o usuário no arquivo /tmp/teste

$ chmod u+x /tmp/teste

# dando permissão de escrita para o grupo e de leitura para outros

# no arquivo /tmp/teste

$ chmod g+w o+r /tmp/teste

Figura 4.10: Exemplos de uso do chmod

execução (“setuid”/ “setgid” ) e deleção restrita (“sticky bit”). A Figura 4.10 ilustra algunsexemplos de uso do chmod dessa maneira.

A permissão padrão para arquivos recém-criados pode ser definida por meio do co-mando umask. Esse comando define as permissões de um arquivo ou diretório recém-criado fazendo um AND binário do complemento de seu argumento (NOT binário) com omodo de permissão total (666 para arquivos e 777 para diretórios). Assim por exemplo, ocomando “umask 246” iria fazer com que novos arquivos fossem criados com permissão420, enquanto diretórios seriam criados com permissão 531, como ilustrado nas Figura 4.11e Figura 4.12

6668 AND NOT 2468 =

(110 110 110)2 AND NOT (010 100 110)2 =

(110 110 110)2 AND (101 011 001)2 =

(100 010 000)2 =

4208

7778 AND NOT 2468 =

(111 111 111)2 AND NOT (010 100 110)2 =

(111 111 111)2 AND (101 011 001)2 =

(101 011 001)2 =

5318

Figura 4.11: Cálculo de permissões

Page 113: GERENCIAMENTO DE SISTEMAS LINUX

Sistema de Arquivos 113

$ umask 246

$ touch xxx

$ mkdir yyy

$ ls -l

total 4

-r---w---- 1 joukim users 0 2007-09-19 03:33 xxx

dr-x-wx--x 2 joukim users 4096 2007-09-19 03:33 yyy

Figura 4.12: Uso do umask

4.9 COMENTÁRIOS FINAIS

O sistema de arquivos é a forma de organização de dados nos dispositivos de arma-zenamento. Ele tem a função de tornar transparente ao usuário o acesso às informaçõesnele contido. O Linux nesse quesito apresenta uma grande maturidade, graças à imple-mentação de um sistema de arquivos virtual no kernel, o VFS. Com isso, o Linux suportadiversos tipos de sistemas de arquivos, inclusive alguns criptografados e alguns que podemser acessados na camada de usuários, sem a necessidade de intervenção direta do kernel.O uso de sistemas de arquivos na camada de usuário é possível principalmente graças aoFUSE5 (File system in User Space).

O Linux suporta ainda o uso de atributos extendidos, através do comando chattr,ver mais detalhes na página de manual desse comando. Além disso, também suportaACLs (Access Control Lists - Listas de Controle de Acesso), o que permite ajustes finos nadefinição de permissões, através do comando selfacl.

Ao permitir esse nível de flexibilidade, o Linux mostra-se preparado para enfrentar di-versos desafios, no que diz respeito ao armazenamento de informações nos dispositivos dearmazenamento. Mais ainda, reflete a maturidade do projeto do Linux frente aos concor-rentes.

5FUSE: http://fuse.sourceforge.net.

Page 114: GERENCIAMENTO DE SISTEMAS LINUX

114 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Page 115: GERENCIAMENTO DE SISTEMAS LINUX

5GERENCIAMENTO DE PROCESSOS

5.1 COMENTÁRIOS INICIAIS

O objetivo deste capítulo é apresentar ao leitor os aspectos principais do gerenciamentode processos em Linux. Assume-se que o leitor possua conhecimentos básicos sobre pro-cessos, sob a ótica de Sistemas Operacionais. Caso o leitor não possua esses conhe-cimentos, recomenda-se a leitura de (TANENBAUM, 2001), (SILVA, 2002) ou (OLIVEIRA;CARISSIMI; TOSCANI, 2001).

Além dos processos básicos necessários ao gerenciamento de processos, o capítulotambém dá destaque aos processos de inicialização e encerramento do Linux. Tambémsão abordados os gerenciadores de boot e métodos de confecção de disquetes de emer-gência (para inicialização do sistema). Outro assunto apresentado no capítulo é o uso econfiguração de memória virtual.

5.2 GERENCIAMENTO DE MEMÓRIA EM LINUX

Antes de se iniciar a abordagem propriamente dita acerca de processos, é convenientefalar sobre a manipulação de memória uma vez que os programas necessitam ser carrega-dos na memória principal para serem executados.

O primeiro aspecto se refere à manipulação da porção de memória destinada ao sistemade memória virtual (em Linux denominado como swap) e, o segundo aspecto relaciona-seao buffer cache.

5.2.1 Swap

O gerenciamento de memória em Linux envolve vários aspectos, dentre os quais pode-se destacar aqueles relacionados à memória virtual. O kernel do Linux faz uso de regiõesdo disco rígido denominadas como áreas de swap para a manipulação da memória virtual.

Page 116: GERENCIAMENTO DE SISTEMAS LINUX

116 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

O termo swap é empregado de forma errônea em ambientes Linux, uma vez que a suamemória virtual é baseada em paginação e não em sistema de swap propriamente dito.

As regiões de swap podem ser implementadas de duas formas: arquivos de swap(utilizando-se o sistema de arquivos corrente) ou a criação de partição (ou partições) espe-cíficas para receber dados de swap. A criação de arquivo de swap é útil no momento emque o administrador não tem o conhecimento acerca do tamanho da partição que deveráser criada. Nesse caso, pode-se criar um arquivo de swap para, após um tempo de análiseem relação ao funcionamento do sistema, criar uma partição com o tamanho necessário.

É conveniente salientar que a manipulação do swap por intermédio de partição apre-senta como vantagem um maior desempenho computacional no que tange à velocidade dosistema. Uma outra flexibilidade apresentada pelo Linux é que é permissível a manipulaçãode vários arquivos ou partições de swap simultaneamente. Dessa forma, caso o espaçopreviamente definido torne-se insuficiente, pode-se simplesmente criar arquivos ou parti-ções adicionais. Para se criar um espaço destinado ao swap, pode-se proceder de acordocom a seqüência abaixo:

a) Inicialmente, é necessária a criação do espaço de swap propriamente dito. Para tanto,conforme mencionado anteriormente, pode-se criar um arquivo ou uma partição. Nocaso de arquivo, a criação é realizada pelo seguinte comando:

# dd if=/dev/zero of=/arquivo_swap bs=1024 count=1024

O comando dd realiza a cópia e possível conversão de arquivos (quando solicitado).Para tanto, utiliza os parâmetros if que identifica o arquivo de entrada, of que referenciao arquivo de saída, bs que denota o tamanho dos blocos dos arquivos de entrada e desaída e, por último, count que determina a quantidade de blocos que serão lidos.

É conveniente a criação de um sistema de arquivo cujo tamanho seja múltiplo de 4devido à implementação das páginas no Linux, que têm tamanho de 4KB.

Por outro lado, a partição é criada como qualquer outra, exceto pelo seu tipo específicopara swap (tipo 82 - Linux Swap). Ver detalhes sobre criação de partições na Seção 4.6.

b) Após a criação, a próxima etapa consiste em escrever assinatura ao início da área recémcriada. Tal assinatura contém informações a serem utilizadas pelo kernel do sistema.Essa etapa é alcançada por intermédio do comando mkswap, conforme ilustra o exemploa seguir:

# mkswap /arquivo_swap 1024

Page 117: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 117

c) Finalmente, ativa-se a área de swap criada utilizando-se o comando

# swapon /arquivo_swap

A mesma conseqüência pode ser obtida, porém apenas no momento de iniciação damáquina (boot) caso seja inserida uma linha no arquivo /etc/fstab. Uma região de swappoderá ser removida pela execução do comando swapoff.

O cálculo do tamanho de espaço deverá ser destinado ao swap poderá ser realizadode forma empírica. Para tanto, deve-se somar a quantidade de memória requerida pelasaplicações que serão executadas simultaneamente. Tal estimativa tende a não ser exata,principalmente no caso de que o Linux é um ambiente multiusuário, porém dá uma idéiainicial de espaço a ser utilizado (lembrando que o Linux é capaz de compartilhar códigocaso existam vários usuários executando um mesmo programa).

O refinamento poderá ser feito a partir de observações realizadas em relação à de-manda do espaço de swap e aos processos em execução, por meio dos comandos free eps, respectivamente. Uma alternativa ao comando free consiste em utilizar o sistema dearquivos proc, mais especificamente o arquivo /proc/meminfo.

5.2.2 Buffer cache

O sistema Linux também implementa uma estrutura cujo objetivo visa proporcionar umamaior eficiência computacional: o buffer cache. O buffer cache segue a mesma filosofiade funcionamento de uma cache de memória principal e apresenta um tamanho típico de1 KB. Quanto à escrita, o buffer cache também pode, dependendo do sistema operacional,operar no modo write-back ou write-through.

Não há muita coisa a se fazer quanto ao uso do buffer cache, apenas evitar desligar oequipamento ou retirar discos flexíveis incorretamente. Ou seja, não se deve desligar semshutdown (e/ou sync) e retirar o disco sem desmontá-lo.

No Linux, a sincronização do buffer cache (flush) ocorre, aproximadamente, a cada 30segundos onde o kernel executa, em background, o comando sync. Para tanto, o Linuxmantém ativo o serviço denominado bdflush para se encarregar de tal sincronização. Caso,por ventura, o serviço venha a ser fechado, o kernel avisará propriamente sobre o fato eo bdflush deverá ser iniciado novamente (de forma manual) pela execução do comando/sbin/update.

Page 118: GERENCIAMENTO DE SISTEMAS LINUX

118 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

5.3 COMPONENTES DE UM PROCESSO

Um processo pode ser definido como a instanciação de um programa (código executá-vel). Para tanto, além da transferência do código propriamente dito, são criadas diversasoutras estruturas que permitem o sistema operacional gerenciar o processo em questão.Tais estruturas estão associadas aos valores dos registradores vinculados ao processo(contador de programa, flags, etc), ao proprietário do processo, aos arquivos e unidadesde I/O sob utilização, aos mecanismos de sincronização entre os processos em execuçãoe outras que contém informações importantes, dentre as quais podem ser destacadas asseguintes:

• mapeamento do espaço de endereçamento;

• estado corrente do processo (em execução, pronto para execução, bloqueado, sus-penso, etc);

• prioridade de execução;

• identificação dos processos filhos e do processo pai.

Existem, nos sistemas baseados em UNIX, diversos parâmetros que afetam direta-mente a execução dos processos. Tais parâmetros podem interferir, por exemplo, nasquestões tangentes ao escalonamento de processo, recursos disponibilizados e atuaçãodos sinais. A seguir serão explanados alguns parâmetros que podem ser consideradoscomo mais relevantes em relação à visão de administração de sistemas.

PIDA cada processo é atribuído, pelo kernel do sistema operacional, um identificador nu-mérico (único em um presente momento) denominado PID (process identifier). A atri-buição se faz de forma seqüencial e circular, ou seja, a cada novo processo, tenta-seassociá-lo a um número crescente em relação ao processo instanciado anteriormente.Porém, caso é chegado ao final da capacidade de representação numérica, o kernelreinicia a contagem em 1, procurando por valores que tiveram seus processos asso-ciados já terminados.

PPIDO atributo PPID identifica o processo pai de um certo processo. Em sistemas basea-dos em UNIX, para a criação de um processo novo (utilização do fork), algum processoem execução deverá ser clonado e, após, caso necessário, ter o seu código trocado.A este processo que fora clonado é denominado como processo pai. Desta forma, o

Page 119: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 119

atributo PPID de um processo consiste no PID do processo do qual foi clonado.

Nesse mecanismo, convém destacar o processo init (o qual recebe o valor 1 de PID).O init tem a função de criar inicialmente um shell afim de que os scripts rc possam serexecutados. A partir do init todos os processos utilizados pelo kernel são instanciados.

Além da criação do processos, o init é responsável pela execução da primitiva _exit()cuja função consiste em notificar o kernel sobre a existência de um processo prontopara ser finalizado. Uma questão interessante é que, na morte de processos pais, osprocessos filhos "órfãos"passam a ter como pai o init.

UID e EUIDO UID referencia a identificação (User Identification) do processo, enquanto que EUIDrepresenta o UID efetivo. A distinção é útil para mapear os recursos que o processopoderá se apropriar, ou seja, processos com o mesmo EUID (podendo ter UID distin-tos) terão os mesmos direitos sobre os mesmos recursos.

GID e EGIDAssim como os usuários possuem identificação real e efetiva (UID e EUID, respec-tivamente), situação idêntica ocorre com os grupo. Assim um processo também éreferenciado pelo GID (group identification) e EGID (effective GID). Os propósitos dese manter duas identificações são análogos em relação aos usuários.

Cortesia (Niceness)O atributo cortesia é utilizado pelo kernel para fins de escalonamento de processo.Sendo assim, o kernel manipula a questão de prioridade em função do tempo que oprocesso consumiu de CPU em sua última fatia de execução, o tempo de espera paraexecução e o atributo de cortesia.

O valor de cortesia varia geralmente em uma escala numérica de amplitude 40, ondeum valor mais alto denota um processo com baixa prioridade, ou seja, apresenta umalto grau de cortesia perante os demais processos.

Para se instanciar ou alterar o atributo de cortesia, utiliza-se os comandos nice erenice, respectivamente. A diferença básica entre os dois consiste nos argumentosque lhe são passados. Como o nice é utilizado para instanciar a ordem de prioridadede um processo, ele recebe como argumentos o valor da cortesia e o caminho (path)do programa a ser executado, conforme é ilustrado abaixo:

# nice +8 /users/someone/task01

Page 120: GERENCIAMENTO DE SISTEMAS LINUX

120 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Por sua vez, o comando renice, pelo fato de ser utilizado para modificar o valor decortesia associado a um processo, aceita como parâmetros o valor da cortesia e oPID do processo (ou às vezes é possível passar a referência de um usuário):

# renice +8 12345

O usuário deve ficar atento quanto à utilização dos comandos nice e renice, pelo fatode não haver uma padronização em relação aos seus argumentos. Por exemplo, al-guns sistemas utilizam uma faixa de cortesia entre 0 a 39 e outros entre –20 a 20;alguns sistemas solicitam o valor de cortesia como um valor absoluto enquanto ou-tros requerem que o valor seja a variação frente ao atualmente em curso e, também,existem variações em relação à sintaxe dos comandos. Recomenda-se, antes de seuuso, que o administrador verifique as páginas de manuais desses comandos.

Terminal de controle (TTY)Terminais de controle representam interfaces entre o processo e as saídas-padrão(canais de entrada, saída e de erro). Um outro objetivo da utilização destes terminaisreside no fato de atuarem junto aos pedidos de interrupção do sistema a nível deprocessos (sinais).Um dos comandos úteis para a manipulação dos terminais é o stty. Por intermédiodesse, há a possibilidade de alteração e consulta em relação às configurações dosdrivers de terminal. Através do comando stty, pode-se configurar, por exemplo, umterminal e seus caracteres de controle.Por exemplo, no comando abaixo, um terminal de hardware é configurado em umaoperação de trabalho a 9600 bps, paridade par e sem tabulação de hardware. Nota-seque o sinal de menos (no caso o campo tabs) desabilita a característica referenciadapelo argumento.

# stty 9600 even -tabs

Por outro lado, o comando subseqüente configura os caracteres de controle relativosà interrupção, cancelamento e tecla de erase como ^C, ^U e ^H, respectivamente. Adiferença entre interrupção e cancelamento de um processo é descrita na Seção 5.4deste capítulo.

# stty intr ^C kill ^U erase ^H

Convém mencionar que um terminal também pode ser iniciado por intermédio do co-mando tset. A este comando pode ser passado como parâmetro a identificação deum tipo de terminal pré-definido ou utilizá-lo sem parâmetros de modo que o comandopossa usar a variável de ambiente TERM.

Page 121: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 121

5.4 SINAIS

Sinais representam requisições de interrupção a nível de processos, permitindo e obje-tivando, entre outros:

a) comunicação entre processos;

b) ações do usuário, do tipo: suspender processos (^Z), finalizar (^C), “congelar” saída(^S), etc. (esses sinais são enviados ao processo por intermédio do driver de terminal);

c) ações do administrador por intermédio do comando kill (para reiniciar, finalizar pro-cessos, etc.);

d) finalização, pelo kernel, de processos quantos estes executarem, por exemplo, algumaoperação ilegal, acesso indevido à regiões de memória, etc.

Tabela 5.1: Sinais Comuns Utilizados em Ambientes UNIX-like

# Nome Descrição Padrão Capturado Bloqueado Dump mem.

1 HUP Hangup Terminar Sim Sim Não2 INT Interrupção Terminar Sim Sim Não3 QUIT Fechamento Terminar Sim Sim Sim9 KILL Eliminação Terminar Não Não Não* BUS Erro de barramento Terminar Sim Sim Sim* SEGV Falha segmentação Terminar Sim Sim Sim15 TERM Terminação de software Terminar Sim Sim Não* STOP Parada Parar Não Não Não* TSTP Parada de teclado Parar Sim Sim Não* CONT Continue após parada Ignorar Sim Não Não* WINCH Janela alterada Ignorar Sim Sim Não* USR1 Definido pelo usuário Terminar Sim Sim Não* USR2 Definido pelo usuário Terminar Sim Sim Não

A Tabela 5.1 apresenta os sinais mais comuns dentro sistemas derivados do UNIX. Osmesmos poderão ser utilizados diretamente com o comando kill, conforme será descritomais adiante. Nessa tabela, os itens explicitados nas colunas possuem as seguintes deno-tações:

# → representa o número do sinal. Alguns sinais, como o HUP utilizam numeração padrãoem todos os sistemas baseados no UNIX. Porém outros podem variar de sistema para

Page 122: GERENCIAMENTO DE SISTEMAS LINUX

122 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

sistema (na tabela marcados com um asterisco). Para obter informações acerca danumeração correta no sistema em uso, o arquivo /usr/include/signal.h podeser consultado ou, ainda, consultar o manual, através de man 7 signal.

Nome → nome utilizado por convenção. Em alguns sistemas é comum encontrar o prefixoSIG, como por exemplo, SIGHUP para o caso do HUP.

Descrição → descrição da ação associada ao sinal.

Padrão → representa a ação que deverá ser tomada frente ao processo: se terminá-lo,interrompê-lo momentaneamente (parar) ou ignorar o sinal (neste caso, o sinal podeser manipulado por algum módulo tratador associado ao processo).

Capturado → indica se o sinal poderá ser capturado e tratado previamente por algumarotina de tratamento de sinais associada ao processo em questão. Caso a capturanão seja possível, a ação do sinal é imediata sobre o processo por ação do kernel dosistema.

Bloqueado → os programas poderão solicitar o bloqueio quanto ao recebimento de sinais.Nesse caso, os novos sinais que porventura cheguem ao processo poderão ser enfi-leirados para futura manipulação.

Dump mem. → apenas informa se haverá ou não o descarregamento (dump) de memóriana ocorrência do sinal.

Uma explicação sumária dos sinais apresentados na Tabela 5.1 é feita a seguir:

HUP: utilizado para reiniciar serviços ou terminar processos ordinários. Desta forma, oHUP pode ser utilizado para atualizar a lista de recursos associados a um serviço.No caso em que é desejável tornar processos em background imunes ao sinal HUP,pode-se evocá-los por intermédio do comando nohup.

INT: sinal de interrupção, sendo geralmente associado ao caracter de controle ^C.

QUIT: denota uma solicitação para o processo terminar completamente a execução. Nestecaso, espera-se que o processo receptor limpe o seu estado e se finalize. Comoconseqüência do QUIT, um dump de memória é produzido;

KILL: finaliza um processo a nível de sistema operacional. Conforme citado na Tabela 5.1,o KILL nunca pode ser bloqueado e capturado pelos processos.

BUS: sinal indicativo de erro do sistema referente ao barramento.

SEGV: sinal indicativo de erro do sistema no que tange ao controle de memória virtual.

TERM: semelhante ao QUIT, porém não produz dump de memória.

STOP: suspende a execução de um processo até o recebimento de um sinal CONT.

TSTP: igualmente ao STOP, suspende a execução de um processo. Porém os processosantes de serem suspensos, limpam os seus estados e, em seguida, enviam para sipróprios um sinal STOP.

Page 123: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 123

CONT: continua a execução de um processo interrompido pela utilização do sinal STOP.

WINCH: sinal utilizado para que os processos possam modificar suas informações refe-rente às saídas-padrão devido à possíveis reconfigurações de, por exemplo, emula-dores de terminais.

Como já mencionado, os sinais podem ser manipulados pelo comando kill. Dessaforma, por exemplo, caso haja a necessidade de reiniciar um processo, pode-se utilizá-loda seguinte forma:

# kill -1 <processID>

No caso acima, haverá a reiniciação do processo identificado pelo seu ID (processID).Por outro lado, caso haja a necessidade de forçar o término de um processo, basta substituiro argumento ‘-1’ (um) pelo ‘-9’.

5.5 MONITORAÇÃO DE PROCESSOS

A monitoração de sistemas derivados do UNIX pode ser realizada pela execução doscomandos ps e top. O comando ps possui variações em termos de seus parâmetros deentrada e a forma de saída exibida ao usuário. Tais variações são resultantes de implemen-tações distintas entre sistemas derivados do FreeBSD e do System V.

As variações do ps, entretanto, fornecem informações semelhantes a serem utilizadaspelos usuários normais e administradores de sistemas UNIX. A utilização mais comum dops é utilizando-se os argumentos aux como descrito no exemplo abaixo referente a siste-mas RedHat:

# ps aux

No caso acima, o argumento ‘a’ referencia a todos os processos. Já o parâmetro ‘u’torna ativa a exibição de todos os usernames e, por último, o ‘x’ indica todos os processosnão vinculados a um terminal. A saída do ps passando como argumentos o termo aux

exibe as informações descritas na Tabela 5.2.

Uma outra maneira bem interessante de utilizar o comando ps consiste em utilizar osparâmetros lax (funcionais nas versões de ps disponibilizadas no RedHat e derivados),conforme a linha de comando abaixo:

# ps lax

Page 124: GERENCIAMENTO DE SISTEMAS LINUX

124 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Tabela 5.2: Informações Exibidas na Saída do Comando ‘ps aux’

Campo Descrição

USER Proprietário do processo na forma de username (login)PID Identificação do processo% CPU Porcentagem de CPU utilizada pelo processo% MEM Porcentagem de memória virtual utilizada pelo processoVSZ Tamanho virtual do processo (em KB)RSS Tamanho configurado residente (nu̇mero de páginas de 1KB na memória)TT Identificação do terminal de controleSTAT Estado do processo (ver Tabela 5.3)STARTED Momento de início de execução do processoTIME Tempo de CPU consumido pelo processo até entãoCOMMAND Comando de linha e argumentos associados na iniciação do processo

Tabela 5.3: Notações Utilizadas pelo Campo STAT

Estado Descrição

R Em execuçãoI Dormindo (mais do que 20 segundos)T Parado

Flags Adicionais

> Prioridade mais alta do que o normalN Prioridade mais baixa que o normal< Excedendo limite soft de memóriaA Solicitou troca aleatória de páginaS Solicitou substituição FIFO de páginaV Processo suspenso durante um vfork

Estado Descrição

D Espera no discoS Dormindo (menos que 20 segundos)Z Zumbi

Flags Adicionais

E Processo tentando sair (exit)L Páginas bloqueadas na memóriaX Processo sendo ratreado ou depurados Líder de sessão – terminal de controleW Processo é descarregado em disco+ Processo em foreground

Neste caso, a saída exibirá as informações: UID, PID, PPID, CPU, PRI, NI, VSZ, RSS,WCHAN, STAT, TT, TIME e COMMAND. Os campos que diferem em relação à utilização dops passando como argumento aux é ilustrado na Tabela 5.4.

Por outro lado, uma visão não instantânea dos processos pode ser obtida utilizando-seo comando top (utilitário desenvolvido por William Lefebvre). O referido utilitário forneceregularmente um resumo acerca dos processos ativos, exibindo informações atualizadas acada unidade de tempo (o padrão equivale a cada 10 segundos). Isso é feito eficientemente,pois o utulitário consome apenas uma pequena fração de processamento da CPU.

Page 125: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 125

Tabela 5.4: Campos da Saída do ‘ps lax’ que Diferem da Execução do ‘ps -aux’

Campo Descrição

UID Identificação do usuário (sob a forma de UID - User ID)PPID Identificação do processo paiCPU Utilização do processador para processamentoPRI Prioridade do processoNI Valor "nice"WCHAN Endereço de um evento pelo qual o processo está esperando. Caso o campo

esteja em aberto, significa que o processo está como “running”

Além das informações dos processos de forma semelhante à execução do ps, o co-mando top também disponibiliza as relativas ao sistema como um todo. Como exemplodessas informações pode-se citar a quantidade de memória total e utilizada do sistema,consumo de CPU frente aos processos dos usuários e do sistema e quantidade de proces-sos em execução e sua distribuição segundo seu estado corrente.

Uma outra funcionalidade importante do top é a possibilidade de envio de sinais aosprocessos e a manipulação do valor de cortesia (prioridade), aceitando para tanto, entradaspor intermédio do teclado. Uma utilização importante consiste em monitorar processossuspeitos (por exemplo, aqueles que já derrubaram o sistema). Para tanto, utiliza-se o top

com o argumento -q afim de torná-lo um processo com alta prioridade de execução.

Alguns processos, naturalmente ou por falha de implementação/execução podem con-sumir grandes frações de um recurso, como CPU e espaço em disco. Nesse caso, há umdesequilíbrio no comportamento do sistema em virtude de atrasos e a falta de sincroniza-ção em relação aos componentes do sistema. Tais processos são chamados popularmentecomo processos fugitivos.

Porém o administrador deverá ter bom senso ao se deparar com processos fugitivos pelapossibilidade de não conhecer o seu comportamento real, por exemplo, existem processos(como simulações) que realmente têm um alto consumo de processamento de CPU. Nessasituação, tais processos deverão ser examinados afim de que se possa tomar uma decisãoacertada.

O exame dos processos fugitivos pode ser realizada por intermédio de contato com oproprietário, pesquisa acerca do programa em execução, sondagem no diretório do propri-etário para verificar os tipos de arquivos gravados ou examinar o código-fonte do processofugitivo. Neste meio tempo, caso achar conveniente, o administrador poderá suspender

Page 126: GERENCIAMENTO DE SISTEMAS LINUX

126 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

temporariamente o processo enviando ao mesmo um sinal STOP e, após a verificação,continuá-lo pelo envio do sinal CONT ou eliminá-lo com o KILL.

Por sua vez, os processos que consomem espaço em disco não poderão ser visuali-zados pelo ps. Nesse caso, a verificação pode ser realizada utilizando-se os comandosfuser e lsof, a fim de verificar informações acerca dos arquivos e diretórios. O comandofuser informa quais os usuários (UID) cujos processos sob suas responsabilidade estãoutilizando os arquivos passados como argumento e, o lsof lista os arquivos abertos.

Por exemplo, caso algum usuário execute o script apresentado na Figura 5.1, o sistematenderá a preencher sua tabela de i-nodes, não permitindo, desta forma, que os usuárioscriem novos arquivos e diretórios. Com a execução desse script, será criada uma árvoreextremamente profunda de diretórios, sendo geralmente impraticável ser removida pelo co-mando “rm -r”. Dessa forma, o administrador deverá criar um script que caminhe pelosníveis dos diretórios removendo-os à medida os mesmos são percorridos até o diretórioinicial.

While 1

mkdir diretoriosacana

cd diretoriosacana

touch arquivoigualmentesacana

end

Figura 5.1: Script que Cria uma Árvore de Diretórios Extremamente Profunda

5.6 INICIANDO E ENCERRANDO O SISTEMA

5.6.1 Visão Geral

Para a etapa de iniciação (bootstraping), é requerida, por parte do administrador, muitoconhecimento de modo que ele possa configurar o ambiente da melhor forma possível. Emprimeira instância, o administrador configura o processo de boot por intermédio da ediçãodos arquivos referentes aos scripts de sistema (denominados como rc – run command).

Uma visão melhor dos scripts será abordada mais adiante. Uma outra configuraçãoque pode ser realizada consiste em modificar alguns parâmetros do kernel como o númeromáximo de i-nodes que poderão ser utilizados por um processo. Tal mudança é realizadasobre alguns arquivos localizados no sistema de arquivo /proc. A Tabela 5.5 mostra algunsdesses parâmetros, com os valores padrões de ajuste e seus respectivos arquivos.

Page 127: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 127

Tabela 5.5: Arquivos Importantes de Configuração do Kernel Localizados no /proc

Arquivo Default Descrição/proc/sys/fs/file-max 4096 Nu̇mero máximo de arquivos abertos por

processo/proc/sys/fs/inode-max 16384 Nu̇mero máximo de inodes abertos por

processo/proc/sys/net/ipv4/ip_forward 0 Permite encaminhamento de IP quando

configurado como 1/proc/sys/net/ipv4/icmp_echo_ignore_all 0 Ignora pings de ICMP quando configurado

como 1/proc/sys/net/ipv4/icmp_eco_ignore_broadcasts 0 Ignora pings de broadcast quando confi-

gurado como 1

Para se alterar o valor de tais arquivos, pode utilizar simplesmente o comando echo,redirecionado sua saída, conforme é ilustrado a seguir:

# echo 512 >> /proc/sys/fs/file-max

No caso acima, o número máximo de arquivos abertos pelo sistema passa a valer 512.Para possibilitar tais mudanças de forma permanente é necessário introduzir as linhas como comando echo em scripts rc. Isso porque o sistema de arquivo /proc é um sistema virtualmontado na memória volátil do computador, como comentado na Seção 4.2.3.

Antes que o sistema esteja disponível para a operação normal, acontecem alguns pas-sos: carregamento e inicialização do kernel, detecção e configuração dos dispositivos, cria-ção de processos espontâneos do sistema (não criados com fork) e execução dos scripts.Convém salientar que, com o kernel carregado na memória principal e após realizada adetecção e configuração dos dispositivos, é instanciado o processo init, com PID igual a1, que tem a função de, por exemplo, desencadear todo o restante do processo de boot,como por exemplo, a execução dos scripts rc.

Existem dois modos de iniciação do sistema Linux: a manual e a automática. No modomanual, o administrador participa do processo de boot interagindo com o sistema antes daexecução dos scripts de sistema. Este modo é extremamente útil quando algum problemaimpedir o boot automático, como por exemplo um sistema de arquivos corrompido. Por suavez, o modo automático realiza o processo de boot completamente sem a intervenção dooperador.

Page 128: GERENCIAMENTO DE SISTEMAS LINUX

128 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

5.6.2 O Processo init

O processo init é a última etapa no procedimento de boot e possui um PID valendo 1. Eleé responsável pela execução dos scripts conforme definido no arquivo /etc/inittab (queserá visto na próxima seção). Porém, a execução dos scripts passa a ser responsabilidadede um processo instanciado pelo init representado pelo script localizado em /etc/rc.

O script /etc/rc, geralmente um link para /etc/rc.d/rc, executa uma série deoutros scripts localizados nos subdiretórios /etc/rc.d/rc0.d/, /etc/rc.d/rc1.d/,/etc/rc.d/rc2.d/, etc. Convém salientar que o número introduzido ao nome do dire-tório está vinculado ao nível operacional, por exemplo, /etc/rc.d/rc3.d/ refere-se aosscripts de nível 3. Tais níveis serão abordados a seguir.

Os scripts mencionados acima são executados em cada etapa do processo de boot e,podem ser classificados como scripts de boot (cujos nomes são iniciados pela letra ‘S’ - star-tup) e scripts de shutdown (com seus nomes iniciados pela letra ‘K” - kill). Os números quesucedem estas letras denotam a ordem de operação (ordem seqüencial ascendente). Taisarquivos, na verdade, são links simbólicos aos arquivos localizados no diretório init.d,que normalmente está localizado no /etc. O RedHat apresenta, além dos scripts mencio-nados, o script rc.local que é o último a ser executado.

Conforme já citado, existem, em ambientes derivados do UNIX, diversos níveis operaci-onais (runlevels), listados na Tabela 5.6. Sistemas RedHat suportam até 10 níveis operaci-onais, porém os numerados de 7 a 9 são indefinidos. Tais níveis poderão ser escolhidos porintermédio do parâmetro ao init (por exemplo “init 3”, caso seja desejado o nível 3) ouutilizar o comando telinit.

Tabela 5.6: Modos de Iniciação de Sistemas Derivados do UNIX

Runlevel Descrição

0 Shutdown1 Modo monousuário2 Multiusuário sem serviços de rede3 Multiusuário – modo textual4 Reservado para uso local ou, no caso do Slackware, X-windows5 XDM X-window (Redhat/System V)6 RebootS ou s Modo monousuário/manutenção (Slackware)M Modo multiusuário (Slackware)

Page 129: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 129

Após o processo de boot propriamente dito, o init criará múltiplas instâncias de pro-cessos getty que serão responsáveis por esperar pelos logins dos usuários a fim deiniciar seus referidos shells. Além de gerenciar o processo de boot, o init também ge-rencia as etapas durante o processo de shutdown, também conforme instruções inseridasno arquivo /etc/inittab.

5.6.3 O Arquivo /etc/inittab

Como mencionado anteriormente, o arquivo /etc/inittab tem a função de direcionaro processo de iniciação do sistema, como por exemplo, indicar o runlevel padrão. A linhaa seguir indica que o runlevel default é o 5 (os campos serão explicados em seguida).

id:5:initdefault:

Cada linha do arquivo /etc/inittab é formada pelos campos:

id:runlevels:action:process

Onde:

Id: Apenas um identificador da entrada (linha) contendo de 1 a 4 caracteres.

Runlevels: Indica em quais runlevels a ação referida será processada.

Action: Ação a ser tomada. A Tabela 5.7 indica quais as possíveis ações que poderãoconstar no campo action.

Process: Caminho ao código executável que será processado.

A Figura 5.2 apresenta um exemplo de um arquivo /etc/inittab. A interpretação dessearquivo é relativamente simples e deixada como exercício para o leitor.

5.6.4 Encerramento e Reinicialização do Sistema

As etapas que envolvem encerramento (com ou não reinicialização) são também crí-ticas para o bom funcionamento do sistema, principalmente em relação aos sistemas dearquivo. Praticamente existem três comandos principais para a realização destes eventos:shutdown, halt e reboot.

O comando shutdown é forma mais segura e completa para se encerrar, reiniciar outornar o ambiente monousuário. A escolha da ação é feita em função dos argumentos

Page 130: GERENCIAMENTO DE SISTEMAS LINUX

130 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Tabela 5.7: Possíveis Ações do Campo Action do inittab

Nome da ação Descriçãorespawn O processo será executado, independente do runlevel, durante o

processamento dos scripts pelo initoff Nada a ser realizadoondemand Processos marcados como ondemand, irão ser executados apenas no

runlevel especificadoinitdefault Indicativo do runlevel default. O campo referente ao processo é igno-

radosysinit O processo será executado no processo de boot antes de qualquer

outra etapa, desprezando-se, assim, o runlevelpowerwait Em sistemas dotados de UPS, o processo referenciado pela linha será

executado durante uma queda de energia (na espera do retorno daenergia)

powerfail Semelhante ao powerwait, exceto pelo fato de que o init não com-pletará a ação em curso

powerokwait O evento será processado tão logo a energia seja restaurada (sistemascom UPS)

powerfailnow Em sistemas com UPS, esse evento será executado quando na ausên-cia de energia principal e a bateria também debilitada

ctrlaltdel Evento será executado quando o init recebe um sinal provocado pelopressionamento de CRTL-ALT-DEL

passados como parâmetro). Com o comando consegue-se, por exemplo, além dos eventosmencionados: determinar o momento do evento, avisar os usuários da ocorrência do eventoafim de que eles possam encerrar seus aplicativos e manipular os dados gravados em discoantes do encerramento e executar o fsck após a reinicialização.

Por outro lado, o comando halt representa uma maneira mais simples de se encerrar osistema, realizando apenas as ações essenciais no processo de desligamento: realiza umlog da operação, elimina processos não essenciais, evoca o sync, espera as gravaçõesnos sistemas de arquivos serem concluídas e, finalmente, suspende o kernel. Existe aopção ‘-n’ que não evoca o sync (fazendo com que não haja a sobrescrita de versõesantigas dos superblocos após a execução de um fsck) e a opção ‘-q’ que representa umaparada quase imediata (não escrevendo log, realizando sys e derrubando processos).

Finalmente, o reboot é semelhante ao halt, porém causa a reiniciação da máquina.A mesma ação pode ser realizada com “shutdown -r”.

Page 131: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 131

# Level to run in

id:2:initdefault:

# System initialization before anything else.

si::sysinit:/etc/rc.d/bcheckrc

# Runlevel 0,6 is halt and reboot, 1 is maintenance mode.

l0:0:wait:/etc/rc.d/rc.halt

l1:1:wait:/etc/rc.d/rc.single

l2:2345:wait:/etc/rc.d/rc.multi

l6:6:wait:/etc/rc.d/rc.reboot

# What to do at the "3 finger salute".

ca::ctrlaltdel:/sbin/shutdown -t5 --rf now

# Runlevel 2{&}3: getty on console, level 3 also getty on modem port.

1:23:respawn:/sbin/getty tty1 VC linux

2:23:respawn:/sbin/getty tty2 VC linux

3:23:respawn:/sbin/getty tty3 VC linux

4:23:respawn:/sbin/getty tty4 VC linux

S2:3:respawn:/sbin/uugetty ttyS2 M19200

Figura 5.2: Arquivo /etc/inittab

5.6.5 Modo Monousuário

O modo monousuário é extremamente útil para a realização de manutenção em ambi-entes Linux. Caso o administrador esteja utilizando o GRUB ou o LILO como gerenciadorde boot1, e possível iniciar o ambiente em modo monousuário da seguinte forma:

Com LILO: no prompt do LILO, digite “linux single”. Caso o LILO não tenha en-trada para uma imagem antiga e for necessário realizar o boot pelo disquete porémdeixando como partição raiz aquela localizada no hd, pode-se proceder da seguinteforma:

boot: linux single root=/dev/hdXX initrd=

Nesse caso, o XX deverá ser substituído pela identificação da partição que se tornaráa root e, deixando-se em aberto o initrd faz com que seja desprezada a imagem

1Mais detalhes sobre LILO e GRUB na Seção 5.9

Page 132: GERENCIAMENTO DE SISTEMAS LINUX

132 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

do diskette de boot, entrando em modo monousuário imediatamente. Um outro pa-râmetro importante que poderá ser utilizado consiste no init=path onde o path

especifica o caminho para um programa init que será executado no momento doboot.

Com GRUB: os argumentos são idênticos ao LILO modificando-se apenas a forma deintroduzí-los ao prompt. Neste caso, basta selecionar a linha relativa ao Linux e editá-la, retornando, em seguida, à tela principal do GRUB afim de finalizar o processo daescolha da imagem.

5.7 GERENCIAMENTO DE SERVIÇOS

Um tipo especial de processo a que o administrador deve estar atento são os serviços.Serviços podem ser entendidos como recursos oferecidos a aplicativos clientes por pro-gramas servidores (daemons). Esses daemons geralmente ficam residente em memória,executando com permissões especiais. Exemplos clássicos de servidores são o httpd, osendmail e vários outros.

Em geral, esses serviços oferecem quatro tipos básicos de ações para seu controle:status, start, stop e restart. A ação status informa se o servidor está rodando ecom qual PID. Para iniciar um serviço, usa-se a ação start. Esse serviço pode ser paradocom a ação stop. Para reiniciliazar um servidor, por motivos de reconfiguração ou outros,usa-se a ação restart.

Na maioria das distribuições Linux, os arquivos de serviço ficam geralmente no diretório/etc/rc.d/init.d. Assim, para reiniciar o serviço Web, bastaria executar o comando

# /etc/rc.d/init.d/httpd restart

Uma forma mais adequada e interessante é utilizar-se do comando service. Nessecaso, bastaria executar:

# service httpd restart

Como pode ser percebido, a sintaxe desse comando é bem simples, exigindo que sepasse apenas o nome do serviço e a ação a ser tomada. Uma última observação a serfeita com relação a serviços é que outras ações podem estar disponibilizadas. Para sa-ber quais as ações disponibilizadas por um servidor, basta executar o comando service

nome_do_servico. Como não foi informada nenhuma ação, ele irá informar as açõesdisponíveis.

Page 133: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 133

5.8 DISQUETES DE EMERGÊNCIA

Discos de emergência são sempre úteis para poder iniciar sistemas com problemasque impedem realizar o boot com sucesso. A partir do boot via disquete, pode-se realizar aetapa de manutenção do sistema. Existem duas maneiras de se criar um disco de boot. Aprimeira consiste simplesmente na utilização do aplicativo mkbootdisk, conforme ilustra aseguir:

# mkbootdisk -device /dev/fd0 2.2.14

O comando mkbootdisk, nesse caso, recebeu como parâmetro o dispositivo utilizadopelo disquete e a versão do kernel. Porém, o comando mkbootdisk apenas pode serexecutado pelo usuário root e em kernels modularizados (não monolíticos). Caso nãoseja possível utilizar esse comando, a seqüência a seguir ilustra uma segunda maneira:

a) formatar o disco:

# fdformat /dev/fd0H1440

b) copiar a imagem vmlinuz de /boot ao disquete:

# cp /boot/vmlinuz /dev/fd0

c) determinar o dispositivo raiz do kernel:

# rdev

d) instanciar o dispositivo raiz no disquete utilizando a saída do comando anterior – supo-nha, por exemplo, /dev/sda10:

# rdev /dev/fd0 /dev/sda10

e) marcar o dispositive raiz como read-only:

# rdev -R /dev/fd0 1

f) reiniciar o sistema para teste (inserindo o disquete no driver):

# reboot

Apenas uma dica: caso o problema de não conseguir iniciar o sistema normalmentepelo hd foi gerado pela adição de um novo device ou pelo upgrade do kernel, talvez sejanecessário atualizar as entradas localizadas no /dev. Para tanto, basta utilizar os seguintescomandos:

# cd /dev

# ./MAKEDEV update

Page 134: GERENCIAMENTO DE SISTEMAS LINUX

134 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

5.9 GERENCIADORES DE BOOT

Existem vários gerenciadores de boot disponíveis no mercado capazes de inicializar oLinux. É possível, inclusive, usar gerenciadores de boot comerciais (como o gerenciadordisponível no Windows NT ou Windows 2000). Os mais conhecidos e utilizados no mundoLinux são, com certeza, o LILO2 e o GRUB3. Mas não podem ser esquecidos também oGAG4 e o XOSL5, esse último totalmente em interface gráfica e bastante promissor. Nestaseção serão abordados apenas o LILO e o GRUB.

5.9.1 LILO

LILO é a abreviação de LInux boot LOader, ou seja, é um aplicativo responsável pelacarga do sistema operacional na máquina. O LILO apresenta a flexibilidade de poder fazera carga a partir de qualquer sistema de arquivo, além de possibilitar ao usuário escolher osistema operacional que será carregado. Os arquivos pertencentes ao LILO poderão serencontrados no diretório /etc/lilo ou, nas versões mais novas, no /sbin e /boot.

Quando do upgrade do LILO, há a necessidade de realizar um update do setor deboot a fim de adicionar as novas localizações e formatos utilizados. Para tanto, bastaexecutar o aplicativo lilo (geralmente em /sbin/lilo). As modificações também po-derão ser realizadas manualmente, atuando diretamente no arquivo /etc/lilo.conf (ou/etc/lilo/config para as versões mais antigas do LILO). A Figura 5.3 apresenta umexemplo de configuração do LILO devidamente comentado. Mais detalhes podem ser con-seguidos via man lilo e man lilo.conf.

5.9.2 GRUB

O GRUB (GRand Unified Bootloader), foi originalmente projetado e implementado porErich Stefan Boleyn e hoje é distribuído como software livre por intermédio do projeto GNU.Como características principais, podem ser destacadas as seguintes:

• utiliza um arquivo de configuração textual;

• a interface por meio de menus;

• possui flexibilidade mediante linha de comando;

• suporta múltiplos tipos de sistemas de arquivos;

2LILO: http://brun.dyndns.org/pub/linux/lilo/3GRUB: http://www.gnu.org/software/grub/grub.html4GAG: http://gag.sourceforge.net/5XOSL: http://www.xosl.org/ ou http://xosl.sourceforge.net.

Page 135: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 135

# mostra menu do lilo

prompt

# espera 20 segundos antes de bootar o SO default

timeout=20

# sistema default é linux

default=linux

# onde fica o setor de boot (geralmente o primeiro disco)

boot=/dev/hda

# primeiro SO: Linux

image=/boot/vmlinuz-2.4.18-3

label=linux

initrd=/boot/initrd

read-only

root=/dev/hda5

#hdc e’ gravador de CDs, habilitando emulacao SCSI

append="hdc=ide-scsi"

# segundo SO: Windows

other=/dev/hda1

optional

label=Windows

Figura 5.3: Exemplo de /etc/lilo.conf

• suporta descompressão automática;

• acessa dados em qualquer dispositivo instalado;

• faz tradução de geometria independente;

• suporta modo LBA (Logical Block Address);

• pode realizar downloads de imagens pela rede;

• suporta sistemas diskless (sem unidades de disco);

• suporta terminais remotos.

A configuração manual pode ser realizada mediante a edição em um dos arquivos/boot/grub/menu.lst ou /etc/grub.conf (em sistemas RedHat, esses dois arqui-vos são links simbólicos para /etc/boot/grub.conf). Para tanto, pode-se utilizar umdos comandos listados na Tabela 5.8.

Para se ter uma melhor idéia do arquivo de configuração do GRUB, a Figura 5.4 apre-senta um exemplo comentado. Além desses apresentados, o GRUB admite diversos outroscomandos aqui não citados. Maiores detalhes sobre o GRUB podem ser obtidos através deinfo grub.

Page 136: GERENCIAMENTO DE SISTEMAS LINUX

136 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Tabela 5.8: Principais Comandos a Serem Utilizados em /boot/grub/menu.lst

Comando Descrição

default num Configura entrada default (referenciada por num – sendo a numeração ini-ciada em zero). Caso o comando não seja especificado, a entrada defaultserá a de nu̇mero 0 (zero)

fallback num Caso a iniciação mediante a entrada default falhe, o GRUB esperará ummomento pela interação do usuário. Caso esta não venha a acontecer,será realizada uma tentativa de iniciar a máquina por usando a entradaapontada pelo comando fallback

hiddenmenu Utilizando-se este comando, o menu não será exibido e a entrada defaultserá iniciada após o término do tempo especificado por timeout. O usuáriopode solicitar o aparecimento do menu pressionando <ESC> antes dotimeout

password passwd[new-config-file]

Desabilita todos os controle de edição interativa e entradas protegidaspelo comando lock. Caso passwd seja entrada, será lido o new-config-file como novo arquivo de configuração. Caso o new-config-file não sejaespecificado, o GRUB simplesmente irá liberar as instruções privilegiadas

timeout sec Instancia o tempo máximo para a escolha da imagem pelo usuário (em se-gundos). Caso o usuário não intervenha neste período, a entrada defaultserá iniciada

title name Inicia uma entrada de boot (veja exemplo de arquivo a seguir)

Page 137: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Processos 137

#/boot/grub/menu.lst

# Boota a primeira entrada, por default

default=0

# Boota automaticamente após 30 segundos

timeout=30

# Se der falha boote a segunda entrada

fallback 1

# Configura uma tela para o boot -

# (hd0,1) indica primeiro disco (hd0), segunda partição (1)

# arquivo está em /boot/grub/splash.xpm.gz

splashimage=(hd0,1)/grub/splash.xpm.gz

# Agora vem as opções do menu

# Configurando o Linux com /boot em /dev/hda2

title Linux Grafico (2.4.18-10)

# /boot em /dev/hda2

root (hd0,1)

# 5 - inicia em modo gráfico multiusuário

# hdc é gravador de CD, precisa de emulação SCSI

kernel /vmlinuz-2.4.18-10 ro root=/dev/hda5 hdc=ide-scsi 5

initrd /initrd-2.4.18-10.img

title Linux Texto (2.4.18-10)

root (hd0,1)

# 3 - inicia em modo texto multiusuário

kernel /vmlinuz-2.4.18-10 ro root=/dev/hda5 hdc=ide-scsi 3

initrd /initrd-2.4.18-10.img

# Configura o Windows em /dev/hda1

title Windows [TM]

rootnoverify (hd0,0)

chainloader +1

# Instala o GRUB no disco rígido

title Install GRUB into the hard disk

root (hd0,0)

setup (hd0)

# Permite trocar as cores do menu

title Trocar Cores

color light-green/brown blink-red/blue

Figura 5.4: Arquivo /boot/grub/menu.lst

Page 138: GERENCIAMENTO DE SISTEMAS LINUX

138 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

5.10 COMENTÁRIOS FINAIS

O gerenciamento de tarefas em Linux é relativamente simples e, em geral, requer ape-nas o uso dos comandos ps e kill. Existem várias interfaces gráficas para esses coman-dos, mas é importante que o administrador conheça suas peculariedades no modo texto.Além disso, o Linux é altamente configurável no que se diz respeito ao processo de inici-alização e encerramento. O poder de escolha é alto, inclusive no que se diz respeito aogerenciamento do processo de boot.

Este capítulo não abrange tudo a esse respeito, mas apresenta os aspectos principaisnecessários à uma boa administração. Espera-se, como sua leitura, que o administradorLinux tenha uma melhor visão de como são executados os programas em Linux, bem comose dá o processo de inicialização do kernel.

Page 139: GERENCIAMENTO DE SISTEMAS LINUX

6GERENCIAMENTO DE USUÁRIOS

6.1 COMENTÁRIOS INICIAIS

Linux, como qualquer Unix, é um sistema multiusuário. Isso implica que podem existirvários usuários para uma mesma estação, como ilustra a Figura 6.1. Quando isso acontece,uma preocupação para os administradores dessa estação é o gerenciamento dos recursosde cada usuário em particular. Afinal, como garantir uma configuração individualizada deacesso a essa estação? Outra questão importante é a de como garantir a privacidade dosdados de cada usuário.

Figura 6.1: Sistema Multiusuário

Page 140: GERENCIAMENTO DE SISTEMAS LINUX

140 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Em sistemas monousuários, fazer esse gerenciamento é uma tarefa extremamentecomplicada. Um usuário de um computador com Windows 98, por exemplo, pode ter seusdocumentos alterados ou apagados sem dificuldade alguma por qualquer pessoa que tenhaacesso ao computador. A menos, é claro, que se esteja utilizando programas comerciais deterceiros com essa finalidade.

Em sistemas Unix, a solução encontrada para esse tipo de problema foi o uso de contasde usuários. Essa filosofia permitem que vários usuários acessem a mesma máquina,inclusive ao mesmo tempo em ambiente de rede, sem interferir diretamente no ambiente deoutro usuário. O objetivo deste capítulo é, portanto, definir o que é uma “conta” e apresentaros principais procedimentos e conceitos ligados à administração de usuários em Linux.

6.2 CONTAS DE USUÁRIOS

Uma conta pode ser vista como uma entidade a nível do sistema operacional que arma-zena informações do tipo:

• nome do usuário;

• identificador do usuário no sistema;

• grupo (ou equipe) do usuário;

• diretório pessoal do usuário (onde ele armazena suas informações);

• interpretador de comandos que o usuário utiliza;

• credenciais ou senhas do usuário;

• permissões do usuário.

Essas informações vão indicar ao sistema operacional como o usuário deve ser tratadodurante o uso da estação. Obviamente, cada sistema operacional irá tratar esses dados deuma forma particular. Ainda: alguns sistemas operacionais (como o Linux) irão permitir queesses dados possam ser armazenados e obtidos de diversas maneiras.

Assim, uma conta é a maneira com a qual o usuário é reconhecido pelo sistema. Emum banco, por exemplo, o cliente é identificado pelo número de sua conta corrente (seuidentificador no sistema) e sua senha (sua credencial no sistema). Em um sistema multiu-suário, é óbvio que uma estratégia parecida tem que ser adotada. Em Unix, o usuário éidentificado pelos seguintes dados:

Username ou Login: armazena o nome associado ao usuário no sistema. Apesar de nãohaver limites a nível de sistema operacional para isso, geralmente o login possui nomáximo oito caracteres e é escrito todo em minúsculo.

Page 141: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 141

Senha (Password): a credencial usada pelo usuário para poder utilizar o sistema. Existemvárias formas de se armazenar a senha do usuário e mesmo a possibilidade de utilizarsenhas não-textuais.

ID ou UID (User Identification): um número de identicação exclusivo associado ao usuá-rio. A nível de implementação o sistema operacional associa ao login o respec-tivo UID. Os arquivos e processos do usuários são, então, identificados por esseUID. Esse número, na maioria das implementações, vai de 0 a 65634. O arquivoinclude/linux/highuid.h, parte do código de versões mais recentes do ker-nel utiliza a definição “#define DEFAULT_OVERFLOWUID 65534”, considerandoportanto que qualquer UID acima desse valor é disponível apenas em sistemas comsuporte a UIDs de 32 bits (highuid). Ou seja, em versões mais recentes do ker-nel e nos sistemas de arquivos atuais, é possível utilizar 232 UIDs distintos (0 a4294967295). Veja detalhes no arquivo Documentation/highuid.txt da docu-mentação do kernel (geralmente disponível no pacote kernel-doc).

GID (Group Identification): grupo ao qual o usuário pertence. Em Unix, o usuário podepertencer a vários grupos. Nesse caso o GID refere-se a seu grupo nativo. Um grupoé basicamente um conjunto de usuários. Geralmente ele é criado quando se desejaque vários usuários tenham permissão restrita a arquivos em comum.

Dados do Usuário: a maioria dos sistemas de armazenamento dos dados do usuários emUnix possuem um campo denominado GECOS (General Eletric Comprehensive Ope-rating System field). Esse nome se dá por razões históricas. Esse campo é utilizadopara relatórios de informações do usuários (ex: resposta ao comando finger). Emgeral, contém o nome completo do usuário, mas não se limita a isso, podendo arma-zenar número de telefone, endereço, etc.

Diretório Pessoal: informa a localização do diretório pessoal do usuário, onde são arma-zenados seus arquivos e configurações individuais. Geralmente é um subdiretório dodiretório /home.

Interpretador de Comandos (Shell): informa ao sistema operacional qual o interpretadorde comandos do usuário. Um interpretador de comandos é um programa que recebecomandos do usuário e executa-os internamente ou repassa-os ao sistema operacio-nal ou a outros aplicativos instalados.

6.3 O ARQUIVO /ETC/PASSWD

A maioria dos sistemas Unix armazena os dados do usuário no arquivo /etc/passwd.A Figura 6.2 mostra uma linha desse arquivo. Pode ser verificado, nessa figura, que osdados do usuário são separados por ‘:’.

Page 142: GERENCIAMENTO DE SISTEMAS LINUX

142 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

jpsilva:x:1111:100:Joao Pedro da Silva,,,,:/home/jpsilva:/bin/bash

Figura 6.2: Trecho do arquivo /etc/passwd

O primeiro campo do arquivo /etc/passwd é o login do usuário. Esse login está asso-ciado diretamente à sua caixa postal eletrônica. Considerando-se, por exemplo, que a es-tação de trabalho possuidora do arquivo apresentado na Figura 6.2 esteja ligada à internet,tenha por nome host.domain.com e seja servidora de e-mail, então é de se esperar queo usuário jpsilva possua uma conta de e-mail dada por [email protected] por [email protected], dependendo da configuração utilizada na máquina.

Essa ligação do login ao e-mail chama a atenção do administrador e do próprio usuáriopara a escolha de logins significativos. Assim, geralmente o login é construído a partirdo nome do usuário. Devem ser evitados apelidos ou termos que criem constrangimentoquando o usuário, por exemplo, for enviar um currículo ou um documento da empresa.

Recomenda-se que o login tenha no máximo oito caracteres e seja composto apenas deletras minúsculas, principalmente para usuários que terão acesso direto à máquina. Caso ousuário vá usar apenas os serviços de e-mail da máquina, a restrição de tamanho pode serafrouxada. A maioria das distribuições Linux permitem logins com até 32 caracteres e atémesmo o uso de caracteres especiais. Caso um usuário insista em ter uma conta de e-mailcom mais de oito caracteres, a melhor solução é usar apelidos de sistema (aliases). Assimo usuário jsilva poderia ter uma conta de e-mail jose.silva adicionando-se ao arquivo/etc/aliases uma linha com o texto jose.silva: jsilva. Maiores informaçõessobre o arquivo /etc/aliases e serviços de e-mail serão vistos em (UCHÔA, 2008).

O segundo campo do arquivo /etc/passwd é a senha do usuário. Apesar do quese diz comumente, a senha do usuário não é criptografada, e sim codificada (hashed). Oalgoritmo utilizado pelo Linux para codificar as senhas é um algoritmo de hash, implemen-tado na função crypt( )1. Esse algoritmo, em geral, implementa uma modificação doalgoritmo DES ou o algoritmo MD5. Um apresentação detalhada de algoritmos hash podeser encontrada em (SCHNEIER, 1996). Uma visão mais sintética pode ser encontrada em(UCHÔA, 2005). A Figura 6.3 ilustra o processo de codificação.

A vantagem desse processo é que isso praticamente inviabiliza qualquer tentativa dedescriptografar a senha de qualquer usuário. Durante o processo de codificação, se uti-liza uma seqüência de caracteres aleatória para aumentar a segurança do processo. Essaseqüência de caracteres é geralmente chamada de “sal”, pois melhora (“tempera”) o pro-cesso de codificação das senhas. A Figura 6.4 apresenta uma comparação entre duassenhas codificadas por DES e MD5.

1Para maiores detalhes sobre a função crypt( ): man 3 crypt.

Page 143: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 143

SenhaCodificadade Hash

Algoritmo

Senha

Sal

Figura 6.3: Codificação de Senhas em Linux

KGNrZT0S1D7UE

$1$XUxvSe6g$TnD07sHt69Q6NAv5kdbAv.

Sal Senha Codificada

Sal Senha CodificadaTag MD5

DES:MD5:

Figura 6.4: Codificação de Senhas Usando DES e MD5

É possível verificar na Figura 6.4, que no DES a senha é armazenada com 13 carac-teres, sendo que os dois primeiro representam o “sal” e o restante a senha codificada. Jáno MD5, a senha ocupa 34 caracteres e sempre inícia com “$1$”. Os oito caracteres entreo segundo e o terceiro “$” armazenam o sal utilizado na codificação e os 22 caracteresrestantes são usados para a senha codificada.

Existem vários aplicativos para trocar a senha, mas o mais usado é o comando passwd.Chamado em sua forma tradicional, sem nenhuma opção, ele irá permitir a troca da senhado usuário que invocou o comando. Para isso, ele pedirá a senha atual do usuário. Caso asenha confira, ele pedirá que o usuário digite duas vezes a senha pretendida. Ele só alteraráa senha, caso a senha pretendida seja digitada da mesma forma nas duas tentativas.

Além disso, é possível configurar o comando passwd para verificar se o usuário nãoestá escolhendo uma senha demasiado fraca. Ele pode checar senhas demasiadamentecurtas ou de fácil descoberta por terceiros. Para verificar sobre o que caracteriza uma boasenha, verifique a Seção 6.4. Para maiores detalhes de configuração do comando passwd,verifique as Seção 6.13 e Seção 6.14. Uma forma de uso do comando passwd é mostradana Figura 6.5, que permite ao administrador do sistema (o usuário root) verificar se umadada conta possui senha e qual o tipo de codificação usado.

$ passwd -S jsilva

Password set, MD5 crypt.

Figura 6.5: Exemplo de uso Comando passwd

Page 144: GERENCIAMENTO DE SISTEMAS LINUX

144 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

O processo de decodificação da senha, apresentado na Figura 6.6 consiste basica-mente em: 1) obter a senha do usuário; 2) codificar a senha do usuário usando o “sal”armazenado no arquivo de senhas; 3) comparar a senha codificada nesse processo coma que está armazenada no arquivo de senhas. Se essas senhas conferem, o usuário éautenticado pelo sistema.

SenhaCodificada

/etc/shadow/etc/passwd ou

de HashAlgoritmo

/etc/shadow/etc/passwd ou

SenhaCodificada

Senha fornecidapelo usuário

Senha ArmazenadaSal

Comparação

Figura 6.6: Decodificação de Senhas em Linux

O terceiro e o quarto campos do arquivo /etc/passwd são, respectivamente, o UID(número de usuário – User ID) e o GID (número de grupo – Group ID). São usados, prin-cipalmente, para identificar o usuário no sistema e controlar as permissões individuais egrupais desse usuário.

O quinto campo do /etc/passwd é o campo GECOS, comentado anteriormente naSeção 6.2. Em várias situações, contém apenas o nome do usuário. Quando contém ou-tras informações, essas entradas são separadas por vírgulas. Apesar de poder armazenarqualquer coisa, o aplicativo finger espera que as informações do usuário estejam na se-guinte ordem:

• nome completo;

• localização do escritório;

• telefone do escritório;

• número de telefone residencial.

A Figura 6.7 mostra um usuário com o campo GECOS completo (Figura 6.7.a) e a execuçãodo comando finger para esse usuário (Figura 6.7.b), confirmando a informação anterior.

Os dois últimos campos informam, respectivamente, o diretório pessoal e o interpretadorde comandos do usuário. Em geral, o diretório pessoal encontra-se em algum ponto na ár-

Page 145: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 145

aARL:x:1111:1111:Aluno ARL,DCC - 8,1123,2811-1111:/home/aARL:/bin/bash

(a) Trecho do Arquivo /etc/passwd

$ finger aARL

Login: aARL Name: Aluno ARL

Directory: /home/aARL Shell: /bin/bash

Office: DCC - 8, x1123 Home Phone: 2811-1111

Never logged in.

No mail.

No Plan.(b) Execução do comando finger

Figura 6.7: Uso do Campo GECOS pelo finger

vore do /home. Os interpretadores de comandos mais utilizados são o bash (/bin/bash)e o tcsh (/bin/tcsh). Para maiores detalhes sobre esses interpretadores, ver (SCHNEI-DER, 2002).

6.4 ESCOLHA DE SENHAS

Uma grande preocupação que um administrador de sistemas deve ter para com seususuários é quanto a forma que esses escolhem suas senhas. Uma senha má escolhida porum usuário pode facilitar processos de invasão, dado que o cracker poderá utilizar a contadesse usuário para obter maiores informações sobre o sistema. Assim, é imprescindívelque o administrador oriente os usuários em um bom processo de escolha de senhas.

Uma boa senha é aquela que o usuário consegue se lembrar com facilidade, mas quenenhuma outra pessoa consiga descobrir. Assim, devem ser evitados, a qualquer custo ouso de datas significativas para o usuário, números de contas, nomes e sobrenomes depessoas próximas, entre outros. Além disso, para dificultar o processo de alguém tentardescobrir a senha, é importante que a senha tenha ao menos dois dos seguintes itens:

• mistura de letras maiúsculas e minúsculas;

• uso de caracteres especiais (como espaço, ‘@’, ‘%’, ‘#’, etc.);

• uso de numerais.

A mistura desses itens dificulta imensamente qualquer tentativa de quebra de senha e per-mite a construção de senhas fáceis de se lembrar. A importância de uma senha de fácilmemorização é evitar o imenso perigo de se anotar as senhas em papéis, agendas, etc.

Page 146: GERENCIAMENTO DE SISTEMAS LINUX

146 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Nesse sentido, uma das grandes vantagens do MD5 sobre o DES na codificação desenhas é que ele permite, a princípio, que o usuário escolha uma senha de qualquer ta-manho. O uso do DES na codificação das senhas limita o tamanho dessa senha a oitocaracteres. Dessa forma, o uso do MD5 deve ser preferido, por permitir senhas mais fáceisde memorizar e com maior dificuldade para a quebra das mesmas.

Uma regra utilizada e sugerida pelos autores deste texto é a utilização de frases semsentido aparente (nonsense), mas que seja de fácil memorização pelo usuário. Essa es-tratégia também é defendida em (NEMETH et al., 2001). Um exemplo de frase nonsenseque inspira uma boa senha é: “O macaco do Tibet no telhado”. Troca-se algumas letras porcaracteres especiais ou números (ex.: ‘a’ por ‘@’, ‘o’ por ‘0’, etc.) e tem-se uma frase quepoderia ser excelente senha, se já não tivesse sido escrita nesta apostila: “O mac@c0 doTibet no t&lhad0”.

Caso se utilize DES, estando limitado a oito caractes, pode-se tentar resumir a fraseimaginada, usando partes da frase nonsense. Assim, a frase acima poderia gerar as se-guintes senhas, por exemplo: “Om@nTnt&” e “m@n0Tnt&”. São senhas que, se não esti-vessem aqui escritas, poderiam ser consideradas perfeitas. A melhor regra para se escolheruma boa senha portanto é: usar a imaginação para construir senhas inimagináveis por ter-ceiros.

6.5 SENHAS SOMBREADAS

Considerando-se que as senhas não são criptografadas, existem quatro formas de uminvasor descobrir a senha de um dado usuário:

1. obter a senha do usuário no tráfego da rede, através de técnicas de sniffing;

2. obter a senha através de tentativas simples baseadas em informações do usuário;

3. obter a senha através de um ataque de dicionário;

4. usar a força bruta, fazendo várias tentativas – essa alternativa é improvável, dado ogrande número de combinações possíveis, mas é possível.

A obtenção de senhas através do tráfego na rede pode ser evitada através do uso deconexões criptografadas. Maiores informações sobre sniffing, bem como estratégias paraevitar problemas causados por ele poderão ser encontradas em (UCHÔA, 2005). Nestetexto, não haverá preocupação quanto à esse aspecto de proteção das senhas.

Page 147: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 147

O invasor também pode tentar logar-se como um usuário utilizando senhas potenci-almente inseguras. Assim, para um usuário chamado João da Silva Pereira, nascido em22/11/1960, com RG 353.223, esse invasor tentaria, entre outras, as seguintes senhas:“jsilva”, “jpereira”, “silva”, “pereira”, “22-11-60”, “22.11.1960”, “353223”. Daí a importânciade uma boa escolha da senha, como já comentado na Seção 6.4.

O “ataque de dicionário”, por sua vez, consiste em comparar palavras de um dicionáriocom a senha do usuário. Para isso, o invasor utiliza um programa que pega palavras em umdicionário de palavras2, codifica cada uma das palavras utilizando vários tipos possíveis de“sal”3 e compara com a senha armazenada no arquivo de senhas.

Assim, esse invasor precisa, em um momento inicial desse processo, conseguir assenhas dos usuários pretendidos para o ataque de dicionário. Inicialmente o ataque dedicionário não era um problema grave, devido ao limitado poder computacional dos equi-pamentos. Entretanto, isso hoje é um sério risco à segurança dos sistemas. Um primeirasolução seria negar a leitura do arquivo /etc/passwd por outros usuários do sistema quenão o administrador. O problema é que, como inicialmente ataque de dicionário não eraenxergado como risco sério, o arquivo /etc/passwd precisa ter permissão de leitura paratodos os usuários do sistema. Caso essa permissão seja retirada, vários serviços, como ofinger ou o e-mail, deixarão de funcionar em suas configurações padrões.

A alternativa encontrada para esse problema foi a de manter o arquivo /etc/passwd

apenas para os dados de acesso e esconder a senha. Assim, em sistemas mais recentes,geralmente se utiliza o recurso de senhas “sombreadas” (shadowed passwords). Nessecaso a senha é armazenada em um arquivo à parte, geralmente o /etc/shadow. Essearquivo só pode ser lido pelo usuário root, que detém os poderes administrativos sobre osistema4.

Assim, o campo destinado à senha no arquivo /etc/passwd é marcado com um “x”,como ilustrado nas Figura 6.2 e Figura 6.7. Essa senha é mantida no arquivo /etc/shadow,apresentado na Figura 6.8. Como o arquivo /etc/passwd, esse arquivo possui camposseparados por “:”.

jsilva:$1$IeC1G.D7$mC/h(g7TYHh12jGÇ8VáDU0:11850:0:99999:7:::

Figura 6.8: Trecho do Arquivo /etc/shadow

O primeiro campo é o login do usuário, tal qual como no arquivo /etc/passwd. Narealidade essa é a única ligação entre os dois arquivos. O segundo campo é a senha

2Para ser mais exato, o termo mais correto seria “lista de palavras” e não “dicionário de palavras”.3Ver Seção 6.3 para maiores detalhes sobre “sal” e o processo de codificação de senhas utilizado no Linux.4Maiores detalhes sobre o usuário root podem ser vistas na Seção 6.6

Page 148: GERENCIAMENTO DE SISTEMAS LINUX

148 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

codificada. No caso da Figura 6.8, a senha foi codificada usando MD5. Maiores detalhessobre o processo de codificação da senha podem ser obtidos na Seção 6.3.

O terceiro campo é usado para calcular o dia em que a senha foi alterada pela últimavez. Para ser mais exato, ele informa quantos dias se passaram entre 1o de Janeiro de1970 e a data da última alteração da senha. Essa é, na verdade, uma forma padrão de seindicar datas absolutas em UNIX. No caso da Figura 6.8, o usuário alterou a senha pelaúltima vez em 12 de Junho de 2002.

O quarto campo é, sob o ponto de vista da segurança, praticamente inútil: ele indica onúmero mínimo de dias para que um usuário altere sua senha. Isso pode ser altamenteperigoso, caso o usuário tenha sua senha alterada por terceiros. Esse campo só faz sentidoem contas com as quais não se quer mudança de senha antes de um dado prazo, ex.:contas administrativas e de sistemas. Caso contrário, deve ser deixado em branco ou como valor ‘0’.

O quinto campo é exatamente o inverso do anterior: indica o número máximo de diasque o usuário pode ficar sem alterar a senha. Apesar de que as regras para uma boasegurança apontam para a necessidade de se trocar as senhas após um dado período,essa técnica não é, em geral, recomendada. Isso porque obrigar o usuário a alterar suasenha constantemente pode forçá-lo a reaproveitar senhas antigas ou anotar a nova senhae isso retiraria toda a vantagem do processo. O uso de “99999” nesse campo indica que assenhas nunca “caducam”.

Ainda assim, caso o administrador resolva fazer uso desse recurso de “caducidade desenhas”, ele irá fazer uso do sexto campo. Esse campo indica quantos dias antes do prazofatal para a alteração da senha o usuário deva começar a ser avisado pelo programa delogin. Outra alternativa é utilizar o sétimo campo. Esse campo informa quantos dias após aexpiração da senha o sistema deva considerar a conta desabilitada.

Caso se pretenda utilizar o quinto campo para desabilitar um usuário, esse uso é incor-reto. O oitavo campo indica justamente quando o usuário deve ser desabilitado. Da mesmaforma que no terceiro campo, ele informa o número de dias entre 1o de Janeiro de 1970 e adata da desabilitação da conta. Para contas normais, esse campo é deixado em branco. Onono campo existe, mas ainda não é usado. É reservado para usos futuros.

Para simplificar o processo de alteração das informações do terceiro ao oitavo campodo arquivo /etc/shadow, geralmente se faz uso do comando chage. Quando chamadocom a opção ‘-l’, informa os dados do usuário. A Figura 6.9 mostra a execução do comandochage -l jsilva.

Page 149: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 149

$ chage -l jsilva

Minimum: 0

Maximum: 99999

Warning: 7

Inactive: -1

Last Change: Jun 12, 2002

Password Expires: Never

Password Inactive: Never

Account Expires: Never

Figura 6.9: Execução do Comando chage -l jsilva

O comando chage pode ser usado de forma interativa, quando chamado na formachage jsilva. Nesse caso, ele irá pedir que o administrador informe os novos valoresdos campos ou confirme os anteriores, como mostra a Figura 6.10. Entretanto, ele podeser chamado de forma não interativa. Por exemplo, chage -E 2003-08-01 jsilva fa-ria com que a conta do usuário jsilva expirasse em 1o de Agosto de 2003. Para maioresinformações, consulte a página de manual desse comando: man chage.

$ chage jsilva

Changing the aging information for jsilva

Enter the new value, or press return for the default

Minimum Password Age [0]:

Maximum Password Age [99999]:

Last Password Change (YYYY-MM-DD) [2002-06-12]:

Password Expiration Warning [7]:

Password Inactive [-1]:

Account Expiration Date (YYYY-MM-DD) [1969-12-31]:

Figura 6.10: Execução do Comando chage jsilva

6.6 TIPOS DE CONTAS

Basicamente, existem três tipos de contas: a conta do usuário comum, que utiliza osistema e suas ferramentas, contas de serviços (ou pseudo-usuários) e a conta de superu-suário ou conta de root. Dentre os tipos de contas, a conta de root é a mais importante,

Page 150: GERENCIAMENTO DE SISTEMAS LINUX

150 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

dado que é essencial para o funcionamento do sistema. Algumas configurações só sãopossíveis se efetuadas através dessa conta.

Dado seu extremo poder, a conta de root só deve ser usada em configurações e manu-tenções no sistema. Dessa maneira, seu uso deve ser o menor possível. Para uso comum,devem ser criadas contas de usuário. Essas contas possuem permissão restrita. Em geral,só conseguem alterar dados em seu próprio diretório ou no diretório tmp. Dessa maneira,se esse usuário executa um programa com vírus, por exemplo, esse vírus não conseguiráinfectar arquivos de propriedade de outro usuário. Como os arquivos de sistema pertencem,em geral, ao usuário root, eles permanecem intocáveis.

Além disso, o uso de contas de usuários diminui o risco desastres, como apagar todoum diretório importante por acaso. Evita também que qualquer usuário do sistema faça al-terações na configuração estabelecida para a estação. Em resumo: a conta de root jamaisdeve ser usada para tarefas comuns, como edição de textos, navegar na internet, etc. Oadministrador deve criar contas comuns (inclusive para si mesmo) para as tarefas cotidia-nas, deixando a conta de root unicamente para tarefas de gerenciamento, manutenção econfiguração do sistema.

6.6.1 Pseudo-Usuários

Para impor mais segurança ao sistema, vários servidores não são executados com po-deres de root. Assim, para diminuir a permissão desses servidores, foram criadas contasespecíficas para eles: os pseudo-usuários. Algumas dessas contas são essenciais ao sis-tema, outras existem por razões históricas e podem ser removidas sem problemas.

A Tabela 6.1 apresenta algumas contas comuns de pseudo-usuários e sua utilidade.Note que o UID e mesma a existência dessas contas varia de distribuição para distribuição.Em geral, entretanto, essas contas utilizam UID inferior a 500. Dessa maneira, considera-seque contas com UID inferior a 500 são contas de sistema, não devendo-se usar um valorinferior a 500 para contas de usuários.

6.7 GRUPOS DE USUÁRIOS

Suponha a seguinte situação: uma empresa possui três departamentos. Cada depar-tamento possui arquivos que precisam ser compartilhados entre os seus funcionários, masque não podem ser acessados por pessoas externas ao departamento em questão. A so-lução natural de qualquer sistema UNIX é o uso de grupos de usuários. Nesse caso seriacriado três grupos (ex.: depto1, depto2 e depto3) e os funcionários pertenceriam ao grupo

Page 151: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 151

Tabela 6.1: Alguns Pseudo-Usuários Comuns

Usuário Finalidade

bin Em alguns sistemas, essa conta é proprietária dos arquivos e diretórios dosaplicativos. Em sistemas mais modernos, utiliza-se diretamente a contaroot

daemon Conta utilizada para processos e arquivos em geral que não precisam serde posse de root

adm Conta administrativa, é proprietária dos arquivos de contabilidade de usodo sistema

lp Conta para serviços de impressãomail Conta para serviços de e-mailnews Conta para serviços de newsnobody Conta utilizada pelos serviços de NFSshutdown Conta utilizada pelo serviço de shutdowngames Conta proprietária de jogos e aplicativos similares

ligado ao seu departamento específico. Em seguida, bastaria fazer com que os arquivostivessem permissões adequadas às necessidades.

Cada usuário UNIX pertence ao menos a um grupo, associado a ele no momento dologin. Mas é possível que um mesmo usuário pertença a vários grupos. Em alguns casos,é criado um grupo distinto para cada usuário. Isso é interessante em ambientes onde aprivacidade deva ser mantida ao máximo. Em outros casos, como ambientes acadêmicos,colocam-se usuários com um mesmo perfil (ex.: alunos de uma mesma turma) em um únicogrupo.

O número do grupo (GID) padrão do usuário é definido pelo quarto campo da infor-mação do usuário no arquivo /etc/passwd (ver Seção 6.3). As informações completasdo grupo são apresentadas no arquivo /etc/group. A Figura 6.11 apresenta um trechodesse arquivo.

whell:x:10:root

daemon:x:2:root,bin,daemon

users:x:100:tarzan,batman

monitor:x:101:jsilva

Figura 6.11: Arquivo /etc/group

Page 152: GERENCIAMENTO DE SISTEMAS LINUX

152 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Pode ser verificado na Figura 6.11 que cada entrada no arquivo /etc/group é com-posto de quatro campos. O primeiro campo é o nome do grupo. Esse nome deve ser criadode acordo com a mesma filosofia de escolha do login do usuário. O segundo campo é asenha do grupo, raramente utilizada com finalidades práticas. O terceiro campo é o GID dogrupo. O quarto e último campo são os usuários extras do grupo. Assim, o usuário jsilvapertence aos grupos users e monitor, de acordo com a Figura 6.2 e a Figura 6.11.

Nesse caso o grupo users é o grupo associado a esse usuário no momento do lo-gin, sendo que todos os arquivos e processos criados por ele são criados como perten-cendo a esse grupo. Ou seja: o grupo padrão do usuário é aquele informado no arquivo/etc/passwd. Caso o usuário jsilva queira criar arquivos com as permissões do grupomonitor, ele deverá usar o comando newgrp monitor. Se ele quiser informações sobrequal o grupo associado a ele no momento, bem como os grupos a que ele pertence, elepoderá usar o comando id. Esses dois comandos são ilustrados na Figura 6.12.

$ id

uid=1111(jsilva) gid=100(users) grupos=100(users),101(monitor)

$ newgrp monitor

$ id

uid=1111(jsilva) gid=101(monitor) grupos=100(users),101(monitor)

Figura 6.12: Usos dos Comandos id e newgrp

Obviamente, para acessar um arquivo com a permissão de um dado grupo, o usuá-rio não precisar usar o comando newgroup. Dessa maneira, o usuário jsilva poderiaeditar qualquer arquivo que tivesse permissão de escrita para o grupo users ou o grupomonitor. Esse comando só é necessário para a criação de arquivos associados a outrogrupo que não o associado pelo arquivo /etc/passwd. Para retornar ao grupo anterior,basta usar o comando exit. Maiores informações sobre permissões de arquivos podemser obtidas na Seção 4.8.

Da mesma forma que ocorre com o UID, grupos com GID inferiores a 500 são considera-dos grupos de sistemas. Alguns dos usuários apresentados na Tabela 6.1 possuem gruposequivalentes. Um dos grupos mais importantes é o wheel, geralmente composto pelo roote outros usuários administradores do sistema. Dependendo da configuração do sistema,somente usuários desse grupo podem se tornar root com a execução do comando su.

Page 153: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 153

6.8 VARIÁVEIS DE AMBIENTE

Uma variável de ambiente é um valor armazenado em memória e que pode ser utilizadapor qualquer aplicação. Em ambientes UNIX, algumas variáveis de ambiente são usadascom muita freqüência. Exemplo dessas variáveis são listadas na Tabela 6.2.

Tabela 6.2: Variáveis de Ambiente

Variável Utilidade

PATH configura o caminho padrão onde são procurados os comandos,externos ao shell, executados pelo usuário

DISPLAY informa qual o servidor gráfico utilizadoUSER informa o login do usuárioEDITOR configura o editor padrãoPS1 configura o prompt de comando no bash

PWD informa o diretório correnteSHELL informa o shell utilizadoLANG informa a língua padrão do usuárioHOME informa o diretório pessoal do usuárioMAIL informa o arquivo de e-mail do usuárioTERM informa qual o terminal gráfico utilizado

As variáveis apresentadas na Tabela 6.2 são extremamente úteis em construção descripts. Algumas delas, entretanto, devem ser configuradas adequadamente para propi-ciar um melhor ambiente ao usuário. Algumas dessas configurações (como o LANG) sãoconfigurados em arquivos no diretório /etc/sysconfig. Outras, como o PATH, são confi-guradas em arquivos específicos no diretório /etc/. Essa configuração depende do shellpadrão do usuário.

Usando bash a configuração de uma variável de ambiente pode ser feita de duas for-mas. A primeira forma é ilustrada a seguir:

# VARIAVEL=meuvalor

# export VARIAVEL

A primeira linha cria, no terminal, uma variável de nome VARIAVEL com o valor atribuídomeuvalor. Essa variável pode ser usada por esse terminal enquanto a sessão estiverdisponível. Para fazer a variável ser válida em todas as sessões, o que é feito com ocomando export. O comando interno export é responsável por exportar uma variável,

Page 154: GERENCIAMENTO DE SISTEMAS LINUX

154 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

no bash a outras sessões. Isso poderia ser feito em uma única linha, envolvendo atribuiçãoe exportação, da seguinte maneira:

# export VARIAVEL=meuvalor

Caso esteja-se utilizando csh ou tcsh, a configuração de variáveis é feita com oscomandos set e setenv. O comando set cria a variável localmente naquele terminal esetenv cria uma variável global. Os dois comandos possuem sintaxes diferentes, comoilustrados a seguir:

$ setenv VARIAVEL meuvalor

# set VARIAVEL=meuvalor

Quando um usuário loga-se no sistema ou inicia um novo terminal, alguns arquivoscostumam ser lidos para configurar variáveis de ambiente mais utilizadas. No csh, essasvariáveis são lidas a partir do arquivo geral /etc/csh.cshrc e /etc/csh.login. Nocaso do bash, essa configuração é feita nos arquivos /etc/profile e /etc/bashrc.

Em geral, o arquivo /etc/profile é lido no login do usuário e o /etc/bashrc sem-pre que um novo terminal usando bash é iniciado. Dependendo do gerenciador de janelas,entretanto, esse comportamento pode não ser o esperado. Independente disso, o shell leráos arquivos .bashrc no diretório do usuário, ou o .cshrc, no caso do tcsh.

Observe que, na maioria dos casos, a distribuição usada pelo usuário deverá criar ar-quivos /etc/profile e outros com configurações padrões. Recomenda-se que o ad-ministrador não altere as configurações aí disponibilizadas e sim faça suas alterações aofinal desse arquivo. O mesmo vale para os outros arquivos de configuração de variáveis jácomentados nesta seção.

Além das variáveis de ambiente, é possível mudar o comportamento de comandos exis-tentes, ou mesmo adicionar novos comandos. Isso é feito com o comando alias, exempli-ficado a seguir:

# alias mv=’mv -iv’

Esse comando fará que quando executado em sua forma normal, o comando mv funcioneautomaticamente como se a ele tivesse sido passada as opções -iv. A geração de novoscomandos é feita da mesma forma. Assim “alias move=mv” faria com que o usuário, aochamar move, estivesse utilizando o mv.

Page 155: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 155

Para remover um alias, basta usar o comando unalias comando. Já a remo-ção de uma variável é feita atribuindo a ela nenhum valor, como por exemplo: export

VARIAVEL=. Como essas variáveis e os alias utilizados dependem do shell em uso,recomenda-se a consulta à documentação desses interpretadores para uma configuraçãoadequada.

6.9 USO DE QUOTAS

Em ambientes com recursos limitados de hardware, pode ser importante limitar os re-cursos a que o usuário tem acesso. Mesmo quando a oferta de recursos é satisfatória,isso também pode ser necessário. Em se tratando de espaço em disco, essa é uma ver-dade histórica. Afinal, o administrador nunca imaginava que precisava tanto de um discode 40 Mb, antes de instalá-lo e começar a “devorar” cada mínimo espaço livre do mesmo.Dessa maneira, apesar da desrecomendação feita em (NEMETH et al., 2001), os autoresdesse texto acreditam que o uso de quotas de discos pode ajudar a manter os usuáriosmenos “vorazes” que o normal e indicam seu uso em qualquer ambiente com mais de vinteusuários.

Para que se configure quotas para usuários ou grupos, é importante que o sistema dearquivos associado esteja montado com as opções de quota habilitadas. Maiores informa-ções sobre isso podem ser encontradas na Seção 4.5. Uma vez que o sistema de arquivosesteja configurado adequadamente, a atribuição de quotas a um usuário ou a um grupopode ser feito através do comando edquota.

Caso pretenda-se configurar a quota de um único usuário, basta chamar o comandoseguido do nome do usuário. Nesse caso, o edquota irá abrir o editor padrão do usuário,configurado na variável de ambiente EDITOR, com um arquivo temporário de configuraçãode quota. Salvando as alterações, tem-se que as novas configurações são postas imedi-atamente em prática. A Figura 6.13 apresenta, a título de exemplo, a edição de quota dousuário neworder.

Disk quotas for user neworder (uid 1234):

Filesystem blocks soft hard inodes soft hard

/dev/sda3 131536 150000 175000 3641 0 0

/dev/sda5 35132 100000 120000 2416 0 0

Figura 6.13: Editando a quota de um usuário

Page 156: GERENCIAMENTO DE SISTEMAS LINUX

156 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Na Figura 6.13, é possível perceber que a quota de um dado usuário é configurada emsete colunas. A primeira coluna, que não deve ser alterada, informa o sistema de arquivosonde a quota está sendo aplicada. A segunda coluna informa quanto em disco o usuárioestá atualmente usando em unidades de blocos, tipicamente 1Kb nas instalações comuns.Essa coluna pode ser utilizada para corrigir, por exemplo, incoerências no sistama de quota,evitando que o sistema informe uma quantidade maior de espaço do que a realmente utili-zada pelo usuário.

A terceira coluna informa quanto um usuário pode utilizar de espaço no sistema dearquivos especificado. No exemplo da Figura 6.13, o usuário neworder pode utilizar 150Mbem /dev/sda3 e 100Mb em /dev/sda5. Caso tenha sido estabelecido um período de“graça”, o usuário ainda conseguirá autenticar-se no sistema5. Nesse caso, a quota dousuário não poderá exceder, de forma alguma, o valor especificado na quarta coluna. Érecomendável, inclusive, que esse valor “hard” seja maior que o especificado na terceiracoluna para permitir, por exemplo, que o usuário continue recebendo seus e-mails mesmousando mais recursos que o especificado na quota “soft”.

As três últimas colunas tem funcionamento idêntico às segunda, terceira e quarta co-luna, só que se aplicam não ao espaço utilizado e sim ao número de arquivos que o usuáriopode possuir. Em casos normais, a configuração dessas colunas deve ser evitada, devendoo administrador não alterar os valores informados (“0” significa quota infinita).

O período de graça é configurando invocando-se o comando edquota -t. Nesse caso,o edquota irá abrir o editor padrão com o arquivo temporário mostrado na Figura 6.14.Como deixado claro na figura, o período pode ser especificado em dias, horas, minutos oumesmo segundos. Recomenda-se que a escolha desse período varie entre três e quinzedias, mas isso dependerá do contexto onde a quota está sendo aplicada.

Grace period before enforcing soft limits for users:

Time units may be: days, hours, minutes, or seconds

Filesystem Block grace period Inode grace period

/dev/sda3 7days 7days

/dev/sda5 7days 7days

Figura 6.14: Editando a quota de um usuário

5É possível que o usuário não consiga autenticar-se em modo gráfico, pois durante a inicialização doambiente gráfico, vários arquivos temporários são criados. Como a quota do usuário está estourada, ele nãoconseguirá fazer esse tipo de login. Entanto, se a “graça” não estiver expirada, ele conseguirár efetuar loginem modo texto, incluíndo-se os remotos, como telnet ou SSH.

Page 157: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 157

Caso não se pretenda atribuir quota a um único usuário, mas sim ao grupo que elepertence, deve-se invocar edquota -g nome_grupo. Nesse caso, o espaço ocupadopelo grupo é que será limitado, não importando se um usuário desse grupo irá ocupar maisespaço que um outro. Ou seja, essa opção não irá atribuir quota aos membros do grupo esim ao grupo como um todo. Infelizmente o edquota não possui, ainda, opção para editara quota individual dos membros de um grupo.

Entretanto, apesar do comando edquota não possuir opção de atribuir automatica-mente uma dada configuração de quota a membros de um grupo, é possível copiar com fa-cilidade a configuração de quota de um usuário para outros. Para copiar a configuração dequota do usuário neworder para os usuários blondie, elastica e smashing, basta in-vocar o comando edquota -p neworder blondie elastica smashing. Dessa ma-neira, não é complicado confeccionar um programa ou um script que copie uma dada quotaa todo os membros de um grupo de usuários.

O gerenciamento das quotas pode ser feito com o uso do comando quota. Assim, casoo administrador invoque o comando quota neworder, obterá como resultado um relató-rio da situação de quota do usuário neworder em todos os sistemas de arquivo, mesmoaqueles sob NFS, em que a quota esteja habilitada. Outra ferramenta de gerenciamentoextremamente útil é o comando repquota. Esse comando pode ser usado de duas for-mas. Na primeira forma, como em repquota /dev/sda3, irá obter um relatório completo,incluíndo todos os usuários e grupos com quota configurada, sobre a situação de quota nosistema de arquivos especificado. A segunda forma é invocá-lo da forma repquota -a

que irá fazer isso para todos os sistemas de arquivo que tenham quota habilitada. Maisdetalhes sobre quota podem ser encontrados em (MOURANI, 2001) e (DOOREN, 2002).

6.10 CRIANDO E ALTERANDO CONTAS DE USUÁRIOS

O processo de criação de uma conta de usuário em Linux é relativamente simples epode ser resumido nos seguintes passos:

1. editar os arquivos /etc/passwd e /etc/shadow com as informações básicas dousuário;

2. se for necessário, criar um grupo em /etc/group para o usuário e colocar o usuárionos grupos adequados;

3. atribuir uma senha inicial para o usuário com o comandopasswd login-do-usuario;

Page 158: GERENCIAMENTO DE SISTEMAS LINUX

158 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

4. criar o diretório pessoal do usuário;

5. copiar arquivos padrões de configuração (ex.: .bashrc) para o diretório do usuário;

6. configurar adequadamente as permissões do diretório pessoal do usuário e os arqui-vos desse diretório;

7. se for o caso, configurar a quota do usuário usando o comandoedquota login-do-usuario;

8. se for o caso, configurar os “apelidos de sistema” (aliases) do usuário no arquivo/etc/aliases.

Sobre o passo 5, em geral se usa o diretório /etc/skel para manter e configurar arqui-vos que se pretenda copiar para o diretório pessoal de um usuário recém-criado. Existemvários programas que simplificam o processo de criação de um usuário, como por exem-plo o useradd, que copiam automaticamente o conteúdo desse diretório para a pasta dousuário.

O comando useradd6 é com certeza o mais interessante entre os programas disponí-veis para a criação de usuários. Sua maior vantagem é obter todos os dados necessários àcriação do usuário através de parâmetros. Isso facilita imensamente a criação de usuáriosem scripts. A Tabela 6.3 apresenta as principais opções desse comando e um exemplo deuso.

Tabela 6.3: Opções do Comando useradd

Opção Significado

-c campo GECOS do usuário-d diretório pessoal do usuário-e data em que a conta irá expirar, no formato YYYY-MM-DD-g grupo padrão do usuário-G lista de outros grupos, separados por vírgula, ao que o usuário per-

tence-s shell do usuário-u UID do usuário

Exemplo de Uso:useradd -u 532 -g users nitewish

6O comando useradd também pode ser chamado como adduser. Na verdade, adduser é um linksimbólico para useradd

Page 159: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 159

O comando equivalente para criação de grupos é o groupadd. Esse comando possuia sintaxe groupadd -g GID nome-do-grupo. Se a opção -g não for passada, o co-mando irá usar um GID maior que o de qualquer GID existente no arquivo /etc/group

e que seja maior que 500. Caso se queira um GID menor que 500 sem informar o nú-mero do GID, deve-se usar a opção -r. Esses dois programas fazem parte do pacoteshadow-utils, ao qual também pertence o comando chage, descrito na Seção 6.5.

Um outro comando disponibilizado com o pacote shadow-utils é o usermod. Essecomando tem a finalidade de alterar os dados de um usuário já existente. Esse comando uti-liza basicamente as mesmas opções do comando useradd. À essas opções, acrescenta-se o parâmetro ‘-l’, que permite alterar o login do usuário.

Uma observação importante a fazer sobre o processo de criação de usuários é que, emambientes onde o usuário precise ter contas em várias máquinas, com arquivos compar-tilhados por NFS, é importante fazer com que o GID o UID desse usuário seja o mesmoem todas as máquinas. Caso contrário, corre-se o risco dos arquivos desse usuário seremabertos por terceiros. Maiores informações sobre NFS serão vistas em (UCHÔA, 2008).

Uma solução melhor para esse tipo de problema é utilizar um sistema de autenticaçãodistribuído. Nesse sistema alternativo, as contas poderiam ser cadastradas em um únicoservidor e as estações ao invés de autenticar os usuários em seus próprios arquivos, au-tenticaria de acordo com as informações do servidor. Exemplos de estratégias para issoé o uso de NIS7, LDAP8 ou Servidores SQL, que serão abordados em (UCHÔA, 2008).Para colocar esses servidores para autenticação em Linux, é necessário informar ao sis-tema a forma como ele deve autenticar um usuário. Isso é feito através do PAM (PluggableAuthentication Modules), abordado na Seção 6.13.

6.11 REMOÇÃO E DESABILITAÇÃO DE USUÁRIOS

Caso o administrador queira desabilitar o acesso de um dado usuário, sem excluir suaconta, uma forma bastante utilizada é editar o arquivo /etc/shadow e acrescentar um ‘!’ou um ‘*’ à frente da senha do usuário. Na verdade o comando passwd -l usuario iráfazer exatamente isso9.

Uma outra opção é alterar o interpretador de comandos do usuário para um que invalideo acesso, como, por exemplo, /bin/false. Um problema, entretanto, que pode surgiré que, por default o servidor de e-mails sendmail não irá entregar e-mails para contas

7NIS: Network Information Services8LDAP: Lightweight Directory Access Protocol9A opção -l do comando passwd serve para desabilitar o acesso de um dado usuário.

Page 160: GERENCIAMENTO DE SISTEMAS LINUX

160 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

cujo shell não esteja informado no arquivo /etc/shells. Uma solução é acrescentar/bin/false nesse arquivo.

Caso o interesse seja realmente remover o usuário, então os passos a seguir podemservir de guia para o administrador:

1. remover qualquer referência ao usuário no arquivo /etc/aliases ou adicionar umendereço externo do usuário para reenvio;

2. remover qualquer processo pendente do usuário em sua tabela pessoal do cron –ver Seção 7.3.1 para maiores detalhes;

3. remover qualquer processo agendado pelo usuário via comando at – ver Seção 7.3.2para maiores detalhes;

4. matar qualquer processo do usuário que ainda esteja rodando usando os comandosps e kill – ver Capítulo 5 para maiores detalhes;

5. remover arquivos temporários do usuário nos diretórios /var/tmp /tmp;

6. remover qualquer referência ao usuário nos arquivos /etc/passwd, /etc/shadowe /etc/group;

7. remover o diretório pessoal do usuário;

8. remover o arquivo de e-mail do usuário, geralmente em /var/mail.

Na maioria das vezes, os administradores apressados executam apenas os últimos trêspassos, mas em determinados ambientes os passos iniciais são importantes para mantera segurança do sistema. Além disso, é altamente recomendável que se faça backup dodiretório pessoal do usuário e seu arquivo de e-mail, antes de apagá-lo, evitando surpresasindesejáveis, como o fato do usuário querer recuperar algum de seus arquivos. O tempo dearmazenamento desse backup variará de um contexto para outro.

A remoção das informações do usuário nos arquivos /etc/passwd, /etc/shadow e/etc/group pode ser feita com o comando userdel. Esse comando possui uma únicaopção: ‘-r’. Quando utilizado com essa opção, ele irá efetuar exatamente os três últimospassos da listagem anterior. Um grupo pode ser removido com a edição direta do arquivo/etc/group ou através do comando groupdel. Essa última opção é preferida, pois im-pedirá o administrador de remover um grupo que ainda possua usuários tendo esse grupocomo padrão (o definido no arquivo /etc/passwd).

Um passo extra a ser feito após a remoção de um usuário do sistema é verificar senão sobraram arquivos em outros diretórios que não o diretório pessoal. Se quota estiver

Page 161: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 161

habilitada, uma forma rápida de verificar se isso ocorre é utilizar o comando repquota -a.A Figura 6.15 mostra um exemplo disso.

#474 -- 12 0 0 1 0 0

tutora -- 157588 180000 185000 791 0 0

todez -- 59712 65000 75000 2002 0 0

Figura 6.15: Execução do Comando repquota -a

Nesse caso, algum usuário de UID 474 foi removido do sistema, mas sobraram ar-quivos de sua propriedade. Para encontrar arquivos “sem dono”, uma opção mais demo-rada, mas altamente funcional é utilizar o comando find. Assim o comando find /home

-nouser iria informar quais são os arquivos no diretório /home sem usuário associado no/etc/passwd para o ID do proprietário do arquivo. Outra opção seria utilizar find /home

-user 474. A opção -user permite encontrar os arquivos de um dado usuário, podendoser informado tanto seu UID, como seu login.

À parte do que possa parecer, deve-se evitar ao máximo a reutilização de UIDs e GIDsde usuários e grupos removidos de um sistema. Isso evita confusão, caso arquivos pre-cisem ser restaurados de backups. Em alguns formatos de backup, os proprietários dosarquivos são identificados pelo UID, ao invés do login.

6.12 TORNANDO-SE ROOT

Dependendo da configuração do sistema, qualquer usuário pode tornar-se root, bas-tando para isso executar o comando su. Se chamado sem nenhuma opção, ira pedira senha de root ao usuário e, caso autenticado, iniciar um interpretador de comandoscom poderes de administrador. Nesse caso, entretanto, as variáveis de ambiente (comoo PATH10) serão as mesmas do usuário que invocou o comando. Caso isso não seja opretendido, então deve-se invocar o comando su com a opção ‘-l’ ou apenas ‘-’. Essesparâmetros informam ao su para iniciar um interpretador de comandos tal qual se o usuárioroot tivesse efetuado um login naquele terminal.

Caso se pretenda apenas executar um comando com os poderes de root, pode-seusar su -c. Nesse caso, o comando su irá pedir a senha de root e, se autenticado, irárodar o programa especificado com poder de superusuário. Uma opção melhor para isso é

10A variável de ambiente PATH informa em quais diretórios o interpretador de comandos deve buscar exe-cutáveis chamados pelos usuário

Page 162: GERENCIAMENTO DE SISTEMAS LINUX

162 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

usar o comando sudo. Esse comando permite, inclusive dividir o poder do superusuário,sem compartilhar a senha de root.

O sudo recebe como parâmetro um comando a ser executado com poderes de root

ou um usuário especial do sistema. Então o sudo checa o arquivo /etc/sudoers para:1) verificar quem são as pessoas autorizadas a executar o sudo, 2) verificar com quaispoderes essas pessoas podem com quais poderes podem executar comandos, 3) quaiscomandos autorizados e 4) em quais máquinas podem ser executados esses comandos. Seo comando invocado atende as permissões concedidas, então o sudo irá solicitar a senhado próprio usuário e executar o comando. Maiores informações sobre o sudo podem serencontradas em (MILLER, 2002) e (UCHÔA, 2005).

6.13 PAM (PLUGGABLE AUTHENTICATION MODULES)

Originalmente a autenticação em sistemas Unix era apenas via comparação de senhascriptografadas no arquivo /etc/passwd. Qualquer programa que precisasse fazer umaautenticação, solicitava o login do usuário e sua senha, criptografava a senha e compa-rava o resultado com a armazenada naquele arquivo. Se fossem iguais, era garantido oacesso aos recursos oferecidos pelo programa. Caso contrário, o programa retornava errode autenticação.

Suponha agora, que o administrador queira fazer autenticação remota. Ou seja, a basede usuários não está mais na mesma máquina, mas sim em alguma outra máquina da rede,o chamado servidor de autenticação. O administrador seria obrigado então, por exemplo, amudar o programa login para que ele também suportasse esse tipo de autenticação remota.

Surgiu um novo algoritmo de criptografia, muito mais avançado, mais rápido, e o ad-ministrador quer usar esse novo algoritmo na autenticação de seus usuários. Novamenteele teria que mudar o programa login para que ele suporte esse novo algoritmo também.No Linux, muitos programas utilizam algum tipo de autenticação de usuários. Não é difícilimaginar o problema se todos eles tivessem que ser reescritos cada vez que se mudassealgum dos critérios de autenticação.

Para evitar esse tipo de problema, a autenticação em modernos sistemas Linux é efe-tuada via PAM (Pluggable Authentication Modules), descrito em (SAMAR; SCHEMERS,1995). O PAM é um conjunto de bibliotecas que controlam as tarefas de autenticação dosistema e suas aplicações. Assim, o administrador do sistema pode escolher, com rela-tiva facilidade, como aplicações do sistema irão autenticar usuários. Como comentado em(MORGAN, 2002):

Page 163: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 163

(...) sem (reescrever e) recompilar uma aplicação com suporte a PAM, é possívelmodificar o mecanismo de autenticação que ela usa. Alguém pode, de fato, mo-dificar todo o sistema de autenticação local sem mexer nas aplicações que irãofazer uso disso.

Observe que o PAM permite controlar todos os aspectos ligados à autenticação de umusuário. Assim, como pode ser verificado em (MANN; MITCHELL, 2000), o PAM pode serutilizado, entre outros, para:

• controlar a quantidade de recursos disponíveis a cada usuário;

• permitir que o usuário faça sua autenticação apenas a partir de determinados ho-rários e estações;

• manter registros (logs) de todas as autenticações efetuadas.

Esses tipos de usos do PAM fogem ao objetivo deste capítulo e serão tema de (UCHÔA,2005). O que é importante vislumbrar nesta seção é a possibilidade de modificar o sistemade autenticação de uma estação usando o PAM, garantindo que todas as aplicações desistema utilizem-se do novo sistema para autenticar as contas dos usuários.

O PAM foi criado em 1995 pela Sunr, que liberou suas especificações na forma de umaRFC (Request for Comment), disponível em (SAMAR; SCHEMERS, 1995). O Linux derivousua implementação do PAM a partir deste documento. A Figura 6.16 apresenta uma visãogeral da interação do Linux-PAM com uma aplicação utilizando-o durante uma autenticação.

Linux−PAM

/etc/pam.d/Aplicações

Módulos PAM

1

4

2

3

Arquivos de Configuração

������������

������������

Disk

Figura 6.16: Funcionamento do PAM

Page 164: GERENCIAMENTO DE SISTEMAS LINUX

164 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Como comentado em (MANN; MITCHELL, 2000) e (MORGAN, 2002), o fluxo de exe-cução do Linux-PAM, ilustrado na Figura 6.16, geralmente segue a seguinte seqüência deexecução:

1. A aplicação – por exemplo login – faz uma chamada ao Linux-PAM.

2. Linux-PAM localiza a configuração apropriada no diretório /etc/pam.d (ou, alterna-tivamente, no arquivo /etc/pam.conf) para obter a lista dos módulos necessáriospara o serviço requerido.

3. Linux-PAM então carrega cada módulo na ordem dada pelo arquivo de configuraçãopara processar. Dependendo da configuração dos parâmetros, nem todos os móduloslistados no arquivo de configuração serão necessariamente executados.

4. Alguns, ou todos os módulos devem conversar com o usuário através da aplicação.Esta conversação normalmente inclui algumas informações que estão presentes nologin do usuário, como a solicitação de senha. Se a resposta do usuário satisfizerum módulo PAM em particular, ou se este módulo for satisfeito por alguma maneira,o controle é passado de volta ao Linux-PAM para que este processe o próximo mó-dulo. Assim, os passos 3 e 4 são repetidos para cada módulo relatado no arquivo deconfiguração, que esteja associado à aplicação em questão.

Ao término dos passos acima, o processo termina com um sucesso ou falha. No casode falha, normalmente a mensagem apresentada ao usuário não indica a causa da falha.Essa mensagem geral é uma forma de garantir a segurança do sistema. Porém, a maio-ria dos módulos PAM, dispõem diversos níveis de registros de informações, permitindo aoadministrador do sistema rastrear os problemas e identificar as violações de segurança.

Nesse processo, o Linux-PAM envolve quatro tipos separados de tarefas: gerencia-mento de autenticação, gerenciamento de conta, gerenciamento de sessão e gerencia-mento de senha. Como informado em (MORGAN, 2002), isso está relacionado aos tiposde módulos existentes no Linux-PAM:

Auth: O módulo auth provê dois aspectos relacionados à autenticação do usuário. Pri-meiro, ele verifica se o usuário é quem ele realmente diz ser, solicitando a ele umasenha ou outros mecaniscmos de identificação. Além disso ele pode configurar cre-denciais ou privilégios do usuário, como estabelecer a quais grupos o usuário per-tence.

Account: O módulo account providencia gerenciamento não-autenticado de contas. Podeser usado para limitar o acesso de um usuário a uma data ou máquina específica, alémde permitir controles diversos, como expiração de senha.

Page 165: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 165

Session: O módulo session providencia controle do que fazer antes e depois da conexãodo usuário ao serviço disponibilizado pela aplicação PAM. Isso inclui configuração dasvariáveis de ambiente, registro de atividades, etc.

Password: O módulo password é utilizado para alterar a senha (ou outro mecanismo deautenticação do usuário). Em geral é utilizado após o módulo auth, para exigir asenha antiga antes da nova.

De uma forma geral, a configuração do Linux-PAM para uma dada aplicação consisteem estabelecer a forma como as tarefas do PAM serão efetuadas para essa aplicação espe-cífica. Assim, além de informar os tipos de tarefas necessárias àquela aplicação, tambémsão especificadas as bibliotecas que implementam essas tarefas e como elas devem serconsultadas, o que é melhor descrito na próxima seção.

6.14 CONFIGURAÇÃO BÁSICA DO PAM

6.14.1 Usando o Arquivo /etc/pam.conf

Como comentado na seção anterior, existem duas formas de configurar uma aplica-ção Linux-PAM. É possível utilizar um único arquivo, o /etc/pam.conf. Nesse caso asconfigurações devem obedecer o seguinte formato:

service-name module-type control-flag module-path args

Esses parâmetros servem para indicar ao Linux-PAM como implementar as tarefas de au-tenticação para a aplicação:

service-nameEsse parâmetro indica o nome do serviço associado à configuração. Geralmente é onome da aplicação que a utiliza, como login, ftpd, su, etc.

module-typeEsse parâmetro informa ao Linux-PAM qual o tipo de módulo utilizado, havendo ummódulo para cada tipo de tarefa. Pode ser: auth, account, session e password,descritos na seção anterior.

control-flagA control-flag indica à biblioteca PAM como reagir em caso de sucesso ou falha.Os módulos PAM podem ser empilhados. Assim, para uma mesma tarefa, módulos domesmo tipo podem ser executados em série, um após o outro, garantindo que todas asrestrições para uma dada autenticação sejam satisfeitas. Dessa maneira, o parâmetro

Page 166: GERENCIAMENTO DE SISTEMAS LINUX

166 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

control-flag informa ao PAM a importância relativa de cada módulo. Existem duasmaneiras básicas de efetuar esse parâmetro e serão vistas mais à frente.

module-pathEsse parâmetro indica o caminho da biblioteca PAM a ser utilizada, o arquivo demódulo a ser usado. Se o parâmetro iniciar-se com uma barra, ‘/’, então o Linux-PAM irá esperar que seja informado o caminho absoluto do arquivo. Caso isso nãoaconteça, então Linux-PAM irá esperar o caminho relativo do arquivo ao diretório/lib/security.

argsPode ser importante passar alguma informação ao módulo PAM durante o processode negociação com a aplicação. Nesse caso, o parâmetro args, que é opcional,atende essa necessidade: ele consiste em uma lista de argumentos a ser enviadaao módulo, quando esse for invocado. A Tabela 6.4 apresenta alguns argumentospadrões disponíveis. Entretanto, cada módulo em si poderá possuir uma configuraçãoprópria através dos argumentos que utiliza.

Tabela 6.4: Argumentos Padrões do PAM

Argumento Descrição

debug gera informação extra nos arquivos de registo do sis-tema, via syslog

no_warn instrui ao módulo para não enviar mensagens deaviso (warnings) à aplicação

use_first_pass informa ao módulo para utilizar a senha do módulo an-terior – se há falha, o módulo não deve tentar solicitara senha novamente ao usuário

try_first_pass também informa ao módulo para solicitar a senha domódulo anterior – entretanto, solicita a senha nova-mente ao usuário em caso de falha

6.14.2 Utilizando o Diretório /etc/pam.d

A partir da versão 0.56, é possível configurar o Linux-PAM de uma maneira mais flexível,através de arquivos dispostos no diretório /etc/pam.d. Nesse caso, o diretório conterávários arquivos, um para cada tipo de serviço. Para ser mais exato, cada serviço possuiráum arquivo de mesmo nome nesse diretório. Assim, o serviço sudo será configurado viaarquivo /etc/pam.d/sudo.

Page 167: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 167

Em sua compilação normal, não é possível utilizar as duas formas de configuração doLinux-PAM. Dessa maneira, o administrador poderá usar o arquivo /etc/pam.conf ou odiretório /etc/pam.d, não os dois ao mesmo tempo. Assim, na presença de qualquerarquivo de configuração no diretório /etc/pam.d, o Linux-PAM simplesmente ignora aexistência do arquivo /etc/pam.conf.

Os arquivos no diretório /etc/pam.d são configurados de forma similar à configuraçãodo /etc/pam.conf. Entretanto, como o nome do serviço já é o nome do arquivo, o parâ-metro não é utilizado. Dessa forma, cada entrada em um arquivo no /etc/pam.d possui aforma

module-type control-flag module-path args

Dessa maneira, a configuração de aplicações no PAM é simplificada. De uma formageral, a configuração via /etc/pam.d possui as seguintes vantagens (MORGAN, 2002):

• há um parâmetro a menos para especificar, o que diminui as chances de erro du-rante a configuração;

• é mais fácil de manter, dado que uma aplicação pode ser reconfigurada sem riscosde interferir nas demais;

• é possível fazer links simbólicos de um arquivo a outro, facilitando a cópia da confi-guração PAM de uma aplicação para outra;

• é possível restringir a leitura do arquivo de configuração de uma dada aplicação, aoinvés de restringir a todas;

• gerenciamento de instalações é facilitado, dado que para uma nova aplicação ésuficiente acrescentar um novo arquivo no diretório /etc/pam.d.

Por esses e outros motivos, essa forma de configurar o Linux-PAM é preferível e tem sidoadotada pela maioria das distribuições modernas.

6.14.3 Configurando o Parâmetro /etc/control-flag

Desde a versão 0.60 do Linux-PAM, a configuração do parâmetro control-flag podeser feita de duas maneiras. A maneira tradicional é a mais simples e consiste no uso dequatro palavras-chave utilizadas para indicar a severidade associada ao sucesso ou falhade um módulo específico. A nova maneira permite um controle mais preciso, e é descritaem (MORGAN, 2002). Neste texto, só será abordada a forma tradicional, que consiste nouso das seguites palavras-chave:

Page 168: GERENCIAMENTO DE SISTEMAS LINUX

168 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

required:Essa opção indica que o sucesso do módulo é necessário ao sucesso da tarefa es-pecificada pelo parâmetro module-type. Note que a falha desse módulo não inter-romperá a checagem dos outros módulos de mesmo tipo. Isso é feito para que umaautenticação errada tome o mesmo tempo que uma autenticação correta, evitandoque um hacker fique tentando descobrir, por exemplo, contas válidas no sistema.

requisite:O funcionamento dessa opção é similar à opção required. Entretanto, em casode falha, o controle é retornado automaticamente à aplicação, sem a verificação dosoutros módulos de mesmo tipo. Esse parâmetro pode ser usado para evitar que ousário digite sua senha em um ambiente inseguro. Entretanto, pode ser usado porhackers para descobrir contas válidas. Em geral, não deve ser usado.

sufficient:O sucesso de um módulo com a opção sufficient é suficiente para satisfazer apilha de módulos destinada ao tipo de módulo onde é usado. Nesse caso, nenhumoutro módulo da pilha é executado. A falha nesse módulo, entretanto, não implica emfalha da pilha, a menos que seja o único.

optional:Como o nome sugere, essa opção informa que o módulo é opcional ao processo. Emgeral, Linux-PAM ignora o resultado desse tipo de módulo para informar se a pilharetornou sucesso ou falha. É utilizado em módulos que oferecem algum serviço aousuário, mas que não são críticos ao processo de autenticação como um todo.

Dessa maneira, empilhando vários módulos de mesmo tipo com as opções de controle,é possível ter um controle razoavelmente preciso do processo de autenticação do usuário.A seção a seguir apresenta um exemplo de configuração de um serviço via Linux-PAM.

6.14.4 Exemplo de Configuração de um Serviço via Linux-PAM

A Figura 6.17 apresenta o conteúdo de um arquivo de configuração de um serviço PAM.Nessa figura, pode ser percebido que o caracter ‘#’ pode ser utilizado para comentários.Além disso, é possível separar os tipos de serviços por linhas em branco, mas isso não éobrigatório. Como se vê, uma mesma tarefa pode ser feita com o empilhamento de váriosmódulos. No caso do auth, por exemplo, a autenticação é feita com os módulos pam_env,pam_unix e pam_deny.

Para entender o funcionamento da autenticação do serviço system-auth, é importantecompreender o funcionamento dos módulos que ele usa. Dessa maneira, segue-se umarápida descrição, em ordem alfabética, dos módulos utilizados nessa configuração:

Page 169: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 169

# system-auth

auth required /lib/security/pam_env.so

auth sufficient /lib/security/pam_unix.so likeauth

auth required /lib/security/pam_deny.so

account required /lib/security/pam_unix.so

account required /lib/security/pam_access.so

password required /lib/security/pam_cracklib.so retry=3 type=

password sufficient /lib/security/pam_unix.so use_authtok md5 shadow

password required /lib/security/pam_deny.so

session required /lib/security/pam_limits.so

session required /lib/security/pam_unix.so

Figura 6.17: O Arquivo /etc/pam.d/system-auth

pam_accessEsse módulo é do tipo account e providencia controle de acesso ao login do usuá-rio. A Figura 6.18 apresenta um exemplo auto-instrutivo de configuração desse mó-dulo. Geralmente, esse arquivo de configuração é o /etc/security/access.conf,mas isso pode ser modificado via argumento accessfile.

# arquivo access.conf

# formato da configuração

# permissão : usuários : origens

#

# não queremos ninguém acessando de evil.com ou spam.org

- : ALL : .evil.com .spam.org

# não queremos login no terminal, exceto do usuário root

- : ALL EXCEPT root : tty1

# permitimos acesso a todos da rede interna, exceto do root

+ : ALL EXCEPT root: 192.168.

# paul pode acessar da máquina home.nohome.com

+ : paul : home.nohome.com

# membros do grupo powers podem acessar de qualquer local

+ : powers : ALL

# ninguém mais pode acessar

- : ALL : ALL

Figura 6.18: Exemplo de Configuração do pam_access

Page 170: GERENCIAMENTO DE SISTEMAS LINUX

170 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

pam_cracklibCaso o administrador queira evitar senhas fracas, esse módulo de password pode serutilizado para garantir um mínimo de segurança na escolha de senhas pelos usuários.É possível, por exemplo, configurar o tamanho mínimo da senha e estimular o uso desímbolos especiais.

pam_denyEsse módulo nega o acesso ao usuário, sendo utilizado para garantir que o usuárionão consiga autenticar-se em caso de falha nos módulos anteriores. Dessa maneira,ele imprime uma segurança extra no esquema de autenticação.

pam_envCom esse módulo, o administrador pode configurar adequadamente as variáveis deambiente do usuário. Para isso, o arquivo /etc/security/pam_env.conf é utili-zado.

pam_limitsEsse módulo, de sessão permite a configuração de limite de recursos que pode serutilizado por cada sessão do usuário. Nesse caso, o arquivo utilizado para a confi-guração é o /etc/security/limits.conf. É possível configurar, entre outros, otempo máximo que o usuário pode utilizar por sessão, bem como a quantidade dememória disponibilizada.

pam_unixEsse é o módulo padrão de autenticação Unix. Usualmente irá obter as informaçõesdos arquivos /etc/passwd e /etc/shadow, descritos anteriormente neste capítulo.

O leitor interessado em uma descrição mais precisa desses e outros módulos, podeconsultar (MORGAN, 2002) ou (MANN; MITCHELL, 2000). Em (MORGAN, 2002) é aindapossível encontrar a descrição dos módulos que são distribuídos oficialmente com o Linux-PAM. Em (MORGAN, 2003) é possível encontrar uma relação relativamente completa dosmódulos PAM distribuídos na internet.

Voltando ao exemplo apresentado na Figura 6.17, inicialmente as variáveis de ambientedo usuário são configuradas, usando pam_env. Em seguida, o Linux-PAM irá autenticar ousuário através do pam_unix, checando antes se o usuário pode acessar aquele serviço,via pam_access. Antes de abrir a sessão, entretanto, serão configurados os limites derecursos, através do pam_limits. Caso o usuário queira torcar a senha, a segurança damesma será checada pelo pam_cracklib. Se o usuário não tiver acesso permitido, ouerrar sua senha, ele terá acesso negado, graças ao pam_deny.

Utilizando o PAM, é possível modificar todo o sistema de autenticação de um sistema.Assim, por exemplo, é possível utilizar informações armazenadas em SGBDs (Sistemas

Page 171: GERENCIAMENTO DE SISTEMAS LINUX

Gerenciamento de Usuários 171

Gerenciadores de Bancos de Dados), em bases LDAP, ou mesmo utilizar autenticação porleitura de digitais ou da íris. Em (MANN; MITCHELL, 2000), por exemplo, são apresentadosalternativas de uso do PAM para autenticação com senhas que funcionam uma única vez.

6.15 COMENTÁRIOS FINAIS

Uma piada freqüente entre administradores de sistemas computacionais é que o ge-renciamento desses recursos seria extremamente fácil não fosse um enorme problema: o“usuário”. Não fosse as necessidades do usuário, o processo de configuração de uma má-quina seria extremamente fácil. O Linux, por ser um sistema multiusuário e com autentica-ção altamente configurável, permite ao administrador um sossego maior no gerenciamentodesses recurso.

Page 172: GERENCIAMENTO DE SISTEMAS LINUX

172 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Page 173: GERENCIAMENTO DE SISTEMAS LINUX

7CONFIGURAÇÕES DIVERSAS

7.1 ARQUIVOS DE REGISTRO

Arquivos de registro ou de logs são extremamente úteis para o gerenciamento do sis-tema. Com eles é possível verificar e acompanhar falhas em certos componentes, ten-tativas de invasões, estado de processamento, ações dos usuários, dentre outras coisas.Desta forma, o administrador pode tomar conhecimento acerca do funcionamento do sis-tema como um todo.

É de extrema importância saber utilizar os logs, assim como saber como administrá-losem função do espaço em disco que eles ocupam. Dentre as operações de administraçãodestacam-se: a compactação e a gravação em, por exemplo, fitas magnéticas ou mídiasde CDs, rotação dos logs, os mantendo dentro de um período de tempo, redefinição dosarquivos de logs a intervalos periódicos afim de abranger outros componentes do sistemaque porventura podem ser tornar vitais e descarte dos logs segundo critérios específicosdo ambiente.

Não é aconselhável o descarte puramente dos logs uma vez que esses podem for-necer informações sobre a evolução de um problema, como por exemplo o histórico dosmecanismos adotados por hackers na tentativa de invadir o sistema. É conveniente mes-clar a rotação dos logs, mantendo disponíveis de forma imediata (para pesquisar com, porexemplo, grep) ao administrador os logs mais recentes (dentro de um período de tempoespecificado) e a gravação sob a forma de backup. A Figura 7.1 ilustra um pequeno scriptque trata de rotação de logs, descartando-se o mais antigo e empurrando-se os restantesem um mecanismos de fila.

Porém o script da Figura 7.1 não funciona perfeitamente com aplicativos que deixam osseus arquivos de logs permanentemente abertos pois, neste caso, a simples criação de umnovo arquivo faz com que o aplicativo perca a referência do arquivo previamente em uso.Para sanar este problema, sugere-se o script ilustrado na Figura 7.2.

Page 174: GERENCIAMENTO DE SISTEMAS LINUX

174 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

#! bin/sh

cd /var/log

mv logfile2 logfile3

mv logfile1 logfile2

mv logfile logfile1

cat /dev/null > logfile

chmod 600 logfile

Figura 7.1: Script para Implementar Rotação de Logs

#! bin/sh

cd /var/log

mv logfile2.gz logfile3.gz

mv logfile1.gz logfile2.gz

mv logfile logfile1

cat /dev/null > logfile

kill -1 pid

gzip logfile1

Figura 7.2: Script para Implementar Rotação de Logs Usando Sinais

O exemplo da Figura 7.2 utiliza sinais afim de reiniciar o aplicativo e fazer com queeste referencie de forma correta o arquivo recém-construído pelo cat. Uma outra diferençaapresentada é que esse pequeno script comprime os arquivos de log gerados. Para a re-alização da rotação, existe um script em Perl escrita por Matt Segur e Michael Bernsteinque poderá ser encontrada em http://www.admin.com/. Ainda sobre rotação e geren-ciamento de logs, o RedHat apresenta uma ferramenta chamada logrotate para essespropósitos.

Existem alguns arquivos de logs que não podem ser gerenciados: /var/run/utmp e/var/log/lastlog. O lastlog armazena os últimos logins dos usuários e é estruturadona forma de arquivo esparso, indexado pelo UID. Por sua vez, o utmp é responsável pormanter um registro de todos os usuários conectados no momento. Tal registro pode estarerrado em virtude de eliminação de shells com sinais inapropriados ou devido às alteraçõesfeitas pelos próprios usuários, uma vez que ele está freqüentemente aberto à escrita.

Os arquivos de log podem ser encontrados em diretórios distintos (porém mais usual-mente são encontrados em /var/log e /var/adm) e usando nomenclaturas também dis-tintas. Para localizá-los pode-se verificar os arquivos /etc/rc.d/init.d/*, /etc/rc.d*

Page 175: GERENCIAMENTO DE SISTEMAS LINUX

Configurações Diversas 175

ou /etc/init.d/* afim de verificar quais os daemons estão ativando registros em logse suas localizações específicas ou, ainda, verificar o arquivo /etc/syslog.conf paravisualizar os daemons que geram seus logs via syslog.

O syslog é uma ferramenta para auxiliar os daemons no tangente à geração dos logsassim como também auxiliar o administrador do sistema em manipulá-los. Para tanto, elepode ser dividido em três partes: o daemon do syslog (syslogd e seu arquivo de configu-ração – /etc/syslog.conf), openlog (que constitui a biblioteca de funções do syslog

afim de enviar mensagens ao syslogd) e o logger (shell do syslog). Os daemons secomunicam com o syslogd através de pipes ou sockets representado pelo arquivo especial/dev/log ou /var/run/log. Cada linha do arquivo de configuração do syslog utilizabasicamente o formato ilustrado a seguir:

seletor ação

É conveniente expressar que a separação entre os campos seletor e ação deve ser feitacom caracteres de tabulação (TAB) e não com espaços em branco. O campo seletor éformado por um ou mais binômios constituídos pela identificação do recurso e pelo nível deseveridade do log. Essa formatação será alvo de um exemplo de arquivo syslog.conf.Antes do exemplo, a Tabela 7.1 identifica os possíveis recursos pertinentes ao syslog eos níveis de severidade podem ser encontrados na Tabela 7.2. Observe que os recursossyslog, authpriv e ftp não estão disponíveis em todas as versões do syslog.

Em relação às ações, o syslog pode gravar os logs em arquivos locais, encaminharpara máquinas remotas ou enviar mensagens para usuários (ou todos ou aqueles perten-centes a uma lista). A Figura 7.3 ilustra um exemplo de um arquivo syslog.conf.

*.emerg *

local2.info root

*.warning; auth.info /var/adm/logmessages

lpr.debug /var/adm/lpd-errs

local0.notice @gimux.ufla.br

auth.notice (ifdef ’LOGHOST’,’/var/log/authlog’,’@loghost’)

Figura 7.3: Exemplo de um Arquivo /etc/syslog.conf

No exemplo da Figura 7.3, a primeira linha é responsável pelo envio de mensagensa todos os usuários conectados na ocorrência de eventos de "pânico", tais mensagenspodem ser restritas a um ou mais usuários como ocorre na segunda linha. Em tal linha háa comunicação ao root caso haja algum evento informativo relacionado ao local2.

Page 176: GERENCIAMENTO DE SISTEMAS LINUX

176 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Tabela 7.1: Recursos do syslog

Recurso Daemons Associados (Alguns Exemplos)

kern kerneluser processos dos usuários (ntpd)mail softwares relacionados com o correio eletrônico (sendmail)daemon daemons do sistema (gated, inetd, named, ntpd)auth comandos relacionados à autorização e segurança (login, rlogin, su, passwd)lpr spool de impressão (lpd)news sistema de notícias da usenet (nnrpd)uucp destinado ao uucp

cron relacionado ao daemon cron

mark registros de data/hora gerados a intervalos regulares (syslogd)local0-7 8 tipos de mensagens locais

(tcpd - local7, sudo - local2, popper - local0)syslog mensagens internas ao syslog

authpriv mensagens privadas de autorizaçãoftp associado ao ftpd (daemon do ftp)

* todos os recursos com exceção do mark

Tabela 7.2: Recursos do syslog

Nível Descriçãoemerg Situações de pânicoalert Situações urgentescrit Condições críticaserr Condições gerais de erroswarning Mensagens de avisosnotice Eventos merecedores de investigaçãoinfo Mensagens puramente informativasdebug Mensagens somente para depuração

O syslog também pode efetuar gravações em arquivos de log conforme tratam aslinhas 3 e 4 ou o envio a uma máquina responsável pela manipulação de logs dentro de umambiente de rede (linha 5). Por último, a linha 6 faz a gravação ou o envio à uma máquina. Aseleção é realizada caso a variável de ambiente LOGHOST esteja ou não instanciada. Porémesse tratamento condicional é restrito a apenas algumas versões de syslog que contém pré-processador de macro m4 (o administrador deverá consultar os manuais do syslog paraverificar a possibilidade de manipulação de macros).

Page 177: GERENCIAMENTO DE SISTEMAS LINUX

Configurações Diversas 177

Para testar o correto funcionamento do syslog, o administrador pode utilizar o co-mando logger. Tal comando permite o envio de mensagens de eventos ao syslogd

como ilustrado a seguir:

# logger -p local5.warning "mensagem de teste"

Nesse caso, uma linha contendo a frase "mensagem de teste"deverá ser gravada (ou en-viada) ao dispositivo assinalado no arquivo de configuração do syslogd. Caso isso nãoocorra, o administrador deverá rever a configuração do syslog.

7.2 GERENCIAMENTO DE SOFTWARE

Freqüentemente, o administrador se verá obrigado a instalar novos programas em suamáquina. Esse procedimento poderá ser feito de várias formas, dependendo da distribuiçãoLinux utilizada e da forma como o aplicativo foi disponibilizado. Apesar de não serem as úni-cas formas, as distribuições atuais utilizam-se de aplicativos em tar.gz ou tgz, arquivosrpm ou arquivos deb.

Distribuições baseadas no RedHat utilizam-se principalmente do formato rpm para ins-talação de aplicativos. Esse pacote, cujo histórico foi apresentado na Seção 2.5, simplificamuito o trabalho do administrador. A Tabela 7.3 apresenta algumas formas de uso dessecomando.

Tabela 7.3: Formas de Uso do Comando rpm

Opção Descrição

-qa lista todos os pacotes instalados-Uvh pacote.rpm atualiza ou instala um pacote-Fvh pacote.rpm atualiza um pacote (somente se ele já estiver instalado)-ev pacote remove um pacote-rebuild pacote.src.rpm gera uma rpm binário a partir de um rpm fonte-qi pacote lista a descrição do pacote-ql pacote lista os arquivos do pacote-qf arquivo informa qual o pacote associado ao arquivo

Algumas opções da Tabela 7.3 podem ser combinadas. Por exemplo o comando “rpm-qilf arquivo” informaria qual o pacote associado ao arquivo, dando ainda sua descri-ção e relação de arquivos. A opção “-F” é útil quando se tem um diretório de atualizações

Page 178: GERENCIAMENTO DE SISTEMAS LINUX

178 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

e não se quer ficar checando quais os pacotes instalados e que precisam ser atualiza-dos. Assim, caso o administrador tenha baixado atualizações de pacotes em um diretório/usr/updates e queira atualizar os pacotes instalados na máquina, mas não instalar no-vos pacotes, ele pode emitir o comando

# rpm -Fvh /usr/updates/*rpm

O comando rpm é muito versátil e flexível. É possível, por exemplo, verificar se nãohá arquivos modificados após uma instalação, ou mesmo checar assinaturas (para garantirque o pacote foi realmente feito por quem deveria). A checagem de assinaturas garanteque o pacote não foi alterado por hackers. Isso é feito com a opção “-checksig”. Maisdetalhes sobre o rpm podem ser obtidas na página de manual do comando, em (BARNES,1999) ou em (BAILEY, 1998).

Pacotes da distribuição Debian também são facilmente gerenciáveis através do co-mando dpkg. A opção “-i” instala um pacote e a opção “-r” é usada para remover. Con-sulte a documentação desse comando para maiores detalhes. Um comando muito utilizadona distribuição Debian e que foi portada para distribuições que utilizam rpm é o apt-get.Esse aplicativo é utilizado para baixar pacotes e suas dependências (assim ele faz down-load não só do aplicativo informado, mas das bibliotecas que ele usa. Uma observaçãoimportante é que a versão para arquivos rpm foi desenvolvida inicialmente pela Conectiva.

A instalação de programas no formato tar.gz é geralmente mais complicada. Emgeral, o administrador precisará buscar informações junto ao distribuidor do programa (emarquivos INSTALL ou README, por exemplo), sobre como fazer essa instalação. Caso oprograma siga formas padrões de distribuição, entretanto, essa tarefa não precisa ser árdua.Em geral, a instalação envolve os seguintes passos (será utilizado o programa superprog,versão 3.1, disponibilizado no arquivo superprog-3.1.tar.gz):

1. Descompactar o arquivo superprog-3.1.tar.gz em algum diretório para compila-ção (recomenda-se o tmp):

# tar -zxvf superprog-3.1.tar.gz

2. Entra-se no diretório descompactado:

# cd superprog-3.1

3. Executa-se o programa de configuração (pode ser o caso de se passar opções, nessecaso deve-se verificar as opções disponíveis):

Page 179: GERENCIAMENTO DE SISTEMAS LINUX

Configurações Diversas 179

# ./configure

4. Se o passo anterior deu erro, deve-se verificar o motivo do erro e corrigi-lo (consul-tando a documentação do programa). Caso contrário, deve-se iniciar a compilação:

# make

5. O passo anterior não deve dar erros, mas se houver também será necessário corrigi-lo. Caso não haja erros o próximo passo é instalar o programa:

# make install

Maiores detalhes sobre esse processo podem ser encontrados em (SCHNEIDER, 2002),que orienta sobre o uso dos autotools e do comando make.

7.3 AUTOMATIZANDO TAREFAS

A utilização de comandos que possam agendar o processamento é extremamente útilao administrador de sistemas. Com tais comandos pode-se, dentre outras coisas: fazerrotação automática dos logs, limpar e fazer backup dos sistemas de arquivos em um mo-mento mais apropriado e fazer a atualização de bases de informações caso utilize algumsistema de armazenamento “espelhado”. Dentre os comandos que existem, serão vistosnesta seção os comandos vinculados ao cron e o comando at.

7.3.1 O uso do cron

O cron tem a função de iniciar a execução de tarefas agendadas pelos usuários. O sis-tema de cron é basicamente representado pelo daemon do cron e pelos seus arquivos deconfiguração crontab associados aos usuários. Os arquivos crontab são nomeados como login dos usuários (daqueles que fazem uso deste serviço) afim de associar os processosao UID específico. Esses arquivos costumam ser armazenados em /var/spool/cron.As linhas do crontab seguem o formato a seguir:

minuto hora dia mês dia-da-semana comando

Os campos seguem as especificações referenciadas na Tabela 7.4. Caso algum camposeja marcado com ‘*’ (asterisco), o cron interpretará como qualquer valor, por exemplo,

Page 180: GERENCIAMENTO DE SISTEMAS LINUX

180 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Tabela 7.4: Definição dos Campos do crontab

Campo Intervalo

minuto 0 a 59hora 0 a 23dia 1 a 31mês 1 a 12dia-da-semana 0 a 6, onde 0 corresponde ao Domingo

30 2 * * 1 (cd /home/fulano; make server)

20 1 * * * find /tmp -atime +3 -exec rm -f {} ’;’

40 22 * * 0-3,6 /home/fulano/programa01

Figura 7.4: Exemplo de crontab

caso o asterisco esteja no campo dia, então a ação será executada todos os dias. Ocrontab também aceita intervalos (valores separados por um hífen) ou um conjunto devalores separados por vírgulas. A Figura 7.4 ilustra um exemplo de crontab.

No exemplo da Figura 7.4, pode ser encontrada, na primeira linha, a definição de exe-cução do make às 02:30 de toda segunda-feira. Já na segunda linha, ocorrerá a remoçãode todos arquivos cujo último acesso ocorreu a mais de 3 dias em relação à data corrente.Essa remoção será realizada diariamente às 01:20. Por último, a terceira linha indica aexecução do programa01, que deverá ocorrer às 22:40 de todos os dias exceto nas quin-tas e sextas (dias 4 e 5, respectivamente). O registro do arquivo crontab é feito por in-termédio do comando “crontab [opções] [nome_do_arquivo]”. Alguns parâmetrosassociados a esse comando são apresentados na Tabela 7.5.

Tabela 7.5: Opções Usuais do Comando crontab

Opção Descrição

-e ativa o editor padrão para modificações no arquivo crontab

-l lista o conteúdo do arquivo crontab

-r remove o arquivo crontab

Dessa forma, o registro de um arquivo crontab chamado, por exemplo, ctab é reali-zado como se segue:

Page 181: GERENCIAMENTO DE SISTEMAS LINUX

Configurações Diversas 181

# crontab ctab

Esse comando registra o arquivo ctab substituindo o arquivo crontab previamente regis-trado (caso exista) do usuário específico. O root pode passar como parâmetros um nomede usuário ou de um crontab afim de poder manipular, a seu gosto, o subsistema cron.

O controle de acesso ao cron é feito mediante uso dos arquivos cron.allow e cron.deny.Tais arquivos podem estar localizados, dependendo do sistema, nos diretórios /etc/cron.d,/etc/, /var/spool/cron ou /var/cron (consulte o manual do crontab para obteressa informação em seu sistema). Caso o arquivo allow exista, apenas os usuários nelelistados poderão registrar crontabs. Porém, caso o allow não exista e sim exista o ar-quivo deny, todos os usuários exceto aqueles listados no deny poderão registrar os seuscrontabs.

Porém o administrador tem a função de verificar o acesso do diretório no qual os arqui-vos de crontab são armazenados. Tal verificação objetiva impedir que usuários gravemarquivos em tal diretório sem a utilização do comando crontab (burlando, assim, a autori-zação contida nos arquivos allow e deny).

Em geral, para separar a configuração de agenda do sistema da do usuário root emesmo de outros usuários, existe um arquivo /etc/crontab com a agenda do sistema.Em alguns casos, como na Figura 7.5, esse arquivo apenas chama comandos localizadosem um dado diretório. O comando run-parts, usado nessa figura, é responsável porentrar no diretório associado e executar todos os comandos ali depositados. Isso facilita otrabalho do administrador, que precisa apenas inserir o seu script em um dos diretórios, deacordo com a periodicidade desejada. Observe que o início desse arquivo contém configu-rações de ambiente para a execução dos scripts.

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

Figura 7.5: Exemplo de /etc/crontab

Page 182: GERENCIAMENTO DE SISTEMAS LINUX

182 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

7.3.2 O uso do at

O comando at é também utilizado para agendar processamentos. Porém, o comandoat é menos flexível em relação ao cron uma vez que não se é permitido programar osprocessamentos para ocorrerem em diversos momentos (como, por exemplo, todos osdias). A permissão de utilização do at é semelhante ao crontab, ou seja, utiliza os ar-quivos/etc/at.allow e /etc/at.deny de forma idêntica aos arquivos allow e deny

do crontab. A sintaxe do at é exibida a seguir:

# at [opções] momento

Por default, o at coleta os comandos a serem executados através da entrada-padrãoonde a finalização da edição é feita pelo EOF (ctrl-D). A tabela 7.6 mostra as principaisopções associadas ao comando at. Em relação ao campo momento, o comando at aceitaos parâmetros listados na Tabela 7.7.

Tabela 7.6: Opções do Comando at

Opção Descrição-c exibe os jobs registrados-d remove um job específico-f permite que os comandos sejam lidos a partir de um arquivo (não pela entrada-

padrão)-l lista todos os jobs associados a um usuário-m envia um e-mail ao usuário quando o job for finalizado

A Figura 7.6 mostra alguns exemplos de utilização do comando at. Nessa figura, nota-se que as duas primeiras linhas são equivalentes, ou seja, ambas iniciarão o relativo pro-cessamento às 19:45h do dia 9 de dezembro. Na linha seguinte, o início está configuradopara as 03:00h de sábado. O uso da palavra-chave now pode ser visto na penúltima linha.Nesse caso, o início se dará após 5 horas do uso do at. Na última linha, o horário configu-rado é o meio-dia do dia seguinte ao atual. Nota-se, a utilização do next em substituiçãoao incremento ‘+1’.

7.4 CÓPIAS DE SEGURANÇA

Cópias de segurança no Linux podem ser feitas de várias formas, sendo possível utilizar-se vários mecanismos para isso. Por exemplo: cópias em fitas DAT podem ser feitas

Page 183: GERENCIAMENTO DE SISTEMAS LINUX

Configurações Diversas 183

Tabela 7.7: opções válidas para o campo momento do comando at

Momento Descrição

hh:mm [modifiers] Identificação do dia no formato de 00:00 a 23:59. Caso haja introdu-ção dos modificadores am e pm, o formato do momento passa a serde 12 horas. Pode-se, ainda, introduzir a palavra-chave zulu, o quecorresponde ao horário GMT.

midnight | noon |

teatime | now

Esses parâmetros substituem o formato numérico do momento para re-presentar meia-noite, meio-dia, 16:00 ou um momento relativo a partirdo momento corrente (now). O uso do now deverá ser sucedido de umincremento. O incremento consiste em uma expressão formada pelo si-nal de mais (+), seguido de um valor numérico e, finalmente, uma daspalavras-chave: minute, hour, day, week, month ou year. Caso oincremento seja +1, pode-se utilizar a palavra next em substituição.

month num[, year] O mês pode ser escrito por completo ou utilizando-se as três primeirasletras. O campo num representa o dia do mês (1 a 31) e o ano deveráser formado por quatro algarismos.

day Denota o dia da semana, escrito por completo ou pelas suas três pri-meiras letras.

today | tomorrow Representa o início do processamento no mesmo dia da utilização docomando at ou no dia seguinte.

at 19:45 December 9

at 7:45pm Dec 9

at 3 am Saturday

at now + 5 hours

at noon next day

Figura 7.6: Exemplos de Uso do Comando at

utilizando-se os comandos tar, dump ou dd, só para comentar os mais usados. Cópiasem CDs podem ser feitas com o uso do mkisofs e do cdrecord. Ainda, o comando tar

pode ser usado para compactar diretórios, permitindo backups em diversas mídias.

Também não se pode esquecer que, em um ambiente de rede, é possível utilizar de NFSou SAMBA para fazer backups remotos em máquinas UNIX ou Windows, respectivamente.O administrador deverá escolher a forma mais prática e adequada à sua realidade. Osdiretórios mais importantes para um backup são: o /home, com os arquivos pessoais dos

Page 184: GERENCIAMENTO DE SISTEMAS LINUX

184 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

usuários; o /etc com a configuração da máquina e o /var com arquivos de logs ouarquivos utilizados por servidores (como as páginas de um site em um servidor WWW).

7.5 CONFIGURAÇÃO DE DATA E HORA

A configuração de data e hora no Linux é relativamente simples. A primeira confi-guração diz respeito ao fuso horário adotado. Essa configuração é efetuada no arquivo/etc/sysconfig/clock. Uma forma mais prática e rápida é utilizar-se do comandotimeconfig, disponível em várias distribuições.

Para se configurar o data e a hora local, são utilizados dois comandos: o date e ohwclock (em alguns sistemas, simplesmente clock). O comando date, mais fácil deutilizar, configura a data e a hora local, mas somente a nível de kernel. Caso queira-seatribuir essa data a BIOS do sistema, deve-se usar o comando hwclock. A Figura 7.7mostra um exemplo de uso desses comandos.

# date

Seg Fev 10 12:08:02 BRST 2003

# date -s "02/11/2003 15:00:00"

Ter Fev 11 15:00:00 BRST 2003

# hwclock --systohc

# hwclock

Ter 11 Fev 2003 15:00:02 BRST 0.138947 segundos

Figura 7.7: Configurando Data e Hora

No caso da Figura 7.7, a primeira linha informa a data atual, utilizando-se de informa-ções de localização do sistema. Nesse caso, é informado, por exemplo, o fuso horário(BRST – Brazil East). Ao se acrescentar o parâmetro “-s”, exemplo do segundo comando,date recebe uma string para atribuir ao relógio lógico do sistema (kernel e aplicativos).Observe que, nesse caso, a data deve ser informada no padrão mês/dia/ano. Com ocomando hwclock -systohc, esse valor é copiado para a BIOS do sistema, o que podeser confirmado depois com uma execução simples do comando hwclock.

Uma observação a ser feita é que configuração de data e hora no sistema deve ser feitacom extrema cautela. O motivo é que vários servidores fazem tarefas periódicas e podem

Page 185: GERENCIAMENTO DE SISTEMAS LINUX

Configurações Diversas 185

ficar meio “malucos” com uma atualização desse tipo. Pode acontecer de alguns serviçosprecisarem ser reiniciados para voltarem ao comportamento normal. Sempre que possível,recomenda-se a alteração via BIOS.

Page 186: GERENCIAMENTO DE SISTEMAS LINUX

186 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

Page 187: GERENCIAMENTO DE SISTEMAS LINUX

REFERÊNCIAS BIBLIOGRÁFICAS

ADOBE SYSTEMS INCORPORATED. PostScript Printer Description File FormatSpecification, Version 4.3. San Jose: Adobe Developer Technologies, 1996.

ADOBE SYSTEMS INCORPORATED. PostScript Language Reference. 3. ed. Reading:Addison-Wesley, 1999.

ALVESTRAND, H. IETF Policy on Character Sets and Languages. Internet EngineeringTask Force (IETF), Jan. 1998. (Request for Comments: 2277; Best Currenct Practice: 18).URL: http://www.ietf.org/.

ANONYMOUS. Maximum Linux Security: A Hacker’s Guide to Protecting Your Linux Serverand Workstation. Indianapolis: Sams, 2000.

BAILEY, E. C. Maximum RPM: Taking the Red Hat Package Manager to the Limit. Raileigh:Red Hat Software Inc., 1998. Disponível em: <http://www.rpm.org/>.

BARNES, D. RPM HOWTO, Revision 3.0. The Linux Documentation Project, 3 November1999. Disponível em: <http://www.ibiblio.org/pub/Linux/docs/HOWTO/RPM-HOWTO>.

DOOREN, R. van. Quota mini-HOWTO, v.03 April 2002. 2002. The Linux DocumentationProject [WWW]. URL: http://www.ibiblio.org/pub/Linux/docs/HOWTO/mini/Quota.

EASY SOFTWARE PRODUCTS. CUPS Software Administrators Manual. Hollywood, 2002.URL: http://www.cups.org/.

EASY SOFTWARE PRODUCTS. CUPS Software Programmers Manual. Hollywood, 2002.URL: http://www.cups.org/.

EASY SOFTWARE PRODUCTS. CUPS Software Users Manual. Hollywood, 2002. URL:http://www.cups.org/.

Page 188: GERENCIAMENTO DE SISTEMAS LINUX

188 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

FIELDING, R. et al. Hypertext Transfer Protocol – HTTP/1.1. Internet EngineeringTask Force (IETF), June 1999. (Request for Comments: 2616). Disponível em:<http://www.ietf.org/>.

FRAMPTON, S. Linux Administration Made Easy. [S.l.]: The Linux Documentation Project,1999. URL: http://www.tldp.org/guides.html.

FREE STANDARDS GROUP. Linux Standard Base Core Specification 3.1. Free StandardsGroup, 2006. Disponível em: <http://www.linux-foundation.org/en/Specifications>.

HASTINGS, T. (Ed.). Internet Printing Protocol/1.1: Model and Semantics. InternetEngineering Task Force (IETF), Setembro 2000. (Request for Comments: 2911). URL:http://www.ietf.org/.

HASTINGS, T. et al. Internet Printing Protocol/1.1: Implementor’s Guide. InternetEngineering Task Force (IETF), Novembro 2001. (Request for Comments: 3196). URL:http://www.ietf.org/.

HENDERSON, B. Linux Loadable Kernel Module HOWTO, Revision v1.02 2002-05-21.2002. The Linux Documentation Project [WWW]. URL: http://www.ibiblio.org/pub/Linux/docs/HOWTO/Module-HOWTO.

HERRIOT, R. (Ed.). Internet Printing Protocol/1.1: Encoding and Transport. InternetEngineering Task Force (IETF), Setembro 2000. (Request for Comments: 2910). URL:http://www.ietf.org/.

HINNER, M. Filesystems HOWTO, v. 0.7.5, 22 Ago 2000. 2000. The Linux DocumentationProject [WWW]. URL: http://www.ibiblio.org/pub/Linux/docs/HOWTO/Filesystems-HOWTO.

III, L. M. (Ed.). Line Printer Daemon Protocol. Internet Engineering Task Force (IETF),Agosto 1990. (Request for Comments: 1179). URL: http://www.ietf.org/.

INTERNET MAIL CONSORTIUM. Using International Characters in Internet Mail. InternetMail Consortium, Ago. 1998. (IMCR-010). Disponível em: <http://www.imc.org/mail-i18n-.html>.

KROAH-HARTMAN, G. udev – a Userspace Implementation of devfs. In: Proceedings ofThe Linux Symposium 2003. Ottawa, Ontario (Canada): [s.n.], 2003. Disponível em: <http:-//www.kroah.com/linux/talks/ols 2003 udev paper/Reprint-Kroah-Hartman-OLS2003.pdf>.

KROAH-HARTMAN, G. Myths, Lies, and Truths about the Linux Kernel. 2006. End Talk AtLinux Symposium 2006. Disponível em: <http://www.kroah.com/log/linux/ols 2006 keynote-.html>.

Page 189: GERENCIAMENTO DE SISTEMAS LINUX

Referências Bibliográficas 189

LOOSEMORE, S. et al. The GNU C Library Reference Manual. 0.10. ed. [S.l.: s.n.], 2001.

MANN, S.; MITCHELL, E. L. Linux System Security: An Administrator’s Guide to OpenSource Security Tools. New Jersey: Prentice-Hall, 2000.

MILLER, T. C. Sudo Main Page. 2002. [WWW]. URL: http://www.sudo.ws/sudo/.

MOCHEL, P. The sysfs filesystem. In: Proceedings of The Linux Symposium 2005. Ottawa,Ontario (Canada): [s.n.], 2005. v. 1, p. 313–326. Disponível em: <http://www.kernel.org-/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf>.

MORGAN, A. G. Pluggable Authentication Modules (PAM). Open-PAM working group,December 2001. (Internet Draft). URL: http://gandalf.neark.org/pub/linux/libs/pam/pre/doc/current-draft.txt.

MORGAN, A. G. The Linux PAM System Administrators’ Guide; Draft v0.76. [S.l.]:Linux-PAM, 2002. URL: http://www.us.kernel.org/pub/linux/libs/pam/.

MORGAN, A. G. 2003. URL: http://www.kernel.org/pub/linux/libs/pam/.

MOURANI, G. Securing and Optmizing Linux: The Ultimate Solution. Montreal: OpenNetwork Architecture, 2001.

NEMETH, E. et al. UNIX System Administration Handbook. 2. ed. New Jersey:Prentice-Hall, 1995.

NEMETH, E. et al. UNIX System Administration Handbook. 3. ed. New Jersey:Prentice-Hall, 2001.

OLIVEIRA, R. S. de; CARISSIMI, A. da S.; TOSCANI, S. S. Sistemas Operacionais. 2. ed.Porto Alegre: Sagra-Luzzato, 2001.

PIKE, R.; THOMPSON, K. Hello world. In: USENIX Winter. [s.n.], 1993. p. 43–50.Disponível em: <http://plan9.bell-labs.com/sys/doc/utf.pdf>.

RAYMOND, E. S. The cathedral and the bazar. Sebastopol-CA: O’Reilly, 1999.

RUSSELL, R.; QUINLAN, D. (Ed.). Filesystem Hierarchy Standard - Version 2.2 final.Filesystem Hierarchy Standard Group: Filesystem Hierarchy Standard Group, 2001.Disponível em: <http://www.pathname.com/fhs/>.

RUSSELL, R.; QUINLAN, D.; YEOH, C. (Ed.). Filesystem Hierarchy Standard. Version2.3. Filesystem Hierarchy Standard Group: Filesystem Hierarchy Standard Group, 2004.Disponível em: <http://www.pathname.com/fhs/>.

Page 190: GERENCIAMENTO DE SISTEMAS LINUX

190 EDITORA - UFLA/FAEPE - Gerenciamento de Sistemas Linux

SAMAR, V.; SCHEMERS, R. Unified login with Pluggable Authentication Modules(PAM). Open Software Foundation, October 1995. (Request For Comments: 86.0). URL:http://gandalf.neark.org/pub/linux/libs/pam/pre/doc/rfc86.0.txt.gz.

SCHNEIDER, B. O. Linguagens de Programação II. Lavras: UFLA/FAEPE, 2002. (Cursode Pós Graduação “Lato Sensu” (Especialização) a Distância em Administração em RedesLinux).

SCHNEIER, B. Applied Cryptography. New York: John Wisley, Inc., 1996.

SILVA, R. M. de A. Sistemas operacionais. Lavras: UFLA/FAEPE, 2002. (Curso de PósGraduação “Lato Sensu” (Especialização) a Distância em Administração em Redes Linux).

STANFIELD, V.; SMITH, R. W. Linux System Administration. San Francisco: Sybex, 2001.(Craig Hunt Linux Library).

SWEET, M. An Overview of the Common UNIX Printing System, Version 1.1. Hollywood,2002. URL: http://www.cups.org/.

TANENBAUM, A. S. Modern Operating Systems. London: Prentice-Hall, 1992.

TANENBAUM, A. S. Modern Operating Systems. 2. ed. New Jersey: Prentice-Hall, 2001.

THE OPEN GROUP. The Single UNIX Specification, Version 3. IEEE, 2004. Disponível em:<http://www.unix.org/version3/online.html>.

TORVALDS, L.; DIAMOND, D. Só por prazer: Linux, os bastidores de sua criação. Rio deJaneiro: Campus, 2001.

UCHÔA, J. Q. Segurança Computacional. 2. ed. Lavras: UFLA/FAEPE, 2005. (Curso dePós Graduação “Lato Sensu” (Especialização) a Distância em Administração em RedesLinux).

UCHÔA, J. Q. Serviços de Redes em Linux. 3. ed. Lavras: UFLA/FAEPE, 2008. (Curso dePós Graduação “Lato Sensu” (Especialização) a Distância em Administração em RedesLinux). (em fase de revisão).

VASUDEVAN, A. The Linux Kernel HOWTO, v4.2, 26 Jan 2003. 2003. The LinuxDocumentation Project [WWW]. URL: http://www.ibiblio.org/pub/Linux/docs/HOWTO/Kernel-HOWTO.

WIRZENIUS, L. et al. The Linux System Administrator’s Guide. Version 0.9. Chapel Hill(North Carolina): The Linux Documentation Project, 2005. Disponível em: <http://www-.tldp.org/guides.html>.

Page 191: GERENCIAMENTO DE SISTEMAS LINUX

Referências Bibliográficas 191

YERGEAU, F. UTF-8, a transformation format of ISO 10646. Internet EngineeringTask Force (IETF), Nov. 2003. (Request for Comments: 3629; Standard: 63). URL:http://www.ietf.org/.

ZIMMERMANN, H. OSI Reference Model – The ISO Model of architecture for opensystems interconnection. IEEE Transactions On Communications, IEEE, v. 28, n. 4,p. 425–432, 4 1980. Disponível em: <http://www.comsoc.org/livepubs/50 journals/pdf-/RightsManagement eid=136833.pdf>.