O documento discute a inicialização do sistema em sistemas Linux, incluindo:
1) O processo de inicialização desde a BIOS até a execução dos scripts de inicialização e o sistema estar operacional;
2) A configuração e gerenciamento de serviços através de scripts no diretório /etc/init.d e links simbólicos nos diretórios /etc/rc?.d;
3) O utilitário Upstart no Ubuntu para gerenciar processos de forma baseada em eventos em substituição ao init tradicional.
2. Aula 02: Sumário
Inicialização do sistema
Direitos e permissões
Administrando grupos e usuários
Gerenciado processos
Configuração de rede
Básica
Avançada
4. Inicialização do sistema
Inspirada no Unix System V e BIOS
adotada por várias distros Linux
Boot Loader
Define níveis de execução (podem
kernel+initrd
variar dependendo da distro):
linuxrc
0) Halt (desligamento seguro)
1) Single user mode rootfs
2) Multiuser mode, sem NFS ou serviços init
avançados de rede
inittab
3) Full multiuser mode, com todos os serviços
rc
4) Não definido
5) Como no 3 e mais o X11 rc[S06].d
6) Restart Sistema operando
5. Inicialização do sistema
BIOS (Basic Input Output System) BIOS
Inicializa o hardware do sistema e Boot Loader
carrega os primeiros 512 bytes do
kernel+initrd
disco (MBR, Master Boot Record)
linuxrc
O boot loader é então executado
rootfs
(atualmente o GRUB)
init
O GRUB lê e executa a inicialização
de partida inittab
/boot/grub/menu.lst rc
rc[S06].d
Sistema operando
6. Inicialização do sistema
Parte do menu.lst BIOS
title Ubuntu 8.04, kernel 2.6.2419generic
root (hd0,0) Boot Loader
kernel /vmlinuz2.6.2419generic root=UUID=<id> ro
kernel+initrd
initrd /initrd.img2.6.2419generic
O grup é informado sobre o kernel a linuxrc
usar, a partição principal (/) e o initrd rootfs
(Initial RAM Disk)
init
O initrd é montado em memória e
inittab
permite inicializações mais exóticas,
detecção de hardware, carregamento de rc
drivers, etc
rc[S06].d
O script /linuxrc, dentro do initrd, é
quem roda neste momento Sistema operando
7. Inicialização do sistema
No final do linuxrc, é executado o BIOS
programa init. O init lê as instruções
de partida do /etc/inittab, onde Boot Loader
também é definido o nível de kernel+initrd
execução (runlevel, de 06 e S). linuxrc
Formato do inittab: rootfs
id:runlevels:action:process init
Exemplos: inittab
id:2:initdefault:
si::sysinit:/etc/init.d/rcS rc
l2:2:wait:/etc/rc.d/rc 2
ca::ctrlaltdel:/sbin/shutdown -r now rc[S06].d
1:2345:respawn:/sbin/getty 38400 tty1
Sistema operando
8. Inicialização do sistema
A linha do sysinit é executada (rcS) BIOS
Com o runlevel definido (initdefault), Boot Loader
vários scripts são executados
kernel+initrd
Cada runlevel tem seu diretório:
linuxrc
/etc/rc<r>.d/ (ex: /etc/rc2.d/)
rootfs
Todos os scripts ficam em init.d:
init
/etc/init.d/script [start|stop|restart]
inittab
Links simbólicos são criados do
rc
diretório de runlevel para o initd.
rc[S06].d
/etc/rc<r>.d/[S|K]<nn>script → /etc/init.d/script
Sistema operando
9. Inicialização do sistema
Dentro do diretório de runlevel, é BIOS
usada a seguinte notação para o
arquivo: Boot Loader
[S|K]<nn>script kernel+initrd
S (start): executar o script neste nível linuxrc
K (kill): parar o script neste nível rootfs
nn: número que indica a ordem deve ser init
executado o script
inittab
Ao final, o sistema estará em
rc
operação e completamente
inicializado rc[S06].d
Sistema operando
10. Inicialização do sistema
Obviamente, é chato colocar serviços para rodar em um
runlevel manualmente, apesar de possível
O comando updaterc.d ajuda muito neste processo.
Basta criar o script no init.d e acertar o runlevel:
touch /etc/init.d/meusrv
updaterc.d meusrv start 40 1 2 3 4 5 6 . stop 50 0 6 .
$ sudo touch /etc/init.d/meusrv
$ sudo update-rc.d meusrv start 40 1 2 3 4 5 6 . stop 50 0 6 .
Adding system startup for /etc/init.d/meusrv ...
/etc/rc0.d/K50meusrv -> ../init.d/meusrv
/etc/rc6.d/K50meusrv -> ../init.d/meusrv
/etc/rc1.d/S40meusrv -> ../init.d/meusrv
/etc/rc2.d/S40meusrv -> ../init.d/meusrv
/etc/rc3.d/S40meusrv -> ../init.d/meusrv
/etc/rc4.d/S40meusrv -> ../init.d/meusrv
/etc/rc5.d/S40meusrv -> ../init.d/meusrv
/etc/rc6.d/S40meusrv -> ../init.d/meusrv
11. Inicialização do sistema
Também é simples remover serviços:
updaterc.d f meusrv remove
rm /etc/init.d/meusrv
$ sudo update-rc.d -f meusrv remove
Removing any system startup links for /etc/init.d/meusrv ...
/etc/rc0.d/K50meusrv
/etc/rc1.d/S40meusrv
/etc/rc2.d/S40meusrv
/etc/rc3.d/S40meusrv
/etc/rc4.d/S40meusrv
/etc/rc5.d/S40meusrv
/etc/rc6.d/K50meusrv
/etc/rc6.d/S40meusrv
$ sudo rm /etc/init.d/meusrv
12. Inicialização do sistema
Outro utilitário que merece destaque e com GUI, é o sysv
rcconf (rcconf no Debian)
13. Inicialização do sistema
Alguns comandos úteis:
runlevel: mostra o nível de execução anterior e atual
telinit: muda o nível de execução do sistema
telinit 6 → restart o sistema
init: também permite mudar o nível de execução atual
14. Pausa para o exercício
Usando o script a seguir, determine que
ele seja executado nos runlevels 2 e 3
somente, de forma automática.
#!/bin/sh
# Servico de teste
case "$1" in
start)
echo "Iniciando o servico meusrv ..."
;;
stop)
echo "Parando o servico meusrv ..."
;;
restart)
echo "Re-iniciando o servico meusrv ..."
;;
*)
echo "Sintaxe: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
14
15. Inicialização do sistema no Ubuntu:
Upstart
O init é antigo e existem projetos mais recentes:
Initng: Debian/Ubuntu
SMF (Service Management Facility): Solaris
Launchd: Mac OS
BootScripts: GoboLinux
Upstart: Ubuntu/Fedora/Suse
16. Inicialização do sistema no Ubuntu:
Upstart
Mais flexível e baseado em eventos.
Permite um melhor tratamento de
mudanças (hardware, sistemas de
arquivo, etc) e possibilita inicialização
concorrente.
Não existem mais runlevels, eles são
emulados na lógica do upstart por
motivos de compatibilidade.
No fundo, o upstart é uma máquina de
estados, onde os estados executam
tarefas/serviços (jobs) e as transições
são feitas por eventos (events). Os
eventos podem ser gerados pelo Com o upstart, é possível uma análise
Upstart, jobs ou por comandos. completa do boot através do bootchart.
17. Inicialização do sistema no Ubuntu:
Upstart
Jobs:
Ficam em /etc/event.d/, sendo arquivos texto com uma
sequência de instâncias (stanzas).
Podem ser do tipo tarefa ou serviço:
Tarefa: executa alguma coisa e fica em estado de espera ao
terminar
Serviço: ficam sempre em execução a menos que terminados
manualmente
O Job deve conter uma instância exec ou script, dizendo o que
será feito no job
18. Inicialização do sistema no Ubuntu:
Upstart
Eventos:
Podem ser gerados pelos jobs, pelo upstart ou mesmo
manualmente.
Alguns eventos do Upstart:
startup
shutdown
stalled (quando não existem mais processos rodando)
controlaltdelete
powerstatuschange
starting, started
stopping, stopped
19. Inicialização do sistema no Ubuntu:
Upstart
Emulação dos runlevels dentro do upstart
logd
upstart stopped runlevel 2 stopped
startup
rcS rcdefault rc2 tty1
controlaltdelete
controlaltdelete
20. Inicialização do sistema no Ubuntu:
Upstart
# rcS - runlevel compatibility # rc2 - runlevel 2 compatibility
start on startup start on runlevel 2
stop on runlevel stop on runlevel [!2]
console output console output
script script
runlevel --set S >/dev/null || true set $(runlevel --set 2 || true)
if [ "$1" != "unknown" ]; then
PREVLEVEL=N PREVLEVEL=$1
RUNLEVEL=S RUNLEVEL=$2
export PREVLEVEL RUNLEVEL export PREVLEVEL RUNLEVEL
fi
exec /etc/init.d/rcS exec /etc/init.d/rc 2
end script end script
# rc - runlevel compatibility
start on stopped rcS
script
runlevel --reboot || true
if grep -q -w -- "-s|single|S" /proc/cmdline; then
telinit S
elif [ -r /etc/inittab ]; then
RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)"
if [ -n "$RL" ]; then
telinit $RL
else
telinit 2
fi
else
telinit 2
fi
end script
21. Inicialização do sistema no Ubuntu:
Upstart
Comandos úteis:
initctl: controla jobs e emite sinais
start/stop: controlam jobs
initctl emit meuevt start # /etc/event.d/meusrv
initctl emit meuevt stop #
start on meuevt start
inictl start meusrv stop on meuevt stop
initctl stop meusrv console output
start meusrv script
stop meusrv rm /tmp/log.txt
while /bin/true;
initctl list do
echo "Running meusrv" >>
/tmp/log.txt
sleep 1
done
end script
22. Pausa para o exercício
Coloque o script abaixo dentro da
estrutura do upstart. Tente alterálo para
que seja inicializado somente dentro do
runlevel 2.
Tente instalar o bootchart e analise sua
inicialização.
# /etc/event.d/meusrv
#
start on meuevt start
stop on meuevt stop
console output
script
echo "Running meusrv" > /tmp/log.txt
while /bin/true;
do
date >> /tmp/log.txt
sleep 1
done
end script
22
24. Direitos e permissões
O acesso a arquivos/diretórios é dividido em 3 conjuntos
de direitos:
Dono: direitos relacionados a quem criou o arquivo.
Grupo: direitos relacionados a um grupo de usuários que pode
ter acesso ao arquivo.
Outros: direitos relacionados aos usuários que não são donos ou
não estão em grupos relacionados ao arquivo.
Cada conjunto de direitos possui 3 atributos:
r (read): direitos de ler (se for arquivo) ou listar conteúdo (se
diretório)
w (write): direitos de modificar/apagar
x (execution): direitos de executar (se for arquivo) ou de acessar
(se for diretório) 24
25. Direitos e permissões
Arquivos (), diretórios (d) ou links (l)
rw: direitos do dono
(leitura,modificação, mas não é executável)
r: direitos do grupo
(leitura somente, não é executável)
r: direitos dos outros
(leitura somente, não é executável)
dono (UID: user ID)
grupo (GID: group ID)
$ ls -l
-rw-r--r-- 1 marcelo marcelo 0 2008-06-22 16:49 arquivo
drwxr-xr-x 2 marcelo marcelo 4096 2008-06-22 16:49 diretorio
lrwxrwxrwx 1 marcelo marcelo 7 2008-06-22 16:49 link -> arquivo
25
26. Direitos e permissões
Exemplos de direitos de acesso para um arquivo:
rw: Arquivo com direitos de acesso exclusivos para o dono
rwr: Um determinado grupo pode ler o arquivo, mas só o
dono modifica
rwrr: Qualquer um pode ler o arquivo, mas só o dono
modifica
rwrwr: Qualquer um pode ler o arquivo, mas só o dono ou
alguém do grupo pode modificar
rwxrwxrx: Qualquer um pode ler e executar o arquivo, mas só o
dono ou alguém do grupo pode modificar
rwxrxr: O grupo pode ler e executar, o dono pode,
adicionalmente, modificar. O resto apenas pode ver o conteúdo
26
27. Direitos e permissões
Exemplos de direitos de acesso para um diretório:
drwx: Somente o dono pode modificar e entrar no diretório
drwxrxrx: O dono tem amplos poderes sobre o diretório,
enquanto o grupo e o resto apenas podem entrar no diretório e
listar o seu conteúdo
drwxxx: O dono tem amplos poderes sobre o diretório,
enquanto o grupo e o resto apenas podem entrar no diretório
drwxrwx: Grupo e dono com amplos direitos no diretórios
O root tem amplos poderes de acesso, independente dos
direitos configurados
27
28. Direitos e permissões especiais
Além das permissões já vistas existem ainda um conjunto
avançado de permissões especiais. Elas devem ser
usadas com cuidado para não gerar falhas de segurança.
SUID bit (s): Permite que quem executa o arquivo tenha direitos
iguais ao dono do arquivo, durante a execução. Útil para
programas como passwd.
SGID bit (s): Permite que quem executa o arquivo tenha direitos
iguais ao groupo do arquivo, durante a execução. Se diretório,
força que arquivos criados dentro desse diretório tenham o
mesmo grupo do diretório pai. Útil em diretórios compartilhados
por um grupo.
Stick bit (t): Garante que só quem criou o arquivo possa removê
lo. Importante para diretórios compartilhados como /tmp.
28
29. Mudando direitos e permissões com chmod
usando a forma relativa
chmod [a|u|g|o][+||=][r|w|x|s|t] arquivo/diretório
chmod [alvo][operação][direitos] arquivo/diretório
Alvos:
u: user, g: group, o: others, a: all
Operações:
+: adiciona direitos, : remove direitos, =: adiciona direitos,
sem mesclar com os direitos já existente para o alvo
Direitos:
r: read, w: write, x:execution, s: set user/group ID, t: stick
29
30. Mudando direitos e permissões com chmod
usando a forma relativa
Exemplos
chmod g+r <arq>: adiciona direitos de leitura a todos do grupo
chmod ug+x <dir>: adiciona direitos de acesso ao dono e grupo
chmod ax <arq>: retira todos os direitos de execução
chmod ug=rw <arq>: configura dono e grupo para somente ler e
modificar. Não toca nos direitos dos outros
chmod +t <dir>: liga o stick bit
chmod u+s: liga o bit de SUID
chmod gs: desliga o bit de SGID
30
31. Mudando direitos e permissões com chmod
usando a forma absoluta
Outra forma de usar o chmod é com da notação octal,
especificando diretamente os direitos através de 4
números octais relacionados aos quatro conjuntos:
chmod 1755 <dir>:
1 → 0+0+1, somente stick bit no grupo especial
7 → 4+2+1, read, write e execution para dono
5 → 4+0+1, read e execution para grupo
5 → 4+0+1, read e execution para outros
especiais dono grupo outros
u g t r w x r w x r w x
4 2 1 4 2 1 4 2 1 4 2 1
31
32. Pausa para o exercício
Experimente o chmod em suas formas
absolutas e relativas. Use o ls la para
que todos os arquivos sejam mostrados
e a listagem fique completa.
32
34. Grupos e usuários:
Arquivos e diretórios relevantes
/etc/passwd: armazena informações sobre os usuários, como shell
usado, local da conta, etc.
/etc/group: lista grupos existentes e que usuários fazem parte dele.
/etc/shadow: armazena as senhas dos usuários, encriptada
/etc/skel: esqueleto para contas de usuários
/etc/issue: mensagem exibida na tela de login no terminal (issue.net
para logins remotos)
/etc/motd: mensagem exibida após o login
/etc/profile: definições de ambiente para todos os usuários
/etc/default/useradd: definições padrões para criação de usuários
(se usado o useradd)
/etc/adduser.conf: definições padrões para o adduser 34
35. Grupos e usuários:
Principais comandos
useradd: adiciona contas de usuário
usermod: modifica parâmetros da conta do usuário
userdel: remove a conta do usuário
passwd: ajusta o password para um usuário
chown: troca o dono de um arquivo/diretório
Para interação no terminal, use os comandos
<operação>user:
adduser
deluser
35
36. Grupos e usuários:
Principais comandos
groupadd: cria um novo grupo
groupdel: apaga um group
groupmod: modifica um group
groups: imprime em quais grupos um usuário está
chgrp: troca o grupo de um arquivo/diretório
Também existem os equivalentes interativos:
addgroup
delgroup
36
37. Grupos e usuários:
Exemplos de utilização
Cria o usuário mateus, gerando a sua conta em
/home/mateus:
sudo useradd m mateus
Cria um grupo kid e modifica o usuário mateus para que
ele faça parte do grupo:
sudo groupadd kid
sudo usermod G kid mateus
Remove o usuário mateus, inclusive apagando toda a sua
conta:
sudo userdel r mateus
37
38. Pausa para o exercício
Experimente os comandos relacionados
a usuários e grupos, criando, apagando e
modificando contas. Verifique como as
contas são criadas no /home e tembém
experimente alterar os padrões de
criação de contas. Altere também donos
e grupos com chown e chgrp.
38
40. Gerenciando processos
Em sistemas Linux, todas as atividades são executadas
por processos
Cada processo possui características como prioridade,
status, dono, PID (Process ID), tempo de execução,
percentagem de uso de CPU, memória alocada, etc:
Prioridades: de 20 (menor) a 19 (maior)
Running, sleeping, stopped, zombie
PID: número único que identifica o processo
O kernel tenta fazer um escalonamento justo dos
processos, geralmente dividindo o tempo da CPU entre os
vários processos de mesma prioridade de forma igual
40
41. Gerenciando processos
Um processo pode ser executado de fundo (background)
ou não (foreground):
Adicionar ”&” na linha de comando manda o processo para
background
Comandos do bash como bg, fg e jobs lidam com isso
diretamente
Ctrl+Z permite enviar um processo para backgound
Todo processo tem uma entrada padrão, uma saída
padrão e uma saída de erro. Em geral:
STDIN: entrada padrão
STDOUT: saída padrão
STDERR: saída de erro
41
42. Gerenciando processos
Um processo pode receber uma espécie interrupção de
software conhecida como ”sinal” em Unix.
Cada sinal tem um número que o identifica e isto pode
variar de Unix para Unix.
Alguns sinais (número entre parênteses):
SIGTERM (15): sinaliza a terminação do processo
KILL (9): força a terminação do processo
HUP (1): Hang up, geralmente usado para reiniciar um processo
42
43. Gerenciando processos:
Comandos importantes
ps: permite listar os processos da máquina (ps aux)
top: permite um acompanhamento dinâmico dos processos (pressione 'h'
para detalhes de uso)
pstree: mostra a árvore de processos
kill: permite enviar sinais para um processo usando o seu PID
killall: envia sinais para um processo usando o seu nome
pkill envia sinais usando características diversas do processo
nice e renice: permite trocar a prioridade do processo
pgrep: permite pesquisar na lista de processos por características diversas
nohup: inicia um processo que não irá terminar ao ser feito o logout no
terminal
43
44. Gerenciando processos:
Exemplos
Lista todos os processos em execução:
ps aux
Envia o sinal de termino forçado para todos os processos
chamado make:
killall s 9 make
Pede ao smb para reler o seu arquivo de configuração:
kill HUP smb
Executa um comando com nohup, permitindo o logout:
nohup <meu_script> &
Mostra os processos do usuário mateus:
ps u mateus 44
45. Agendamento de processos com cron
Tarefas podem ser agendadas e executadas
periodicamente pelo processo ”cron”
Formas de agendamento:
Definir um ação e o momento da sua execução, seguindo as
regras do cron, no arquivo /etc/crontab
Definir o seu próprio arquivo cron dentro de /etc/cron.d/
Colocar um script dentro dos diretórios com escalonamento pré
definidos (não precisa seguir a notação do cron):
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
45
46. Agendamento de processos com cron:
Formato do arquivo crontab
Cada linha é um registro composto de sete campos que
especificam quando um evento deve ocorrer:
Minutos: de 0 a 59, onde '*' significa todos minutos e '*/10'
significa a cada 10 minutos
Horas: de 0 a 23, onde 38 significa que deve acontecer o evento
toda hora entre 3 a 8 horas
Dia do mês: de 1 a 31, onde 3,4 significa apenas os meses
março e abril
Mês: de 1 a 12
Dia da semana: de 0 a 7, começando e terminando no domingo
Usuário
Comando a ser executado
46
47. Agendamento de processos com cron:
Formato do arquivo crontab
Exemplos:
Todo dia as 07:30:
30 7 * * * root ps aux >> /var/log/ps.txt
Dia sim, dia não, as 10:15
15 10 */2 * * root ps aux >> /var/log/ps.txt
De segunda à sexta, de duas em duas horas:
0 */2 * * 15 root ps aux >> /var/log/ps.txt
47
48. Agendamento de processos com cron:
Dicas finais
Use ”crontab e” para adicionar eventos
No /etc/profile, configure o editor padrão:
export VISUAL=vim
Se não quiser usar a notação do crontab, basta criar um
script dentro dos diretórios com escalonamento pré
definidos:
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
48
49. Agendamento de processos com cron:
Dicas finais
Usuários comuns também podem usar o cron. Para isso,
alguns arquivos devem ser definidos:
/etc/cron.allow: crie este arquivo e liste os usuários que podem
usar o cron, ou ...
/etc/cron.deny: crie este arquivo e liste os usuários que não
podem usar o cron
/var/spool/crontab será o local onde as entradas dos usuários
serão criadas
49
50. Agendamento de processos de única vez
Para eventos não regulares, o escalonamento pode ser
feito com o comando ”at” e do processo atd:
Define o momento com at $ at 22:30
at> echo "done"
Digite os comandos, um por linha at> Ctrl-d
job 3 at Fri Jun 27 22:30:00 2008
Finalize com Ctrl+D
atrm pode remover um comando da fila
atq mostra a fila de comandos escalonados
/etc/at.allow e /etc/at.deny dever ser configurados para
que usuários comuns possam usar o at
50
51. Pausa para o exercício
Liste os processos no servidos com ps
e também com top. Explore o help do
top (pressione ”h”).
Crie um arquivo com com o script 1.
Executeo algumas vezes, jogando o #!/bin/bash
# script 1
processo para background (&). Depois, while /bin/true;
do
remova os processos com kill e killall. date >> /tmp/log.txt
sleep 1
done
Usando o cront para agendar
execuções periódicas do script 2. #!/bin/bash
# script 2
date >> /tmp/log2.txt
51
53. Configuração básica de rede
Interfaces de rede geralmente começam com eth<n>, n
sempre começando com zero
Alias (apelidos), permitem que vários IPs sejam
associados a uma mesma interface física (endereços
virtuais). Eles são da forma eth<n>:<m>, ambos
começando com zero
Bridges geralmente são br<n>
Exemplos: eth0, eth1, eth1:0, eth1:1, br2, br0
53
54. Configuração básica de rede:
ifconfig
A configuração manual pode ser feita com ifconfig,
presente em várias distribuições Linux:
ifconfig eth0 10.0.0.10 netmask 255.255.255.0 up
ifconfig eth0 down
ifconfig eth0 up
ifconfig (sem parâmetros, mostra a configuração atual)
A criação de alias também é simples, bastando definir
novos indexes ao final (a interface eth0 já deve estar
configurada):
ifconfig eth0 172.16.0.1 netmask 255.255.255.0 up
ifconfig eth0:0 172.17.0.1 netmask 255.255.255.0 up
ifconfig eth0:1 172.18.0.1 netmask 255.255.255.0 up 54
55. Configuração básica de rede:
ifconfig
Alguns detalhes da saída do ifconfig:
Endereço IPv6
Estatísticas
de rede IP, broadcast e máscara MAC
eth0 Link encap:Ethernet Endereço de HW 00:0e:35:ba:d0:0f
inet end.: 10.0.0.100 Bcast:10.0.0.255 Masc:255.255.255.0
endereço inet6: fe80::20e:35ff:feba:d00f/64 Escopo:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Métrica:1
pacotes RX:15825 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:10577 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:11462155 (10.9 MB) TX bytes:1052682 (1.0 MB)
IRQ:5 Endereço de E/S:0xa000 Memória:fcffe000-fcffefff
Interface
55
56. Pausa para o exercício
Experimente mudar a sua configuração
de rede através do ifconfig. Depois tente
obter a configuração de rede de um
servidor DHCP.
56
57. Configuração básica de rede:
DHCP
O DHCP pode ser configurado como cliente através do
utilitário dhclient:
dhclient <interface>
57
58. Configuração básica de rede:
Roteamento estático
Para funcionamento completo, algumas rotas são
necessárias. O comando route permite adicionar rotas
estáticas, configurar o default gateway, etc.
Exemplos:
Definindo o gateway default via interface eth0:
route add default gw 10.0.0.1 dev eth0
Criando uma rota para uma rede através de um gateway:
route add net 10.1.1.0 netmask 255.255.255.0 gw
192.168.1.254 dev eth0
Adicionando uma rota direta para um host pela interface eth0:
route add host 172.16.0.2 dev eth0
A opção del é similar mas permite remoter rotas 58
59. Configuração básica de rede:
Roteamento estático
Para a figura abaixo, as rotas seriam:
route add net 127.0.0.0 netmask 255.0.0.0 dev lo
route add net 192.168.10.0 netmask 255.255.255.0 dev eth0
route add net 200.210.50.128 netmask 255.255.255.192 dev eth1
route add default gw 200.210.50.129 dev eth0
eth0 eth1
59
60. Pausa para o exercício
Crie o roteamento e a configuração de rede para
que a topologia abaixo funcione adequadamente.
60
61. Configuração básica de rede:
DNS
O DNS é configurado dentro do arquivo /etc/resolv.conf,
onde os servidores de DNS podem ser listados e o nome
do domínio padrão.
Use nameserver para listar um DNS
Use domain para especificar o nome padrão do domínio
# conteúdo do /etc/resolv.conf
nameserver 10.0.1.1
nameserver 10.0.1.2
domain baraodemaua.br
61
62. Configuração básica de rede:
DNS
Hosts e redes podem ser listados manualmente, através
dos seguintes arquivos:
/etc/hosts
/etc/networks
O uso é desencorajado, no entanto.
Primeiro procure
Além, disso, altere a ordem de busca no resolver usando o
/etc/nsswitch.conf: arquivo hosts,
depois tente o DNS
# parte do conteúdo do /etc/nsswitch.conf
hosts: files dns
networks: files
62
63. Configuração básica de rede:
Placa de rede
O programa ethtool é usada para configurar parâmetros
da placa de rede. Isto pode ser interessante caso a auto
negociação esteja falhando:
ethtool s eth0 speed 10 duplex half
ethtool s eth0 autoneg off
ethtool s eth0 speed 100 duplex full
Detalhes do driver podem ser obtidos com a opção ”i”:
ethtool i eth0
63
64. Configuração básica de rede:
Ferramentas auxiliares
ping: testa a conexão
traceroute, tracepath: mostra a rota do pacote
O nestat permite avaliar os serviços de rede em execução:
netstat ltn: portas TCP (t) em estado de espera de conexão (l),
sem esperar resolução de nome (n)
netstat lun: idem, mas para UDP (u)
netstat platune: um bom conjunto de informações, mostrando
portas em espera, conexões abertas, etc
netstat i: informações sobre as interfaces de rede
netstat s: estatísticas de rede por protocolo
ifdown e ifup: permitem ligar/desligar uma interface
64
65. Configuração básica de rede:
Persistindo a configuração
A configuração de rede pode ser toda feita dentro do
arquivo /etc/network/interfaces, que é lida e executada na
partida pelo script /etc/init.d/networking
Exemplo:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.33
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
# dns-* options are implemented resolvconf, if installed
dns-nameservers 193.79.237.39
65
66. Configuração básica de rede:
Persistindo a configuração
Outro exemplo, agora com DHCP e IP fixo. Note que:
auto: lista interfaces que sobem automaticamente na partida
iface: descreve a interface (eth0, eth1), falando que será usado
IPv4 (inet, para IPv6 use inet6) com DHCP para eth0 e IP fixo
(static) para eth1
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# The secondary network interface
auto eth1
iface eth1 inet static
address 10.0.1.1
netmask 255.255.255.0
66
67. Configuração básica de rede:
Persistindo a configuração
Existem várias opções interessantes na configuração,
como preup, posup, predown e posdown.
Consulte o ”man interfaces” para maiores detalhes
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
Execute após subir
address 10.0.0.1 a interface
netmask 255.255.255.0
Execute antes de
post-up /etc/init.d/vlan start
pre-down /etc/init.d/vlan stop desligar interface
67
68. Configuração avançada de rede:
Bridges
Bridges são equipamentos de camada 2 (enlace) que
permitem a interligação de segmentos de uma mesma
rede. A bridge pode evitar tráfegos desnecessários uma
vez que opera na camada de enlace e também pode ser
interessante para gerar configurações adicionais de
segurança sem que outra subrede tenha que ser criada.
Para o sistema, as várias placas da bridge podem ser
encaradas como apenas uma, representando a união de
todas as outras.
LAN A LAN A
Bridge
68
69. Configuração avançada de rede:
Bridges
Instalar o pacote bridgeutils e criar a bridge:
brctl addbr br0
Adicionar interfaces para a bridge:
brctl addif br0 eth0; brctl addif br0 eth1 ; ...
Sendo necessário, configure um IP para a bridge:
ifconfig br0 10.1.2.3 netmask 255.255.255.0
A bridge pode ser desfeita removendose as intrefaces
(delif) e depois removendose a própria bridge (delbr)
brctl delif br0 eth0 ; brctl delif br0 eth1 ; ...
brctl delbr br0
69
70. Configuração avançada de rede:
VLAN
As VLANs ou, LANs virtuais, através de uma modificação
no quadro ethernet e de dispositivos de camada de enlace
especiais (switches com VLAN), permitem um melhor
gerenciamento do domínio de colisão/broadcast e também
maior segurança.
70
71. Configuração avançada de rede:
VLAN
As VLANs são criadas como interfaces virtuais
eth<n>:<m> onde <m> é o número do ID da VLAN:
vconfig eth0 10 (criar a interface virtual eth0:10)
vconfig eth0 20 (criar a interface virtual eth0:20)
Configure IPs para cada interface criada
ifconfig eth0:10 10.10.0.1 netmask 255.255.255.0
ifconfig eth0:20 10.20.0.1 netmask 255.255.255.0
A VLAN pode ser desfeita através do comando rem:
vconfig rem eth0:10
vconfig rem eth0:20
71
72. Configuração de rede:
Outros arquivos relacionados
/etc/services: lista de portas conhecidas
/proc/sys/net/ipv4/ip_forward: coloque ”1” dentro deste
arquivo para permitir o roteamento entre placas. O arquivo
/etc/sysctrl.conf permite automatizar isso.
72