Todos os segredos estão no /etc
Nem todos querem "escovar os bits" e conhecer a fundo a configuração do Linux. Mas os que desejam saber como um sistema operacional funciona encontram no Linux uma excelente ferramenta de aprendizado
Nem todos os usuários querem ou têm paciência para configurar o sistema "na mão". Por isso, distribuições como Red Hat, SuSE e Mandrake possuem scripts de configuração para console e front-ends gráficos para desempenhar essas tarefas. Mas ainda sofremos pela falta de padrões: se eu mudar do Red Hat para o Slackware, por exemplo, fico sem o sndconfig.
O Linux de maneira geral possui arquivos de configuração editáveis em texto puro. O que esses scripts e frontends fazem é criar uma interface mais amigável para os usuários menos experientes (ou preguiçosos, como eu...). Mas temos a considerar os seguintes pontos:
1. As ferramentas gráficas, por questão de praticidade, oferecem ao usuário as funcionalidades mais importantes do serviço que se quer configurar. Normalmente, é possível configurar com as ferramentas gráficas de oitenta a noventa por cento dos recursos daquele serviço. Entretanto, todo o potencial do recurso só pode ser bem explorado se algumas opções não disponíveis no configurador também puderem ser ajustadas.
2. Usando os configuradores gráficos, o usuário perde a excelente oportunidade de aprender mais sobre o sistema. Nem todos querem "escovar os bits" e conhecer a fundo a configuração do Linux. Mas os que desejam conhecer como um sistema operacional funciona encontram no Linux uma excelente ferramenta de aprendizado.
Para satisfazer a todos os que querem se aprofundar nos mistérios do Linux, iniciamos aqui uma série de artigos sobre o /etc, diretório-chave para configuração do nosso pingüim. Propositadamente, não vamos colocar exemplos dos arquivos de inicialização neste artigo, para forçar o leitor a verificá-los em seu próprio sistema. Então, boa leitura e bom divertimento!
Medidas para organizar o caos
Quem já instalou um programa em um sistema rodando Windows sabe que não há um padrão (a palavra "caos" me vem à cabeça...). Os programas de instalação são diferentes entre si e criam diretórios indiscriminadamente, e normalmente espalham DLLs por todo o sistema, apesar de o C:\WINDOWS\SYSTEM ser o lugar apropriado para elas. Desinstalar um software "na mão" em um sistema desses pode se transformar numa tarefa hercúlea, e mesmo que o programa possua um "desinstalador", algum arquivo pode ficar para trás. Além disso, para inicialização do sistema, são lidos arquivos que estão no C:\, no C:\WINDOWS, etc. Sem contar o registro: quantos de nós conseguimos entender direito aquela coisa?
Enquanto isso, o padrão UNIX, que vem sendo aprimorado há trinta anos, desde o começo nos deu uma solução elegante para organizar a distribuição dos arquivos. De fato, os binários executáveis possuem diretórios-padrão onde devem ficar (/bin e /usr/bin, por exemplo), a documentação fica sempre em /usr/doc e /usr/share/doc, os manuais on-line (man pages) estão em /usr/man, e assim por diante.
A organização hierárquica dos diretórios no Linux é assunto para um futuro artigo, mas vamos nos ater a um diretório dos mais importantes. Se considerarmos o kernel como coração do sistema, podemos dizer que o /etc é parte do seu sistema nervoso.
O kernel e quase todos os programas guardam no /etc seus arquivos de configuração e inicialização (e os programas que não o fazem estão fora do padrão!!!). Listando o conteúdo de /etc, podemos contar mais de 230 arquivos. Dominar a configuração dos arquivos mais importantes significa dominar a configuração do Linux.
Iluminação
Como na mitologia grega, quando Prometeu roubou o fogo do Olimpo e o entregou aos homens, assim também tentaremos levar ao leitor um pouco de luz sobre os mistérios contidos num aparentemente inofensivo diretório. O conhecimento do fogo deu aos homens uma considerável independência da vontade dos deuses.
Utilizando a mesma alegoria, podemos dizer que o "fogo" escondido no /etc dará ao administrador de sistemas Linux um poder e independência muito grandes. Vamos aos fatos!
O padrão a ser seguido para a árvore do /etc está descrito no documento Filesystem Hierarchy Standard (FHS), que por sua vez é parte do Linux Standard Base (LSB), padrão que deve ser seguido por todas as distribuições se quisermos um dia obter compatibilidade total entre elas. A árvore de diretórios completa do FHS é mostrada no quadro na próxima página.
Por uma questão de clareza, omitimos tudo abaixo dos shares e dos mans. Como podemos notar, o FHS ainda é omisso quanto à organização de diretórios abaixo do /etc. Segundo o texto do FHS, alguns arquivos são obrigatórios, mas pouco ou nada se fala a respeito dos arquivos de inicialização de runlevel (o diretório rc.d) e dos scripts de inicialização dos serviços (o diretório init.d). Como veremos mais adiante, a maior fonte de incompatibilidades entre as versões reside nesse "detalhe".
Configuração geral
Os arquivos de configuração geral, normatizados pelo FHS, estão relacionados abaixo, com uma explicação sucinta sobre os serviços que cada um configura. Logicamente, perto da absurda quantidade de arquivos presente no /etc das distribuições modernas, esses 37 arquivos podem parecer pouco. Mas não se engane: são os mais importantes na configuração do seu Linux. Em futuros artigos, descreveremos cada um deles em detalhes, com exemplos de como configurá-los.
adjtime - fator de correção para o real time clock do seu computador. Como os RTCs são normalmente imprecisos (mesmo em máquinas caras), o Linux oferece uma maneira fácil de corrigir o relógio do sistema. Mais informações sobre esse arquivo estão disponíveis no Clock Mini-HOWTO.
confissue - contém a tela inicial que é mostrada durante o login em modo texto. Normalmente é aquele pingüim colorido, ou aquelas ASCII art um pouco estranhas. Algumas distribuições modernas utilizam os arquivos issue e issue.net em vez de confissue.
csh.login - arquivo de configuração do interpretador de comandos tcsh. Este arquivo é lido durante o login por todos os usuários quando utilizam esse shell.
disktab - arquivo descritor de mídias. Não é usado no Linux, uma vez que os dispositivos já estão criados no /dev.
fdprm - floppy disk parameter table. Tabela que descreve os formatos de disco a ser lidos pelo drive. Você pode configurar esses arquivos para tentar ler seus velhos disquetes de 5 1/4'' do Apple ou do TRS-80...
fstab - descritor de todos os sistemas de arquivos que podem ser montados. Define os pontos de montagem, modos de montagem e permissões.
gettydefs - este arquivo contém definições de inicialização e finalização para cada uma das saídas seriais utilizadas pelos terminais burros conectados à sua máquina Linux.
group - arquivo que abriga as definições de grupo.
inittab - chama os scripts de inicialização durante o boot do Linux. É o primeiro arquivo lido pelo sistema.
ld.so.conf - lista os caminhos para as bibliotecas compartilhadas (shared libraries) do sistema. É usado pelo processo ldconfig para criar o cache e os links que o run-time linker ld.so necessita.
lilo.conf - contém as configurações do LILO. Outros Boot Loaders (como o GRUB) ainda não foram normatizados pelo FHS.
motd - a sigla motd significa "message of the day" (mensagem do dia). Seu conteúdo é exibido após o login. Em sistemas com muitos usuários, este arquivo é utilizado para mandar mensagens a todos os usuários, pois requer muito menos espaço em disco do que enviar e-mail para todos os usuários. Pode-se ainda ecoar o fortune para ele, e ter uma mensagem aleatória sempre que se faz login.
mtab - como já vimos, fstab é um arquivo de configuração, o sistema não escreve nele, só o lê. O mtab, por outro lado, é um arquivo de controle onde o sistema grava as informações sobre os sistemas de arquivos atualmente montados. Não mexa nele!
mtools - o pacote mtools utiliza este arquivo para suas configurações. Em algumas implementações mais novas do pacote, é possível que o nome do arquivo tenha sido mudado para mtools.conf.
passwd - arquivo de senhas e informações de login de cada usuário. Caso se use shadow password em seu sistema, as senhas criptografadas estão no arquivo shadow.
profile - arquivo que inicializa as variáveis de ambiente e programas durante o login. Este arquivo abriga as configurações para todos os usuários. Apesar de não ser padrão do FHS, a maioria das distribuições utiliza um segundo arquivo, bashrc, para configuração de aliases e funções. A SuSE possui ainda os arquivos profile.local (não se deve mexer no profile, apenas no profile.local) e profile.dos. Os arquivos para configuração individual estão no /home de cada usuário.
securetty - lista os terminais (ttys) nos quais o root pode acessar o sistema.
shadow - as senhas criptografadas
relacionadas no arquivo passwd
estão aqui.
shells - contém os caminhos completos dos shells de login válidos. Esse arquivo é consultado pelo chsh e fica disponível para consulta por outros programas. Alguns programas consultam este arquivo para descobrir se o usuário existe. Por exemplo, daemons
de ftp tradicionalmente rejeitam
acesso de usuários com interpretadores de comando não incluídos neste arquivo.
syslog.conf - principal arquivo de
configuração do syslogd, que é o
daemon que armazena as mensagens de sistema. O syslog.conf determina
as regras para seleção das mensagens
a armazenar.
ttytype - dispositivo de terminal para mapeamento-padrão do tipo de terminal. Pouco usado atualmente, configura os tipos de terminal utilizados em cada linha serial.
Configuração de rede
Os arquivos de configuração dos serviços de rede normatizados pelo FHS são os seguintes:
exports - se você roda um servidor NFS, este arquivo é usado para informar os diretórios que serão compartilhados na rede.
ftpusers - lista os usuários autorizados a fazer ftp em sua máquina, caso algum servidor ftp esteja rodando. Note que este é o único arquivo de ftp normalizado pelo FHS. Outros arquivos eventualmente presentes em seu sistema são de propriedade do aplicativo de ftp que o sistema utiliza.
gateways - arquivo utilizado pelo
daemon routed para definição de
roteamento.
host.conf - configura a ordem de procura dos nomes de máquina. Normalmente, é configurado para procurar
no DNS, no BIND e no arquivo hosts.
hosts - arquivo que lista os hosts (máquinas da rede) conhecidos. É usado como substituto ou mesmo em paralelo a um servidor DNS externo.
hosts.allow - define os nomes das
máquinas que podem se utilizar dos
serviços de rede servidos por esta
máquina.
hosts.deny - em contraponto ao hosts.allow, este arquivo lista os computadores que estão bloqueados para os serviços desta máquina.
hosts.equiv - listagem de máquinas
e usuários que são confiáveis para
rodar os "r-comandos". O arquivo hosts.equiv permite ou proíbe máquinas e usuários de usar os r-comandos (por exemplo, rlogin, rsh ou rcp) sem fornecer uma senha.
hosts.lpd - nomes das máquinas
que podem acessar o daemon de
impressão lpd.
inetd.conf - descreve e configura os serviços que serão mantidos pelo servidor INETD. São esses mesmos serviços que são permitidos (ou bloqueados) por hosts.allow e hosts.deny.
networks - lista nomes e endereços
de redes conhecidas. Utilizado pelo comando routed. Permite que sejam dados nomes a redes. Alguns Linuxes não possuem esse arquivo.
printcap - arquivo de configuração de serviços de impressão. Sua impressora é configurada aqui.
protocols - Este arquivo é um
arquivo ASCII, descrevendo os vários protocolos internet DARPA que estão disponíveis para o subsistema TCP/IP. Ele pode ser consultado em vez de usar os números nos arquivos ARPA incluídos ou, mesmo que da pior forma, adivinhá-los. Esses números irão ocorrer no campo protocolo de qualquer cabeçalho ip. NÃO MEXA
NESSE ARQUIVO! Se quiser vê-lo, use o cat ou o less, não o abra com editores de texto.
resolv.conf - arquivo que aponta para um ou mais servidores DNS.
rpc - os serviços RPC (Remote Procedure Calls) são a implementação de serviços no modelo cliente-servidor para Unix desenvolvidos pela Sun
Microsystems. Os serviços RPC são identificados por números, e o arquivo
/rtc/rpc mapeia os nomes dos serviços com os números dos programas.
services - lista as portas dos serviços de rede. Segue as recomendações da IANA (RCF1700).
Procure encontrar e visualizar
esses arquivos em seu Linux. Alguns deles podem ter sua sintaxe colorizada se você utilizar o vi. Cuidado!
Alguns arquivos (como o services e
o mtab) não devem ter seu conteúdo alterado! Se não se sentir seguro,
utilize visualizadores como o cat ou
o less.
Na próxima edição falaremos sobre as diferenças entre o /etc de várias distribuições. Até lá!
Para saber mais
The Linux Standard Base
www.linuxbase.org
Unix File System Standard (Filesystem Hierarchy Standard)
www.pathname.com/fhs
How to build a minimal Linux system from source code de Greg OKeffe
www.netspace.net.au/~gok/power2bash
Linux From Scratch de Gerard Beekmans
www.linuxfromscratch.org
Unix and Internet Fundamentals de Eric Raymond
www.linuxdoc.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO.html
Guia Foca GNU/Linux de Gleydson Mazioli da Sila
www.metainfo.org/focalinux
The Linux Manual de Hugo Cisneiros
tlm.conectiva.com.br
Running Linux de Matt Welsh e Lar Kaufman OReilly - ISBN 85-7993-018-7
www.oreilly.com
Man pages dos arquivos listados