Escolar Documentos
Profissional Documentos
Cultura Documentos
Manual LinuxSystem FINAL
Manual LinuxSystem FINAL
O curso de Linux System Administrador prepara o aluno para os exames 117-101 e 117-102, que
fazem parte do programa de certificao LPIC-1, oferecido pelo Linux Professional Institute (LPI). O contedo
do curso sincronizado com os objetivos listados por tpicos no site www.lpi.org e seu contedo pode ser
encontrado em nosso site: www.mcury.com.br.
O objetivo deste material didtico auxiliar o aprendizado do aluno sobre a matria ministrada pelo
instrutor em sala de aula. Quaisquer dvidas podem ser tiradas com o mesmo em sala de aula.
ndice:
Tpico Pgina
1- CONCEITOS 05
2- PROGRAMAS E COMANDOS BSICOS 12
3- DISCOS E PERMISSES 23
4- GERENCIAMENTO DE PACOTES 27
5- INSTALAO DO SISTEMA OPERACIONAL 37
6- O SHELL 41
7- DOCUMENTAO NO LINUX 46
8- COMANDOS DE CONTEDO 50
9- EXPRESSES REGULARES 64
10- USURIOS E GRUPOS 71
11- PERMISSES 85
12- SISTEMA DE ARQUIVOS 89
13- LINKS 103
14- COMANDOS DE BUSCA 104
15- RAID 107
16- BACKUP E COMPACTAO 113
17- AGENDAMENTO DE TAREFAS 121
18- COTAS DE ARMAZENAMENTO 126
19- GERENCIAMENTO DE PROCESSOS E INICIALIZAO 132
20- KERNEL 144
21- GERENCIADORES DE BOOT 155
22- COMPILAO DE PACOTES E BIBLIOTECAS 162
23- SHELL SCRIPT 166
24- REDES EM LINUX 184
25- CLIENTES DE SERVIDORES LINUX 197
26- SERVIDOR DE LOGS 203
27- SUPERSERVIDORES 207
28- TCP WRAPPERS 209
29- SSH 210
30- SINCRONIZAO DE DATA E HORA 214
31- SERVIDOR X 217
32- SERVIO DE IMPRESSO 224
33- LINGUAGEM SQL 227
34- MTA 230
35- FIREWALL IPTABLES 234
1 - CONCEITOS
Antes de comear a administrar sistemas operacionais Linux, preciso ter alguns conceitos bem
fundamentados:
1.2 - A GPL
A FSF (Free Software Foundation) criou como parte do projeto GNU, a GPL (General Public License, ou
Licena Pblica Geral), para que houvesse um padro de licenciamento para os softwares livres a serem
desenvolvidos a partir do fim da dcada de 80. O desenvolvedor da GPL foi Richard Stallman.
Ela baseada em quatro liberdades:
Como integrantes da lista de softwares baseados em GPL (os chamados open-source) esto sistemas
operacionais como FreeBSD, OpenSolaris e IBM-AIX (que so baseados em Unix), Debian, Red Hat, Slackware e
Suse, que funcionam sobre Kernel Linux.
Ser open-source no significa ser grtis. Empresas como a Red Hat e a Novell cobram pelo suporte de
seus produtos Red Hat Enterprise e Suse Linux Enterprise, respectivamente.
O motivo de se poder cobrar pelo suporte de produtos que, sobre isso, no se ope a GPL, j que o
Kernel continua sendo Linux (cujo cdigo fonte pode ser facilmente encontrado em www.kernel.org para
download) e as outras liberdades continuam garantidas ao usurio.
Existem sim alguns exemplos de distribuies que, alm de ser open-source, so tambm free e
so excelentes opes para servidores e (ou) desktops. Exemplos bem claros disso so as distribuies Debian,
Ubuntu, CentOS e Fedora.
O Ubuntu (que tem como diferena para o Kubuntu apenas o fato de utilizar GNOME enquanto o
KUBUNTU usa KDE como interface grfica) tem se destacado muito no cenrio Desktop (usurio final) por sua
fcil usabilidade, efeitos de interface grfica, suporte nativo a sistemas de arquivos NTFS e FAT16/32, drivers
para inmeras impressoras e scanners, etc. Por este motivo, vem sendo adotado como principal distribuio
Linux para Desktops. Sua verso Server tambm tem sido largamente utilizada por empresas e estudiosos na
rea de TI.
O Debian j um sistema operacional muito mais focado em aplicaes para servidores e preferido
pela maioria dos estudantes de especialistas em Linux pelo fato de ele ser 100% free e de ter o modo de
instalao CORE, que no carrega nenhum tipo de aplicao alm do prprio sistema bsico, o que quer dizer
que o sistema fica totalmente cru para que o prprio administrador escolha, efetivamente, que tipo de papel
ele vai desempenhar como servidor de rede.
Assim como o Ubuntu, o Fedora tem se destacado em aplicaes que dizem respeito ao usurio final e
uma excelente distribuio para este fim.
O CentOS se destaca pala sua funo de servidor Red Hat 100% free, pois a Red Hat cobra suporte ao
seu sistema operacional Red Hat Enterprise e a verso free deste sistema operacional no existe mais.
Quando se diz que uma distribuio baseada na outra, no quer dizer que seja a mesma coisa, mas
sim que a construo de uma se baseou em um projeto j pronto da outra.
Algumas diferenas entre sistemas operacionais baseados em Debian e em Red Hat so bem evidentes,
como a instalao e o gerenciamento de pacotes instalados, a estrutura de diretrios e os arquivos de
configurao.
Podemos afirmar, ento, que o Linux se resume ao kernel que instalado em sistemas operacionais
open-source que assim o desejarem.
Outra considerao importante que, por se tratar de um sistema que o usa o mesmo modelo POSIX
do Unix, no haver muitas barreiras para o administrador Linux experimentar sistemas operacionais como
FreeBSD, Solaris, SunOS, etc. Alguns comandos e diretrios so simplesmente os mesmos.
Algumas distribuies so protegidas pelas leis de Copyright, caso de Suse Enterprise e Red Hat
Enterprise.
O papel do kernel para uma distribuio fundamental, pois ele que prov o suporte a recursos de
software e hardware necessrios para o funcionamento do mesmo. O exemplo clssico disto que, em alguns
servidores, os administradores tm o costume de reconfigurar, recompilar e reinstalar o kernel para tirar mais
proveito de recursos de um processador especfico ou at habilitar o modo PAE para que um sistema
operacional de 32 bits possa operar com mais de 4 GB de memria RAM.
Os comandos do Linux dependem que exista algum
COMANDOS programa que os interprete, assim como o este
interpretador (Shell) precisa que algum Kernel interaja
SHELL
entre ele e o Hardware existente. Um grande exemplo disso
que se o kernel no der suporte a placas de rede Wireless,
KERNEL
no adiantar nada o administrador tentar usar o comando
iwconfig, pois no haver suporte ao hardware de rede sem
fio para manipul-lo
HARDWARE Um kernel pode ser classificado de 2 formas:
Monoltico: carrega todos os recursos de que
precisa na prpria imagem de boot do kernel.
Modular: carrega grande parte dos recursos de
kernel em mdulo que podem ou no ser carregados aps o
boot do sistema. A maioria dos sistemas operacionais
prefere trabalhar com kernel modular.
Estas definies podem ser feitas quando o
administrador configura e compila o kernel.
Verses do kernel
A nomenclatura de uma verso de kernel segue o padro abaixo:
<verso maior>.<verso menor>.<compilao/patch>.<verso extra>
Por definio, um kernel era considerado instvel (ainda em desenvolvimento) quando a sua verso
menor fosse mpar, mas, desde 2004, com o lanamento da verso 2.6, isto no mais aplicado. O que
acontece agora que, quando for preciso alterar parmetros de segurana e suporte a dispositivos e
tecnologias , as alteraes sero preferencialmente feitas no terceiro campo e, quando houver a necessidade
de um conjunto massivo de alteraes, a segunda verso ser afetada (de forma estvel).
Neste caso acima, temos um kernel de reviso 32, que recebeu a verso extra de 2-PAE do
administrador porque ele inseriu durante a configurao do mesmo o suporte a PAE e decidiu declarar isso no
nome do seu kernel.
O Linux trabalha com a quantidade padro de 63 terminais disponveis para uso. O grande problema
encontrar combinaes possveis de teclas de funo para isso tudo.
Cada um desses terminais funciona de forma independente, facilitando assim a execuo de mltiplas
tarefas. Imagine que em um dos terminais pode-se iniciar um servidor DNS e em outro monitorar o log
pertinente ao mesmo.
Convencionalmente, se utilizam os terminais abaixo:
Estes terminais so utilizados por interpretadores de comandos, como BASH e SH, no uso dos
comandos administrativos e de usurios.
Para logins remotos e emulaes de terminais em modo grfico, so utilizados os terminais
/dev/pts/<num>.
Exemplos:
/dev/pts/0 um terminal emulado por xterm.
/dev/pts/1 um terminal utilizado por shell seguro (SSH).
/etc/securetty: o arquivo onde se encontram todos os terminais suportados pela distribuio. Ele
pode ser usado para restringir ou permitir o uso de terminais no sistema.
A tendncia clara de um usurio final fugir dos terminais do Linux, at porque sua usabilidade no
atende s aplicaes das quais ele faz uso, portanto, importante que sejam utilizados gerenciadores de
desktop em sistemas Linux que forem para este fim. Exemplos de gerenciadores de desktop so KDE e GNOME.
Exemplo de terminal:
O uso de interface grfica, como j foi dito anteriormente, mais indicado e praticado para usurios de
desktop, ainda que muitas aplicaes grficas para servidor sejam utilizadas para gerenciar servios de rede e
hardware, por exemplo.
Como um assunto a ser falado posteriormente com mais detalhes neste mesmo material, vamos dar
um apanhado geral das principais interfaces grficas disponveis para Linux.
Alguns sistemas operacionais disponibilizam a instalao de mais de uma interface grfica, enquanto
outros so fechados a este tipo de opo (caso do Ubuntu, que usa o Gnome e tem no Kubuntu a sua verso
com KDE).
GNOME
Por ser um gerenciador de janelas com muitos efeitos visuais e menus
organizados e de fcil entendimento, este desktop-manager preferido pelos usurios
de desktop Linux.
Ele gerencia diversas reas de trabalho com grande facilidade, propiciando o
envio de mltiplas janelas de uma rea de trabalho para outra (recurso muito til para
designers, por exemplo).
KDE
O KDE o desktop manager preferido de alguns administradores de servidores
(quando eles precisam utilizar interface grfica) por causa da sua leveza.
A estrutura de menus do KDE bem diferente em relao do Gnome, se
assemelhando um pouco com a estrutura de menus do Windows (grosso modo).
Ele no conta com alguns recursos especiais do Ubuntu, mas tambm uma tima
opo, j que o que mais o usurio ou administrador do Linux tem opo!!
Qual distribuio, verso do kernel e desktop manager utilizarem uma questo a ser analisada
cuidadosamente pelo usurio/administrador, pois no em toda distribuio que se pode utilizar um servidor
de correio eletrnico, por exemplo, e tambm uma Distribuio do tipo Servidor no vai satisfazer o usurio
de programas multimdia.
importante lembrar que ter uma interface grfica instalada pode significar o maior uso de memria
RAM (em alguns casos, chegando a fazer uso de SWAP), o suporte obrigatrio a recursos e resolues de vdeo
suportadas pelos drivers dos fabricantes de vdeo, dispositivos de udio instalados, etc. Justamente por tudo
isso que o administrador Linux no instala interface grfica no servidor ou, se for necessrio, opta por instalar
a interface mais leve possvel e apenas a utiliza em caso de ltima necessidade.
Os comandos GNU/Linux so totalmente SENSITIVE CASE. Isso significa que se uma opo de um
comando ou um comando for minscula, ela no funcionar se for trocada por maiscula.
Alguns comandos tm opes em modo curto e modo longo. Algo do tipo: -a que tambm pode ser
usado como --all.
# ls
Lista contedo de diretrios.
Sintaxe:
# ls <opes> <diretrio>
Opes:
-l : modo longo. Lista detalhes sobre os objetos, como o dono, o grupo, as permisses, data de ltima
alterao e tamanho (a unidade padro o byte).
-a ou --all : lista todos os objetos contidos no diretrio, inclusive os ocultos(iniciando com .).
-i ou inode : lista o nmero inode de todos os objetos (ndice que o sistema de arquivos usa para
identificar o arquivo ou diretrio).
-c : lista em ordem alfabtica.
-h ou --human-readable: lista o contedo no modo mais humano. A unidade de tamanho de cada
objeto a mais compreensvel possvel.
-C : lista o contedo em colunas.
-t : classifica o contedo pela data de ltima modificao (ctime).
-S : classifica os arquivos pelo tamanho.
-R: lista o contedo recursivamente, subdiretrios e arquivos.
-r: classifica o contedo em ordem alfabtica reversa.
Exemplos:
Listando todo o contedo do diretrio /root/LPI, inclusive arquivos ocultos, em modo longo e mais
humano:
# ls lha /root/LPI
Listando por ordem alfabtica reversa e de modo recursivo, todo o contedo de /etc:
# ls lrR /etc
Listando em modo longo os arquivos e diretrios de /var/www e o nmero inode de cada um:
# ls li /var/www
Detalhes de um arquivo:
Ao listar um diretrio especfico com 'ls -l', foram verificados alguns itens interessantes:
Acontece que a primeira coluna representa o tipo do arquivo e as permisses aplicadas a ele. Dessa
primeira coluna, vamos destacar por hora o tipo (primeiro campo).
Os arquivos esto divididos em alguns tipos:
_ : um arquivo regular.
d : um diretrio.
l : um link simblico.
b: um arquivo de bloco (um disco ou uma partio).
c: um arquivo de caracteres (um terminal, por exemplo).
p: um pipe.
s: um socket.
# file
Mostra qual o tipo de arquivo em questo.
Sintaxe:
# file <objeto>
# touch
Cria arquivos vazios e/ou troca data de modificao de arquivos.
Sintaxe:
# touch <opes> <arquivo>
Opes:
-d : especifica data.
-m : troca data de ltima modificao.
-r : utiliza data de ltima modificao de outro arquivo como referncia.
Exemplos:
# touch -m -d 20100512 arq1 : troca a data de ltima modificao para 12/05/2010.
# touch arq2 : cria um arquivo vazio chamado 'arq2'.
# cd
Altera o diretrio atual.
Sintaxes:
# cd <diretrio_destino>
# cd .. - retorna um nvel na hierarquia (pai).
# cd ../.. - retorna 2 nveis na hierarquia.
# cd ~ - muda para o diretrio pessoal do usurio em seo. o mesmo que cd sem argumentos.
# cd ~user1 muda para o diretrio pessoal do usurio user1.
# cd ../<dir1> muda para o diretrio 'dir1', que est um nvel hierrquico acima.
# mkdir
Cria diretrios.
Sintaxe:
$ mkdir <opes> <diretrios>
Opes:
-v : verbose. Exibe detalhes do que foi feito.
-m <perm>: cria o diretrio j com as permisses determinadas.
-p : cria subdiretrios e diretrios de uma vez s. No h a necessidade de existir o diretrio pai
para que seja criado o subdiretrio.
Exemplos:
Criando o diretrio suse com permisso 733 (permisses de arquivos e diretrios sero detalhadas
mais frente).
# mkdir -mv 733 suse
Criando diretrios dir1, dir2, dir3 e dir4 em um s comando, exibindo tambm a sada do comando:
# mkdir -v dir{1,2,3,4}
Criando diretrios dir10, dir11, dir12, dir13, dir14, dir15 em um s comando, em modo verbose:
# mkdir -v dir{10..15}
# rmdir
Exclui diretrios vazios.
Sintaxe:
# rmdir <diretrio>
# rm
Exclui arquivos e diretrios.
Sintaxe:
# rm <opes> <arquivo/diretrio>
Opes:
-v : verbose.
-i : modo interativo. Espera confirmao do usurio para excluir.
-r : modo recursivo. Exclui diretrio e seu contedo.
# mv
Move ou renomeia arquivos e diretrios.
Sintaxe:
# mv <opes> <arquivo/diretrio> <dir_destino/nome_destino>
Opes:
-i : modo interativo. Pergunta antes de sobrescrever um arquivo existente com o mesmo nome.
-v : modo verbose.
-n : no sobrescreve um arquivo de destino com o mesmo nome.
-f : modo forado.
# cp
Cria cpias de arquivos ou diretrios.
Sintaxe:
# cp <opes> <origem> <destino>
Opes:
-R : modo recursivo. Copia diretrio e seu contedo.
-v : modo verbose.
-i : modo interativo. Pergunta antes de sobrescrever destino.
-u : modo update. Apenas copia para o destino arquivos que o mesmo no tem ou que, a pesar de
ter o mesmo nome, so diferentes em seus contedos.
-f : modo forado de cpia.
-p : preserva os atributos originais do arquivo.
-d : preserva ligao simblica.
Exemplos:
Copia todos os arquivos de /etc/network para /tmp mantendo seus atributos em modo verbose:
Apenas copia o arquivo /etc/passwd se houver alguma modificao do original em relao ao arquivo
de destino com o mesmo nome:
# du
Disk usage - exibe o tamanho em disco ocupado por diretrios.
Sintaxe:
# du <opes> <diretrio>
Opes:
-k : em KB.
-m : em MB.
-h : modo mais humano. Exibe o resultado no mltiplo de byte mais compreensvel.
-s : modo simples. S exibe o tamanho ocupado pelo diretrio, no o de seu contedo.
Exemplos:
Exibindo o tamanho ocupado por todos os subdiretrios de /etc/network e por ele prprio em modo
mais humano:
# du -h /etc/network
# df
Exibe informaes sobre armazenamento de volumes montados.
Sintaxe:
# df <opes> <volume>
Opes:
-k : em KB.
-m : em MB.
-h : modo mais humano. Exibe o resultado no mltiplo de byte mais compreensvel.
-i : ao invs de exibir informaes sobre blocos, exibe informaes sobre inodes.
-T: Exibe o tipo de sistema de arquivos utilizado por cada partio montada.
Exemplo:
# cal
Exibe o calendrio no terminal.
Opes:
-j : exibe calendrio Juliano (dias corridos do ano).
-3 : exibe calendrio do ms anterior, do atual e do posterior.
-m <num> : exibe calendrio do ms especfico.
Exemplo:
# date
Exibe ou modifica a data e hora do sistema.
Opes:
--utc : exibe data e hora no padro UTC(Universal Time Clock).
-r <arquivo>: exibe a data e hora de ltima modificao de um arquivo.
-R : exibe data e hora no formato RFC2822.
+<var> : utiliza variveis do comando para exibir em formato especfico.
Variveis do date:
%d : dia.
%m : ms.
%y : ano com 2 dgitos.
%Y : ano com 4 dgitos.
%H : hora.
%M : minuto.
%S : segundo.
%e : dia do ms.
%b : ms por extenso.
Sintaxes:
$ date <opes>
$ date +<variveis>
# date MMDDhhmmAAAA (ms,dia,hora,minuto e ano) modificao da data.
Exemplos:
# free
Exibe informaes sobre uso de memrias RAM e Swap.
Sintaxe:
# free <opes>
Opes:
-k : em KB.
-m : em MB.
-g : em GB.
-t : exibe RAM + Swap.
Exemplos:
*Obs: O comando watch tem a funo de repetir a cada x segundos um comando especfico, o padro
o intervalo de repetio de 2 segundos.
# halt e # poweoff
Desligam o sistema.
# shutdown
Desliga, reinicia ou simula desligamento.
Sintaxe:
# shutdown <opes>
Opes:
-h - desliga o sistema.
-r - reinicia o sistema.
-c - cancela qualquer shutdown.
-k - simula o desligamento do sistema enviando mensagens de aviso para todos os terminais.
-f - pula verificao de disco no prximo boot.
-F - fora verificao de disco no prximo boot.
Exemplos:
Desliga o sistema.
# shutdown -h now
Editor de texto sucessor do VI, que possui compatibilidade com qualquer sistema Linux.
Comandos:
yy copia linha inteira.
y copia contedo selecionado.
p cola.
x recorta contedo selecionado.
dd exclui linha inteira.
d exclui contedo selecionado.
# vim -r <nome_original>
Logo aps, o documento tem que ser salvo com a opo w e caso tudo esteja correto pode-se remover
de swap, pois, se isto no for feito, toda vez que for abrir o arquivo o editor ir te avisar de que existe um
arquivo de swap e ir te perguntar o que voc deseja fazer em funo disso.
3 - DISCOS E PARTIES
3.1 - Discos
A nomenclatura de discos no Linux bem particular. Ela consiste em, ao identificar o volume fsico,
criar um arquivo de bloco dentro de /dev correspondente a ele. Exemplo: /dev/sda (1 disco SATA).
O caso mais particular de discos o dos IDEs. Qualquer placa-me de qualquer computador pode
abrigar apenas 4 discos IDEs. Para este caso, fica assim a nomenclatura:
Esta nomenclatura acima engloba tambm CDs/DVDs IDEs. Para este caso, existir um link simblico de
um desses endereos para /dev/cdrom, facilitando assim a montagem por parte do usurio.
No caso de discos SATA, SAS, SCSI e discos externos em geral, j fica diferente:
/dev/sda 1 disco.
/dev/sdb 2 disco.
/dev/sdc 3 disco.
/dev/sdd 4 disco, e assim por diante.
Para um drive de CD/DVD SATA, criado o arquivo de bloco correspondente /dev/sr(0,1,2,3..), com link
para /dev/cdrom, da mesmo forma.
Os disquetes so reconhecidos por /dev/fd0 e /dev/fd1.
Drives de fita SCSI so reconhecidos como /dev/ft0(1,2,3..).
Para fazer a consulta de quais discos esto disponveis para uso e quais os seus tipos, deve-se ler o
arquivo /proc/partitions. Este arquivo onde o Kernel vai consultar e escrever as tabelas de parties e discos
que podem ser utilizados pelo sistema. Nele surgiro algumas informaes importantes como o major number
dos discos, que o nmero de identificao do tipo dos mesmos. O exemplo abaixo mostra a interpretao de
um arquivo desse:
# cat /proc/partitions
major minor #blocks name
8 0 156290904 sda
8 1 7164958 sda1
8 16 78184008 sdb
8 17 1959898 sdb1
Pelo que o arquivo mostrou acima, temos dois discos prontos para uso (sda e sdb) e os dois so SATA.
O que indica que ele SATA o major number 8.
3.2 - Parties
Quanto nomenclatura de parties, preciso ter muita ateno pois o Linux as trata de maneira bem
conceitual, a comear pelo limite de parties: 63 no total.
Se forem ocupados todos os minor numbers de 1 a 4, o restante do espao em disco (se houver) fica
inutilizvel, por isso, importante saber que, para que se possa utilizar mais de 4 parties em um disco, uma
partio estendida deve ser criada.
A funo da partio estendida apenas abrigar as parties lgicas, ou seja: ela nunca vai ser
montada em diretrio algum do sistema.
# cat /proc/partitions
Como j havia sido comentado em FHS, muito importante que se pense bem no layout de
Particionamento antes de fazer uma nova instalao em um servidor qualquer. importante que alguns
diretrios fiquem em parties separadas do sistema raiz, so elas:
/tmp o nico diretrio que tem permisso de escrita para qualquer usurio comum, sendo assim,
qualquer usurio pode acabar com os blocos disponveis da partio do sistema raiz, deixando muitos servios
sem funcionar mais,
/home por ser o diretrio onde, por padro, iro ficar os arquivos pessoais de cada usurio, preciso
analisar a necessidade e o tipo de tecnologia de armazenamento que vai ser usado para a partio que ser
montada neste diretrio. O recomendvel para um servidor, que possui muito volume de arquivos nesse
diretrio, que seja utilizado o sistema LVM.
/var importante deixar este diretrio em outra partio, pois nele podem estar arquivos de sites de
um servidor web, as caixas de entrada dos usurios em um servidor de e-mail, bancos de dados do MySQL-
Server, logs do sistema que tm apenas o programa logrotate para garantir sua rotatividade.
/usr/local boa parte dos programas que so aqui instalados tem suas bibliotecas e arquivos
executveis copiados para este diretrio, por isso importante isol-lo do sistema raiz.
Partio Swap para a realidade atual, criar uma partio Swap est se tornando cada vez mais
desnecessrio.
Ela funciona como memria de auxlio memria principal (RAM), mas com o crescente uso de
memrias RAM de capacidades altssimas de armazenamento temporrio ela tornou-se cada vez mais
desnecessria.
Costumava-se destinar o dobro do espao de RAM para a criao de uma partio Swap, hoje fica a
critrio de o administrador cri-la. 2 GB estaria de bom tamanho, se necessrio.
3.4 - O FHS
O Filesystem Hierarchy Standard (Padro Hierrquico de Sistema de Arquivos) mantido pela Free
Standards Group, que composta por empresas como HP, IBM e Dell.
O projeto inicial foi aproveitado, porm personalizado pela maioria das distribuies, a maioria delas
aproveita o formato original do FHS em 80%.
4 - GERENCIAMENTO DE PACOTES
As distribuies que so baseadas em Debian e ainda o prprio Debian aceitam pacotes de extenso
.deb como arquivos de pacotes instalveis, alm de pacotes .tar.gz ou .tar.bz2.
# dpkg
Instala e manipula arquivos .deb. Ele tambm faz operaes de consultas em pacotes j instalados.
Sintaxe:
# dpkg <opes> <pacote>
Opes:
-i : instala pacote atravs de arquivo .deb.
-x : extrai contedo de um pacote.
-r : remove os arquivos binrios de um pacote instalado.
-P : purge - remove os binrios e todos os arquivos relativos ao pacote.
-l : consulta pacotes instalados.
-c : exibe o contedo de um arquivo de pacote .deb.
-L : pesquisa arquivos que pertencem a um pacote j instalado.
-S : exibe quais arquivos foram copiados para o sistema aps a instalao do pacote.
-s : exibe o status do pacote j instalado e informaes reduzidas sobre o mesmo.
-p : exibe informaes detalhadas sobre pacote j instalado.
Exemplos:
# dpkg -i ldap-utils_2.4.21-0ubuntu5.2_i386.deb
# dpkg -P slapd
# dpkg -r samba
# dpkg -c ldap-utils_2.4.21-0ubuntu5.2_i386.deb
# dpkg -p samba
A instalao de um programa no Debian pode ser feita atravs de um pacote de extenso .deb ou dos
chamados repositrios, que armazenam os pacotes e suas dependncias. Um repositrio pode ser uma mdia
de CD/DVD, um servidor HTTP ou um FTP. Cada distribuio costuma ter alguns repositrios oficiais espalhados
pelo mundo, e este o caso do Debian.
Repositrios
Cada linha dessas a configurao de apontamento para um repositrio diferente, sendo, por
exemplo, a primeira de pacotes principais da distribuio 'stable'.
Ao invs de 'stable', o tipo da distribuio poderia muito bem se chamar 'squeeze'. Isso porque
Squeeze a verso estvel do Debian.
Repositrios Debian:
Comandos APT:
# apt-get update
Atualiza a base de dados de pacotes contida no diretrio /var/lib/dpkg com os dados do repositrio.
Este comando no tem a funo de atualizar nenhum pacote j instalado.
Sintaxe:
# apt-get update
# apt-get install
Instala um pacote e suas dependncias a partir de repositrios que esto listados dentro de
/etc/apt/sources.list.
Sintaxe:
Opes:
-s : simula a instalao do pacote.
-d : apenas faz o download dos pacotes dentro do diretrio /var/cache/apt/archives/.
-y : assume como Yes todas as respostas de instalao.
-f : corrige uma instalao inacabada. Utilizada com install ou remove.
--reinstall : reinstala um pacote.
# apt-get remove
Sintaxe:
Exemplo:
# apt-get upgrade
Sintaxe:
# apt-get upgrade
# apt-get dist-upgrade
Sintaxe:
# apt-get dist-upgrade
# apt-cache pkgnames
Sintaxe:
# apt-cache pkgnames
# apt-cache search
Sintaxe:
Exemplo:
Procurar com algum pacote que tenha a ver com DNS no repositrio:
No caso acima, ele buscou na lista de repositrios do Ubuntu todos os pacotes que tenham a ver com
DNS.
# apt-cdrom add
Sintaxe:
# apt-cdrom add
# aptitude
uma interface mais amigvel para o apt. possvel visualizar a lista de pacotes disponveis para
instalao de uma forma muito organizada.
Sintaxe:
# aptitude <opo>
Exemplos:
# aptitude update
Distribuies baseadas em Red Hat e o prprio Red Hat aceitam a instalao de pacotes .rpm e .tar.gz.
A questo das dependncias a mesma: um pacote sozinho pode no ter todas as dependncias
necessrias para a sua instalao e, para resolv-las, muito importante instalar os pacotes por repositrios.
# rpm
Chamado de Red Hat Package Manager, o comando rpm instala e consulta arquivos .rpm.
Sintaxe:
# rpm <opes> <pacote>
Para o modo de consulta, a opo q deve estar sempre presente antes de qualquer outra.
-qa: consulta todos os programas instalados.
-ql: consulta por arquivos pertencentes a programas instalados.
-qf : descobre a qual pacote pertence um determinado arquivo.
-qi : exibe informaes detalhadas sobre um programa instalado.
-qd ou -configfiles : mostra todos os arquivos de configurao do programa instalado.
-qd ou -docfiles : mostra todos os arquivos de documentao do programa instalado.
-qpl : exibe os arquivos e diretrios contidos em um arquivo de pacote.
-qpd: exibe os arquivos de documentao contidos dentro de um arquivo de pacote.
-qpc: exibe os arquivos de configurao de um arquivo de pacote.
Exemplos:
# rpm e samba.i386
# rpm qi samba.i386
# rpm qc samba.i386
# yum update
Atualiza a base de dados do yum, assim como todos os pacotes instalados at o momento.
Sintaxe:
# yum update
# yum install
Sintaxe:
Opes:
# yum upgrade
Sintaxe:
# yum list
Sintaxe:
# yum list
# yum Search
Sintaxe:
# yum info
Exibe detalhes sobre pacotes j instalados. Exibe a mesma sada do comando rpm qi <pacote>.
Sintaxe:
Exemplo:
Seria um verdadeiro desastre criar um servidor PDC de clientes Windows se o diretrio /home, que
carrega os perfis mveis de cada usurio, estivesse na mesma partio do sistema raiz. Bastaria, neste caso, que
um usurio sem cotas configuradas fosse ocupando espao com arquivos fteis vontade para que o espao
em disco no servidor se reduzisse zero, de repente e causasse a paralisao dos servios ativos.
Outros pontos importantes a se analisar so: flexibilidade, redundncia e desempenho de discos, para
saber se utilizar arranjos LVM ou RAID em discos seria necessrio.
A escolha da verso do sistema operacional ideal para a necessidade tambm muito importante,
assim como a arquitetura do mesmo, para que ele possa tirar o mximo de proveito dos recursos de Hardware
do sistema. Faz toda a diferena de desempenho para um servidor com 2 processadores Intel Xeon operar com
o sistema operacional com arquitetura ia64 (arquitetura de processadores Intel 64-bits) ao invs de trabalhar
com um sistema operacional de arquitetura de 32 bits (i386).
Caso seja Slackware, Red Hat, Debian, Ubuntu, Suse ou CentOS vai depender da preferncia do
administrador ou da empresa.
Um bom esquema de Particionamento para um servidor de arquivos Samba de usurios em uma rede
com um HD de 500GB seria:
/ - 10 GB
/usr/local 10GB
/var 10GB
/tmp 2GB
/boot 200MB
swap 2GB (se necessrio)
/home 465,8GB (aproximadamente) Utilizar LVM
Para um servidor web com o Apache, o diretrio /var quem precisaria de mais espao em disco:
/ - 10 GB
/usr/local 10GB
/var 475,8GB(aproximadamente) Utilizar LVM
/tmp 2GB
/boot 200MB
swap 2GB (se necessrio)
Pensando que, geralmente, um servidor web tambm conta com servidor FTP e que as contas de
usurio so mapeadas para o diretrio /var/WWW (diretrio de publicao de arquivos do servidor), no seria
preciso isolar o /home.
O uso de uma partio para uso como swap, ainda mais em servidores com quantidade grande de
espao em RAM, torna-se cada vez mais dispensvel ao longo do tempo. Pode ter certeza que se o servidor
precisar usar swap porque algum no planejou corretamente o hardware para o tipo de servidor que iria ser
utilizado.
hora de configurar a rede, repositrios, configurar o login de usurios, decidir se vai ou no usar
interface grfica, etc..
A primeira providncia, j que se trata de um servidor, configurar a interface de rede. Para isso,
preciso que o administrador conhea primeiro os conceitos de IPV4/6 necessrios, e isto realmente um pr-
requisito para que o administrador possa ter sucesso na administrao dos servidores.
O arquivo de configurao de rede no Debian /etc/network/interfaces. preciso edit-lo e reiniciar o
servio de rede aps isso para que as alteraes faam efeito.
Editando o arquivo:
# vim /etc/network/interfaces
A interface lo se refere interface de loopback e no deve ser desativada, pois alguns servios
dependem dela para funcionar, enquanto a interface eth0(zero) a primeira interface de rede reconhecida pelo
sistema (mais detalhes sobre configurao de redes ser dados mais frente).
Conferindo a conectividade:
# ifconfig
# ping 10.1.1.254
Conferindo rotas:
# route -n
Configurando DNS:
# vim /etc/resolv.conf
Repositrios de pacotes:
# vim /etc/apt/sources.list
Neste caso, o sistema est fazendo uso de um repositrio da rede interna. Para os casos de novas
instalaes, so utilizados repositrios de internet e, neste caso, importante j na hora da instalao de
Debian o administrador optar por utilizar um espelho de rede (mirror) da internet que seja oficial da
distribuio, pois desta forma ele pode garantir que os pacotes que sero instalados estaro nas verses
corretas de seu sistema. Havendo a necessidade, o administrador pode configurar depois um mirror na rede
LAN. No caso das outras distribuies, em geral no vai ser preciso nenhuma escolha por espelho de rede na
hora da instalao, pois isto j vai ser automtico na instalao.
# apt-get update
6 - O SHELL
Conceitualmente, o Shell o interpretador dos comandos que sero enviados ao sistema, afim de que
sejam executadas as tarefas necessrias para o seu funcionamento. O Linux capaz de trabalhar com uma
variedade enorme de shells, estando todos os suportados em /etc/shells:
De todos os Shells disponveis para uso no Linux, os mais importantes, sem dvida, so sh e bash
(Bourne Again Shell). O sh (Bourne Shell) inclusive o shell padro do comando useradd. Ele usado por muitas
distribuies baseadas em Unix, como FreeBSD e OpenBSD, por exemplo. J o bash o shell padro do Linux
em todas as distribuies.
/etc/rc.local
Este script executado antes do logon do usurio aps o boot do sistema pela imagem do kernel.
/etc/profile
o primeiro script a ser executado aps o logon dos usurios. Ele global, ou seja: todos os usurios
que fazem login sofrem os efeitos deste script. Geralmente nele esto duas variveis de bash importantssimas:
PATH - define em quais diretrios o bash vai procurar os comandos digitados pelos usurios.
PS1 define qual vai ser o rtulo de prompt dos usurios.
Exemplo:
PS1='\u@\h:\w\$' ficaria para o usurio user1 no host 'MCURY' e no diretrio home dele assim:
user1@MCURY:~$
O arquivo acima explica o porqu de quando o usurio comum digita um comando exclusivo de root
retorna para ele o erro: -<comando> : command not found . Basta verificar que a varivel PATH do root (o
que tem UID=0) contm os diretrios onde esto os comandos de administrao do sistema (os ../sbin) e o
PATH do usurio comum no.
Na falta de algum destes scripts abaixo, o posterior executado. A ordem oficial est abaixo:
~/.bash_profile
~/.bash_login
~/.profile
No Debian, o ~/.profile o primeiro script de usurio a ser executado e aponta para outro script
chamado ~/.bashrc, que acaba sendo o ltimo script de usurio a ser executado. Em shell Bash, se
~/.bash_profile e ~/.bash_login existirem, o ~/.profile no executado.
O ~/.bashrc tem uma caracterstica muito especial em relao a outros scripts de login: ele pode ser
executado em sesses que no requerem login.
Por padro, este script vem com alguns campos comentados, mas que so de grande importncia para
ajudar a tornar o shell um ambiente de trabalho mais amistoso.
Os aliases para os comandos rm, cp e mv evitam que muitos arquivos sejam sobrescritos sem que o
usurio seja avisado antes que isso acontea (cada alias recebe um comando com a opo interativa '-i'). Como
no Linux a falta de um arquivo pode significar o colapso de um sistema inteiro, dependendo de qual arquivo
seja esses aliases so providenciais.
~/.bash_logout
~/.bash_history
# history
Limpando o histrico:
# history -c
# fc
Comando que usa o editor de textos padro do sistema para manipular o arquivo de histrico.
Para que o editor padro seja modificado, basta usar a linha de comando abaixo:
# update-alternatives config editor
Por motivo de manuteno no sistema, por exemplo, necessrio que s vezes apenas o root tenha o
direito de abrir uma sesso. Para que isso seja possvel, preciso que seja criado o arquivo /etc/nologin. A
criao do arquivo, mesmo que vazio, j o suficiente para que ningum, alm do root, possa abrir uma sesso,
mas o arquivo pode conter um texto qualquer que ser exibido para o usurio, geralmente indicando o motivo
de no poder iniciar a sesso.
Os usurios comuns s vo poder abrir alguma sesso aps este arquivo ser removido.
/etc/issue
/etc/issue.net
/etc/motd
7 - DOCUMENTAO NO LINUX
Seo Descrio
2 Chamadas de sistema
3 Chamadas de bibliotecas
5 Arquivos de configurao
6 Games
7 Miscelnea
# <comando> --help
Exemplo:
# shutdown --help
# apropos
# whatis
# man
Sintaxe:
Opes:
-w : busca o caminho do arquivo de manual ao invs de exibir algum tipo de ajuda sobre o tema.
-k : busca resumo sobre um tpico especfico.
-f : busca resumo sobre um comando ou arquivo exato.
-P : modifica o programa de paginao do man.
Obs.:
Exemplos:
# man iptables
# man -k iptables
Ou
# apropos iptables
# man -f iptables
Ou
# whatis iptables
Buscar por manual de um comando na seo 5, para o caso de haver algum outro objeto de busca
chamado interfaces:
# man 5 interfaces
# info
Programa de leitura de manuais preferido pelo projeto GNU. Sua exibio dos manuais mais
organizada.
# mandb
Se alguma modificao for feita em /etc/manpath.config, este comando precisa ser executado.
8 - COMANDOS DE CONTEDO
# less
Pagina o contedo de arquivos ou sadas de texto. Ele muito verstil, pois permite o deslocamento
para cima, para baixo, para a direita e para a esquerda quando estiver paginando um documento. Existe
tambm o recurso de procurar por um texto com / no meio da paginao.
Sintaxe:
# less <arquivo>
Exemplo:
# less /etc/shadow
# more
Tambm pagina um documento de texto ou sada em modo texto, s que de forma bsica, permitindo
apenas a paginao para baixo e pressionando a tecla ENTER.
Sintaxe:
# more <arquivo>
# zless
Usa o less para paginao de contedo em modo texto de arquivos compactados com o agente de
compactao GZIP.
Sintaxe:
# zless <arquivo>.gz
# zmore
Usa o more para paginao de contedo em modo texto de arquivos compactados com o agente
compactador GZIP.
Sintaxe:
# zmore <arquivo>
# head
Sintaxe:
Opes:
Exemplos:
# head -n 5 /etc/passwd
Ou
# head -5 /etc/passwd
# tail
Sintaxe:
Opes:
-f : monitora as ltimas linhas de um arquivo enquanto o mesmo escrito. Muito til para leitura de
arquivos de log.
Exemplos:
# tail -n 5 /var/log/messages
Ou
# tail -5 /var/log/messages
# tail -f /var/log/auth.log
# pr
Sintaxe:
# pr <arquivo>
# nl
Sintaxe:
# nl <arquivo>
# wc
Sintaxe:
# wc <opes> <arquivo>
Opes:
-c : quantidade de caracteres.
Exemplo:
# wc /etc/passwd
# od
Sintaxe:
# od <opes> <arquivo>
Opes:
-o : modelo octal.
-d : decimal.
-x : hexadecimal.
# grep
Sintaxe:
Opes:
Exemplos:
# grep 0 /etc/passwd
Buscar dentro do arquivo /etc/passwd linhas que contenham apenas 0 como valor absoluto:
# grep -w 0 /etc/passwd
Buscar apenas as linhas do arquivo /etc/passwd que no tenham /bin/bash e nem 0 como valor
absoluto (ou seja: usurios que no usam o Shell bash e que no sejam root):
# cut
Sintaxe:
Opes:
Exemplos:
# cut -c 1 /etc/shadow
# shred
#Sintaxe:
# shred <arquivo>
# split
Opes:
Sintaxe:
Exemplos:
Criando arquivos com 128 bytes de /etc/passwd cada um. Neste caso, sero criados os arquivos arqaa,
arqab, arqac, etc:
Criando arquivos com 4 linhas do arquivo /etc/profile cada um, esclarecendo que o ltimo arquivo
pode ficar com menos linhas se for o caso de a quantidade de linhas do arquivo no for mltipla de 4, neste
caso:
# split -l 4 /etc/passwd arq
# uniq
Sintaxe:
# uniq <arquivo>
# cat
L o contedo de um arquivo ou reconstri o mesmo, se for o caso de ele estar em pedaos criados
pelo comando split.
Sintaxe:
Opes:
Exemplos:
# cat /etc/motd
# cat -b /etc/profile
# cat -n /etc/profile
Reconstruir as cpias fragmentadas do arquivo /etc/passwd com nomes de arqaa, arqab e arqac:
# tac
Tem a mesma sintaxe do cat mas l o arquivo da ltima linha para a primeira.
# sort
Sintaxe:
Opes:
-d : ordem alfanumrica.
-n : ordem numrica.
-t : usa um delimitador.
-r : ordem reversa.
Exemplos:
# sort -d /etc/passwd
Usando : como separador, classificar o arquivo /etc/passwd em ordem numrica, tendo como
referncia o campo 3 do arquivo:
# sort -n -t : -k 3 /etc/passwd
# sed
Sintaxe:
Exemplo:
# <comando> | tr
Comando que s pode ser utilizado em combinao com outro de leitura de arquivo atravs do pipe,
o tr substitui caracteres em sequncia.
Sintaxe:
\\ - backslash.
\b - backspace.
\v - tabulao vertical.
Exemplos:
# cat /etc/passwd | tr -d :
Trocar letras maisculas do arquivo /etc/shadow por minsculas e depois trocando : por tabulao :
# fmt
Formata um texto.
Sintaxe:
Opes:
# join
Sintaxe:
# expand
Sintaxe:
Exemplo:
Convertendo linhas que tenham 2 tabulaes para espao simples do arquivo /etc/syslog.conf:
# expand -t 2 /etc/syslog.conf
# diff
Sintaxe:
Exemplo:
9 - EXPRESSES REGULARES
9.1 Metacaracteres
Composio de smbolos, caracteres com funes especiais que, agrupados entre si e com caracteres
literais, formam uma sequncia, uma expresso.
Meta Significado
* Zero, um ou mais
? Zero ou um
^ Incio da linha
$ Fim da linha
[ ... ] [^... ] Lista de caracteres permitidos, e lista de caracteres proibidos.
{n ,m } Vai de n at m
\ Escapamento de caracteres especiais (espao, parnteses, chaves, etc..)
| Ou
( ... ) Delimita um grupo
. Qualquer caracter na posio
Exemplos:
Exibindo de /etc/passwd apenas os usurios que usem Shells BASH ou que tenham login negado:
Exibindo de /etc/passwd apenas os usurios que usem BASH ou SH e comecem com letras que no
sejam b a f e tambm os que no comecem com h:
Exibindo do /etc/passwd apenas os usurio que usem Shells BASH ou SH e tambm comecem com
letras no intervalo de f a l :
O grep utilizado com E por que algumas expresses regulares fazem parte do grupo de REGEXP
(expresses regulares avanadas), como o caso do { }.
O comando grep -E o mesmo que egrep.
Para exibir as linhas que tenham exatamente 5 caracteres de um arquivo chamado Linux.txt, as
seguintes expresses poderiam ser utilizadas:
Ou
# egrep ^.{5}$ Linux.txt
Onde o {5} iria ser o responsvel por dizer que . repete 5 vezes e o motivo de o ponto estar entre ^e
$ dizer para a expresso regular que entre incio e fim existem 5 posies.
Como j se pode notar pelos captulos anteriores, o | tem uma funo importantssima dentro de uma
expresso regular, pois ele concatena a sada de um comando com a de outro posterior, como a seguir:
O comando cut -d : -f 1-5 /etc/passwd envia a sua sada para o comando tail -5, possibilitando assim a
paginao do contedo do arquivo apenas com os campos 1,2,3,4 e 5 :
Antes de redirecionar sadas ou entradas de comandos, vamos entender quais tipos de entrada/sada
podem existir:
STDOUT - sada padro. Quando o comando executado com sucesso, ele produz esta sada, exceto
para comandos que no possuem verbose em suas sadas.
STDERR - Sada de erros. Quando o resultado da execuo um erro, esta sada mostrada, exceto em
comandos que no produzem verbose.
Tipos de redirecionamento:
>> - redireciona sada padro de um comando para a ltima linha de um arquivo (append), mas se
este no existir ele o cria.
Exemplos:
# df -h > /root/discos.txt
Enviando mais um relatrio de uso de discos para o mesmo arquivo sem sobrescrev-lo:
# df -h >> /root/discos.txt
# LS -L 2> erro_ls.txt
Exemplos:
Enviar ltimas 15 linhas do log /var/log/auth.log para o arquivo log_auth.txt exibindo a sada dele no
display:
Enviar linhas numeradas do arquivo /etc/passwd para o mesmo arquivo sem sobrescrev-lo:
Nem sempre interessa esperar a execuo de um comando para poder executar outro e por isso que
existem os caracteres ;, && e || . Eles permitem que isso acontea da seguinte forma:
&& - apenas permite a execuo do prximo comando se o anterior foi executado com sucesso
(cdigo de retorno igual a zero).
Exemplos:
Esta combinao de comandos abaixo funcionaria, pois a pesar do primeiro estar com sintaxe errada, o
segundo vlido e o ; no leva isso em considerao:
# LS -L; df hi
# LS -L && df h
# mail -s TESTE DE EXPRESSO administrator@mcury.com.br < log_auth && rm log_auth; apt-get update
O resultado ser: rm log_auth s ser executado se o primeiro comando de envio de e-mails der certo,
mas independente dos dois, a base de dados do APT ser atualizada.
Os caracteres que so escritos e lidos precisam de codificao, pois o sistema s consegue mesmo
interpretar bits, que por sua vez so representados por nmeros binrios. A primeira tabela de codificao
criada foi uma tabela chamada ASCII, que contava com 7 bits para representao de caracteres, que davam
exatos 128 caracteres, esta codificao foi criada baseada na linguagem de povos de origem anglo-saxnica,
pois os mesmos no fazem uso de acentos. Como no mundo existem muitos povos que utilizam caracteres
diferentes dos utilizados na lngua inglesa, por exemplo, foi preciso criar uma tabela de caracteres capaz de
representar estes caracteres a mais que os povos de origem latina, por exemplo, usam, desta forma, foi
implementado mais 1 bit na tabela ASCII, ficando assim esta tabela com a possibilidade de representar 256
caracteres (8 bits).
Mesmo com todo o esforo descrito acima, ainda faltavam caracteres para representar alfabetos de
pases do Leste Europeu e sia, foi desta necessidade que surgiram tabelas de 8 bits, normatizadas pelo ISO,
onde a compatibilidade com ASCII nos primeiros 128 bits nativo e os outros 128 bits so destinados a
caracteres especiais da tabela especfica. As distribuies Linux podem utilizar dois tipos de tabelas para
codificao: a UTF-8 e a ISO8859-1, sendo o primeiro mais flexvel, pois d suporte tanto a idiomas
provenientes do Latim quanto a idiomas asiticos e europeus. O que acontece com o UTF-8 que, em caso de
representao de dialetos asiticos, por exemplo, ele assume 16 bits e no 8 (UTF-16), sendo assim compatvel
com qualquer tipo de dialeto possvel.
Para configurar a codificao e a linguagem do sistema, assim como o idioma do teclado, preciso
atribuir esta configurao s variveis LANG e LANGUAGE, sendo a primeira a varivel que define o idioma
padro do sistema e a codificao de caracteres e a segunda a que define o idioma do teclado.
O conjunto inteiro de variveis exibido pelo comando locale, como no exemplo abaixo:
# locale
Onde cada varivel dessa recebe a linguagem e codificao atribuda varivel LANG.
Para fazer qualquer tipo de converso de caracteres, o administrador pode utilizar o comando iconv,
como no exemplo abaixo:
Onde -f para o comando significa from e -t significa to, ou seja: converter de UTF-8 para ISO-8859-1
o arquivo ~/arquivo_original.txt e enviar esta sada convertida para o arquivo ~/arquivo_convertido.txt.
10 - USURIOS E GRUPOS
Uma das tarefas mais importantes para um administrador saber gerenciar de forma segura os
usurios e grupos do sistema.
O usurio root o primeiro usurio criado no sistema aps a instalao. Ele o administrador do
sistema e pode tudo, desde deixar o servidor com um nvel de segurana altssimo com servios configurados
por ele at destruir o sistema de arquivos por completo. importante para a segurana do sistema que a senha
do usurio root no deve ser distribuda para pessoas que no sejam habilitadas a desempenhar tarefas
administrativas.
Os usurios comuns utilizam o rtulo de prompt $ enquanto o root utiliza o # em seu login.
Qualquer outro usurio criado no tem qualquer privilgio administrativo, portanto o usurio comum
vai continuar sendo um usurio com tarefas limitadas at que o root decida dar permisso para que ele possa
desempenhar algumas ou at todas as tarefas do usurio root.
O banco de dados em modo texto que contm os dados dos usurios do sistema o /etc/passwd. Sua
estrutura s deve ser alterada manualmente em ltimo caso, pois uma sujeirinha dentro desse arquivo pode
custar impossibilidade de se fazer login com o usurio root, por exemplo, ou paralisar um servio de HTTP do
apache, que utiliza a conta do usurio www-data para tal.
Abrindo o arquivo:
# vim /etc/passwd
Repare que o campo root:x:0:0:root:/root:/bin/bash da senha do usurio root est como x. Isto
significa que o sistema est fazendo uso de senhas shadow, que o sombreamento de senhas do arquivo
/etc/passwd para o arquivo /etc/shadow. Isto acontece por um simples motivo: o arquivo /etc/passwd tem
permisso de leitura para qualquer usurio, pois eles precisam ler suas informaes de contas aps logon (sua
permisso padro 644 ou rw_r__r__), sendo assim, qualquer usurio poderia copiar a senha criptografada
para outro lugar.
UID
O UID o nmero de identificao dado a cada usurio no ato de sua criao. O UID 0 dado para o
usurio root e no deve ser dado a qualquer outro usurio alm dele, pois se isto for feito, o usurio que
receber o UID 0 vai assumir a identidade de root e ter os mesmos poderes que ele.
Por definio padro no arquivo /etc/login.defs, qualquer usurio novo criado em sistemas baseados
em Debian ter um UID de 1000 para cima, comeando por este. Em ambiente Red Hat, este nmero j de
500 em diante. lgico que isso um padro que pode ser modificado facilmente no arquivo ou atravs da
criao de um usurio com o UID especificado pelo comando useradd.
GID
a identidade dada a cada grupo criado no sistema. A presena dele dentro desse arquivo representa
que ele o grupo primrio do usurio. Cada arquivo ou diretrio que criado por um usurio (salvo em caso
especfico de existncia de permisso especial de herana de grupo) tem o mesmo como dono e o grupo
primrio dele como grupo do arquivo ou diretrio.
O GID 0 tambm reservado para o grupo root e, pelos mesmos motivos citados anteriormente, no
deve ser atribudo a mais nenhum usurio.
Homedir
O diretrio pessoal do usurio, ou homedir, deve ser o nico diretrio do sistema (alm do /tmp) onde
ele ir ter permisso de leitura, execuo (se for o caso) e escrita.
O diretrio pessoal do usurio no precisa necessariamente ser em /home. O exemplo mais prtico
disto que em um servidor Web Apache, que tem diretrio de publicao de contedo /var/www por padro,
geralmente tambm instalado um servidor FTP, como Proftpd ou Vsftpd, e a conta do web developer feita
com homedir /var/www/[nome_do_usurio], para que o mesmo, quando faa logon, j entre direto no
diretrio onde est publicado o contedo de se site hospedado pelo servidor.
Shell do usurio
O BASH o Shell padro para sistemas Linux mas no quer dizer que todo usurio tenha que us-lo
como interpretador de comandos. Alguns podem usar o SH por algum motivo especfico, como por exemplo,
um usurio que era de BSD acostumado com scripts de SH e que est ainda migrando para Linux.
Quando o usurio no pode ou no precisar fazer logon em um terminal, determinado para ele o
SHELL /bin/false. Este recurso utilizado com muita freqncia em usurios de e-mail e de um servidor PDC ou
BDC Samba pelo motivo de que em nenhum destes casos o usurio vai precisar usar nenhum terminal do Linux.
O arquivo /etc/shadow, como j foi dito, o arquivo onde por padro so armazenadas as senhas dos
usurios.
O controle de parmetros de login de usurios (expirao de senha e conta, por exemplo) s existe
quando este arquivo existe;
O usurio comum no pode nem ler este arquivo, no tendo assim acesso senha criptografada de
todos os usurios.
Os grupos existentes do sistema esto em /etc/group. Dentro deste, esto:
Como foi falado anteriormente, e existncia do arquivo /etc/shadow imprescindvel para que a
segurana de informaes se autenticao possa ser garantida. Vamos agora entender o que cada campo deste
arquivo significa:
Senha: a senha do usurio criptografada. Caso este campo esteja vazio, o usurio estar utilizando
senha em branco (nada recomendvel!). Caso haja neste campo o sinal !, o usurio estar com a sua conta
travada, de forma a no conseguir nem efetuar o prximo logon.
Mnimo de dias entre mudanas de senhas: a quantidade de dias que o usurio tem que esperar at
que ele possa novamente alterar a sua prpria senha.
Mximo da durao da senha do usurio: a prpria informao dos dias de validade da senha do
usurio aps ele ter modificado sua senha pela ltima vez. Aps este dia, ele ser obrigado a mudar sua prpria
senha no logon.
Dias anteriores expirao da senha onde o usurio ser avisado para trocar se senha: o padro
sempre que 7 dias antes de a senha expirar, o usurio seja avisado a troc-la.
Nmero de dias entre 1 de Janeiro de 1970 e a data exata de expirao da conta do usurio.
Repare, neste caso, que a senha do usurio user1 est em branco e sua conta tem data para expirar,
assim como a sua senha, que expirar 25 dias aps ser modificada.
importante lembrar que, como todas as informaes relativas aos controles de contas de usurio
estaro dentro deste arquivo, no caso de o administrador escolher por no utilizar senhas shadow este controle
no ser possvel.
# whoami
# id
Sintaxe:
#Id <usurio>
# useradd
Cria usurios.
Sintaxe:
Opes:
-d :homedir do usurio.
-m :cria o homedir.
-u : especifica um UID.
*Obs1
O Shell padro do comando useradd o SH, ou seja: se no for especificado outro shell, o usurio vai
utilizar o SH como interpretador de comandos.
*Obs2:
O diretrio de skel de onde so tirados os arquivos e diretrios que vo para o homedir do usurio na
hora que ele criado.
O diretrio de skel padro o /etc/skel e por padro ele contm os scripts de logon do usurio.
Exemplos:
Criando um usurio com login user1, homedir /home/user1, shell /bin/bash e nome Operador 1:
Criando usurio webmaster com UID 1400, grupo primrio cdrom, grupos relacionados audio e backup,
shell /bin/bash e homedir /var/www/webmaster:
Criando usurio user2 com data de expirao da conta para 10/12/2010, sem uso de shell e com
diretrio de skel alternativo /dados:
# adduser
A grande vantagem que em um simples comando, sem argumentos, pode-se criar um usurio de
forma pr-configurada no arquivo do comando adduser.
Exemplo:
# adduser bsd
# addgroup
Exemplo:
# addgroup mcury
# usermod
Modifica parmetros de contas de usurios. As opes so bem parecidas com as opes do comando
anterior.
Sintaxe:
Opes:
-c : modifica a descrio.
-a : se for utilizado junto com o G, adiciona usurio nos grupos sem desfazer as relaes que ele tem
com outros grupos.
-U : destrava o usurio.
Exemplos:
# usermod s /bin/sh
# usermod L user1
# usermod U user1
# chfn
Sintaxe:
# chfn <usurio>
Exemplo:
# chfn user1
MANUAL DE TREINAMENTO M.CURY
LINUX SYSTEM ADMINISTRATOR PGINA 77
MANUAL DE TREINAMENTO LINUX SYSTEM ADMINISTRATOR
# passwd
Sintaxe:
Opes:
-l : trava usurio.
-u : destrava usurio.
Exemplos:
# passwd d operador
# passwd l operador
# passwd -u operador
# passwd S operador
# chage
Sintaxe:
Opes:
-M : modifica o tempo (em dias) da validade da senha do usurio aps a ltima modificao
(MAX_DAYS)
-W : modifica a quantidade de dias anteriores expirao as senha do usurio onde ele ser avisado a
trocar a senha (WARN_DAYS).
-I : informa em quantos dias aps a expirao da senha do usurio a conta do mesmo ser inativada.
Exemplos:
Mudando para 5 dias o tempo anterior expirao da senha onde o usurio user1 ser avisado a troc-
la:
# chage -W 5 user1
Modificando a validade da senha do usurio user1 para 60 dias (2 meses) aps ser modificada:
# chage M 60 user1
# chage l user1
A interpretao do comando acima a seguinte: a senha do usurio user1 ir expirar dia 11/10/2010,
pois o 20 dia depois da ltima alterao da mesma, que foi definido pelo PASS_MAX_DAYS. Sua conta expira
dia 12/12/2010.
Informando que aps, a mudana de senha, o usurio user1 ter que esperar 20 dias para mud-la de
novo:
# chage m 20 user1
# pwunconv
Desabilita o uso de senhas shadow, enviando a senha para /etc/passwd e excluindo o arquivo
/etc/shadow.
# pwconv
Habilita novamente o uso de senhas shadow, criando o arquivo /etc/shadow com as senhas que
estavam em /etc/passwd sendo copiadas para este arquivo.
# who
#w
Exibe a lista de usurios em sesso por terminal e os programas que eles esto utilizando.
# last
# lastlog
# groupadd
Sintaxe:
Opes:
# users
# userdel
Exemplos:
# userdel user1
Excluindo a conta do usurio user1, seu diretrio home e todos os arquivos contidos dentro dele.
# userdel r user1
# groupdel
Sintaxe:
# groupdel <grupo>
# su
Faz logon com outro usurio sem fazer logoff da sesso atual
Sintaxe:
# su <login>
10.3 - SUDO
# sudo
Permite que o usurio comum execute comandos de root caso os comandos que ele queira executar
estejam permitidos a ele dentro de /etc/sudoers. Esta uma tima prtica para casos em que necessrio ter
um ou outro usurio usando alguns comandos de root. Exemplo: se em uma empresa existe um usurio que
deve administrar o Firewall Iptables e outro que deve monitorar e fazer modificaes nos discos do servidor
apenas, no teria nenhum motivo para nenhum dos dois ter a senha do usurio root, bastaria que seus nomes
fossem includos em /etc/sudoers e, neste arquivo, fossem habilitados a executar apenas comandos relativos s
tarefas descritas acima, em algumas distribuies, inclusive, o usurio root travado por medida de segurana,
neste caso, o /etc/sudoers foi configurado previamente para dar acesso de root ao usurio em qualquer
comando que ele digitar (isso no o mesmo que ser root, pois o sudo no d permisso nenhuma ao usurio
comum de ter as mesmas permisses de acesso a arquivos e diretrios que o root).
# sudo <comandos>
O arquivo de configurao dos usurios do sudo tem permisso R--R-- ---, o que quer dizer que nem o
usurio root teria permisso de edit-lo, s que o diretrio /etc de propriedade do root e ele tem permisso
de escrita sobre ele, o que tambm garante permisso de escrita sobre todos os arquivos do diretrio. Basta
forar a gravao para escrever nesse arquivo, isto pode ser feito no editor vim (com ! aps a opo) ou no
editor visudo, que j fora a gravao por padro. bom lembrar que o editor padro do sistema o nano, mas
por causa de suas funcionalidades, vamos usar o vim, mudando o editor padro:
Editando o arquivo:
# visudo
O usurio user1 pode executar comandos como qualquer usurio, sem precisar lanar a sua prpria
senha para isso, e ele apenas pode executar como root os comandos fdisk e mkfs. J o grupo adm, pode
executar comando como qualquer usurio, menos o usurio dba, tambm sem senha, e pode tambm executar
todos os comandos de root.
Com o sudo:
# chown
Sintaxes:
Exemplos:
Modificando o dono do arquivo ~/arquivo1.txt para o usurio operador e o grupo para cpd:
Modificando o dono do diretrio /backups, todos os seus subdiretrios e arquivos para o usurio
operador e o grupo para cpd:
11 - PERMISSES
Leitura
Representada em modo literal por R, a permisso de leitura concede ao usurio ao usurio copiar e ler
o contedo de arquivos ou diretrios.
Gravao
Representada em modo literal por W, est permisso concede ao usurio mover, renomear e modificar
o contedo de um arquivo ou diretrio.
Execuo
Esta com certeza merece uma ateno muito especial, pois sua aplicao em arquivos e diretrios
totalmente diferente.
Ela s aplicada a um arquivo quando o mesmo for um programa executvel (exemplo: programa de
Shell Script). J em diretrios ela essencial se o objetivo for permitir o acesso a um usurio qualquer. Sem tal
permisso, no haver como o usurio executar o comando cd no diretrio.
SUID
Permite que qualquer usurio tenha a mesma permisso de execuo que o dono sobre o arquivo.
Em modo literal, representada no campo de dono por s.
SGID
Faz com que cada arquivo ou subdiretrio criado em um diretrio seja do grupo do diretrio pai
(herana de grupo).
Em modo literal, representada no campo de grupo por s.
Sticky Bit
Probe que qualquer usurio que no seja o dono do objeto ou o prprio root exclua o mesmo, mesmo
que tenha permisso para isso.
Dono (USER)
Grupo (GROUP)
Toda vez que um arquivo ou diretrio criado, o dono do mesmo fica sendo o usurio que cria e o
grupo proprietrio acaba ficando aquele que o grupo primrio do usurio que criou.
Este campo se refere s permisses aplicadas quele que fazem parte do grupo do objeto.
Outros (OTHERS)
o nvel de permisso para usurio que no so o dono do objeto e tambm no fazem parte do grupo
do mesmo.
Alm de poderem ser representadas por letras (R,W e X), as permisses tambm podem ser
representadas por nmeros no modelo octal:
Para agregar mais de uma permisso, pode-se somar os nmeros, como no exemplo:
Leitura, gravao e execuo para dono e leitura e execuo para grupo e outros:
RWXR-XR-X = 755
RW-R--R-- = 644
Leitura, gravao e execuo para dono e leitura e execuo para grupo e outros mais SGID e Sticky bit:
RWXR-sR-t = 3755
Como se pode perceber, no modo octal de permisses especiais, o nmero referente a elas vem antes
das outras permisses.
Outro detalhe: quando o campo de execuo do nvel onde se aplica as permisses especiais estiver
sem permisso de execuo, estas letras referentes a essas permisses ficaram em caixa alta.
11.4 Aplicao
# chmod
Sintaxe:
Opes:
-R : modo recursivo.
-v : modo verbose.
Exemplos:
Aplicando permisso para dono de RWX, adicionando permisso de gravao para o grupo e
especificando permisso de apenas leitura para outros no arquivo ~/arq1.txt (tudo em modo literal):
# chmod x ~/arq1.txt
Aplicando as permisses RWXRWXR__ ao diretrio /backups e a todo o seu contedo em modo octal:
Aplicando SGID e Sticky bit, e permisso RWX para todos os nveis no diretrio /backups em modo
octal:
# chmod 3777 /backups
11.5 Umask
Ao serem criados, por padro, arquivos e diretrios ganham as permisses 644 e 755,
respectivamente. Este fato s ocorre por causa de um nmero chamado de Umask. Este nmero, subtrado de
666 para arquivos e 777 para diretrios, vai determinar as permisses padronizadas para os novos objetos a
serem criados pelo usurio.
Exemplos:
Umask : 024
*Obs:
Quando o valor de Umask configurar permisso padro de execuo em qualquer nvel para arquivo,
esta no ser aplicada. No lugar dela, ser aplicada a permisso de gravao.
Geralmente, o valor de Umask definido em algum dos scripts de logon de usurio pelo comando
umask.
# umask
Sintaxe:
# umask <valor>
Exemplo:
# umask 020
12 - SISTEMAS DE ARQUIVOS
Alguns conceitos so imprescindveis antes que o estudo deste assunto seja iniciado:
INODES
So nmeros que servem como ndices para arquivos e diretrios. Cada arquivo ter um nmero
reservado para ele, isto acontece por causa da reserva de inodes existente no file system (que, por padro, de
5%). A reserva de inodes deve ser sempre verificada com a linha de comando df hi, pois o estouro desta
reserva causa a incapacidade de criao de novos arquivos ou diretrios no sistema de arquivos em questo.
JOURNALING
Este recurso encontrado em sistemas de arquivos diversos suportados pelo Linux, como EXT3, EXT4 e
ReiserFS. Ele consiste na criao de um log de atividades recentes do sistema, que podem ser recuperadas em
um prximo boot, caso ocorra um desligamento no programado, por exemplo, proporcionando maior
segurana e estabilidade do sistema e permitindo a recuperao do sistema aps problemas.
SUPERBLOCO
So cpias de blocos que armazenam informaes detalhadas sobre um sistema de arquivos. Estas
cpias, por padro, so feitas a cada 8192 blocos e elas sevem para auxiliar a recuperao de um file system
que esteja com inconsistncia.
So muitos sistemas de arquivos suportados pelo Linux e sempre importante estar sincronizado com
o suporte oferecido pelo Kernel a eles, para que no haja nenhum tipo de perda de tempo ao tentar usar um
sistema de arquivos que no suportado.
EXT2
Sistema de arquivo padro de distribuies antigas. adotado muito comumente como padro por
programas como o tune2fs, o mke2fs e o e2fsck. Seu limite de criao de blocos de 8TB e o tamanho de cada
bloco pode chegar a 4096 bytes.
EXT3
Este sistema de arquivos possui limitao por tamanho de arquivo de 2TB e limite de criao de blocos
de 32TB. Ele tambm possui o recurso de Journaling, diferena mais marcante entre ele e o EXT2.
importante ressaltar que, em caso de fim dos inodes, nenhum dos dois sistemas de arquivos acima os
recria. Ser preciso que o prprio administrador redefina a reserva de inodes.
EXT4
Sucessor do EXT3, este sistema de arquivos suporta arquivos de at 16TB de tamanho e 1 exabyte de
blocos no total. Um recurso muito interessante neste filesystem o de verificao de integridade de Journaling,
o que incrementa mais confiabilidade para o recurso, que foi melhorado. A gravao atrasada de dados
tambm pode ser considerada como um recurso muito til deste sistema de arquivos, pois aumenta a
velocidade de leitura e gravao, apenas gravando um dado quando ele realmente for sair de cache. O tamanho
do inode tambm maior do que no EXT3 (256bytes ao invs de 128bytes de EXT3), isso necessrio para que
o inode possa armazenar informaes extras, como verso do inode ou data de modificao do mesmo.
ReiserFS
Sistema de arquivos desenvolvido por Hans Reiser, este sistema de arquivos proporciona de vantagem
em relao aos outros o fato de garantir maior recuperao de danos estrutura existente de dados. A grande
desvantagem que ele j no garante um Journaling to eficiente assim para arquivos que estiverem sendo
utilizados no ato de um crash.
UFS
O Unix File System o sistema de arquivos padro de distribuies Unix como FreeBSD, por exemplo.
JFS
O Journaling File System foi concebido pela IBM para ser o sistema de arquivo do IBM-AIX.
XFS
Desenvolvido pela Silicon Graffics, o XFS suporta at 8 exabytes de tamanho por volume.
Swap
Chamado de rea de troca, este sistema de arquivos funciona como memria virtual para o sistema.
Costumava-se destinar o dobro do espao da memria RAM para uma memria Swap em verses
antigas de distribuies Linux. Hoje esta prtica est em desuso por causa do crescente desenvolvimento de
tecnologias de armazenamento temporrio. Hoje em dia, muito comum encontrar um servidor com at 64GB
de memria RAM.
Proc
Este sistema de arquivos na verdade contm pseudo-arquivos, que so criados pelo Kernel Linux
conforme haja necessidade de manipular algum recurso de sistema. Estes arquivos so os processos executados
em tempo real pelo Kernel e consultados pelo mesmo.
O sistema de arquivos Proc fica montado em /proc e sem ele o kernel Linux no pode interagir com o
sistema operacional.
ISO9660
FAT16 e FAT32 so tratados em Linux como MSDOS e VFAT, enquanto NTFS tratado como NTFS
mesmo.
# fdisk
Sintaxe:
Exemplos:
# fdisk l /dev/das
Particionando /dev/sda:
# fdisk /dev/sdb
# cfdisk
Sintaxe:
# cfdisk <disco>
# mkfs
Sintaxe:
Opes:
-t : especifica o tipo do sistema de arquivos (na verdade, o programa que ser utilizado na formatao).
-V ou v : modo verbose.
*Obs:
# mkfs.ext3 <volume>
# mke2fs j <volume>
Exemplos:
Criando sistema de arquivos ext3 em partio /dev/sda5, com aplicao de rtulo Backups e
verificao de integridade de disco:
# mkfs /dev/sda6
# tune2fs
Sintaxe:
Opes:
-c : configura o nmero de montagens do volume antes de ele ser verificado por fsck.
Exemplos:
# tune2fs m 15 /dev/sda7
# tune2fs j /dev/sda8
# tune2fs l /dev/sda7
Na figura acima, que o resultado do comando em questo, pode-se observar que o parmetro
hs_journal est presente, o que caracteriza um sistema de arquivos com recurso de Journaling ativado.
# fsck
Sintaxe:
Opes:
-c : verifica badblocks.
Exemplos:
# fsck N /dev/sdb6
*Obs:
muito importante ressaltar que uma verificao de disco feita em um volume montado pode causar
inconsistncia no sistema de arquivos do mesmo.
# badblocks
Sintaxe:
# hdparm
Sintaxe:
# hdparm <opes> <disco>
Opes:
Exemplos:
# hdparm i /dev/sda
# dumpe2fs
Sintaxe:
# dumpe2fs <volume>
# dd
Sintaxe:
Opes:
Exemplos:
# dd if=/dev/sda1 of=/dev/sdb1
# dd if=/dev/sda1 of=/root/part2
# dd if=/dev/zero of=/root/swp
# mknod
Sintaxe:
Tipos de arquivos:
p : cria um fifo.
Exemplo:
Criando um arquivo de blocos que vai servir como arranjo RAID (software):
# mknod /dev/md0 b 9 0
O sistema de arquivos SWAP (ou rea de troca) funciona como memria virtual para o sistema (auxiliar
a memria RAM).
Este sistema de arquivos pode ser um arquivo propriamente dito ou pode ser tambm uma partio
separada para este fim, o que leva o administrador a seguinte concluso: em qualquer caso, para utilizar SWAP
o sistema vai ter que utilizar o disco rgido, o que diminui bruscamente a performance do sistema. Por esse
motivo especfico que apenas em ltimo caso recomendado o uso deste recurso.
Era comum em sistemas antigos (pela falta de memria RAM) a atribuio do dobro da capacidade de
armazenamento em RAM para a SWAP, ou seja: se um sistema possui 256MB de RAM, o correto destinar
512MB para a criao da SWAP. Hoje em dia essa prtica cada vez mais desnecessria, uma vez que as
tecnologias de armazenamento em RAM j proporcionam a capacidade de armazenamento temporrio
necessria para qualquer servidor.
Levando em considerao que foi criada uma partio tipo 82 para abrigar um sistema de arquivos
SWAP e o seu caminho /dev/sda2, o que, primeiro deve ser feito a criao do sistema de arquivos SWAP:
# mkswap /dev/sda2
# swapon /dev/sda2
# swapon s
Ou
# cat /proc/swaps
# vim /etc/fstab
Como o SWAP no precisa de ponto de montagem, este deve ser definido como none no campo de
opes.
Se for necessrio desativar o SWAP, pode-se usar a linha de comando abaixo:
# swapoff /dev/sda2
O diretrio /dev tem em seu contedo arquivos especiais, que podem ser arquivos de blocos (discos ou
parties, por exemplo), arquivos de caracteres (terminais de controle, memrias RAM, placas de som, por
exemplo).
Quando a interface grfica est instalada em distribuies que contam com o Kernel 2.6 do Linux
instalado, UDEV monta automaticamente todo volume novo em /media/<rtulo do volume> assim que o
reconhece. Isto facilita e muito a vida do usurio de desktop Linux medida que o mesmo no ter trabalho
algum de sequer montar manualmente o volume.
A lista de arquivos especiais existentes em /dev est no arquivo /proc/devices, como mostra o exemplo
a seguir:
Para que um volume seja utilizado como sistema de arquivos no sistema, preciso mont-lo em algum
dos diretrios existentes, pois, a princpio, ele um arquivo de blocos qualquer antes que isso ocorra.
O diretrio onde este volume vai ser acessado chamado de ponto de montagem, ou mount point.
Este mount point pode ser um diretrio j existente do modelo FHS (/mnt ou /media, por exemplo) ou
pode ser um diretrio criado pelo usurio.
<sistema de arquivos> <ponto de montagem> <tipo do sistema de arquivos> <opes de montagem> <uso de
dump> <flag de checagem de disco no boot>
importante reparar que tambm possvel montar um volume neste arquivo de configurao atravs
do UUID do seu sistema de arquivos, este nmero de identificao pode ser obtido atravs do comando
tune2fs -l <volume> ou com o comando blkid <volume>.
No caso deste arquivo /etc/fstab acima, ao invs de montar o sistema de arquivos pelo seu nome em
/dev, ele esta configurado para montar o volume pelo o UUID (ID de partio).
Opes de montagem
noauto : neste caso, o volume precisaria ser montado manualmente atravs do comando mount.
exec : o volume permite que sejam executados programas dentro do volume (permisso x em
arquivos).
suid : permite que permisses especiais aplicadas a arquivos e diretrios tenham efeito.
user : permite que o usurio comum monte o volume e apenas aquele que montou pode desmontar o
mesmo.
Quando for o caso de o volume ser montado durante o processo de boot, nas opes de montagem
dele dentro de /etc/fstab deve constar a opo auto.
Comandos de montagem
# mount
Sintaxe:
Opes:
-v : verbose.
Exemplos:
# mount /dev/fd0
Montando o volume /dev/sdb2, que ext3, em /backup como leitura e gravao, sem verbose:
# mount a
# umount
Sintaxe:
Exemplos:
# umount /dev/sdb3
# umount /media/debian
# umount a
13 LINKS
Criar ligaes entre arquivos e diretrios no uma tarefa to fcil quanto parece, existem regras e
conceitos que precisam ser respeitados.
Um hardlink a ligao entre arquivos onde o arquivo original praticamente o mesmo que o link,
tanto que os dois possuem o mesmo nmero inode e, por isso, no podem estar em sistemas de arquivos
diferentes.
Em uma ligao fsica entre arquivos, se o arquivo original for renomeado, movido ou at removido, o
link continua existindo com os mesmos dados e o mesmo tamanho do arquivo original. Ele ideal para se fazer
cpias de segurana de arquivos em tempo real.
Um softlink assume o papel de simples atalho, como o usurio costuma chamar. Ele assume um
nmero inode diferente do arquivo original, podendo assim, ser implementado entre sistemas de arquivos
diferentes.
Em uma ligao simblica entre arquivos, se o arquivo original for movido, excludo ou renomeado, a
ligao fica quebrada (no existe mais).
# ln
Sintaxe:
Exemplos:
# ln /etc/passwd /etc/users
# ln s /etc/shadow /mnt/senhas
14 COMANDOS DE BUSCA
# type
Sintaxe:
# type <nome>
# which
Sintaxe:
# which <comando>
# whereis
Sintaxe:
# whereis <programa>
# locate
Procura por arquivos e diretrios em todo o sistema mediante atualizao em sua prpria base de
dados pelo comando updatedb.
Sintaxe:
# updatedb
# locate <arquivo/diretrio>
Exemplo:
# find
Sintaxe:
Opes:
-iname: procura por nome em modo insensitivo (ignora diferenas entre maisculas minsculas).
-perm : especifica qual a permisso exata do objeto que vai ser buscado.
-atime : procura por objetos que tenham sido acessados dias atrs.
-mmin : procura por objetos que tenham sido modificados a minutos atrs.
-mtime : procura por arquivos que tenham sido modificados a dias atrs.
Exemplos:
15 RAID
O termo RAID vem de Reduntant Array of Independent Disks (arranjo redundante de discos
independentes), mas nem sempre a parte redundante pode ser levada a srio, pois nem todos os tipos de
arranjos proporcionam a redundncia anunciada.
A tecnologia permite agregar recursos diversos de disponibilidade e desempenho com diversos discos
fazendo parte de um bloco s.
O RAID aplicvel atravs de controladas RAID ou de software. Vamos tratar aqui neste captulo a
prtica do RAID via software no Linux, j que se o RAID for via hardware, o sistema operacional Linux vai
enxerg-lo como um disco serial comum.
RAID0 (Stripping)
RAID1 (Mirroring)
RAID10 (0 + 1)
RAID5
RAID6
Instalando o programa:
cfdisk /dev/sda
As parties para integrar o arranjo tm que ser do tipo fd (deteco automtica de RAID).
Vamos fazer o laboratrio com 5 parties lgicas, onde 3 iro ficar no arranjo, compondo um RAID5, e
2 ficaro de disco reserva (spare disk).
# mknod /dev/md0 b 9 0
Onde:
-n : indica quantos e quais discos faro parte do arranjo (no conta com os reservas).
Os metacaracteres [-] e {,} foram utilizados para facilitar a declarao desses discos, pois se no fosse
assim, o administrador teria que digitar disco por disco separado por espao.
O arquivo /proc/mdstat pode ser consultado caso o administrador queira ver como est
sincronizao do arranjo:
O comando watch repete de n em n segundos um comando especfico. Desta forma, o arquivo ser
lido de 1 em 1 segundo, proporcionando ao administrador monitorar em tempo real a criao do arranjo.
Para mais detalhes sobre o mesmo, pode ser utilizada a seguinte linha de comando:
# mdadm D /dev/md0
Onde:
RAID no sistema de arquivos, mas sim um arranjo de discos, como j foi visto. Por esse motivo, no
h nenhum sistema de arquivos especial para que ele seja formatado. O arranjo pode ser formatado com
qualquer sistema de arquivos suportado pelo sistema.
Outro fato importante o de que o arranjo ser formatado, e no cada disco individualmente:
Se for necessrio usar o arranjo permanentemente, como o caso da maioria dos arranjos, ele deve
ser configurado em /etc/fstab:
# vim /etc/fstab
# mount -a
Vamos forar uma falha em um dos discos do arranjo para testar a participao dos discos reservas:
Observa-se que o disco fica marcado como falhado, enquanto o reserva entra em seu lugar e faz
novamente a sincronizao com o arranjo.
# mdadm S /dev/md0
16 BACKUP E COMPACTAO
Em todo servidor instalado, uma boa prtica de backup sempre requerida. Manter estratgias de
backup eficientes no uma tarefa simples, com s vezes se imagina. O administrador deve analisar vrios
pontos antes de montar estas estratgias, como por exemplo: tipo do backup, frequncia com que vai ser feito,
dados a serem copiados, mdias de armazenamento e o programa que vai gerenciar este backup.
Tipos de backup
Backup Completo: o tipo de backup onde todos os dados de um determinado local so copiados para
outra mdia, de forma que, a cada backup completo seja criado um destino diferente para o mesmo.
Backup diferencial: o tipo de backup que apenas copia o que foi modificado ou criado desde o ltimo
backup completo.
Backup incremental: apenas faz o backup de tudo que tenha sido modificado ou criado desde o ltimo
backup diferencial.
Diretrios importantes
Fazer um backup completo, diferencial ou incremental do sistema todo implica em incluir estes
diretrios abaixo na lista:
/etc por ter todos os arquivos de configurao de servios de sistema a servidores instalados, este
diretrio nunca deve ser esquecido em um alista de backup.
/home dependendo do tipo de servidor, ser importante fazer backup dos arquivos pessoais de
usurios. Na verdade, como nem todo usurio precisa usar /home como diretrio de arquivos pessoais, o ideal
primeiro seria verificar em /etc/passwd antes a lista de diretrios home de usurios antes de montar este
backup ou fazer com que isso seja feito por um script cheio de expresses regulares (muito melhor!!).
/var /www para um servidor web que tambm opere nos padres, este diretrio fundamental, pois
nele que se encontram os arquivos de publicao de sites no servidor.
# tar
Arquiva dados de diretrios em um arquivo apenas. padro para todas as distribuies Linux. Ele
muito verstil para backups, podendo corresponder a qualquer tipo de backup citado acima.
Sintaxe:
Opes:
-v : verbose.
-f : toda a sada deve ser redirecionada para um arquivo, dispositivo, uma entrada (stdin) ou uma sada
(stdout) padro.
Exemplos:
# tar tf /backups/bkp.tar
# cpio
Este agente de backup trabalha com backups tirando os dados das origens de uma lista. Ele pode ser
combinado com outros comandos, como muito comum ver com o find.
Combinando o comando find com cpio para obter o backup de todos os arquivos com permisso de
execuo contidos em /etc:
# cpio i F backup_etc.bin
claro que, para agilizar e facilitar as operaes de backup, o administrador pode criar alguns scripts
de backup e agendamentos (se for o caso), pois o Linux proporciona este tipo de prtica administrativa.
Em um primeiro exemplo, vai ser criado um script que far um backup completo cada vez que ele for
executado, tendo como diferencial de nome de arquivos de backup a data do mesmo, que ser uma varivel.
Levando em considerao que o assunto de scripts de Shell ser abordado com muito mais
profundidade mais frente, vamos edio do primeiro script de backup:
# vim /backups/backup_dia.sh
sempre importante dar permisso de execuo para o script que foi construdo:
# chmod +x /backups/backup_dia.sh
Executando o script:
# . /backups/backup_dia.sh
Cada dia em que este script for executado, ele criar um arquivo de backup com nome diferente,
sendo ideal esta prtica para agendamentos de backups completos semanais ou mensais, por exemplo.
Como resultado deste script, ser criado uma arquivo com o seguinte formato:
O segundo script ser feito para atualizar o contedo de um arquivo de backup completo existente
com os dados de uma lista de diretrios bkp_lista.txt:
# vim /backups/backup_lista.sh
# vim /backups/bkp_lista.txt
Executando o script:
# . /backups/backup_lista.sh
# gzip
Gera arquivos de extenso .gz e tem taxa de compactao mdia quando o arquivo a ser compactado
grande.
Este agente compactador no mantm o arquivo original compactado. A nica verso que vai estar
disponvel desde ento ser a verso compactada.
Sintaxe:
Exemplos:
# gzip f arq1.txt
# gzip l arq1.txt.gz
# gzip d arq1.txt.gz
Ou
# gunzip arq1.txt.gz
Obs: Representar um arquivo com extenso .tgz o mesmo que represent-lo como .tar.gz.
# bzip2
Agente compactador que possui uma alta taxa de compresso de arquivos grandes, podendo
compactar em at 10% do tamanho original. Arquivo manipulados pelo agente bzip2 tm extenso .bz2.
Sintaxe:
Exemplos:
# bzip2 k disco.iso
Descompactar o arquivo:
# bzip2 d disco.iso.bz2
ou
# bunzip2 disco.iso.bz2
# bzip2 t disco.iso.bz2
# bzip2recover disco.iso.bz2
# zip
Sintaxe:
Exemplos:
# unzip /backups/prog.zip
# rar
Compactador proprietrio que tem verses para sistemas GNU/Linux, MacOS, Windows e outros.
Sintaxe:
Aes:
Exemplos:
# rar x mail.rar
# rar l mail.rar
17 AGENDAMENTO DE TAREFAS
Automatizar tarefas uma prtica muito comum entre administradores de servidores Linux. Um
backup full que deve sempre ser feito de um diretrio de publicao de sites, por exemplo, toda sexta-feira,
precisaria de interveno manual do administrador se no houvesse a possibilidade de agend-lo para executar
neste dia em um horrio especfico.
Os daemons que gerenciam todos os agendamentos do sistema so o cron e o atd, mas eles no so os
programas que configuram a instalam os agendamentos de tarefas no Linux. Para esta tarefa, so utilizados o at
ou o crontab, sendo o mais expert dos 2 o crontab.
/etc/cron.hourly : diretrio de scripts que sero executados de hora em hora podem ser
armazenados.
/etc/cron.daily : diretrio onde scripts que sero executados diariamente podem ser armazenados.
/etc/cron.weekly : diretrio onde scripts que sero executados semanalmente podem ser
armazenados.
/etc/cron.mounthly : diretrio onde scripts que sero executados mensalmente podem ser
armazenados.
Os scripts contidos nos diretrios acima so executados pelo comando run-parts, que tem a funo de
executar scripts de diretrios em demanda. O agendamento da execuo deste comando nos diretrios est
dentro do arquivo /etc/crontab, como no exemplo abaixo:
importante que estes diretrios sejam lembrados em um backup de dados ou em uma migrao de
um servidor para outro, pois os agendamentos, em muitos casos, fazem parte da vida funcional de um
sistema, uma vez que tarefas imprescindveis podem j estar agendadas, como por exemplo, uma aplicao que
faz cache de arquivos pesados e que so excludos de 30 em 30 minutos para no estourar o espao de uma
determinada partio.
# at
Cria agendamento para executar uma nica vez e depois ser excludo.
Quando for utilizado para agendar alguma tarefa, o at vai abrir seu prompt de comandos de Shell SH
para que o administrador possa digitar os comandos que vo ser executados.
Sintaxe:
# at <opes> <tempo>
Exemplos:
Criando um agendamento para 22:00 (para salvar e sair do prompt do at, bastar pressionar CTRL+D):
# atq
ou
# at l
# atrm 5
Os formatos de data e hora podem ser diferentes, como nos exemplos abaixo:
# at 1:00PM 10/05/2010
# at 14:00 tomorrow
# crontab
Agenda tarefas de forma muito mais verstil e dinmica. Com ele, a mesma tarefa pode se repetir
vrias vezes e possvel criar tarefas com intervalos de tempos diversos. Ele nativo de todas as distribuies
GNU/Linux.
importante ressaltar que nem o cron e nem o atd precisam ser reiniciados, basta editar os arquivos e
pronto!
Sintaxe:
Opes:
-u : especifica o usurio.
Intervalos de agendamentos
Os intervalos so pea fundamental para o crontab. Na verdade um dos diferenciais deste programa.
* : todo.
*/n : de n em n.
n-r : de n at r.
n,r : n e r.
n-r,x : de n at r e tambm x.
Onde:
Para que o editor padro para a nossa edio de agendamentos seja o vim vamos troc-lo, pois os
recursos de sintaxe dele nos ajudaro a entender melhor os campos.
Exemplos:
Criando tarefa para o root executar o script de backup /backups/backup_lista.sh todo dia 15 do ms, s
17 horas e 30 minutos:
# crontab u root e
Os campos do ms e do dia da semana ficaram com *, pois o agendamento vai mesmo ser executado
todo dia da semana e todo ms.
Criando um agendamento para o usurio user1, de 10 em 10 minutos, nos meses de abril a junho e
tambm dezembro, toda 2 e 4-feira, remover os arquivos .mp3 de seu diretrio pessoal:
# crontab u user1 e
(no seria necessrio que o root agendasse tarefas para o usurio, pois todos eles, por padro, podem
criar e administrar os seus agendamentos).
# crontab u user1 l
# crontab u user1 r
Os arquivos que o administrador pode criar para fazer este tipo de controle so:
/etc/at.deny : lista de negao de acesso dos usurios que esto nesta lista ao programa at.
/etc/at.allow : lista de nicos usurios que podem acessar agendamentos prprios no at.
/etc/cron.allow : lista de nicos usurios que podem acessar os agendamentos prprios no crontab.
Basta incluir o nome dos usurios (um em cada linha) e salvar o arquivo criado para que possa passar a
valer o bloqueio/aceitao de acesso dos usurios.
Nenhum dos agendamentos j criados pelo usurio afetado por este bloqueio, eles persistem.
Exemplo:
Criando lista de negao de acesso a agendamentos dos usurios user1, operador e cpd:
# vim /etc/cron.deny
18 COTAS DE ARMAZENAMENTO
Pense voc, administrador, que um servidor Web Apache, que tem um sistema de arquivos de 2TB
funcionando sobre RAID e LVM montado em /var/www para abrigar arquivos de publicao de sites de diversos
clientes e que um deles resolve hospedar vdeos a vontade e estoura a capacidade de espao em disco em 3
meses, parando o servio de hospedagem at que o administrador, manualmente, remova os arquivos que
esto excedendo o limite de blocos disponveis do volume, causando constrangimento e desconfiana em seus
usurios.
Este acontecimento catastrfico citado acima com certeza seria evitado com a configurao bem
planejada de cotas de armazenamento para usurios e (ou) grupos, onde cada um teria seu limite de espao ou
quantidade de arquivos em disco, estando este limite bem longe dos limites reais de armazenamento do disco.
Alguns conceitos sobre cotas em Linux devem ser muito bem assimilados pelo administrador antes que
ele pense em criar cotas:
Cotas em volumes
No possvel criar cotas em diretrios de um sistema de arquivos qualquer. Elas s podem ser criadas
em sistemas de arquivos.
Permisses
Nunca se pode esquecer que a permisso de execuo e escrita em diretrios essencial para que se
possa garantir que os usurios possam ter acesso gravao no volume. No h motivo para se criar cotas de
armazenamento para um volume montado como apenas leitura ou montado em algum diretrio que no tenha
permisso de gravao.
Limite Soft
o primeiro limite a ser estabelecido para cota de usurios ou grupos. Quando o usurio chega a este
limite, ele passa a ficar em grace time, que o perodo de tolerncia dado ao usurio ou grupo para que eles
possam remover o contedo excedente e continuem tendo permisso de escrita no volume. Caso eles no o
faam durante este perodo, tero a permisso de escrita negada no volume.
Limite Hard
Este o ltimo limite de cotas possvel. Atingindo este nvel, o usurio vai ter a permisso de escrita no
volume negada automaticamente. Se o limite Soft for igual ao limite Hard, o primeiro vale como ltimo nvel de
cotas no volume.
18.2 Aplicao
Levando em considerao que j existe um sistema de arquivos ext3 criado e montado em /home, o
prximo passo ativar o uso de cotas para usurio e grupos neste volume. Isso possvel adicionando as
opes usrquota e grpquota (separadas por vrgula) no campo de opes de montagem do volume em
/etc/fstab:
# vim /etc/fstab
A habilitao de sistemas de cotas para usurios e grupos vai implicar na criao de 2 arquivos, que vo
funcionar como bancos de dados de cotas (aquota.user e aquota.group) na raiz do sistema de arquivos com
cota. Estes arquivos no podem ser apagados nem pelo usurio root.
ideal, para pleno funcionamento do sistema de cotas, que o sistema seja reiniciado aps a
configurao do arquivo /etc/fstab.
# edquota
Sintaxe:
# edquota <opo>
Opes:
Exemplos:
Aplicando cotas de 500MB soft e 600 hard para blocos, 150 soft e 200 hard para inodes para o usurio
user1 no volume /dev/sdb1:
# edquota u user1
# edquota T user2
# repquota
Sintaxe:
Opes:
-a : lista cotas de todos os volumes.
-v : modo verbose.
Exemplos:
Deste relatrio pode-se chegar concluso de que o usurio user1, por ter criado 155 arquivos,
ultrapassou a sua cota soft de inodes, o que o deixa em perodo grace de 7 dias (padro), porm, sua cota de
blocos continua praticamente inalterada, pois 150 dos 155 arquivos so vazios, ou seja: no ocupam blocos mas
ocupam inodes.
# quotacheck
Verifica existncia sistemas de arquivos com cotas habilitadas e aplica configuraes de cotas j
definidas.
Sintaxe:
Opes:
-v : verbose.
Exemplo:
Aplicando cotas a todos os sistemas de arquivos com suporte a cotas para usurios:
# quotacheck aufmv
# quotaon
Sintaxe:
Exemplos:
# quotaon /dev/sdb1
# quotaon p /dev/sdb1
# quotaoff
Sintaxe:
Exemplos:
# quotaoff /dev/sdb1
# quotaoff p /dev/sdb1
$ quota
o nico comando de cota que o usurio comum pode executar. Ele emite um resumo da situao de
cotas do usurio.
Sintaxe:
Opes:
Exemplo:
Verificando a situao das cotas do usurio user1 no modo mais legvel possvel:
# quota us user1
O administrador precisa ter muito conhecimento sobre este assunto antes de chegar a gerenciar algum
servidor Linux. O usurio root tem poderes ilimitados sobre o sistema e, por isso mesmo, ele tanto pode
executar uma operao de trmino de um processo de forma a no danificar os arquivos envolvidos no mesmo
como pode tambm o interromper de forma brusca e danificar um arquivo importante nesta ao apenas pelo
fato de no ter escolhido o sinal certo a envia para o processo. Pode o administrador tambm escolhe mal a
prioridade de execuo de um processo pesado e paralisar todo o sistema por causa disso. Justamente por esse
fato, que preciso dominar os conceitos e comandos que vo ser ministrados neste captulo.
PID
o Process ID, o nmero de identificao que cada processo recebe. O nico PID fixo existente o
PID do processo INIT, que o de n 1.
NICE NUMBERS
o nmero de prioridade de execuo de um processo. Se um processo executado com maior
prioridade, ele usa os melhores recursos de processamento para sua execuo, enquanto se for prioridade
baixa, ele depende que outros processo no estejam utilizando estes recursos para que ele tambm possa fazer
uso. OS NICE NUMBERS vo de -20 at 19, sendo a maior a prioridade negativa.
SINAIS DE PROCESSOS
Para saber o que se pode fazer com cada processo que est em execuo preciso entender os sinais
de processos.
1 - HUP ou SIGHUP : instrui o servio a reler o seu arquivo de configurao (operao de reload).
9 KILL ou SIGKILL : Interrompe bruscamente um processo. Este sinal deve ser utilizado em ltimo
caso, pois ele pode causar danos aos arquivos envolvidos no processo.
15 TERM ou SIGTERM : enviado para todos os processos do sistema assim que ele entra em
desligamento. Este sinal fecha todos os arquivos abertos do processo antes de termin-lo, no causando
nenhum tipo de dano a eles. Este o sinal padro da maioria dos comandos e programas que terminam
processos justamente pela sua elegncia.
18 CONT ou SIGCONT : continua processos que foram parados pelo sinal 20, enviando-os para
background.
20 TSTP ou SIGTSTP : pra processos de forma que eles possam ser reiniciados depois pelo sinal 18.
o mesmo que a combinao de teclas CTRL + Z.
RUNLEVELS
0 sistema em desligamento.
1 modo single user. Ideal para modo de manuteno do sistema, pois apenas uma instncia de
logon e terminal sero permitidos.
2 o Runlevel padro do sistema. Este o nvel multi-user, onde mltiplos logons podem ser
efetuados e todos os terminais podem ser utilizados.
4 em desuso.
6 sistema em reinicializao.
# ps
Sintaxe:
# ps <opes>
Opes:
Exemplos:
Exibindo os processos de todos os terminais, incluindo aqueles que no usam terminal, com o nome de
cada usurio responsvel pelo processo:
# ps aux
# top
O campo NI, que mostrado, se refere ao Nice Number do processo. O Nice number padro para
processos iniciados o 0, ou seja: se um processo iniciado sem que seja especificado o seu Nice Number, ele,
automaticamente, 0.
# kill
Sintaxe:
Exemplos:
# kill l
Ou
Ou
# kill 913
# kill -9 913
ou
Ou
Ou
Como pudemos perceber acima, o comando kill no serve apenas para matar processos, como o
prprio nome sugere. Ele um gerenciador de processos que envia o sinal necessrio para eles via linha de
comando. Outro detalhe importante que o sinal padro do comando kill 15, pois o sinal mais aconselhvel
para terminar uma tarefa, ou seja: terminar um processo com o comando kill sem especificar qualquer
argumento leva-o a terminar o processo com o sinal 15.
O prximo comando tambm gerencia processos, s que pelo nome, ao invs de pelo PID.
# killall
Sintaxe:
Exemplos:
# killall -l
# killall -15 dd
Ou
# killall TERM dd
Ou
# killall dd
# killall -9 Xorg
Ou
# killall5
Sintaxe:
# killall5
Ou
# fuser
Sintaxe:
Opes:
-v : verbose.
-i : modo interativo.
Exemplo:
# fuser k /dev/pts/0
Um processo pode ser enviado para background de vrias formas diferentes, uma delas executar o
comando sucedido por &. Ele receber um ID, que ser usado para manipul-lo em background. Um exemplo
disso a linha de comando abaixo, que envia uma verificao de badblocks para segundo plano:
# bg
Sintaxe:
# bg <num>
# fg
Sintaxe:
# fg <num>
# jobs
# nohup
Sintaxe:
# nohup <comando>
Exemplo:
# nice
Sintaxe:
Exemplos:
Repare que o primeiro - faz parte da sintaxe do comando, portanto, no tem nada a ver com o Nice
Number a ser aplicado.
Devemos sempre lembrar tambm de que dar prioridade alta a um processo significa usar melhores
recursos de processamento do que se ele estivesse sendo executado em prioridade 0.
# renice
Sintaxe:
Exemplos:
# renice 4 1902
O processo INIT o primeiro a ser executado assim que o sistema inicializado. A cadeia de boot em
Linux funciona da seguinte forma: o boot loader entrega o boot para a imagem do kernel, que chama o
processo INIT para inicializar todos os daemons (servios/sevidores) referentes ao Runlevel escolhido para boot
que so executados na inicializao, como por exemplo, servio de rede e servidor Web. Para executar estes
servios, o processo INIT usa os diretrios abaixo:
/etc/init.d o diretrio que contm os scripts que gerenciam os daemons do processo INIT no
Debian (e distribuies afins). Para que estes scripts sejam executados no boot, preciso que eles tenham link
simblico para os diretrios abaixo:
/etc/rc2.d diretrio de links simblicos para scripts de Runlevel 2 (este o Runlevel padro dos
sistemas GNU/Linux em geral).
Em Red Hat o padro muda um pouco, na verdade, o que passa a acontecer que os diretrios rc e o
init.d ficam como subdiretrio do diretrio /etc/rc.d.
Exemplos:
Obs: importante ressaltar que existe no Red Hat o link simblico /etc/init.d, que aponta para o
diretrio /etc/rc.d/init.d.
No Debian:
# /etc/init.d/<servio> <ao>
Ou
No Red Hat:
# /etc/rc.d/init.d/<servio> <ao>
Ou
Aes:
Exemplos:
# /etc/init.d/networking restart
Ou
Relendo o arquivo de configurao do samba para aplicar as alteraes que foram feitas em um
servidor Red Hat:
Definir em qual Runlevel um daemon vai ser executado ou terminado uma tarefa que pode ser
executada tanto criando links manualmente dos scripts do diretrio init.d para o rc correspondente quanto
com o uso dos comandos abaixo:
# update-rc.d
Cria ou remove uma execuo de script em um Runlevel especfico. Ele cria os links simblicos
necessrios para que o daemon possa iniciar no Runlevel desejado.
Sintaxe:
Exemplos:
Definindo que daemon winbind seja executado toda vez que o sistema iniciar em Runlevel 2:
# chkconfig
Faz o mesmo que o comando update-rc.d, porm este no padro da distro Debian e sim do Red Hat:
Sintaxe:
Opes:
Exemplos:
# chkconfig list
O Runlevel padro de um sistema pode ser modificado em um arquivo chamado /etc/inittab. preciso
tocar cuidado ao faz-lo, pois sistema tiver como Runlevel padro o Runlevel 6, por exemplo, ele ficar em um
constante loop de reinicializao, que s poder ser resolvido com o incio forado do sistema em outro
Runlevel, processo que s poderia ser feito no arquivo de configurao do boot loader.
<ID>:<RUNLEVELS>:<AO>:<COMANDOS>
sysinit : define qual o script principal de inicializao do processo INIT. Para Red Hat este script o
/etc/rc.d/rc.sysinit, enquanto para Debian este script o /etc/init.d/rcS, que, na verdade, apenas aponta para
outro script (/etc/init.d/rc). Este script o responsvel pela execuo dos links simblicos que apontam para o
diretrio /etc/init.d ou /etc/rc.d/init (Red Hat).
wait : define que um programa inicia ou termina sempre aps o de ordem anterior ser executado.
respawn : indica que quando terminar a execuo de um processo, o mesmo ser iniciado novamente.
# runlevel
# init
Sintaxe:
# init <runlevel>
Exemplo:
# init 1
20 KERNEL
Como visto de maneira resumida na introduo deste material, o Kernel o responsvel por suportar e
interagir com os recursos lgicos e fsicos que podem ser oferecidos pelo sistema. Uma placa de rede Wireless
s funciona se o Kernel der suporte a ela, assim como tambm o protocolo ipv6 s funciona se o Kernel o
suportar. Para saber das modificaes que esto sendo feitas no cdigo-fonte do Kernel, basta observar a seo
de Changelogs do site www.kernel.org.
Antes de configurar, compilar e instalar um novo Kernel, preciso saber que tipo de Kernel o
administrador vai querer utilizar. Os tipos so:
Kernel Monoltico
Este tipo de kernel deixa junto com a imagem de boot do Kernel todo e qualquer suporte
implementado a qualquer tipo de recurso, podendo tornar a inicializao do sistema um pouco mais demorada.
Kernel Modular
Neste caso em especfico, uma grande quantidade de recursos fica em mdulos, que so instalados a
parte e no precisam serem carregados juntos com o sistema. Neste caso, h mais facilidade em gerenciar
recursos, uma vez que, se no quiser um recurso, basta adicion-lo a uma blacklist de mdulos.
importante destacar tambm que nem todos os recursos podem ser colocados em mdulos, alguns
tm que ser built-in mesmo, por exigncia do Kernel, sendo assim, nenhum Kernel totalmente modular.
Verses do Kernel
A sintaxe de verso do Kernel :
Antes do Kernel 2.4 ser lanado, as verses aumentavam de forma que uma verso menor que fosse
mpar representava um Kernel instvel ainda, enquanto uma verso menor que fosse par significava em Kernel
estvel. Hoje isso no mais uma realidade, uma vez que Linus Torvalds decidiu que as alteraes seriam feitas
no terceiro campo. A verso menor s ser alterada se for uma mudana muito brusca na estrutura do Kernel.
Exemplo:
Uma verso recompilada para dar suporte a Paravirtualizao, no Kernel 2.6.35, teria a nomenclatura:
2.6.35-Virt
Configurao
Nesta etapa ocorre a escolha de quais recursos sero instalados. preciso entender muito bem de
recursos como rede, discos, dispositivos e recursos de hardware, redes e de sistemas de arquivos, pois as
opes de configurao do Kernel so muitas e escolher a opo errada pode custar o no reconhecimento de
alguns recursos desejados.
Compilao
A compilao de um software qualquer consiste em converter os cdigos-fonte dele para arquivos
binrios (linguagem de mquina). Numa compilao de Kernel no diferente, uma vez que existe a
necessidade de os mdulos e recursos Built-in interagirem com os hardwares de sistema.
Instalao
O conceito de instalao a cpia de binrios do um programa para um diretrio de instalao.
Para este procedimento, vamos utilizar a verso 2.6.35.4 do Kernel obtida em www.kernel.org.
# ln s /usr/src/linux-2.6.35.4 /usr/src/Linux
# cd /usr/src/linux
# make menuconfig
# make config : mtodo de configurao em modo texto. No tem menu nenhum e confirma opo
por opo, exigindo que o usurio diga obrigatoriamente a qual recurso ele no quer dar suporte.
# make menuconfig : esta opo conta com um menu para terminal que dinamiza muito mais a
escolha das opes, uma vez que o administrador s precisa configurar os recursos que ele quer.
importante, antes de fazer a configurao do Kernel, definir qual vai ser a verso atual do Kernel que
est sendo reconfigurado, isto pode ser feito dentro do arquivo Makefile, como no exemplo da figura a seguir:
Depois de configurada a verso do Kernel, vamos partir para a configurao do mesmo. A figura abaixo
de uma configurao feita com o comando # make menuconfig. Aps a concluso deste passo, Serpa gerado
um arquivo chamado .config, que ir conter as escolhas feitas na configurao realizada com o comando em
questo.
Os recursos que podem ser adicionados como Built-in ou como Modulares esto com < >,
enquanto aqueles que s podem ser implementados em Built-in esto com [ ].
# make dep
No caso abaixo, todas as dependncias esto satisfeitas, tornando assim o uso de make dep
desnecessrio.
# make clean
# make bzImage
importante lembrar que at este momento nenhuma ao foi tomada em relao aos mdulos, j
que a imagem de boot totalmente independente dos mdulos do Kernel.
Este passo ir compilar a imagem do Kernel e criar um arquivo de imagem desta imagem, assim, o
gerenciador de boot poder executar o boot por ela.
No caso, # make bzImage usa o agente compactador BZIP2 para comprimir a imagem, esta imagem
tambm pode ser carregada em memria estendida, enquanto # make zImage usa o agente COMPRESS e s
pode compactar imagens pequenas de Kernel (at 500KB). justamente por causa desta diferena que em
grande maioria das compilaes escolhido o mtodo # make bzImage.
Compilando os mdulos:
# make modules
# make modules_install
# cd /lib/modules
Os mdulos instalados no so carregados durante o boot, a no ser que eles sejam declarados no
arquivo /etc/modules ou que estejam dentro de uma imagem INITRD e que o boot loader aponte para ela.
Para manter o padro de nomenclatura, deve-se copiar a imagem do Kernel para /boot com o nome de
vmlinuz-2.6.35-VIRTUAL.
# update-grub
Reiniciar o sistema:
# shutdown -r now
# uname
Opes:
-a : exibe todas as informaes sobre o Kernel instalado.
-n : exibe o hostname.
-r : exibe a verso do Kernel instalado.
-m : exibe a arquitetura do Kernel instalado.
-s : exibe o nome do Kernel instalado.
-p : exibe o processador do sistema.
-o : nome do sistema operacional.
# lsmod
# modinfo
Exibe informaes detalhadas sobre um mdulo especfico, como informaes sobre autoria, verso,
arquitetura, dependncias, etc.
Sintaxe:
# modinfo <mdulo>
Exemplo:
# modinfo iptable_nat
# depmod
# modprobe
Insere os mdulos e suas depoendncias no Kernel em execuo. Tambm tem opes de consulta e
excluso de mdulos.
Sintaxe:
Opes:
Sees:
-r : remove um mdulo.
Exemplos:
# modprobe tun
# modprobe -r tun
# modprobe -l ip_conntrack
# insmod
Sintaxe:
# insmod <mdulo>
# rmmod
Sintaxe:
Opes:
# lspci
# lsusb
# lshw
21 GERENCIADORES DE BOOT
Os carregadores de boot so pea fundamental em uma configurao de sevidor Linux, visto que so
eles que cuidam de tornar a imagem do Kernel inicializvel e dizer qual a partio ser usada como sistema raiz.
Os dois gerenciadores de boot padres do Linux so o GRUB e o LILO, o primeiro amplamente utilizado pelos
sistemas operacionais e o segundo est subutilizado pela maioria das distribuies (est disponvel na maioria
dos repositriosmas no o padro). Uma das nicas excees o Slackware, que at hoje usa este boot
loader.
Independente do boot loader, importante saber que ele pode ser instalado em 2 lugares diferentes:
Os primeiros 512 bytes do HD so destinados a um setor especfico chamado Master Boot Recording,
que onde se encontra, geralmente, o boot loader de um sistema operacional qualquer. No caso de GRUB e
LILO, gerenciadores de boot do Linux, o administrador ainda tem como escolher onde eles sero instalados.
Quando apenas um sistema operacional Linux for instalado no HD, o ideal que ele seja instalado no MBR.
Caso exista algum outro sistema operacional derenciando o boot pelo HD, o administrador pode optar
por instalar o boot loader em uma partio, e no no disco, lembrando que essa no uma prtica comum em
servidores, pois no h razo para dual boot em servidor, j que ele foi concebido para prover alta
disponibilidade de servio.
Gerenciador de boot mais antigo do Linux, o LILO est em crescente desuso entre as distribuies em
geral, salvo algumas excees, como o Slackware, por exemplo.
Por no ser o boot loader padro do Debian, o LILO precisa ser instalado no mesmo:
# liloconfig
Neste exemplo acima, o LILO est sendo instalado no MBR (HD /dev/sda). Este comando apenas cria o
aquivo de configurao, mas no instala o LILO MBR, para tal, o administrador precisa verificar a sintaxe do
arquivo que foi gerado e depois instalar o lilo onde ele foi escolhido para ser instalado:
# lilo
Uma das vantagens do LILO em termos de segurana que ele depende de instalao manual toda vez
que modificado, evitando assim que alguns acidentes, como edio errada do arquivo, por exemplo, possam
causar o constrangimento de o sistema ficar sem inicializao.
O arquivo de configurao do LILO (/etc/lilo.conf) divido em duas sees: global e image. A primeira
vai tratar de assuntos genricos do boot loader, enquanto a segunda vai tratar de questes relacionadas s
opes de boot pela imagem do Kernel.
delay : tempo de espera por opo do usurio at que seja escolhida a primera imagem de boot.
timeout : tecnicamente, faz a mesma coisa que a opo acima. Detalhe: a unidade de medida dos dois
o dcimo de segundo, portanto, configurar timeout=100 significa esperar 10 segundos at que o usurio
decida por qual imagem ele vai inicializar, no ocorrendo isso, ele inicia com a primeira.
prompt : para que o prompt boot: seja exibido, preciso que seja utilizada esta opo.
vga : resoluo de vdeo do terminal, elas so representadas por cdigos. Os mais importantes so:
normal : 640x480
788 : 800x600
791 : 1024x768
794 : 1280x1024
Exemplo:
other=/dev/sda7
label=Windows
table=/dev/sda
table : aponta para o disco onde se encontra a tabela de parties do sistema operacional estrangeiro.
Toda vez que alguma mudana for feita em /etc/lilo.conf, o LILO deve ser reinstalado e o sistema deve
ser reiniciado:
# lilo
# shutdown r now
O GRUB o boot loader usado pela maioria das distribuies para desktops e servers justamente pelo
fato de ele ser um gerenciador dinmico (no precisa ser reinstalado aps cada mudana em seu arquivo de
configurao) e cheio de recursos, como boot por diversos sistemas operacionais e filesystems diferentes, por
discos de qualquer tipo (inclusive ISCSI), por mltiplas imagens, por ter um menu que disponibiliza o modo de
comando (para emergncias) e a possibilidade de criptografao de senha se boot.
O grub tambm pode ser instalado no MBR ou na partio pelo comando grub-install.
Exemplo:
# grub-install /dev/sdc
Os arquivos dos quais o GRUB precisa esto em /boot (imagem do Kernel, initrd, mapas de dispositivos,
etc), portanto, em cada alterao de contedo deste diretrio, como em uma instalao de um novo Kernel,
no necessrio editar seu arquivo de configurao em /boot/grub/menu.lst, basta executar o comando
update-grub.
default : configura qual vai ser a imagem de boot padro. Geralmente este nmero 1.
timeout : configura o tempo de espera (em segundos) por uma escolha de boot por parte do usurio.
Se esta escolha no for feita, o boot loader ir iniciar pela primeira imagem de boot que estiver listada no
menu.
color : permite escolher cores para o menu do GRUB.
password : especifica uma senha para o caso de o administrador tantar acesso de edio pelo menu do
GRUB. Esta uma tima prtica de segurana, principalmente se o acesso fsico ao servidor por mltiplos
usurios inevitvel.
hiddenmenu : esta opo esconde o menu do GRUB at que o usurio presione <ESC>, dentro do
limite de tempo (timeout). Caso isto no seja feito, o boot ser feito com a imagem escolhida na opo default.
chainloader : entrega a responsabilidade de iniciar um outro sistema operacional ao seu boot loader
instalado. Esta opo muito utilizada em dual-boots Linux/Windows.
kernel : configuraes de boot pela imagem do Kernel. Nesta seo, configurada a resoluo de
vdeo, seguindo o padro vga=<cdigo>, sendo os mesmos cdigos que so utilizados no LILO. Tambm, e
principalmente, referenciado o local da imagem de boot do Kernel, se o mesmo vai ser iniciado em ro(read
only) ou rw(read and write). Tambm podem ser passados alguns parmetros especiais, como o boot forado
por um runlevel especfico e a inicializao direta pelo Shell BASH, para caso de ter que pular o processo INIT
e fazer login como root (sem senha alguma).
initrd ; aponta o caminho da imagem INITRD que vai carregar os mdulos na inicializao do sistema.
Outro detalhe a ser observado a declarao de nomenclarura de discos e parties no GRUB bem
particular, tornando-se uma preocupao para quem no domina o assunto e obrigado a configur-lo. Esta
nomenclatura segue a seguinte sintaxe, com a contagem de discos comeando de zero:
(HD<num_disco>,<num_part>)
Exemplos:
/dev/sda (HD0)
/dev/sda2 (HD0,1)
/dev/sdb5 (HD1,4)
/dev/sdb7 (HD1,6)
Como foi dito anteriormente, a passagem de parmetros no menu do GRUB deve ser controlada ao
mximo para que no aconteam desastres, como um usurio comum com acesso fsico ao servidor conseguir
entrar no sistema direto pelo Shell Bash e no precisar de senha de root para acesso ao terminal. Uma grande
estratgia de proteo contra esta ameaa de segurana criar uma senha para passagens de parmetros no
boot do GRUB. Para isso, vamos criar uma senha primeiro e redirecionar a sua criotografia para o arquivo se
configurao de boot:
Dentro do arquivo menu.lst, onde est a criptografia, a sintaxe para configurar este bloqueio deve
estar antes da primeira opo de boot se seguinte forma:
Lock
Se, aps o sistema reiniciado o usurio quiser editar o menu do GRUB, esta senha criptografada ser
pedida a ele para que o procedimento possa ser realizado.
21.3 GRUB2
O GNU GRUB2 derivado de GRUB, the Grand Unified Bootloader, que foi originalmente concebido e
implementado por Erich Stefan Boleyn.
Por padro, sempre que o comando update-grub executado, este arquivo refeito como somente
leitura. Isto porque a inteno que o arquivo no seja editado manualmente. O usurio tambm ver uma
infinidade de arquivos *. mod na pasta /boot/grub. Esses arquivos so de natureza modular do GRUB 2 e so
carregados pelo mesmo durante a inicializao.
/etc/grub.d/ Este novo diretrio contm os scripts do GRUB. Esses scripts so blocos de construo a
partir do qual o arquivo grub.cfg construdo. Arquivos com numeral no incio so executados primeiro
comeando pelo menor, exemplo: o 10_linux executado antes do 20_mentest, que executado antes do
40_custom. Entradas personalizadas podem se criadas no arquivo 40_custom ou num outro recm-criado.
/etc/default/grub Este arquivo contm as configuraes do menu do GRUB que so lidos pelos scripts
do GRUB e escritos em grub.cfg. a famosa parte de personalizao do GRUB.
A instalao de alguns pacotes pode ser feita tambm atravs de seu cdigo-fonte disponibilizado em
alguma mdia de download. Este cdigo-fonte geralmente vem compactado no formato .tar.gz (ou .tgz, que d
no mesmo) ou em formato .tar.bz2 e modo mais open-source possvel de instalao de pacote, visto que o
cdigo-fonte a prpria linguagem utilizada para a construo dos programas que integram o pacote a ser
instalado.
Compilao
O computador trabalha com interpretao de linguagem binria (zeros e uns) mas os programas
so construdos em linguagens mais compreensveis para seres humanos: as linguagens de programao (C, C#,
C++, Java, Shell Script, etc). Por este motivo que, depois antes de ser instalado, um programa tem que ser
compilado para linguagem binria, para que ele possa ser interpretado pelo computador. Quando este pacote
vem em formato .deb ou .rpm, ele j vem pr-compilado, s cabendo aos gerenciadores de pacote instal-lo
(ou seja: copi-lo para os diretrios que so destinos de instalao).
Para que um pacote possa ser comipilado, necessrio um compilador de cdigo fonte, portanto, deve
ser a primeira atitude a ser tomada pelo administrador instalar todos os softwares necessrios para este
procedimento:
Todos os outros passos tm que ser executados de dentro do diretrio do cdigo-fonte, dentro dele
estar o arquivo Makefile assim que ele for criado por um script quase que genrico para todas as compilaes
de pacotes, o configure, que tambm fica dentro do diretrio do cdigo-fonte:
# ./configure
O arquivo Makefile possui alguns campos que devem ser observados primordialmente:
prefix : o local para onde vo ser copiados os arquivos todos os arquivos de instalao. A maioria dos
pacotes tgz utilizam /usr/local mas este diretrio pode ser outro, se o administrador modificar este campo ou
executar o script configura coma s opes:
# ./configure --prefix=<diretrio>
bindir : indica qual ser o diretrio de arquivos binrios comum a todos os usurios.
# make
# make install
# ldconfig
Este comando aplica as modificaes feitas em todos os arquivos de configurao de paths. Ele grava
estas mudanas em /etc/ld.so.cache, que o aquivo que armazena estas informaes de busca.
# ldd <programa>
Lista de quais bibliotecas compartilhadas pelo sistema um programa depende, geralmente estas
bibliotecas estaro em /lib, pois este o diretrio de bibliotecas do sistema.
23 SHELL SCRIPT
23.1 - Aliases
Para executar o alias, basta digitar o nome dele como um comando, que pode, sem problemas ter
argumentos tambm:
# <nome do alias>
Exemplos:
Criando e executando o alias backup para fazer backup de todo o diretrio /var/log para um aquivo
chamado /backups/backup-var.tar.gz:
# backup
Criando um alias para tornar padro o modo interativo do comando rm quando ele for digitado:
# alias rm=rm i
Neste caso, quando o comando for executado com qualquer que seja a opo, ser perguntado ao
usurio se ele quer mesmo excluir o objeto.
23.2 - Funes
Ou
# <nome> () { comandos; };
preciso tomar muito cuidado com os espaos entre as chaves e os outros caracteres, pois se esta
sintaxe no for mantida risca, a funo no funcionar.
Exemplos:
Criando e executando uma funo para atualizar a base de dados do APT, instalar o pacote squid e
depos limpar o cache:
# instala_squid
# unset <funo>
# declare f
O Shell do sistema trabalha o tempo inteiro lendo e gravando variveis que vo ajud-lo a interpretar
melhor os comandos e as configuraes existentes. Um exemplo sismples a varivel HOME do usurio, que
lida pela linha de comando cd ~ para que seja possvel entender que ~ o homedir do usurio em sesso, a
cada vez que um usurio faz logon criada esta varivel com o caminho do diretrio pessoal dele
(independente de qual seja este usurio).Existem dois tipos de variveis no Linux:
Variveis Globais
So as variveis que no dependem de sesso de usurio para existirem. Estas variveis podem ser
consultadas atravs do comando set.
Exemplos:
Variveis de ambiente
So aquelas que dependem do usurio para serem criadas, pois, dependendo de quem seja o usurio,
a varivel no ser a mesma, como as variveis abaixo:
PATH : indica o caminho de busca dos comandos que so digitados pelo usurio. A varivel PATH do
usurio root contm os diretrios sbin, que a mesma varivel para um usurio comum no tem, por padro,
pois os programas contidos em dietrios sbin so de uso exclusivo de root.
A lista de variveis de ambiente pode ser obtida com o comando env. No exemplo abaixo, este
comando utilizado em conjunto com o grep para obter o valor da varivel PATH do usurio root:
Dependendo do motivo do script, o usurio vai precisar que a varivel que ele esteja usando no sirva
apenas para o seu prprio programa, mas seja tambm uma varivel exportada para o sistema, ento, a
primeira providncia que deve ser tomada exportar esta varivel com o comando abaixo:
# export <varivel>=<valor>
Este processo tambm pode ser feito em duas etapas: a criao e depois a exportao da varivel. Para
isso, podemos usar as seguintes linhas de comando:
# <varivel>=<valor>
# export <varivel>
Toda vez que uma varivel for utilizada, o $ deve vir antes do nome dela, como no exemplo abaixo:
# export LOGS=/var/log
# cd $LOGS
# export PATH=$PATH:/programas
# echo $PATH
Para excluir uma varivel que foi criada, basta utilizar tambm o comando unset, como no exemplo
abaixo:
# unset LOGS
Um aquivo de script um arquivo comum de texto e pode ser executado com qualquer extenso
(.txt,.mp3,.ppt, etc..), at porque as extenses em Linux no tm funcionalidade nenhuma para execuo ou
leitura ou gravao em arquivos. Ainda que no utilizemos as extenses, para que o script de Shell possa ser
lido pelo edito vim com cores de sintaxe preciso que o arquivo de script tenha alguma extenso, mais
especificamente a extenso .sh.
Como os scripts de Shell sero utilizados em administrao de sistema Linux como caixa de
ferramentas, vamos j comear aplicando o seu uso para este fim, com o primeiro script abaixo, que ser um
programa para criar usurios:
# vim ~/cria_users.sh
Neste script, j se podem notar algumas caractersticas de Shell Script, como a insero de
comentrios, que pode ser feita com o #. Eles so primordiais para a boa documentao dos scripts criados,
pois podem ser usados para marcar a verso do script, as datas de criao e ltima modificao, o autor e a
descrio do script que est sendo criado, como foi feito no exemplo acima.
importante tambm que a informao de qual Shell vai interpretar os comandos esteja no cabealho
com a seguinte sintaxe: #!<caminho do Shell>. No exemplo acima foi utilizado o Shell BASH, cujo binrio est
em /bin/bash. Poderia ter sido utilizado outro Shell disponvel em /etc/shells, sem nenhum problema, mas
como o BASH o Shell padro para comandos no Linux, sempre melhor utiliz-lo como interpretador para os
comandos que vo ser usados.
# echo
Este comando responsvel por produzir tanto STDIN (sada padro de comando) como STDERR (sada
de erros de comando). Suas sintaxes so:
# echo <texto>
Exemplos:
# echo $SHELL
Ou
# echo $SHELL
# echo $SHELL
Outro detalhe importante sobre o comando echo so as opes de posicionamento do texto, utilizadas
em conjunto com o parmetro -e do mesmo:
Exemplos:
Linux
System
Administrator
# read
Exemplos:
Lendo o valor da varivel IP, que ser lanado como 172.16.0.1 pelo usurio, e exportando a varivel:
Lendo, exportando e exibindo o valor da varivel DSK_BKP com mensagem para o usurio:
# export DSK_BKP
#echo $DSK_BKP
lgico que o uso do read s vivel para um script, pois a nica forma de pedir para que o usurio
lance um valor para uma varivel.
Sub-Shells
Quando a sada desejada para STDOUT, STDIN ou STDERR o resultado de um comando, o ideal
utilizar um Sub-Shell, que uma forma de um comando utilizar a sada de um outro comando ou de uma
varivel receber um resultado de comando. Um Sub-Shell pode ser representado por $(comando) ou por
`comando`, como nos exemplos abaixo:
Execuo de um script
importante que um script tenha permisso de execuo para o usurio que o quer utilizar, pois desta
forma, ele pode ser executado se for informado o seu caminho completo ou se ele for copiado (ou se tiver um
link) para um diretrio do path do usurio s execut-lo como um comando qualquer, apenas digitando o seu
nome.
Outras formas de execuo:
# . <script>
# ./<script>
# source <script>
# bash <script>
Exemplos:
# cria_users
# sh ~/cria_users.sh
As estruturas funcionam no Shell Script como na maioria das linguagens de programao, s que com
sintaxes diferentes. sempre recomendvel para um programador Shell conhea pelo menos um pouco de
algoritmos (o mximo possvel), pois preciso antes de implementar uma estrutura dessas, saber muito bem
qual ser o intuito, uma anlise condicional, uma execuo com n passos, uma estrutura de repetio ou uma
anlise de caso para um menu, por exemplo.
O uso de cada uma dessas estruturas bem didtico e bem simples, mesmo para o administrador de
sistema Linux que nunca teve contato com lgica de programao.
Antes de conhecer cada uma das estruturas, importante conhecer o comando abaixo:
Test
Testes numricos:
-eq : igual a.
-lt : menor que.
-le : menor ou igual.
-gt : maior que.
-ge : maior ou igual.
-ne : diferente de.
Testes em strings:
= : igual a.
!= : diferente de.
-z : vazia.
-n : no-vazia.
Testes em aquivos:
-d : um diretrio.
-f : um arquivo.
-s : um aquivo e no vazio.
-ef : o mesmo arquivo.
-nt : arquivo mais novo.
-ot : arquivo mais velho.
Estrutura if (condicional)
Analisa uma condio verdadeira e, para ela, executa uma srie de comandos. Tambm possvel
adicionar uma condio para se teste for falso (else), mas esta no imprescindvel.
Sintaxe1:
if <condio verdadeira>
then <comandos>
fi
Sintaxe2:
if <condio verdadeira>
then <comandos>
else <comandos>
fi
Sintaxe3:
if <condio verdadeira>
then <comandos>
else if <condio verdadeira>
then <comandos>
fi
fi
No modelo de sintaxe acima, temos uma estrutura if composta, onde a anlise de condio falsa (else)
pode receber uma outra estrutura if. Outro detalhe que, como foram utilizadas 2 estruturas if, foram tambm
finalizadas as duas com fi.
Exemplo1:
No caso acima, o script acim testa a existncia do arquivo /etc/nologin. Caso este exista, a mensagem
O login no ser possvel agora!! ser exibida, caso contrrio, a mensagem Login liberado ser exibida.
Exemplo2:
No caso acima, mais uma condio foi analisada: a de existir /etc/nologin, mas ele ser um diretrio, e
no um arquivo, neste caso, a mensagem /etc/nologin um diretrio, no um arquivo ser exibida.
Para estruturas if compostas com muitas condies, utilizada a avaliao booleana (E e OU). Em um
exemplo abaixo, podemos testar a existncia de /etc/network/interfaces e se este arquivo est vazio ou no
antes de configurar a rede via script:
#!/bin/bash
configura () {
read -p Qual a sua sala? sala
read -p Qual a sua mquina? maq
echo -e
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.$sala.1.$maq
netmask 255.255.255.0
gateway 10.$sala.1.254 > /etc/network/interfaces ;;
}
###A avaliao booleana ocorre abaixo, onde somente se o arquivo de configurao das interfaces
de rede existir e no for vazio, os comandos sero executados:
Para avaliao booleana, podem ser utilizados em conjunto com o comando test:
|| : neste caso, basta que alguma das opes esteja correta para que os comados sejam executados.
Estrutura while:
Estrutura until:
until <teste falso>
do <comandos>
done
No caso de uma estrutura while, sero repetidos comandos enquanto aquele teste for verdadeiro,
enquanto que na estrutura until justamente o contrrio: apenas quando o teste falso for satisfeito a repetio
dos comandos vai parar de ser realizada.
Exemplos:
No caso acima, foi criado um loop de criao de diretrios onde, cada vez que este loop for
executado, ele vai verificar se a varivel qtd (quantidade de diretrios) ainda maior que cont (um contador
que foi criado para servir de referncia), caso seja, cont vai ter o seu valor acrescido de 1 e vai servir de rtulo
para a criao de um diretrio com o nome dir-$cont, quando cont for igual qtd, o loop acaba.
Neste script foram utilizados operadores matemticos. Os operadores para Shell Script so:
+ : soma
- : subtrao.
* : multiplicao.
/ : diviso.
** : exponenciao.
Para o caso de precisar fazer alguma operao aritmtica, ela deve ser deve ser realizada entre (( )) ou
$(( )), como foi mostrado no exemplos acima.
Neste caso acima, foi utilizada a estrutura de repetio until, que testou o valor da varivel qtd at que
ele fosse igual ao valor da varivel cont, que, na verdade, agiu como uma constante neste script, j que o seu
valor apenas serviu como parmetro de comparao para a varivel qtd, que permaneceu sendo subtrada de 1
a cada loop desses.
Estrutura for
A estrutura for atribui para uma varivel um valor de uma lista por vez. Para cada passo dessa lista
sero executados comandos que estiverem abaixo de do. Esta uma ferramenta importantssima para
programas que precisam executar passos em sequncia.
Sintaxe:
Exemplo:
No programa acima, para cada diretrio da lista extrada do arquivo /etc/passwd foi criado um arquivo
de backup. Supondo que haja 20 usurios nesta lista, os comandos sero executados 20 vezes, portanto
teremos 20 arquivos de backup, um para cada homedir de usurio, pois a cada passo desses, a varivel home
receber um desses diretrios como valor.
O uso de for em scripts til tambm para criao de diretrios em demanda, utilizando o comando
seq.
# seq
Exemplos:
Exibir de 1 at 100:
# seq 100
Exibir de 10 at 100:
# seq 10 100
# seq 10 5 100
# vim ~/criadir_for.sh
Toda vez que digitado um parmetro para qualquer comando, este parmetro guardado na varivel
1, por isso ela foi analisada sem ser solicitada pelo comando read.
No programa acima, a varivel num, utilizada pela estrutura for, recebe cada um desses nmeros que
foram resultado do comando seq de cada vez e, para cada um deles, cria um diretrio. Detalhe: tudo foi feito
com apenas 4 linhas de script.
# chmod +x ~/criadir_for.sh
# ln -s ~/criadir_for.sh /sbin/criadir_for
# criadir_for 10
Estrutura case
Analisa se a varivel se encontra em cada caso e, para cada um, executa os comandos escolhidos pelo
programador. Esta estrutura muito til na criao de programas com menu e tambm na criao de
comandos que possuem argumentos.
Sintaxe:
case <varivel> in
<opo1>) <comandos> ;;
<opo2>) <comandos> ;;
<opo3>) <comandos>
esac
Em tese, este estrutura uma ferramenta de substituio estrutura if em anlises muito grandes,
como uma que precisasse de 10 condies, com o if este cdigo ficaria enorme e, em qualquer linguagem de
programao, primordial que o programador prime pela boa organizao de seu scripts, estruturas cada vez
menores mas que tenham funcionalidade completa.
Existe a necessidade de o programador providenciar que o script dele esteja bem documentado (com
comentrios e, se necessrio, manuais), bem indentado e com as verses bem atualizadas, levando em
considerao a freqncia com que elas so atualizadas para decidir se ser uma verso com 2,3 ou at 4
dgitos.
Voltando estrutura, cada opo do case deve ser separada da outra com ;; e o final da mesma
marcado pelo esac.
O tratamento de erros em uma estrutura case feito por * em uma das opes significando nenhuma
das alternativas acima.
Vamos ver um exemplo de case usado para analisar um menu de opes em um programa para
gerenciamento de pacotes:
A funo menu, no caso deste script responde pelo menu e pela estrutura case inteira e, antes de ela
ser executada, o sinal 2(sinal INT) foi capturado com o comando trap. Este comando insensibiliza uma linha de
comandos a sinais em especfico, neste caso a funo no ter como ser interrompida com CTRL+C.
Quanto s opes, o | quer dizer ou, para o caso de o nmero ser digitado por extenso.
O uso do shift
Quando o usurio digita vrios argumentos de um comando aps o mesmo, a mesma varivel 1 tem
que receber vrias opes, uma de cada vez, para que as opes do comando sejam processadas corretamente.
Pois ento, o comando shift faz a funo de fazer com que um valor atribudo varivel seja processado aps o
anterior j ter sido, fazendo com que a varivel sempre receba valores em sequncia.
A execuo deste programa vai acarretar no backup de todos os diretrios dos usurios que forem
digitados como argumentos do comando bkpusr (nome do porgrama), como no exemplo do backup dos
diretrios pessoais dos usurios user1, operador e dba:
24 REDES EM LINUX
Ao longo dos anos, por conta de sua estabilidade, segurana, flexibilidade, escalabilidade, e outras
caractersticas, o Kernel Linux esteve assumindo o posto de excelente servidor de rede em muitas aplicaes,
como servios de LDAP, servidor de arquivos, firewall, DHCP, proxy, servidor de uma VPN, etc. Por causa dessa
vocao que o Linux tem para este mercado que o seu administrador deve ter um profundo conhecimento de
tcnicas de configurao, planejamento e manuteno de uma rede.
O servidor de rede Linux deve ser capaz de se manter disponvel para que os clientes Linux e de outras
plataformas (Windows, Mac, Unix, BSD, etc) possam fazer uso dos recursos providos por ele. Para que a alta
disponibilidade acontea, preciso providenciar que o Hardware esteja condizente com o servio que ser
prestado, podemos citar como exemplo a diferena de espao de armazenamento em discos entre um servidor
de logs e um firewall que apenas vai servir como roteador e vai fazer filtro de pacotes que passarem dele para
outra rede, claro que o servidor de logs dever contar com um espao em disco maior. Outra diferena que
pode ser analisada a existente entre o Hardware requerido para um servidor de mquinas virtuais e o
requerido para um servidor de arquivos apenas, neste caso, a diferena maior fica por conta do tipo de CPU que
ter que ser adotado: o primeiro usa instruo de virtualizao e o segundo no tem obrigao de ter tal
tecnologia. igualmente importante, lgico, atentar para o Hardware de rede a ser utilizado, com o advento
de redes de at 1Gb/s de taxa de transferncia de dados, fica a cargo do administrador ento apenas escolher
os fabricantes e modelos adequados para a estrutura (switches, patch chords, patch pannels, routers, access
points, etc.).
Protocolos de rede so conjuntos de regras de funcionamento que regem as conexes que vo ser
estabelecidas. Cada protocolo de rede tem a definio de seu padro em um documento chamado de RFC.
TCP/IP
20 : Dados FTP
21 : Comandos e autenticao FTP
22 : SSH
23 : Telnet
25 : SMTP
53 : DNS
80 : HTTP(WWW)
110 : POP3
143 : IMAP
443 : HTTPS
465 : SMTPS
Endereo IP
Um endereo IP em IPV4 constitudo de 4 blocos de 8 bits no mximo cada um, sendo chamado cada
bloco de octeto, por causa disso. Em cada octeto desses, os bits so representados em nmeros decimais, pois
assim fica mais humanamente possvel de ser implementado. Os nmeros decimais disponveis para compor
esse modelo de endereamento de rede vo de 0 a 255 (estando disponveis para uso 256 nmeros, contando
com o 0, claro). Um exemplo de endereo IP de um host 10.0.0.1.
O endereo IP tambm pode ser utilizado por ume rede, definido com ele quantos hosts podero
integrar a mesma rede. Um exemplo de endereo IP de rede 172.16.0.0/16, onde o primeiro critrio de
conectividade plena entre hosts que faam parte desta rede ser cada host estar na mesma classe, que est
sempre definida pelo primeiro octeto, o segundo critrio ser a igualdade do segundo octeto entre os hosts: 16
o que est definido no endereo de rede e ele deve ser mantido porque o octeto onde ele est se encontra
com os 8 bits fechados para alterao.
As classes utilizadas para redes LAN e WAN so as A,B e C, pois a C utilizada para comunicao em
multicast, onde mltiplos endereos recebem a mesma mensagem do host que enviou (o chamado broadcast).
Exemplos de IPs:
125.0.2.25 um IP de classe A.
155.200.0.20 um IP de classe B.
219.1.5.2 um IP de classe C.
Um refinamento dessas 3 classes foi criado para que os IPs de seus hosts no se confundissem com IPs
de servidores externos da grande rede mundial de computadores, ficando assim constitudo o termo IP
privado para IPs de redes LAN. As classes de IP privado so:
A definio de quantos hosts uma rede pode suportar feita com a seguinte frmula:
32 - BITS DA REDE
Deste resultado acima iremos extrair a informao de quantos bits faltam para completar todos os
endereos dos octetos, o nmero 2 deve ser elevado a este nmero obtido e o resultado subtrado de 2 (que
so os endereos de rede e broadcast, que no podem ser utilizados). Em uma rede 192.168.0.0/24 teramos o
seguinte clculo:
Este protocolo encarregado de garantir a interpretao de um endereo fsico de rede (MAC address)
atravs de um endereo lgico (IP). Endereo MAC o endereo fsico que toda interface de rede possui, sendo
nico para todas elas espalhadas pelo mundo. Este endereo construdo com nmeros hexadecimais
(nmeros e letras) e representado por 6 blocos de 2 nmeros hexadecimais cada um, sendo os 3 primeiros,
geralmente, reservados especificao do fabricante da interface.
Exemplo:
00:0f:e0:42:27:0d
Este protocolo de extrema importncia para aplicaes de Firewall e servidores DHCP, que sero
explicados em captulos posteriores.
Os modos de configurao dos endereos IP para estas interfaces so diferentes para algumas
distribuies:
No Debian
# vim /etc/network/interfaces
Onde auto a flag que ativa a interface de rede assim que o servio networking iniciado (no boot,
por exemplo), a opo iface se refere interface de rede em questo, inet o tipo de endereo de rede a ser
utilizado: static para endereo IP definido manualmente e dhcp para IP dinmico (que depende de um servidor
DHCP ativo na rede), address o endereo IP, netmask a mscara de sub-rede, gateway neste arquivo o
gateway padro (um host pode ter apenas um default gateway). Vale lembrar que, para uma definio de IP
por dinmico (por DHCP), nenhum campo de endereo deve ser preenchido, j que o servidor ficar
encarregado da funo de fornecer o endereo.
No caso da figura apresentada, temos trs interfaces de rede: lo com seu endereo de loopback para o
localhost (127.0.0.1), eth0 com IP esttico e eth1 com IP dinmico. A interface lo no deve ser desabilitada em
hiptese alguma, pois ela poder servir para testes em Web Server, por exemplo.
Depois que toda alterao necessria feita nesse arquivo, o servio networking tem que ser
reiniciado para que as interfaces possam fazer uso da nova configurao:
No Red Hat
No caso desta distro, e das distribuies baseadas nela, existe, para cada interface de rede um arquivo
de configurao ser criado assim que o Kernel reconhecer a interface, que pode ser encontrado dentro do
diretrio /etc/sysconfig/network-scripts/. O nome de cada arquivo desse segue a sintaxe de ifcfg-<interface>,
como por exemplo o arquivo de uma interface de rede eth1 seria ifcfg-eth1. Vamos configurao:
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
Onde:
Em comum, os dois sistemas operacionais tm a configurao de servidor de nomes (DNS), ela pode
ser feita no arquivo /etc/resolv.conf, como no exemplo abaixo:
# vim /etc/resolv.conf
Neste caso acima, temos o sistema usando dois servidores DNS: 10.12.1.254 o primrio e 10.12.1.150
o secundrio (que s consultado caso o primeiro no responda). Este arquivo pode conter os seguintes
campos:
nameserver <IP>
o campo onde deve ser declarado o IP do servidor DNS que vai responder s consultas de nomes
deste host.
domain <NOME>
o nome de domnio local a ser usado pelo host. Se nada for definido, este nome fica
localhost.localdomain.
a lista de domnios, separados por espao, que podem tambm serem consultados na busca por
algum host. Quanto mais domnios forem escolhidos nesta opo, mais lenta vai ficar a busca por um nome na
rede.
# ifconfig
Sintaxe:
Opes:
Exemplos:
# ifconfig
# ifconfig -a
# ifconfig eth2
Repare que o comando ifconfig, sem mais argumentos, capaz de retornar o endereo MAC da
interface de rede.
Ou
# ifdown eth0
# ifconfig eth0 up
Ou
# ifup eth0
# ping
Sintaxe:
Opes:
Exemplos:
# nmap
Exemplo:
# nmap www.lpi.org
As portas que esto marcadas como OPEN esto receptivas conexes que possam ser feitas nela,
porm as que esto marcadas como FILTERED tm o acesso filtrado por algum firewall do servidor.
# lsof
Exibe a lista de arquivos abertos no sistema, inclusive os utilizados por servios de rede.
# arp
Opes:
-v : modo verbose.
-n : ao invs de exibir nomes, exibe nmeros IP.
-i : especifica a interface.
Exemplos:
Listando a tabela ARP de conexes ocorridas na interface de rede eth2 em modo numrico:
# hostname
Exibe ou modifica temporariamente o hostname do sistema. A modificao definitiva s pode ser feita
em /etc/hostname.
# netstat
Exibe o status das conexes de rede estabelecidas. Conexes STREAM so de protocolo TCP e DGRAM
so conexes de protocolo UDP.
Opes:
Exemplo:
Em uma interface de rede pode haver mais de um endereo IP configurado e isso s possvel atravs
da criao de interfaces de rede virtuais.
Elas podem ser criadas com os nomes seguindo a seguinte sintaxe: <interface>:<nome> e vo
responder normalmente s solicitaes requeridas em uma rede. Quanto performance, preciso analisar qual
o tipo de servio ser prestado pelo host e se a interface fsica suportar toda a banda requerida pelas
interfaces virtuais adicionadas a ela. Este recurso muito utilizado por servidores que possuem um fluxo de
dados mediano e precisam separar redes para utilizar, cada uma delas, servios diferentes. Exemplo: um
servidor Web que tem o host tux.linux respondendo na rede 192.168.0.0/24 e um servidor de arquivos que
disponibilizado para a rede 10.0.0.0/24, todos os dois no mesmo servidor fsico e na mesma interface fsica.
A definio de uma interface de rede virtual pode ser feita temporariamente atravs do comando
ifconfig ou pode tambm ser feita de forma permanente, dentro do arquivo /etc/network/interfaces, no
Debian. Vamos ver no exemplo abaixo a criao de uma interface de rede chamada eth2:virtual:
Em outro exemplo, podemos ver a configurao definitiva de uma interface de rede virtual com o
mesmo endereo:
# vim /etc/network/interfaces
24.5 - Rotas
Quando uma solicitao feita por qualquer protocolo e ela no pode ser atendida na mesma rede
preciso que a mesma seja encaminhada para um roteador, se o roteador foi encontrado e se ele for o caminho
correto para o destino, a solicitao ter sucesso, se no for, o protocolo ICMP se encarregar de dar a
mensagem de que no h rota para o host. O maior exemplo de uso de roteadores a Internet, pois antes de
chegar a um site especfico, o pacote passa por vrios roteadores, que no se responsabilizam por processar o
pacote e sim encaminh-lo para o destino que possa process-lo ou repass-lo para outro roteador.
Rota padro: o roteador padro chamado de default gateway e ele fica como opo genrica de rota
para todas as interfaces de rede (virtuais ou no). sempre importante ressaltar que pode existir apenas um
default gateway em um servidor, pois o mesmo responde ao endereo de rede 0.0.0.0/0.0.0.0, ou seja:
qualquer rede com qualquer mscara de sub-rede.
Rota para host: uma rota para um host ela definida apenas para um IP, onde apenas requisies
daquele host iro ser roteadas.
Rota para rede: o tipo de roteamento onde uma rede inteira atendida.
# route
Exemplo:
# route -nv
No caso acima, podemos concluir que o nico roteador existente o 189.32.128.1, que tambm o
default gateway, pois est respondendo ao destino 0.0.0.0 com mscara 0.0.0.0, ou seja: responde como
roteador de todos os outros IPs.
U : roteador em uso.
! : a rota no foi aceita.
G : um gateway est sendo usado.
H : uma rota para um host.
Exemplos:
Criando rota esttica para o host 172.16.0.20 sair pelo roteador 172.16.0.1:
# traceroute
Verifica por quantos roteadores passa um pacote antes de chegar ao host destino. Este comando
tambm utiliza o protocolo ICMP para este tipo de teste. Por padro o traceroute vem configurado para at 30
trinta saltos (HOPs).
Exemplo:
# traceroute www.mcury.com.br
25.1 - DHCP
O Dinamic Host Configuration Protocol, substituto do protocolo BOOTP, o protocolo que prov
configuraes automticas de endereo de rede para os clientes que solicitarem, esta solicitao feita pelo
cliente em broadcast por protocolo UDP e, sendo assim, o primeiro servidor que responder analisar se o
cliente se encaixa nos critrios que o prprio servidor estabeleceu. Um servidor DHCP pode tambm fornecer,
alm do endereo IP e da mscara de sub-rede, o nome de domnio, o gateway e os endereos IP dos servidores
DNS a serem utilizados pelo cliente. Estas concesses de endereo tm um tempo de durao determinado
pelo servidor e, aps este tempo ter se esgotado, ser feita uma nova negociao de endereo entre o MAC
address da interface de rede do cliente e o servidor, podendo assim, o cliente receber um endereo totalmente
diferente do anterior.
sempre importante lembrar que requisies DHCP sendo feitas em uma rede com muitos hosts
podem causar a queda de rendimento significativa, pois as requisies sempre so enviadas em broadcast pelos
clientes. Para o caso de redes de grande porte que precisem usar DHCP, recomendvel utilizar um lease time
(tempo de concesso) maior, para que os intervalos de solicitao de IP possam ser cada vez maiores.
# dhclient
Este comando faz a requisio de endereo para um servidor DHCP qualquer em uma rede.
Sintaxe:
# dhclient <interface>
Exemplo:
# dhclient eth0
# vim /etc/network/interfaces
Neste caso acima, a interface de rede eth0 est configurada para automaticamente buscar em
broadcast suas configuraes de endereo de rede.
25.2 - FTP
O File Transfer Protocol, como o prprio nome j diz, um protocolo desenvolvido para transferir
arquivos pela rede. Ele utiliza duas portas TCP para tal conexo: 20 e 21. Na maioria dos casos dos servidores
FTP espalhados pela Internet, o acesso ao servidor FTP autenticado, porm, existem os casos em que este
login feito de forma annima. O acesso do cliente ao servidor FTP feito atravs do comando ftp:
Sintaxe:
# ftp <host>
Logo aps o acesso, o usurio ter sua disposio o prompt do ftp para digitar os comandos (muito
destes comandos so comandos de shell sh). Vamos ver alguns comandos de FTP:
Exemplos:
Fazendo upload de todos os arquivos do diretrio local para o diretrio atual no servidor:
ftp> mput *
25.3 - DNS
O Domain Name System o servio TCP/UDP que resolve nomes de hosts para os clientes. pela
atuao deste servio que sites na Web podem ser acessados pelo nome, e no apenas por IP. Geralmente,
estes nomes de domnio so separados por pontos indicar subdivises de um domnio ou parametrizar tipos de
segmentos ou localidades, exemplos:
O servidor DNS mais utilizado pelo Linux o BIND (Berkeley Internet Named), mas o que vamos
estudar neste material o uso de um servidor DNS pelo cliente.
Nem todo nome consultado pelo cliente vir de um servio DNS. O cliente pode utilizar a consulta aos
arquivos /etc/hosts e /etc/networks. O primeiro define um nome para um IP especfico e o segundo define um
nome para uma rede especfica. importante lembrar que essas configuraes so feitas por parte do cliente,
ou seja, no valero para a rede toda.
No caso acima, o localhost (127.0.0.1) tambm responder pelo nome de MCURY e 10.12.1.1
responder pelos nomes de SERVER1, DHCP, DNS ou SMB. Isso muito til para o usurio que vai
frequentemente acessar o mesmo servidor, o cliente poder simplesmente substituir o IP do servidor em
qualquer solicitao pelo alias criado, neste caso, o sistema no vai procurar por um DNS para resolver nomes,
pois dentro do arquivo /etc/nsswitch.conf, a configurao da seo host (de busca por nomes na rede) est
indicando a prioridade de arquivos locais para esta tarefa e, s em caso de no achar o nome em um dos
arquivos, procurar um DNS configurado em /etc/resolv.conf:
No exemplo abaixo, vamos executar um teste de conexo com o comando ping utilizando um dos
aliases criados no arquivo /etc/hosts:
# ping DHCP
O arquivo /etc/nsswitch.conf no serve apenas para determinar a ordem de busca de nomes pela rede,
ele tambm busca bibliotecas de consulta de usurios, senhas e grupos do sistema, esta configurao pode
tanto buscar um caminho local como uma autenticao por algum protocolo de rede de que esteja em outro
servidor, como o caso de uma autenticao feita por um protocolo LDAP.
Com o arquivo /etc/networks acontece o mesmo que com o arquivo /etc/hosts, ele tambm pode
configurar nomes para redes.
# host
Exemplo:
# host www.lpi.org
# dig
Exemplo:
# dig www.lpi.org
# nslookup
Exemplo:
# nslookup www.mcury.com.br
# whois
Exemplo:
# whois www.mcury.com.br
26 - SERVIDOR DE LOGS
/var/log/messages : o principal log do sistema, ele registra quase todos os eventos, no sendo capaz
de registrar eventos de autenticao, mudanas de senha e eventos de e-mail.
/var/log/auth.log : o nico log do sistema que registra detalhes sobre trocas de senha e
autenticao.
/var/log/dmesg : o log que contm as mensagens produzidas pelo Kernel durante o boot.
# tail -f /var/log/auth.log
O daemon nativo do Linux que monitora as mensagens do Kernel o klogd, que anvia as mensagens
para o servidor Syslog, cujo daemon o sysklogd.
Alm de definir qual tipo de evento o log ir registrar, preciso informar qual nvel de informao ser
encontrada neste log, para isso existe a prioridade de um log. As prioridades existentes (em ordem) so:
Fora da lista da ordem de prioridades, none a prioridade que instrui o evento a no criar log no
arquivo.
O syslog pode tambm ser configurado para enviar os logs para outro servidor ao invs de mant-los
localmente, basta que, no lugar de um arquivo de log esteja a seguinte sintaxe: @<host>.
O programa que garante a rotatividade dos logs do sistema o logrotate, cujo diretrio que contm os
arquivos de configurao dos servios a serem cobertos /etc/logrotate.d/. Vamos analisar o arquivos de
configurao de rotatividade do log do squid:
# vim /etc/logrotate.d/squid
Onde:
compress : significa que o log vai ser compactado e um novo vazio ser criado a cada unidade de
tempo dessa.
delaycompress : No compacta o arquivo de log aps o rotacionamento, posterga para o prximo ciclo
e deve ser utilizado em conjunto com o compress. Esse tipo de ao tomada porque alguns processos ainda
escrevem neste arquivo e s depois o liberam.
missingok : caso o log no exista, nenhum aviso ser gerado para o administrador, o oposto de
nomissingok.
nocreate : o oposto de create. No cria um novo arquivo de log, mas sobrescreve o j existente.
# logger
Sintaxe:
Opes:
Exemplo:
Enviar o contedo do arquivo /proc/swaps para os arquivos de log com prioridade warn:
Um dos logs que atende na prioridade warn foi verificado em suas ltimas 2 linhas para verificar se o
comando funcionou.
27 SUPERSERVIDORES
Os Superdaemons, como so tecnicamente chamados, existem para que vrios servios possam ser
gerenciados atravs de apenas um daemon, porm, nem todo servio pode ser includo em um Superdaemon.
27.1 - Inetd
O Inetd o Superservidor nativo do Linux. Ele proporciona a vantagem de o servio apenas ser alocado
em memria quando for solicitado. Sua configurao feita dentro do arquivo /etc/inetd.conf. A sintaxe do
arquivo em questo :
<nome do servio> <socket utilizado> <protocolo> <opo> <usurio> <localizao dos daemons necessrios>
No exemplo acima, o servio ftp est configurado para ser gerenciado pelo Inetd usando o socket
stream, liberando o socket logo depois de ser carregado (opo nowait), usando o usurio root para gerenci-
lo, e especificando o caminho para os binrios relativos ao daemon. Todos os nomes de servios que podem ser
utilizados esto em /etc/services, portanto, antes de comear a configurar um servio no Inetd, pesquise o
nome dele dentro de /etc/services. Note tambm que o sevio de FTP est usando outro daemon alm do
daemon dele: o tcpd, este um daemon do TCP Wrappers que realiza filtros de entrada de pacote, formando
assim uma camada de segurana, ainda que muito limitada, para o sistema, este assunto ser estudado mais
frente.
27.2 - Xinetd
Este a evoluo do Inetd, possui mais recursos de controle que o anterior e as sintaxes de seus
arquivos de configurao so totalmente diferentes. Seu arquivo de configurao o /etc/xinetd.conf, mas ele
permite que arquivos de configurao independentes dentro de /etc/xinetd.d gerenciem os servios. Vamos ver
um exemplo de configurao do arquivo /etc/xintetd.conf:
Agora vamos ver um arquivo de configurao do Superdaemon xinetd para o servio ssh:
disable : configura se o servio vai ser desabilitado no ato da inicializao do Superdaemon. o oposto
de enable, ou seja: enable = yes equivale a disable = no.
id : um nome de identificao do servio. muito til para casos em que o mesmo servio possui
duas configuraes: uma para TCP e outra para UDP, como no caso acima.
wait : o oposto de nowait, seguindo o mesmo conceito deste campo do servidor Inetd. nowait=yes
equivale a wait=no.
28 TCP WRAPPERS
O TCP Wrappers existe para configurar filtros de acesso de entrada de pacotes que usam o protocolo
TCP e fazer com que essa configurao possa ser o mais simples possvel, tanto que a configurao do daemon
tcpd pode feita com a configurao de apenas 2 arquivos:
/etc/hosts.deny
Este o arquivo de configurao de negao de acesso entrada de pacotes dos sevios e hosts
especificados. Sua sintaxe de configurao funciona da seguinte forma:
<servio>: <hosts>
Onde a configurao desses campos com as opes ALL: PARANOID far com que o sevidor no aceite
nenhum tipo de conexo TCP onde o nome do servidor no confira com o seu IP e ALL: ALL far o bloqueio total
de todos os servios para todos os hosts. Para adicionar alguma execeo de acesso para o campo de servios
basta escolher a regra EXCEPT, como no exemplo abaixo:
Neste caso acima, todos os sevios TCP, exceto o sshd (servidor ssh), sero negados quando vindos do
host 10.12.1.150.
/etc/hosts.allow
Este arquivo s tem razo de estar com alguma configurao vlida caso exista alguma negao feita
em /etc/hosts.deny, pois o /etc/hots.allow a lista de exceo de bloqueios de pacotes TCP de entrada no
servidor. Vejamos um exemplo do arquivo /etc/hosts.allow que est atuando como lista de exceo para uma
regra ALL: ALL criada em um arquivo /etc/hosts.deny:
Neste caso acima, o sevio sshd est sendo liberado apenas para os hosts que fizerem parte da range
de IPs que vai de 10.11.0.1 at 10.11.1.254 ou 10.12.0.1 at 10.12.1.254, neste caso o ponto significa
qualquer coisa aps.
29 SSH
O Secure Shell, como o prprio nome j diz, o shell que proporciona um nvel alto de segurana para
clientes e servidores em acessos remotos. Ele usa para conexo um terminal /dev/pts/<num>, mesmo tipo de
terminal utilizado para emuladores de terminal de interface grfica, como o xterm. Algumas partes deste
servio, que trabalha com os protocolos TCP e UDP, sero estudadas neste material:
O trecho escolhido do arquivo de configurao do servidor SSH possui uma linha importante de ser
analisada: PermitRootLogin, pois uma falha de segurana muito grande ela estar da forma que se encontra
acima, desta forma, o usurio root tem o se acesso habilitado ao servidor SSH, quando o ideal seria que o sudo
fosse utilizado para permitir, se fosse o caso, tarefas adminstrativas selecionadas especficas para cada usurio
e o login do usuro root fosse proibido pelo servidor.
Em todo primeiro login remoto via SSH que o cliente faz, um diretrio .ssh criado e, dentro dele,
criado um arquivo que funciona com fingerprint dos servidores acessados, fingerprint esse que est
criptografado dentro do arquivo ~/.ssh/known_hosts, de forma que a cada primeira conexo feita em outro
servidor, uma pergunta ser feita sobre a aceitao ou no desta conexo.
Veja que o fingerprint do sevidor j aparece em haxadecimal, porm ele ser criptografado com
algortmo RSA e enviado para dentro do arquivo known_hosts, coforme exemplo abaixo:
# ssh
Sintaxe:
# ssh <host>
Exemplo:
# ssh operador@10.4.1.1
Para visualizar as conexes SSH de um servidor os comandos w e who podem ser utilizados:
No exemplo acima, o host conhecido pelo nome mcury.local fez login no servidor como root e usou o
terminal /dev/pts/1 para tal, veja que usurios locais utilizam este mesmo terminal para emuladores de
terminal.
# ssh-keygen
Gera chaves com criptografia RSA ou DSA para autenticao de usurios em um servidor. Com a
execuo deste comando, so criados 2 arquivos: id_<tipo> e id_<tipo>.pub, o primeiro de chave privada e o
segundo de chave pblica.
Exemplos:
# ssh-keygen -t rsa
# ssh-keygen -t dsa
Para fazer uso da chave pblica, preciso que ela seja copiada para dentro do arquivo
/.ssh/authorized_keys do usurio que se quer utilizar a chave, no servidor. Para tal, podemos utilizar a seguinte
linha de comando:
Exemplo:
Copiando a chave pblica para o servidor 10.5.1.150 para o login do usurio operador:
# scp
Sintaxe:
Opes:
-r : modo recursivo.
Exemplos:
Copiando o arquivo backup.tgz para o diretrio /tmp do host 10.0.2.2 usando para este cpia o login
do usurio user1:
Copiando o diretrio /dados do servidor 10.0.2.2 para o diretrio local /root usando o login do usurio
user1:
O Network Time Protocol o sevio responsvel por manter a data e a hora do sevidor sincronizadas
com servidores mundiais. A lista de servidores NTP est em www.pool.ntp.org.
Na seo server definido qual vai ser o servidor NTP a ser utilizado para a sincronizao de data e
hora, neste caso o servidor ntp.ubuntu.com, mas o administrador pode recorrer a sevidores NTP de qualquer
parte do mundo. A seo statsdir configura um diretrio onde sero armazenados os arquivos de estatsticas de
uso do servidor (logs), mais abaixo, statistics est configurando os tipos de estatsticas que sero armazenadas
nos logs. A seo driftfile aponta para o arquivo que vai servir como indicador de oscilao do relgio local: o
arquivo /var/lib/ntp/ntp.drift.
Alm do ntpd, deamon do NTP, o cliente ntpdate pode ser utilizado para sincronismo de data e hora
com servidores NTP, a nica providncia que deve ser tomada antes para o servio do NTP, pois no podem
haver dois servios de sincronizao de data e hora funcionando ao mesmo tempo no servidor.
# ntpdate ntp.ubuntu.com
Importante tambm para a manuteno de data e hora corretas no servidor configurar corretamente
o timezone do mesmo, para que ele possa ter e hora conforme o seu fuso horrio, pois um servidor em Buenos
Aires nunca pode ter a mesma hora que um na frica do Sul. O servidor NTP sempre vai enviar para os clientes
a informao do UTC (Tempo Univeral Coordenado), este informao ser cruzada com o timezone do cliente e
a este saber quantas horas a mais ou a menos sero necessrias para se chagar hora relativa ao seu fuso
horrio. A modificao do timezone pode ser feita no arquivo /etc/timezone, veja um exemplo de um:
# tzselect
# dpkg-reconfigure tzdata
# hwclock
Opes:
--hctosys : toma como referncia a data e hora do BIOS para acertar a data e hora do sistema.
--systohc : toma como referncia a data e hora do sistema para acertar a data e hora do BIOS.
31 SERVIDOR X
As distribuies open-source tm cada vez mais desenvolvido sistemas operacionais para usurio final
(desktops) de alto nvel por todo o mundo, mas, muito antes de isso tudo acontecer, j existiam esforos para
desenvolver plataformas grficas que fossem beneficiar tanto clientes como servidores, visto que aplicaes
grficas para servidores so cada vez mais comuns hoje em dia, um grande exemplo o Wireshark (antigo
Ethereal), que uma ferramenta muito til como analisador de rede para administradores.
A plataforma grfica disponvel para distribuies Linux o Servidor X (ou Xorg), ela suporta as
aplicaes grficas disponveis para Linux, como gerenciadores de desktop, gerenciadores de logins, jogos,
aplicaes de escritrio e editores de imagens.
Assim que o servidor X instalado, importante verificar e modificar (se este for o caso) o seu arquivo
de configurao, que o /etc/X11/XF86Config ou, em algumas distribuies (como o Debian),
/etc/X11/xorg.conf. Este arquivo dividido em sees e sub-sees, vejamos algumas sees dele:
InputDevice
Esta seo responsvel pela configurao de opes de teclado, como layout, idioma e driver e
tambm de configurao de mouse.
Files
Configura o local onde esto armazenadas as fontes do servidor X. O local padro /usr/share/fonts.
Device
Configura opes da placa de vdeo, como driver e o nome do fabricante tambm.
Monitor
Screen
Esta seo se refere configurao da visualizao da interface grfica. , por exemplo, nesta seo
que as resolues de vdeo podem ser configuradas, como no exemplo abaixo:
uma prtica muito comum, para que o usurio possa fazer uso do melhor de seu Hardware nas
aplicaes grficas, a gerao de um novo arquivo xorg.conf, isto pode ser providenciado pela linha de
comando X -configure -a, este comando vai gerar um arquivo ~/xorg.conf.new, que vai conter as configuraes
atualizadas de Hardware e deve ser copiado para o diretrio /etc/X11, depois de ser feito um backup do
arquivo original, claro.
A varivel DISPLAY
Com certeza, parte integrante de alta importncia do servidor X a definio do valor da varivel
DISPLAY. Esta varivel responsvel por direcionar aplicaes grficas para o display correto e muito comum
de ela ser personalizada em caso de vrios monitores serem utilizados, neste caso, a varivel display pode
definir para qual deles a aplicao grfica ser enviada. Em caso de programas de acesso remoto, como VNC,
por exemplo, utilizarem o acesso assistido interface grfica, preciso que o cliente determine qual display ele
vai acessar. Vamos sintaxe dessa varivel:
DISPLAY=<host>:<display>.<tela>
Onde, para enviar o wireshark para o primeiro screen do segundo monitor do host MCURY, deve-se
utilizar a seguinte linha de comando:
O host padro o localhost e o uso de : obrigatrio nesta varivel, portanto, se o que o usurio quer
enviar o resultado das requisies grficas para o display e tela padro do mesmo host, basta atribuir
valor:0.0 varivel da seguinte forma:
# export DISPLAY=:0.0
O protocolo XDMCP
Este protocolo de X tem, entre outras carartersticas, o suporte a login remoto via interface grfica.
Para tal, preciso que o daemon SSHD esteja presente e que no arquivo de configurao do mesmo, o
redirecionamento para X11 esteja habilitado.
Assim que o Xorg instalado, para acessar uma sesso grfica preciso utilizar o seguinte comando:
# startx
Ao iniciar uma sesso grfica apenas com o xorg instalado, o usurio vai contar apenas com um
terminal para que ele possa, por ele, executar aplicaes grficas. Isso com certeza no atende as necessidades
de um usurio final, necessrio que o Xorg tambm possar contar com um gerenciador de desktop, pois este
gerenciador vai ser o responsvel pelos menus, janelas, temas e efeitos de interface grfica. Os sistemas Linux
contam com uma grande variedade de gerenciadores de desktop disponveis para a instalao, alguns exemplos
so:
GNOME
KDE
XFCE4
LXDE
BLACKBOX
FLUXBOX
OPENBOX
AFTERSTEP
Os gerenciadores que, com certeza, ficaram com a maior fatia de percentual de adeptos so GNOME e
KDE, realmente os dois possuem estruturas de gerenciamento de diretrios e arquivos muito atrativos para o
usurio final. Os dois tambm contam com vrios aplicativos que facilitam a vida do usurio, como exemplo o
programa K3B, que grava e cria imagens de DVDs/CDs. Outro grande atrativo a quantidade de efeitos grficos
providos pelo plugin Compiz Fusion. Um grande ponto alto dos gerenciadores de desktop Linux a facilidade de
manuseio de vrias reas de trabalho ao mesmo tempo, este recurso pode ser utilizado com grande frequncia
por profissionais da rea de editorao grfica, pois invariavelmente eles precisam abrir muitas aplicaes
grficas ao mesmo tempo. Com os efeitos do Compiz, possvel tornar esta interao entre desktops muito
mais atrativa aos olhos dos usurios.
possvel determinar qual vai ser o gerenciador de desktop padro do usurio criando o arquivo
~/.xinitrc ou ~/.xsession, que dever ter como contedo a expresso exec <sesso do desktop manager>.
Desta forma, se o usurio user1 quiser utilizar o gnome, ele deve configurar este arquivo (com qualquer um dos
nomes acima) da seguinte forma:
# vim ~/.xsession
No caso acima, o gerenciador de desktops GNOME ser iniciado cada vez que o usurio executar o
script startx ou fizer logon no gerenciador de login escolhido. Como a maioria das distribuies conta com a
possibilidade de instalao de vrios gerenciadores de desktop, este recurso pode ser utilizado para que cada
usurio trabalhe com o gerenciador que quiser.
At agora percebemos que Servidor X e gerenciador de desktop so duas coisas totalmente diferentes,
a pesar de o segundo depender da existncia do primeiro para funcionar, mas em caso de o sistema precisar
iniciar j em uma interface grfica direto sem a necessidade de executar o programa startx, como pode ser
feito? a que entram os gerenciadores de login, eles atuam como servios do processo INIT e, portanto,
podem ser ativados logo aps o boot do sistema. Um gerenciador de login autentica o usurio para que possa
ser iniciada uma sesso por ele. expressamente no recomendvel o login com usurio root na interface
grfica e, por este motivo, a maioria dos gerenciadores de login vem com o login pelo root desabilitado.
Os gerenciadores de desktop mais importantes so GDM, KDM e XDM, eles tambm so free e
open-source. Para definir o gerenciador de login padro do sistema, basta incluir o caminho do binrio do
mesmo em /etc/X11/default-display-manager, como no exemplo abaixo:
A troca do gerenciador de login padro pode ocorrer manualmente pelo arquivo ou tambm pode ser
feita pela linha de comando abaixo:
Se o sistema tem algum gerenciador de login mas o administrador no quer que o sistema inicialize por
ele, s remover os links simblicos do GDM/KDM/XDM de dentro dos diretrios /etc/rc<runlevel>.d, o
mtodo mais fcil de se fazer isso seria:
Desta forma, o GDM fica ainda instalado, porm no carregado pelo processo INIT.
XDM
O XDM o gerenciador de login padro para distribuies Linux, ele vem com um conjunto
interessante de de arquivos de configurao que vo incrementar o uso do servidor X.
Xsession : define qual gerenciador de janelas vai ser ativado aps a autenticao pelo XDM, este script
s deve ser utilizado caso o servidor X conte com mais de um gerenciador de janelas e o administrador queira
definir um window manager padro para todos os usurios, caso contrrio, o arquivo .xsession deve ser criado
dentro do diretrio home do usurio contendo o seu gerenciador de janelas (o ~/.xinitrc ter o mesmo efeito .
Xaccess: define conexes recebidas de hosts ao servidor X.
Xservers : faz o controle e a associao de displays a hosts especficos. Para acessos via SSH, a opo -
nolisten tcp no deve ser removida, pois o SSH no usa o protocolo TCP para direcionar conexes ao servidor
X.
xdm-config : arquivo de configurao de arquivos e programas utilizados palo XDM para interao com
o usurio, como por exemplo, o arquivo de log de erro de login e o arquivo de pid do processo.
32 SERVIO DE IMPRESSO
O servidor padro para impresso em distribuies Linux ou Unix o CUPS (Common Unix Print
Server). Ele usa o servio IPP (Internet Print Protocol), na porta 631 TCP/UDP para conexes. O pacote de
instalao do CUPS o cupsys e os pacotes foomatic-* so importantes nesta composio, pois trazem alguns
programas que vo facilitar a administrao do servidor.
Os drivers para impressoras no CUPS tm extenso. PPD e praticamente todos os fabricantes j contam
com drivers de suas impressoras tambm na verso Linux (o servidorj vem com muitos deles em modo nativo).
possvel tambm que usurio do Windows utilizem impressoras compartilhadas pelo CUPS, o que
torna o servidor multi-plataforma.
Vamos prtica:
Algumas opes ao lado podem ser utilizadas tambm, como compartilhamento de todas as
impressoras criadas pelo host, administrao remota, aceitar impresso pela rede, usar autenticao Kerberos,
etc. O arquivo de configurao do CUPS o /etc/cups/cupsd.conf.
No exemplo do arquivo acima, o nome da impressora IMPRESSORA_LINUX e ela pode ser encontrada
na URI ipp://10.12.1.1/LINUX_PRINTER, na linha 16, a expresso Shared Yes indica que ela est compartilhada
na rede, o que proporciona aos clientes Linux o mapeamento automtico da impressora, sem precisar de
interveno manual. Este arquivo proporciona ainda a limitao de impresso por pginas, por tamanho e por
tempo.
Exemplos:
# lp /etc/passwd -d IMPRESSORA_LINUX
Verificando a fila:
# lpstat
# cancel 1
33 LINGUAGEM SQL
Esta uma das linguagens de manipulao de bancos de dados mais populares do mundo e conta com
uma sintaxe simples para qualquer um programador que queira se aventurar. O banco de dados que vamos
utilizar o MYSQL-SERVER, mas o Debian tambm conta em seus repositrios com o PostgreeSQL, que tambm
um timo banco de dados. Vamos instalao do MySQL:
Para acessar o servidor MySQL, preciso utilizar o comando mysql, especificando qual usurio vai
acessar com o parmetro -u e pedindo senha com o parmetro -p (para sesses autenticadas):
# mysql -u root p
Aps este comando, um prompt de comandos do servidor MySQL vai ser disponibilizado para que o
usurio possa digitar os comandos:
mysql>
Toda linha de comando que for digitada neste prompt deve ser finalizada apenas quando o ; for
digitado ao fim do mesmo.
O SQL case insensitive, ou seja: no faz diferena alguma digitar os comandos em caixa alta ou baixa.
Vamos aos comandos:
SHOW DATABASES
USE <BANCO>
SHOW TABLES
DESCRIBE <TABELA>
Seleciona campos de uma tabela especfica onde os registros atendam condio imposta pelo
WHERE. O WHERE no ser necessrio se o caso for exibir todos os registros da tabela.
Apaga registros de uma tabela segundo uma condio imposta pelo WHERE. Se o programador for
excluir todos os registros, basta no especificar condio alguma.
Exemplos:
# mysql -u root -p
mysql> CREATE DATABASE LPI;
No caso acima, a tabela LPI101 tem como chave primria o campo id, que tambm de
preenchimento automtico e um nmero inteiro, ou seja: este campo no precisar ser preenchido. Quanto ao
campo nome, o tipo VARCHAR significa que ele um campo de, no mximo 255 caracteres.
Inserindo valores nos campos nome e NOTA da tabela LPI101 e selecionando de todos os campos
apenas o valor que for maior que 500:
mysql> INSERT INTO LPI101 (nome, NOTA) VALUES (Linus Torvalds, 800);
mysql> INSERT INTO LPI101 (nome, NOTA) VALUES (Goonie, 450);
mysql> SELECT * FROM LPI101 WHERE NOTA >= 500;
Acrescentar 50 pontos aos candidatos que tiverem nota menor que 500:
mysql> UPDATE LPI101 SET NOTA = NOTA+50 WHERE NOTA < 500;
mysql> SELECT * FROM LPI101;
Excluir registros da tabela LPI101 que tenham nota menor que 600:
importante que o administrador saiba que o diretrio onde ficam localizados os bancos de dados do
servidor MySQL-Server o /var/lib/mysql e importantssimo que haja polticas de backup e arranjos de discos
que possibilitem disponibilidade e flexibilidade aos bancos.
34 MTA
Um Mail Transfer Agent tem a incumbncia de enviar mensagens de correio eletrnico, bem como
garantir que elas cheguem ao destinatrio e, para tal tarefa, utiliza o protocolo SMTP (Simple Mail Transport
Protocol), cuja porta 25 e, por ter que garantir a entrega de mensagens, s trabalha com o protocolo TCP.
Caso uma mensagem no possa ser enviada por algum motivo, ela ser enviada para a fila de e-mails e, assim
que for resolvido o problema, ser re-enviada. Tambm h casos em que o SMTP utiliza a porta 465, isto
acontece por causa do incremento do SSL neste protocolo, para dar mais segurana conexo. Existem vrios
MTAs disponveis em ambiente open-source, mas alguns se destacam, como Exim4, Postfix, Sendmail e Qmail.
Com certeza, o mais utilizado dos 4 o Postfix, pela baixa complexidade dos arquivos de configurao e
constante evoluo com o passar do tempo.
Um servio de e-mail completo possui trs agentes: MTA, MDA e MUA e vamos tratar aqui tambm, de
forma introdutria, os outros 2 no mencionados:
Mail Delivery Agent o responsvel por receber os e-mails e os encaminhar aos diretrios corretos. Os
protocolos que trabalham para que esta funo seja possvel so POP3 e IMAP, nas portas 110 e 143,
respectivamente. O MDA tambm responsvel por autenticar o usurio, assim como o SMTP faz se for
solicitado. A destacar como servidores MDA, o Sendmail, o Dovecot e o Postfix.
Mail User Agent a parte cliente da histria toda, ou seja: a ferramenta utilizada para leitura e envio
de e-mails por parte dos usurios. Este componente de servio de e-mails pode ser um Web Mail ou um cliente
de e-mails como Thunderbird e Evolution, por exemplo.
Sendmail
Um dos mais antigos MTAs do mundo open-source, o Sendmail tem como arquivo de configurao o
/etc/mail/sendmail.cf, que um tanto quanto hostil a qualquer administrador que no tem o conhecimento do
mesmo. Com certeza um legado muito bom do Sendmail o arquivo /etc/aliases, que funciona como um
mapeamento de diversos endereos para um alias, podendo servir para a criao de um novo grupo de
distribuio de mensagens como tambm servir para que um usurio ao invs de receber mensagens, ele seja
apenas um alias para o usurio administrador.
Quando um novo alias criado, no h nenhuma necessidade de o daemon do MTA ser reiniciado ou seu
arquivo de configurao ser carregado novamente, basta que o comando newaliases seja executado.
*Obs: A linha de comando sendmail -bi tambm reinicia um banco de dados de aliases, assim como o
comando newalises.
Postfix
Um dos mais respeitados servidores de e-mail tambm o de mais fcil compreenso para o
administrador. Seu arquivo de configurao o /etc/postfix/main.cf.
myhostname : nome do host de do servidor, no caso do arquivo acima, ele o hostname do sevidor
mas na maioria dos casos, este campo recebe o nome de domnio designado pelo servidor DNS.
relayhost : este campo de extrema importncia pois ele configura quais hosts pode enviar e-mails
atravs dele, possibilitando assim o uso de clientes SMTP.
alias_database : configura qual o banco de dados de aliases, geralmente o postfix usa o /etc/aliases.
mynetworks : rea de atuao do servidor. Caso o localhost no seja um componente desta varivel, o
servidor no ser capaz de enviar e-mails para o localhost.
No ato da instalao do postfix o administrador vai se deparar com uma pergunta bem interessante:
importante que o smarthost esteja ativado, pois este tipo de host inteligente permite que o MTA no
precise de um DNS para servir como origem de e-mails, podendo ser o prprio hostname do servidor o nome do
host de origem para a mensagem.
O arquivo ~/.forward
Este arquivo, que dever estar dentro do diretrio pessoal do usurio, pode conter uma lista de
endereos para onde todo e-mail enviado pelo usurio vai ser redirecionado. Esta medida bem comum em
servidores de e-mail onde os e-mails dos usurios precisam ser monitorados por pessoas de outros
departamentos.
Opes:
No caso do comando mail, tanto uma mensagem quanto um contedo de um arquivo podem ser
enviados por e-mail. Seguem os exemplos:
Neste caso acima, o e-mail vai ser enviado para aluno@mcury.com.br, com cpia para
mcury@mcury.com.br e o corpo da mensagem vai ser o texto MTA sendmail. O fim da mensagem marcado
pelo . (ponto) na ltima linha.
Neste caso acima, uma das grandes utilidades deste comando: o envio de contedo de arquivos de
texto por e-mail, o que pode facilitar muito a criao de rotinas que possam disparar e-mails em caso de
situaes adversas para o servidor, como alguns usurios estourando as suas cotas de armazenamento.
# mailq
Consulta a fila de e-mails do MTA. O uso deste comando o mesmo que o uso da linha de comando
sendmail -bp.
35 FIREWALL IPTABLES
Um dos mais importantes componentes de uma estrutura de segurana de rede em uma estrutura de
TI o firewall, ele tem a funo tratar os pacotes de rede que vo para o host, que saem do host e que so
redirecionados pelo host, assim como realizar redirecionamentos e mascaramentos de interfaces de rede. No
caso do Linux, o Netfilter o firewall desde a concepo do cdigo, s que os programas de manipulao do
firewall foram sendo modificados em suas sintaxes, funcionalidades e nomes tambm, ficando definidos desta
forma:
O firewall IPTABLES, assim como o seu nome j induz a pensar, funciona baseado em tabelas, as
tabelas, por sua vez so as ramificaes do firewall que determinam que tipo de uso tenha as regras a serem
criadas, dentro destas tabelas, existem as chains, que so locais dentro da tabela onde vo ser armazenadas as
regras. Geralmente as chains so interpretadas como o tipo de pacote a ser afetado pelas regras criadas,
portanto, se o administrador quiser criar uma chain, bom que mantenha o padro.
Como o IPTABLES um firewall em linha de comando que trata diretamente com protocolos e portas o
tempo todo, preciso que o administrador tenha um profundo conhecimento deste assunto antes de comear
a criar regras, para que acontecimentos indesejveis no aconteam. Neste material, vamos dar nfase tabela
Filter. Vamos s tabelas:
Tabela Filter
Esta tabela cuida de regras de filtragens feitas em pacotes, como, por exemplo, impedir que a entrada
de pacotes pela porta 23 (Telnet) ocorra no host. Esta tabela conta com as seguintes chains:
INPUT
Armazena regras de entrada de pacotes que tm o firewall como destino.
OUTPUT
Armazena regras de sada de pacotes que tm o firewall como origem.
FORWARD
Armazena regras de pacotes que so redirecionados pelo firewall para outro sevidor.
Tabela NAT
Esta tabela trata de redirecionamentos de IPs e portas para (ou de) outros servidores, sendo capaz de
trabalhar com traduo de endereos de rede (NAT) em modo SNAT (Source NAT) e DNAT (Destination NAT). As
chains da tabela NAT so PREROUTING, POSTROUTING e OUTPUT.
Tabela Mangle
Esta tabela trata de propriedades de pacotes de rede, como prioridade, por exemplo. Todas as chains
das tabelas anteriores so utilizadas pela tabela Mangle.
# iptables
Opes:
-n : se utilizada em conjunto com a opo -L, habilita a consulta numrica apenas, no permitindo a
consulta de nome por parte do DNS.
--line-numbers : se utilizada em conjunto com a opo -L, numera as regras em ordem de prioridade.
-t : especifica a tabela (filter, nat, mangle), se omitida a opo a filter a tabela padro.
-p : indica o protocolo.
A tabela adotada como padro pelo comando iptables a filter, portanto, desnecessrio declar-la
nas opes, mas, para os mais metdicos, a vai o primeiro exemplo:
Criando regra de negao de acesso de entrada rede 10.12.1.0/24 com destino a 10.12.1.1 na porta
22 (SSH):
Com o alvo REJECT, o remetente do pacote sempre receber um aviso de falha na entrega do pacote,
mas se o alvo for DROP, isto s acontecer quando houver timeout na conexo, ficando o terminal onde
ocorreu a solicitao travado at que este timeout ocorra, se o acesso for em um Web Browser, o mesmo vai
tentar carregar a pgina at dar o tempo limite de espera para a conexo. Outro alvo possvel o ACCEPT, onde
o pacote aceito.
importante que o firewall seja o menos permissivo possvel e uma boa prtica para que isso acontea
tornar a poltica padro de tratamento de pacotes para DROP (negao de acesso) e liberar pacotes, hosts e
redes conforme a poltica individual para cada um.
Permitindo que hosts da rede 10.12.1.0/24 tenham acesso a www.mcury.com.br atravs do roteador:
# iptables -L -n --line-numbers
importante ressaltar que, no caso do uso da chain FORWARD preciso que o host seja um roteador,
para isso acontecer, temos que ativar o roteamento e cria as regras de redirecionamento. Vamos criar o
seguinte cenrio:
Firewall: 10.12.1.1
Gateway do Firewall: 10.12.1.254
Rede cliente: 10.12.1.0/24
DNS: 10.12.1.254
Os hosts podem ser representados pelo IP, pelo nome ou pelo MAC address, esta ltima uma tima
prtica de segurana para bloqueio ou aceitao de acesso, visto que o MAC fixo para cada interface de rede
e apenas um administrador de sistema pode emular um endereo MAC no sistema. Vamos ver um exemplo de
uma regra de aceitao de acesso porta 80 pelo MAC, na tabela filter e na chain FORWARD:
Listando as regras:
# iptables -L -n --line-numbers
To importante quanto criar as regras de um Firewall mant-las ativas por quanto tempo for
necessrio. Acontece que o iptables no utiliza nenhum arquivo de configurao, as suas regras so
implementadas e salvas em memria RAM, para que as regras sejam salvas e restauradas, preciso utilizar os
comandos abaixo:
# iptables-save
Sintaxes:
# iptables-save > <arquivo> (para criar um novo arquivo de regras com as regras existentes)
# iptables-save >> <arquivo> (para incrementar um arquivo de regras existente com as regras criadas)
Exemplo:
# cat ~/regras.fw
# iptables-restore
SIntaxes:
Exemplo:
# vim /etc/rc.local
Para dar mais praticidade ao uso do iptables, necessrio que o seu uso seja associado com um script
de Shell. Vamos criar abaixo alguns exemplos de scripts que ajudam e muito um administrador na hora de
montar as suas regras:
1 - permitir acesso a hosts pelo MAC atravs de uma lista em modo texto
Antes de tudo, vamos criar a lista de MACs que vo ser contemplados com o script:
# vim ~/lista_MAC.txt
#vim ~/libera_MAC.sh
O script acima est instrundo a liberar acesso a qualquer protocolo e qualquer porta do host 10.12.1.1
para os endereos MAC da lista lida pela estrutura for (uma linha por vez). A lista contm 5 MACs, mas
poderiam ser 100 e, neste caso, ficaria cansativo digitar todas essas regras a cada aplicao de filtro.
importante lembrar tambm que a poltica padro da chain FORWARD j estava como DROP, pois se
ele estivesse como ACCEPT, no teria razo e liberar MACs, j que todos por padro j estariam liberados.
Executando o script:
# . ~/libera_MAC.sh
# vim ~/libera_acesso.sh
No caso abaixo, como o SSH trabalha com os protocolos TCP e UDP, foram criadas 2 regras, uma para
cada protocolo para entrada de pacotes na porta 22. Antes de criao da regra foi feita um teste simples da
varivel host para que o script s fosse executado se ela tivesse um valor definido.
Executando o Script:
# . ~/libera_acesso.sh
Listando as regras:
# iptables -L
importante reparar que no campo source sempre aparece o nome SERVER1 ao invs do IP que
escolhemos para a regra, o que acontece neste caso que o iptables l o arquivo /etc/hosts e verifica se dentro
dele h alguma assoiciao de nome com IP e nomeia o host, se for o caso.
Tambm possvel, com um aprofundamento maior dos conhecimentos em Shell Script, fazer com que
um script de um Firewall Iptables seja acessvel por um Web Browser qualquer pois, desta forma, de qualquer
distrribuio o Firewall poder ser acessado.
Para construir este programa foi necessrio que fosse instalado o servidor Web Apache no host que
hospeda o programa de Firewall e, neste caso est sendo criada uma regra de bloqueio para pacotes TCP na
porta 22 que venham do host 10.12.1.2 com destino ao host 10.12.1.1.