Prof° Clifer Rodrigues
DOMINANDO AS LINHAS DE COMANDO DOMUNANDO OS SEGREDOS DOS COMANDOS
Ao trabalhar com a configuração manual dos serviços, o editor de textos acaba sendo sua principal ferramenta de trabalho. Existem inúmeros editores de texto no Linux, boa parte deles são voltados para programação, com suporte a reconhecimento de sintaxe e diversas outras funções úteis para programação, mas também existem editores mais simples, destinados a quem quer simplesmente editar e salvar arquivos de texto, sem muita firula. Alguns exemplos de editores gráficos comumente usados são o kedit e kwrite no KDE, e o gedit no Gnome. O grande problema com eles é que eles são ferramentas gráficas, que não estarão disponíveis quando você estiver configurando um servidor sem o ambiente grpafio instalado via SSH. Chegamos então aos editores de texto puro, como o joe, nano, mcedit e o vi. Em qualquer um deles, a sintaxe básica é o comando do editor seguido pelo arquivo que deseja editar, como em: # joe /etc/fstab O mais simples é o mcedit. Ele faz parte do pacote "mc", que é encontrado em todas as distribuições. Ele normalmente não vem instalado por padrão, mas você resolve isso rapidamente instalando o pacote manualmente, como em: # apt-get install mc No mcedit as funções são acessadas usando as teclas F1 a F10, com uma legenda mostrada na parte inferior da tela. Para salvar você pressiona F2 e para sair, F10. Ele é provavelmente o editor mais fácil de usar, a grande limitação é que ele não permite que você cole texto de outras janelas usando o botão do meio do mouse, um recurso extremamente útil ao copiar exemplos e modelos de configuração. O joe é um meio termo. Ele é um editor simples e leve, muito parecido com o antigo Wordstar do DOS e usa as mesmas teclas de atalho que ele. Para salvar o arquivo e sair, você pressiona "Ctrl+K" e depois "X", para salvar sem sair o atalho é "Ctrl+K" seguido de "D". Para sair descartando as alterações, pressione "Ctrl+C", para abrir a janela de ajuda, com os atalhos para as demais funções pressione "Ctrl+K", "H" e, novamente "Ctrl+K", "H" para fechá-la. O nano é outro editor de texto simples e leve, daí o nome. Para salvar e sair, pressione "Ctrl+X", depois "S" e Enter, para sair sem salvar pressione "Ctrl+X" e "N" e, para
apenas salvar, use o "Ctrl+O". Assim como o mcedit, o joe e o nano não vêm préinstalados na maioria das distribuições, mas você pode instalá-los rapidamente usando o gerenciador de pacotes, como em: # apt-get install joe nano Finalmente, temos o vi, que por algum motivo conquistou um grupo de usuários fiéis ao longo de seus quase 30 anos de vida e, graças eles, continua vivo até hoje, muito embora seja um dos editores menos amigáveis. O vi tem três modos de operação: comando, edição e o modo ex. Ao abrir o programa, você estará em modo de comando; para começar a editar o texto, pressione a tecla "i". A partir daí, ele funciona como um editor de textos normal, onde o Enter insere uma nova linha, as setas movem o cursor, etc. Quando terminar de editar o arquivo, pressione "Esc" para voltar ao modo de comando e em seguida "ZZ" (dois Z maiúsculos) para salvar o arquivo e sair. Para sair sem salvar pressione Esc e digite ":q!" (exatamente como aqui, dois pontos, quê, exclamação, seguido de Enter). Uma segunda opção para salvar e sair é pressionar Esc seguido de ":wq". Para apenas salvar, sem sair, pressione Esc seguido de ":w" e para sair sem salvar use o Esc seguido de ":q!". Resumindo, o Esc faz com que o vi volte ao modo de comando, o ":" nos coloca no modo ex, onde podemos salvar e fechar, entre outras funções. O "q" fecha o programa, o "w" salva o arquivo e o "!" é uma confirmação. Embora não seja exatamente pequeno (se comparado a editores mais simples, como o joe ou o nano), muito menos fácil de usar, o vi é praticamente o único editor que pode ser encontrado em qualquer distribuição. Uma observação é que o Debian o Ubuntu e outras distribuições derivadas deles utilizam o nvi como editor padrão, no lugar do vi tradicional. Ele se comporta de forma estranha e é bastante improdutivo. Se você gosta do vi, recomendo que instale o vim, que é a versão completa do editor: # apt-get install vim Continuando, ao sair do editor, volta para o terminal. Você pode verificar se o arquivo realmente foi salvo corretamente usando o cat, como em "cat /etc/fstab". No caso de arquivos longos, acrescente "| more", que permite ler uma página de cada vez, como em "cat /var/log/syslog | more". O horário do sistema é mais uma configuração importante em um servidor, já que ele é usado nos logs gerados, nos atributos dos arquivos e assim por diante. Se o relógio do servidor está errado, todos os logs serão gerados com horários incorretos, sem falar
nos horários dos e-mails enviados através do servidor e de diversos outros problemas. A questão do horário é tão importante que existe um protocolo de rede destinado a solucionar o problema, o NTP (Network Time Protocol). Para usá-lo, o primeiro passo é verificar se os pacotes "ntp" e "ntpdate" estão instalados no sistema. Nas distribuições derivadas do Debian, você pode instalá-los rapidamente usando o aptget: # apt-get install ntp ntpdate No Fedora e no CentOS o pacote "ntp" vem instalado por padrão, mas em caso de dúvida você pode verificar a instalação usando o yum. Uma vez instalado, o ntp passa a ajustar o relógio do sistema de forma transparente, mantendo o relógio sincronizado em relação aos servidores especificados no arquivo "/etc/ntp.conf". Você pode checar o horário do sistema usando o comando date: # date Thu Jun 19 14:26:37 BRT 2008 Devido à forma como trabalha, ajustando o relógio de forma suave, poucos segundos de cada vez, o NTP é destinado a manter o horário sincronizado, mas não a acertar o relógio do sistema em caso de grandes atrasos. Esta função é reservada ao comando "ntpdate", que ajusta o relógio "na marra", independentemente de quão grande seja o atraso: # ntpdate -u pool.ntp.org A opção "-u" faz com que ele utilize uma porta UDP alta, evitando que você precise manter a porta 123 aberta no firewall e o "pool.ntp.org" é um servidor público, que encaminha a sua requisição a algum servidor geograficamente próximo. Você pode especificar outro servidor diretamente se preferir. Se o horário aparecer atrasado ou adiantado em algumas horas, é sinal de que o fusohorário do sistema não foi definido corretamente. Nesse caso, ajuste a configuração usando o comando "tzselect", também executado como root. Se o servidor utiliza o horário de Brasília (UTC -3), por exemplo, você usaria as opções "2) Americas > 9) Brazil > 8) S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)". Embora desenvolvido de forma independente, o Linux é um sistema Unix, que herda os recursos multiusuário desenvolvidos desde os primeiros sistemas Unix, usados nas décadas de 70 e 80. Isso permite que o sistema seja usado por inúmeros usuários
simultaneamente, sem que um atrapalhe as atividades do outro, nem que possa alterar seus arquivos. Dois exemplos extremos seriam um servidor LTSP, onde dezenas de usuários podem rodar aplicativos simultaneamente, via rede, através de terminais burros conectados ao servidor principal, e um servidor web de shared hosting, que pode hospedar milhares de sites diferentes, cada um administrado por um usuário diferente. As restrições básicas de acesso são implementadas através de um sistema de permissões simples, porém eficiente, que consiste num conjunto de três permissões de acesso (ler, gravar e executar) e três grupos (dono, grupo e outros), que combinadas permitem fazer muita coisa. Os dois comandos mais básicos são o "adduser" e o "passwd", que permitem, respectivamente adicionar novos usuários e alterar as senhas de acesso posteriormente, como em: # adduser joao (cria o usuário joao, especificando uma senha inicial) # passwd joao (altera a senha posteriormente) O próprio usuário pode alterar a senha usando o comando "passwd", desde que ele saiba a senha antiga. Se o usuário esqueceu a senha, você pode definir uma nova executando o comando como root; nesse caso o sistema pede a nova senha diretamente, sem solicitar a senha antiga. Os usuários são cadastrados no sistema através do arquivo "/etc/passwd". Se tiver curiosidade em olhar dentro do arquivo você verá uma entrada para cada usuário, incluindo o diretório home e o shell usado, como em: joao:x:1001:1001:,,,:/home/joao:/bin/bash Assim como qualquer outro arquivo de configuração, o "/etc/passwd" pode ser editado manualmente, ou com a ajuda do comando "usermod". Existem diversas situações em que você pode desejar trocar o shell padrão ou o diretório home do usuário, de forma a limitar o acesso ao servidor. Em um servidor web compartilhado por muitos usuários, por exemplo, o diretório home de cada usuário seria a pasta contendo os arquivos do site, e o shell padrão seria um aplicativo como o MySecureShell, destinado a limitar o acesso do usuário a esta pasta específica. Bem antigamente, as senhas eram salvas no próprio arquivo "/etc/passwd",
juntamente com as demais informações, o que abria brecha para diversos tipos de ataques. A partir de um certo ponto (por volta de 1996) todas as distribuições passaram a utilizar o sistema shadow, onde as senhas são armazenadas de forma encriptada em um arquivo separado, o "/etc/shadow". Dentro do arquivo você verá entradas contendo a senha encriptada, como em: joao:$1$LpQPRMC5$eHXLjiW7ks80LQcepW0Rz.:13993:0:99999:7::: As senhas são encriptadas usando um algoritmo de mão única, que permite apenas encriptar as senhas, mas não recuperá-las. Durante o login, o sistema aplica o mesmo algoritmo à senha digitada pelo usuário e compara a string resultante com a armazenada no arquivo. Se o resultado for o mesmo, o sistema sabe que a senha confere e o acesso é autorizado. Este sistema faz com que as senhas não sejam recuperáveis, já que a senha propriamente dita não é salva em lugar nenhum. Se o usuário esqueceu a senha, você pode usar (como root) o comando "passwd" para definir uma nova, mas não é possível recuperar a senha antiga. Continuando, para remover um usuário anteriormente criado, utilize o comando "deluser", como em: # deluser joao Por questão de segurança, o comando remove apenas a conta, sem apagar o diretório home, ou outras pastas (como o diretório de spool dos e-mails). O diretório home é especialmente importante, pois ele guarda todas as configurações e os arquivos do usuário, de forma que em um servidor você só deve removê-lo depois de ter realmente certeza do que está fazendo. Para remover o usuário apagando também o diretório home, adicione o parâmetro "--remove-home", como em: # deluser joao --remove-home Como comentei, o diretório home é importante, por concentrar todos os arquivos do usuário. Uma opção saudável ao removê-lo é criar um backup, de forma que você possa restaurá-lo mais tarde caso necessário. Para isso, use a opção "--backup", que cria um arquivo compactado, contendo os arquivos do usuário, salvo no diretório onde o comando for executado: # deluser joao --remove-home --backup
Se executasse o comando "ls" depois de remover o usuário "joao" usando a opção de backup, veria que foi criado o arquivo "joao.tar.bz2", referente ao backup. Você também pode bloquear temporariamente um usuário, sem remover o home ou qualquer outro arquivo usando o comando "passwd -l", como em: # passwd -l joao O "passwd -l" realmente trava a conta, fazendo com que o sistema passe a recursar qualquer senha inserida na hora do login. Para desbloquear a conta posteriormente, use o "passwd -u", como em: # passwd -u joao O Fedora e o CentOS incluem o system-config-users, um utilitário gráfico de administração de usuários. Uma versão levemente modificada dele pode ser encontrada no Ubuntu e em outras versões baseadas no Debian, na forma do "usersadmin", que faz parte do pacote "gnome-system-tools". Além da configuração dos usuários, temos a configuração dos grupos, que permitem organizar os usuários, definindo as permissões de acesso de forma mais granular. Imagine um caso em que você tenha um servidor compartilhado entre vários usuários, onde apenas três deles, "maria", "jose" e "joao" devem ter acesso à pasta "/var/www/intranet", que contém os arquivos do site interno da empresa. Uma forma simples fazer isso é criar um grupo, adicionar os três usuários ao grupo e ajustar as permissões da pasta de forma que o grupo tenha permissão de escrita. Para adicionar o grupo, usamos o comando "groupadd", como em: # groupadd intranet Para adicionar os usuários desejados ao grupo, usamos o próprio comando "adduser", seguido pelo login e o grupo ao qual ele deve ser adicionado (um de cada vez), como em: # adduser maria intranet No CentOS e em outras distribuições derivadas do Red Hat, o comando "adduser" é
um link para o comando "useradd", que não suporta essa opção. No caso delas, usamos o comando "usermod -a -G", seguido do usuário e do grupo ao qual ele será adicionado, como em: # usermod -a -G maria intranet Se você está usando o system-config-users, ou o users-admin, pode também adicionar os usuários ao grupo acessando as propriedades do grupo:
Existem algumas outras pequenas diferenças entre as opções aceitas pelo comando "adduser" entre distribuições derivadas do Debian e derivadas do Red Hat, pois ele é na verdade um script, que pode ser alterado pelos desenvolvedores para adicionar atalhos ou funções diversas. Voltando ao tema principal, depois de adicionar os usuários ao grupo, falta ajustar as permissões de acesso, o que é feito usando os comandos "chmod" e "chown". O primeiro permite ajustar as permissões dos arquivos e pastas, enquanto o segundo permite transferir a posse, dizendo a qual usuário e a qual grupo determinada pasta ou arquivo pertence. No Linux, as permissões são agrupadas em 3 atributos principais: leitura, gravação e execução (no caso dos arquivos) ou listagem do conteúdo (no caso das pastas). Eles são representados, respectivamente, pelas letras r, w e x.
As permissões são definidas de forma separada para o dono, o grupo (que inclui todos os usuários incluídos nele) e para os outros ou seja, todos os demais usuários do sistema. Em geral, o dono tem acesso completo, o grupo tem permissões variáveis, de acordo com a função da pasta, e os demais podem apenas ler os arquivos, sem alterar o conteúdo. Se a pasta "/var/www/intranet" no nosso exemplo anterior foi criada pelo root, as permissões de acesso (informadas pelo comando "ls -l") serão: drwxr-xr-x 2 root root 4096 Jun 18 09:43 intranet O primeiro "d" indica que se trata de um diretório. As três letras seguintes (rwx) indicam as permissões de acesso para o dono da pasta, que no caso possui acesso completo. Em seguida, temos as permissões de acesso para o grupo (r-x), cujos integrantes podem listar o conteúdo da pasta (x) e podem ler os arquivos (r), sem poderem alterar nada. As três últimas letras (r-x) indicam as permissões para os demais usuários, que também podem apenas ler. O "root root" indica o dono e o grupo ao qual pertence a pasta, no caso o root. Ao cadastrar um usuário no sistema é sempre criado um grupo com o mesmo nome (contendo apenas o próprio usuário), o que explica o fato da pasta pertencer ao usuário "root" e também ao grupo "root". :) Para que os usuários do grupo "intranet" possam alterar o conteúdo da pasta, o primeiro passo é alterar as permissões, transferindo a posse do grupo "root" para o grupo "intranet". Nesse caso não precisamos alterar o dono da pasta, que pode continuar sendo o root: # chown -R root:intranet /var/www/intranet O "-R" no exemplo faz com que a alteração seja aplicada de forma recursiva, afetando todos os arquivos e sub-pastas. Sem ele, a alteração seria aplicada apenas à pasta propriamente dita, mas não ao seu conteúdo. Em seguida, especificamos o novo dono e o novo grupo, separados por ":", seguido da pasta. Com isso, as permissões serão alteradas para: drwxr-xr-x 2 root intranet 4096 Jun 18 09:51 intranet Falta agora alterar as permissões de acesso para o grupo, de forma que os usuários possam finalmente escrever na pasta. Para isso, usamos o comando "chmod -R g+rw", que especifica que o grupo (g) terá permissão de leitura e escrita (+rw):
# chmod -R g+rw /var/www/intranet Se você quisesse fazer o oposto, ou seja, remover a permissão de escrita para o grupo, usaria o "chmod -R g-w /var/www/intranet", se quisesse remover a permissão de leitura para todos os demais usuários usaria o "chmod -R o-r" e, se quisesse abrir as permissões para todo mundo, usaria o "chmod -R ugo+rwx". Aqui vai uma pequena cola com os parâmetros: -R : Recursivo, altera as permissões de todo o conteúdo da pasta, opcional. u : Permissões para o dono da pasta (user). g : Permissões para o grupo (group). o : Permissões para os demais (others). + : Adiciona a permissão - : Remove a permissão r : Permissão de leitura w : Permissão de escrita x : No caso dos arquivos indica permissão de escrita e, no caso da pasta, permissão para ver o conteúdo. Você pode também especificar as permissões de acesso no formato clássico, onde as permissões são representadas por três números, como em: # chmod -R 775 /var/www/intranet Nesse caso, os três números indicam, respectivamente, as permissões de acesso para o dono, grupo e para os outros. Cada número representa a soma das permissões desejadas, sendo que: 4 : Leitura 2 : Gravação 1 : Execução / listagem Você simplesmente soma estes números para ter o número referente ao conjunto de permissões que deseja: 0 : Sem permissão alguma. Acesso negado. 1 : Permissão apenas para executar (não é possível ler o arquivo ou alterá-lo, apenas executar um programa) ou, no caso das pastas, permissão apenas para ver a lista dos arquivos dentro da pasta, sem poder abrí-los.
4 : Apenas leitura. Se usado em uma pasta, o usuário não conseguirá listar o conteúdo, ou seja, conseguirá abrir os arquivos apenas caso indique o caminho completo. 5 (4+1): Ler e executar (no caso de um arquivo) ou ver os arquivos e abri-los, no caso de uma pasta. 6 (4+2): Leitura e gravação. Assim como no caso do "4", se usado em uma pasta faz com que o usuário não consiga listar o conteúdo, apenas acessar os arquivos diretamente. 7 (4+2+1): Controle total.
Falar em "gerenciamento de processos" pode parecer coisa de advogado, mas é na verdade uma das funções básicas de qualquer administrador :). Um processo nada mais é do que um aplicativo ou um serviço ativo, que consome processamento e outros recursos do sistema. Em muitos casos, um determinado serviço pode deixar de responder, ou pode ser que um determinado aplicativo simplesmente entre em loop e passe a consumir cada vez mais memória e/ou processamento até que você consiga fechá-lo manualmente. Para listar os processos ativos, ou seja, todos os programas e serviços abertos, usamos o comando "ps". Como de praxe, ele suporta um enorme volume de opções, mas o uso mais comum é combiná-lo com as opções "aux", o que faz com que ele mostre a lista completa, contendo os processos iniciados por todos os usuários: # ps aux A menos que você já seja um administrador experiente, com profundos conhecimentos, a lista vai mostrar diversos processos que você não conhece. Uma boa forma de descobrir a função de cada um é usar o comando "whatis", que mostra a descrição curta do programa, como em: # whatis named named (8) - Internet domain name server (DNS) Outra combinação de opções muito usada é a "axjf", que mostra os processos de forma um pouco mais organizada, agrupando os processos relacionados: # ps axjf Em qualquer um dos dois casos, a lista é geralmente bastante extensa, mas se você
souber o nome do aplicativo ou do serviço, você pode usar o pipe ( | ) combinado com o grep para filtrar a lista, como em: # ps aux | grep gdm root 6042 0.0 0.1 14316 1536 ? Ss Jun10 0:00 /usr/sbin/gdm root 22692 0.0 0.0 14320 892 ? R 20:07 0:00 /usr/sbin/gdm root 22691 0.0 0.0 3020 764 pts/0 R+ 20:07 0:00 grep gdm Existem duas formas de finalizar um processo travado. A primeira é usando o comando "kill", onde você deve especificar o PID, ou seja, o número de identificação do processo, mostrado na segunda coluna do relatório, como em: # kill 6042 Usado dessa forma, o kill tenta finalizar o processo de forma limpa, enviando o sinal de finalização. Isso geralmente não funciona com processos travados, afinal, se o programa está travado, é provável que o sinal não seja processado. Nesse caso, adicionados a opção "-9", que faz com que ele seja finalizado na marra, como em: # kill -9 6042 A segunda maneira de finalizar os processos é usando o comando "killall", onde você especifica diretamente o nome do serviço ou programa que quer finalizar, como em: # killall gdm Como pode ver, o comando "ps" serve para que você consiga localizar o culpado do problema, para então poder finalizá-lo usando o kill ou o killall. Uma variação do "ps" é o comando "pstree", que vai um passo além dentro do conceito de organização. Ele é geralmente combinado com a opção "-p", que faz com que ele mostre os IDs dos processos, de forma que você possa finalizá-los usando o kill: # pstree -p Temos também o comando "top", que desempenha a função de gerenciador de processos em modo texto, mostrando uma lista atualizada continuamente:
Para organizar a lista, mostrando os processos que estão consumindo mais processamento nas primeiras posições (uma boa forma de localizar processos travados), pressione a tecla "g". Para finalizar um processo, pressione a tecla "k" e digite o PID. Se quiser finalizar o processo na marra, como ao usar o "kill -9", digite "9" quando ele perguntar sobre o sinal que será usado. Para voltar ao terminal, use a tecla "q". Uso de memória: Uma dúvida comum é sobre o consumo de memória dos processos, que é mostrado na coluna "RSS" do relatório do ps. O valor é informado em kbytes, de forma que um processo que apareça com o valor "6184", por exemplo, está consumindo pouco mais de 6 MB. Entretanto, os números não são exatos, pois não levam em conta um fator importante, que é a reutilização de áreas de memória por parte do Kernel. Se um mesmo aplicativo é aberto várias vezes, sempre carregando os mesmos arquivos e as mesmas bibliotecas, o Kernel logo aprenderá a aproveitar essas informações, reutilizando as áreas de memória em que elas estão armazenadas, em vez de carregar tudo novamente a cada abertura do programa. Se cada instância do aplicativo consome 6 MB, por exemplo, e ele é aberto 20 vezes, o relatório do ps mostrará 6 MB de consumo de memoria para cada um, muito embora na realidade eles estejam consumindo muito menos. O ps não tem acesso a essas informações e por isso ele se limita a exibir o total usado por cada processo, sem levar em conta as áreas compartilhadas. Isso faz com que o relatório de uso de memória do ps e de outros utilitários similares sirva mais como uma estimativa aproximada, que
não deve ser levada ao pé da letra.
No Linux, todos os dispositivos de sistema são acessados através de arquivos especiais criados dentro do diretório "/dev". Isso naturalmente inclui os HDs e as partições. Tradicionalmente, os HDs IDE são acessados através de devices iniciados com "/dev/hd", como em "/dev/hda" (master da primeira porta IDE), "/dev/hdb" (slave da primeira IDE), "/dev/hdc" (master da segunda IDE) e "/dev/hdd" (slave da segunda IDE) e os HDs SCSI, SATA ou SAS recebem devices iniciados com "/dev/sd", como em "/dev/sda" (primeiro HD), "/dev/sdb" (segundo HD), "/dev/sdc" (terceiro HD) e assim por diante. Entretanto, isso mudou nas versões recentes do Kernel (a partir do 2.6.20), onde, devido a uma mudança no subsistema que dá suporte a discos, todos os HDs passaram a receber devices iniciados com "/dev/sd", independente de serem HDs IDE, SATA, SCSI ou USB. Uma boa forma de ver como o sistema detectou os HDs instalados é usar (como root) o comando "fdisk -l", que lista os HDs e as partições disponíveis:
Neste exemplo, temos um servidor com três HDs instalados, um de 200 GB, visto pelo sistema como "/dev/sda", um de 80 GB visto como "/dev/sdb" e um HD maior, de 300 GB, visto como "/dev/sdc". Você pode notar que o "/dev/sdb"está dividido em várias partições, incluindo uma partição swap (vista pelo sistema como "/dev/sdb5"), enquanto os outros dois são HDs destinados a armazenar arquivos e por isso foram particionados com uma única partição. O que faz com que todas as partições sejam corretamente montadas durante o boot são entradas inseridas no arquivo "/etc/fstab". Aqui temos um exemplo de configuração clássica: /dev/sda1 / ext3 defaults 01 /dev/hda2 /home ext3 noatime 02 /dev/hda5 none swap sw 00 /dev/cdrom /mnt/cdrom iso9660 defaults,ro,user,noexec,noauto 0 0 proc /proc proc defaults 00 Como pode ver, cada linha descreve uma partição que será acessada pelo sistema. No exemplo, a primeira linha é referente à partição raiz, a segunda se refere a uma partição separada, montada no diretório home, a terceira é referente à partição swap, a quinta é referente ao CD-ROM e a última ao diretório proc, um diretório especial usado pelo kernel para armazenar variáveis de configuração e atalhos de acesso a dispositivos. Dentro de cada linha, o primeiro parâmetro (/dev/sda1) indica a partição, o segundo o diretório onde ela será montada (/), o terceiro indica o sistema de arquivos em que a partição foi formatada (ext3) enquanto o "defaults 0 1" permite definir configurações adicionais. O "default", por exemplo é um "nada a declarar", que faz com que a partição seja acessada usando as opções padrão, enquanto o "noatime" na segunda linha é uma opção de otimização, que faz com que o sistema não atualize a data de acesso quando os arquivos são lidos, o que resulta em um pequeno ganho de desempenho. Normalmente, você define os pontos de montagem das partições durante a própria instalação do sistema, de forma que o instalador se encarregará de adicionar as entradas apropriadas automaticamente. Ao instalar outros HDs posteriormente, você pode fazer com que o sistema passe a usá-las inserindo as linhas apropriadas no arquivo "/etc/fstab". Se você acabou de particionar um novo HD em EXT3 e deseja que a partição "/dev/sdc1" criada seja montada na pasta "/mnt/sdc1", por exemplo, os passos seriam: a) Criar a pasta onde a partição será montada:
# mkdir /mnt/sdc1 b) Testar a montagem da partição: # mount /dev/sdc1 /mnt/sdc1 c) Adicionar a linha abaixo no final do arquivo "/etc/fstab", orientando o sistema a montá-la automaticamente durante o boot: /dev/sdc1 /mnt/sdc1 ext3 defaults 0 0 Além de ser usado para montar partições locais, o mount é usado também para montar compartilhamentos de rede. É possível montar compartilhamentos em servidores Windows, ou servidores Linux rodando o Samba, compartilhamentos em NFS ou até mesmo montar pastas em máquinas remotas usando o sshfs. Continuando, se você estiver usando o Ubuntu, vai perceber que ele não faz referência às partições dentro do fstab pelo dispositivo, mas sim pelo UUID, que é um identificador único. O uso dos UUIDs complica a configuração, mas oferece a vantagem de garantir que o sistema continue sendo capaz de montar as partições mesmo que os HDs mudem de posição ou sejam instalados em portas diferentes da placa-mãe. Para seguir o padrão do Ubuntu, identificando a partição através do UUID, você pode verificar qual é o UUID referente à sua partição usando o comando "blkid", como em: # blkid /dev/sdc1 /dev/sdc1: UUID="5c5a3aff-d8a3-479e-9e54-c4956bd2b8fd" SEC_TYPE="ext2" TYPE="ext3" Você pode então especificar o UUID na linha do fstab no lugar do device, como em: UUID=5c5a3aff-d8a3-479e-9e54-c4956bd2b8fd /mnt/sdc1 ext3 defaults 0 0 Um aviso importante é que o fstab é um dos arquivos essenciais para a inicialização do sistema, por isso você sempre deve checar e rechecar as alterações. Um erro na linha referente à partição raiz, por exemplo, simplesmente fará o sistema deixar de
inicializar. Outra observação é que você deve deixar sempre uma linha em branco no final do arquivo, caso contrário passará a receber um aviso durante o boot. Ela é necessária por um motivo muito simples: sem ela, se um utilitário de configuração qualquer tentar inserir informações no final do arquivo, vai acabar inserindo-as no final da linha anterior (em vez de em uma nova linha), resultando em uma configuração inválida. Além da questão da montagem de partições, temos a questão da reparação de partições com estruturas danificadas devido a quedas de energia ou problemas diversos. A cada boot o sistema realiza um teste rápido de integridade das partições, utilizando o fsck, que é análogo ao scandisk do Windows. Em casos de problemas graves, que não possam ser corrigidos automaticamente, ou de erros inesperados ao tentar montar as partições indicadas no arquivo /etc/fstab, o boot é interrompido e você recebe a fatídica mensagem: Give root password for maintenance (or type Control-D for normal startup): Este prompt é o que temos de mais próximo a uma tela azul no mundo Linux, é essencialmente um "se vire", que causa arrepios em muitos administradores :). Na maioria dos casos, ao pressionar "Ctrl+D" a máquina é simplesmente reiniciada e o mesmo erro volta a ser exibido, de forma que a única forma de continuar é realmente solucionando o problema. Comece fornecendo a senha de root. Isso lhe dará acesso ao modo single-user, um prompt limitado, destinado a permitir o uso de ferramentas de reparação. Se o problema for em uma das partições do HD, o próximo passo é executar a versão apropriada do fsck, indicando a partição a ser reparada (em caso de dúvida, você pode listar as partições do sistema usando o comando "fdisk -l"), como em: # fsck.ext3 /dev/sda1 (para partições formatadas em ext3) ou: # reiserfsck --fix-fixable /dev/sda2 (para partições formatadas em ReiserFS) Muito provavelmente, o teste do fsck indicará erros que precisarão da sua
confirmação antes de serem corrigidos, daí a necessidade de usar o prompt de recuperação. Na maioria dos casos, você pode simplesmente responder "y" para tudo, mas caso existam dados realmente importantes na partição é melhor prestar mais atenção. Arquivos danificados ou fragmentos de arquivos que puderam ser recuperados vão para a pasta "lost+found" no diretório raiz da partição. O fsck não é capaz de recuperar o sistema de arquivos em casos de problemas com o superbloco, o setor que contém informações essenciais, como o tipo, tamanho, status e informações sobre a estrutura do sistema de arquivos. Sempre que a partição é criada, são criados vários superblocos alternativos, que servem justamente de backups para casos de problemas com o primeiro. Você pode ver a lista de endereços usando o comando "mkfs.ext3 -n partição", como em: # mkfs.ext3 -n /dev/sda1 Ao usar o comando, nunca esqueça de incluir o "-n", caso contrário ao invés de mostrar as informações, ele vai formatar a partição. No final do relatório você encontra: Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Chame novamente o comando "fsck.ext3", adicionando a opção "-b", seguida do endereço do superbloco que será usado. Caso eventualmente o primeiro resulte em erro, experimente o segundo, e assim por diante: # fsck.ext3 -f -b 32768 /dev/hda2 Para partições EXT2, use o comando "fsck.ext2", que suporta os mesmos parâmetros. Continuando, se o erro for no "/etc/fstab", ou em outro arquivo de configuração (você pode ter deixado a configuração com erros ao editar manualmente o arquivo e só perceber vários dias depois, ao precisar reiniciar o servidor), é necessário remontar a partição raiz em modo de leitura e escrita antes de poder fazer a edição. Isso é feito usando o comando "mount -o remount rw particao-raiz", como em: # mount -o remount rw / A partir daí, você pode fazer a edição usando o vi, joe, ou outro editor que rode em
modo texto e salvar as alterações: # joe /etc/fstab Terminado, reinicie o sistema usando o "reboot" e tudo deve voltar ao normal. Outra dica é que, se o servidor possui um drive de CD-ROM, você pode usar um CD do Ubuntu, ou de qualquer outra distribuição live-CD como sistema de recuperação. Você pode usar o live-CD para executar os comandos de recuperação do fsck, ou para montar as partições e assim pode editar o fstab ou outros arquivos de configuração. O live-CD pode ser usado também para resetar a senha de root, nos famosos casos em que ela é esquecida. Para isso, comece montando a partição raiz do sistema, a partir do live-CD, como em: # mount -t ext3 /dev/sda1 /mnt/sda1 Se você estiver usando o Ubuntu ou outra distribuição derivada dele, pode se logar como root no prompt usando o comando "sudo su". A partir daí, use o comando "chroot" para acessar o sistema dentro da partição, indicando o diretório onde ela foi montada, como em: # chroot /mnt/sda1 Isso lhe dará um prompt de comando do sistema dentro da partição, o que permite que você troque a senha de root usando o comando passwd: # passwd FICO POR AQUI EPERO QUE MINHA AJUDA ALMENTE SEU CONHECIMENTO.. ESTE FOI UM PRESENTE DO CURSO ((DE HACKERS))
CURSO.HACKER@BOL.COM.BR & HAKINGUNIX@BOL.COM.BR
LIBERDADE AO CONHECIMENTO BY HAKING_UNIX