28
Níveis de Execução e Serviços

Níveis de Execução e Serviços

Embed Size (px)

Citation preview

Page 1: Níveis de Execução e Serviços

Níveis de Execução

e Serviços

Page 2: Níveis de Execução e Serviços

1 UFCD 0838 - Administração

Índice

Introdução ................................................................................. 3

Processo Init .............................................................................. 4

Conceito de runlevels .................................................................. 6

Função de runlevels .................................................................... 7

Ficheiro /etc/Initab ..................................................................... 9

Serviços .................................................................................. 13

Modo StandAlone ..................................................................... 15

Modo Xinetd ............................................................................ 19

Conclusão ................................................................................ 26

Bibliografia .............................................................................. 27

Page 3: Níveis de Execução e Serviços

2 UFCD 0838 - Administração

Índice de Ilustrações

Ilustração 1 - Serviços ................................................................ 3

Ilustração 2 - Esquema processo int ............................................. 5

Ilustração 3 - Runlevels ............................................................... 6

Ilustração 4 - Esquema Runlevel .................................................. 8

Ilustração 5 - Ficheiro inittab ..................................................... 11

Ilustração 6 - inittab ................................................................. 12

Ilustração 7 - Ficheiro /etc/services ............................................ 14

Ilustração 8 - Print Screen standalone 1 ...................................... 17

Ilustração 9 - Print Screen standalone 2 ...................................... 18

Ilustração 10 - Ficheiro /etc/inetd.conf ........................................ 22

Ilustração 11 - Exemplo de edição Telnet .................................... 22

Ilustração 12 - Exemplo de edição Telnet 2 .................................. 24

Ilustração 13 - Print screen xinetd .............................................. 24

Ilustração 14 - Print screen xinetd 2 ........................................... 25

Page 4: Níveis de Execução e Serviços

3 UFCD 0838 - Administração

Introdução

As configurações dos serviços activos e do runlevel inicial do sistema

fazem parte do conjunto de configurações iniciais e efectuar em

qualquer sistema Linux, logo após a sua instalação e o arranque do

sistema Operativo. Como veremos durante o presente trabalho, o

administrador deverá, de acordo com o propósito de utilização

específica de cada servidor, decidir quais os serviços a disponibilizar e

desactivar os restantes, aprofundaremos principalmente os serviços

em modo “StandAlone” e “Xinetd”, iremos estabelecer as configurações entres

eles. Esta configuração é parte habitual da administração, pois

possibilita a poupança de recursos e promove a diminuição de falhas

existentes no sistema, contribuindo assim para a segurança geral do

servidor na rede.

Ilustração 1 - Serviços

Page 5: Níveis de Execução e Serviços

4 UFCD 0838 - Administração

Processo Init

O processo init é o primeiro programa executado pelo kernel de

qualquer sistema operativo Linux/Unix na sua iniciação, que se

encontra gravada no próprio kernel Linux:

(/usr/src/linux/init/main.c)

No momento em que o computador é ligado ou reiniciado (boot), a

BIOS procura no primeiro sector do disco (master boot record)

seleccionado para carregar o sistema operativo (que pode ser um

disco rígido, uma disquete, um CD-ROM ou uma Pen-Drive, e isto é

definido no SETUP) um programa para executar, que vai ser o

carregador do sistema operativo (boot loader). O LILO e o GRUB são

os programas que carregam o sistema operativo mais comuns no

Linux. Eles permitem seleccionar qual partição que será utilizada para

o carregamento do mesmo, possibilitando assim a escolha de

múltiplos sistemas operativos, ou mesmo com versões diferentes do

kernel do Linux, ou configurações dos discos.

Existem dois estilos de iniciação para os sistemas operativos

Linux/Unix: SysV Init e BSD init. A maioria das distribuições Linux

utiliza iniciação estilo SysV init em virtude do maior número de

recursos e da maior flexibilidade do que o BSD init.

Page 6: Níveis de Execução e Serviços

5 UFCD 0838 - Administração

Vejamos o esquema seguinte para nos ajudar a perceber todo o

processo Init:

Podemos observar que o processo Init carrega módulos, inicia o

kernel e utiliza links simbólicos de /etc/rcN.d.

/etc/initab é o arquivo de configuração do processo, que é

estruturado em níveis de execução, como poderemos ver mais a

frente no trabalho.

Quando falamos em /etc/rc.local, podemos dizer que estamos a falar

num script que é lido pelo processo Init, este mesmo script e uma

ferramenta que trabalha com update-rc.d, sysvconfig, rcconf e sysv-

rc-conf.

Muito resumidamente é que podemos observar no esquema em cima.

Ilustração 2 - Esquema processo int

Page 7: Níveis de Execução e Serviços

6 UFCD 0838 - Administração

Conceito de runlevels

Um runlevel é uma determinada configuração de software em que

apenas processos são iniciados. Estes permitem, assim definir

diferentes estados de funcionamento para o servidor, cada um com o

seu conjunto de serviços activos. Ao definir o runlevel no qual o

sistema Linux deve arrancar, o administrador define os serviços que

pretende que estejam ou não activos após a iniciação do sistema.

Este principio não se aplica, no entanto, a todos os serviços, mas

apenas aos que funcionam com base em daemons que se encontram

permanentemente em execução no sistema. Estes serviços funcionam

no chamado modo standalone.

No Linux existem 11 runlevels, identificados pelos números de 0 até

9, embora só 7 sejam utilizados mais o nível S, vamos agora explicar

cada uma da sua função, aprofundando mais os níveis mais

utilizados.

Ilustração 3 - Runlevels

Page 8: Níveis de Execução e Serviços

7 UFCD 0838 - Administração

Função de runlevels Após a instalação do Linux, o sistema arranca habitualmente no

runlevel 5. Neste nível de execução, o sistema aceita ligações de

terminal virtual (consola e remotamente) e disponibiliza a consola em

modo gráfico. Existem, naturalmente, outros níveis de execução

definidos no Linux. Em seguida vamos identificar os níveis de

execução disponíveis no Linux CentOS e na generalidade das

distribuições di Linux, bem como o seu propósito habitual de

utilização. Em termo de curiosidade vamos falar também naqueles

menos utilizados, vejamos então:

Runlevel 0 – desligado, quando o sistema entra neste runlevel

todos os processos são terminados e a alimentação eléctrica é

desligada (se o hardware o suportar);

Runlevel 1 – single mode, é um nível especial em que apenas

está activo um utilizador (o root);

Runlevel 2 – multiuser sem rede, é o nível multiutilizador usual,

mas sem suporte de rede;

Runlevel 3 – multiuser com rede, é o nível multiutilizador

comum com suporte de rede;

Runlevel 4 – não usado, pode ser definido pelo utilizador;

Runlevel 5 – interface gráfica, é o nível em que é iniciado o

servidor X e é apresentado a consola gráfica;

Runlevel 6 – reboot, neste nível todos os processos são

terminados e o computador é reiniciado;

Runlevel 7, 8 e 9 – não estão documentados e portanto não se

utilizam;

Runlevel S – é utilizado para iniciar os processos quando se

muda de nível, não é para ser chamado directamente pelo

utilizador.

Page 9: Níveis de Execução e Serviços

8 UFCD 0838 - Administração

Para mudar de runlevel usa-se o comando init, assim, para desligar o

computador pode-se fazer:

init 0

O comando init, normalmente, só está disponível para o root.

Ilustração 4 - Esquema Runlevel

Page 10: Níveis de Execução e Serviços

9 UFCD 0838 - Administração

Ficheiro /etc/Initab O inittab é o ficheiro de configuração do init e é um ficheiro de texto

com 4 campos por linha, separados por :, podendo ter comentários

começados por #, o significados dos quatro campos são os seguintes:

O identificador;

Um ou 2 caracteres para identificarem a entrada

O nível de execução;

Indica o nível de execução para o qual o processo deverá ser

executado

A acção;

Indica ao init como deve executar o processo (para mais opções ver

man inittab)

Acção Significado

respawn Reiniciar o processo quando ele acaba

wait O init executa o processo uma vez e espera que ele acabe

para continuar para a próxima entrada

once O init executa o processo uma vez quando entra nesse nível

boot Executa o processo no arranque (ignora o campo nível)

bootwait Combinação de boot com wait

off Não faz nada

initdefault Indica o nível de arranque

sysinit Executa o processo durante o arranque antes de qualquer

entrada boot ou bootwait

powerwait é executado quando o init recebe um sinal SIGPWR que indica

um problema com a energia eléctrica, e espera que o

Page 11: Níveis de Execução e Serviços

10 UFCD 0838 - Administração

comando seja executado

ondemand Executa sempre que um nível "on demand" (a b c) é

chamado. Estes níveis NÃO alteram o nível corrente

powerfail O mesmo que powerwait, mas não espera que o comando

acabe

ctrlaltdel Executado quando o init recebe um

sinal SIGINT (normalmente quando alguém carrega em

CTRL-ALT-DEL)

O processo

O caminho completo para o programa ou script a executar

Page 12: Níveis de Execução e Serviços

11 UFCD 0838 - Administração

Em seguida vamos apresentar um ficheiro inittab mínimo, para

análise.

Ilustração 5 - Ficheiro inittab

Page 13: Níveis de Execução e Serviços

12 UFCD 0838 - Administração

Descrição:

id:5:initdefault: Isto indica que o runlevel por omissão é o 5.

si::sysinit:/etc/rc.d/rc.sysinit Ordena que seja executado o

script rc.sysinit.

l0:0:wait:/etc/rc.d/rc: 0 Indica que o script rc deve ser

invocado com o argumento 0, para a lista de runlevels indicada

no segundo campo, no caso apenas o runlevel 0. Wait indica

que deve esperar que o script termine. O primeiro campo (l0),

é um campo descritivo que pode ser qualquer coisa.

1:2345:respawn:/sbin/mingetty tty1: Indica que deve ser

criado um terminal no tty1, em qualquer um dos runlevels de 2

a 5. Respawn indica que o processo deve ser iniciado de novo

se, por alguma razão, for terminado.

x:5:respawn:/etc/X11/prefdm –nodaemon: Diz para executar o

comando prefdm quando o runlevel 5 inicia. Isto inicia o

sistema gráfico.

A seguir é apresentado um exemplo de um ficheiro /etc/inittab,

depois a configuração do nível de execução inicial pretendido para o

sistema o administrador deve definir os serviços que devem estar

activos nesse runlevel.

Prosseguiremos com a descrição da forma como essa configuração

pode ser efectuada.

Ilustração 6 - inittab

Page 14: Níveis de Execução e Serviços

13 UFCD 0838 - Administração

Serviços

Antes de abordarmos de que forma os serviços são activados no

Linux, é importante realçar que são identificados no sistema

operativo pelo ficheiro de configuração /etc/services. Este contém a

informação de todos os serviços conhecidos no sistema,

identificando-os pelo nome, porto e protocolos utilizados. As

definições armazenadas neste ficheiro têm um âmbito global no

sistema, o que significa que podem ser utilizados em qualquer

operação ou ficheiro de configuração do Linux, pois são atribuídos

nomes aos diversos ficheiros, logo será mais fácil uma relação entre

os serviços.

Normalmente, o conteúdo predefinido do ficheiro /etc/services é

suficiente, e apenas em situações muito especificas o administrador

terá necessidade de o modificar, por exemplo, para a definição de um

novo serviço. Também muito importante notar que, neste ficheiro,

vários serviços têm o seu nome associado ao porto convencionado e

aos protocolos UDP (User Datagram Protocol) e TCP (Transmission

Control Protocol) em simultâneo, embora seja normal o serviço

utilizar apenas um protocolo. Esta associação aos dois protocolos é

feita para mais tarde existir a possibilidade de utilização do outro

protocolo.

No ficheiro /etc/serices, os serviços são identificados no inicio de cada

linha associados ao porto e as protocolos aonvencionados. A imagem

a seguir mostra-nos um extracto deste mesmo ficheiro de

configuração:

Page 15: Níveis de Execução e Serviços

14 UFCD 0838 - Administração

O ficheiro /etc/services é lido durante o arranque do sistema

operativo pelo processo Init, que é responsável pelas operações de

inicio do sistema. Portanto, por ser o primeiro processo a arrancar, o

Init utiliza o PID (processo Identifier).

As alterações ao ficheiros /etc/services pode ser comunicadas ao

processo Init através do envio de um sinal do tipo SIGHUP,

recorrendo ao comando “kill –HUP 1”, ou alternativa, reinicializando o

serviço.

No que diz respeito ao funcionamento dos serviços do Linux, é

importante notar que podem ser activados de duas formas, no modo

standalone e no modo xinetd. É importante compreender as

diferenças de funcionamento entre estes dois modos, já que se trata

de um aspecto fundamental de funcionamento do Linux, vejamos

então essas mesmas diferenças.

Ilustração 7 - Ficheiro /etc/services

Page 16: Níveis de Execução e Serviços

15 UFCD 0838 - Administração

Modo StandAlone Executar um servidor via Super-servidores é uma forma de se iniciar

um serviço de rede, como poderemos ver já no próximo tema,

porém outro tipo muito utilizado é executar o programa de forma

independente (Standalone).

Os serviços de rede que são iniciados de forma independente ocupam

recursos da máquina como pode ou não o serviço estar a ser

executado, o que é o contrário dos serviços executados pelo inetd e

xinetd.

Cada técnica de inicialização de serviços de rede tem suas próprias

vantagens e desvantagens:

• No caso do Super-servidor os serviços só serão carregados na

memória quando o serviço estiver a ser realmente utilizado, isto

poupa recursos da máquina, entretanto um serviço executado pelo

inetd provavelmente terá um tempo de resposta mais lento do que

serviços executados independentes, pois o processo não está na

memória e terá de ser carregado para à memória para a sua

execução;

• Um serviço de rede executado de forma independente tem um

tempo de resposta mais rápida aos pedidos de conexões de rede, pois

estes serviços já estão na memória e prontos para uso, porém caso

não estejam a ser utilizados estes serviços continuarão na memória

ocupando um espaço de memória que poderia ser útil para outras

tarefas.

Quando um serviço é muito requisitado, talvez não seja uma boa

escolha iniciá-lo com o Super-servidor, mas sim de forma

independente (em inglês, standalone).

Page 17: Níveis de Execução e Serviços

16 UFCD 0838 - Administração

Pois, ao iniciar um serviço em standalone o serviço estará sempre

pronto para responder aos pedidos dos utilizadores.

O Very Secure FTP Daemon ou simplemente vsftpd, é um bom

servidor de FTP e funciona tanto em modo Super-servidor quanto

standalone.

Para a configuração do vsftpd, é necessário editar o arquivo

/etc/vsftpd.conf. Para colocar o vsftpd de forma a que este funcione

em standalone, é necessário apenas retirar o # da seguinte linha:

listen=YES.

Para que o vsftpd funcione em standalone este serviço não pode ser

executado com o inetd ou xinetd.

Após, editar o arquivo /etc/vsftpd.conf e colocá-lo em standalone, é

necessário iniciar o servidor utilizando o comando vsftpd.

Ao iniciar em standalone, é possível executar o comando ps -ax e

verificar que vsftpd está directo na memória.

Para desligar o servidor FTP agora é necessário “matar” o processo

vsftpd. Isso pode ser feito com o comando killall vsftpd.

Configuração dos serviços standalone no Ubuntu:

Digitamos os seguintes comandos cd /etc/rc2.d/, em seguida ls –la e

obtivemos a seguinte lista:

Page 18: Níveis de Execução e Serviços

17 UFCD 0838 - Administração

Ilustração 8 - Print Screen standalone 1

Page 19: Níveis de Execução e Serviços

18 UFCD 0838 - Administração

Agora digitamos o comando chkconfig –list para obtermos

informação sobre todos os serviços standalone no sistema:

Ilustração 9 - Print Screen standalone 2

Page 20: Níveis de Execução e Serviços

19 UFCD 0838 - Administração

Modo Xinetd Os serviços de redes são executados por programas denominados

servidores de rede, um programa servidor de rede é chamado em

inglês de daemon.

Servidores de rede são programas que abrem portas de rede

(referente ao modelo TCP/IP) estas portas ficam a aguardar por

solicitações dos clientes. Quando uma solicitação de um cliente é

recebida, o servidor de rede cria um processo “filho”, o qual trata

aquela conexão específica, enquanto o processo “pai” continua a

espera de reacções na porta, ou seja, aguardando novas solicitações

de clientes da rede.

O servidor é capaz de criar conectores para uma série de serviços de

rede e ouvir todas as portas de rede simultaneamente e quando uma

máquina remota solicita algum de seus serviços, o servidor percebe o

facto e acciona o servidor específico da porta envolvida.

Por exemplo, imaginemos que temos uma máquina a servir de

Firewall ou Router e esta é uma máquina que não possui monitor,

teclado e rato (já que uma Firewall não deve ser utilizado

directamente). Assim, nós provavelmente iremos precisar de um

serviço como Telnet para gerir a máquina remotamente, mas não

queremos que o Telnet ocupe recursos do computador enquanto o

Telnet não está a ser utilizado, então teremos de utilizar o inetd

(Super-Servidor de Internet). O inetd vai ficar responsável por abrir a

porta de rede referente ao Telnet e ficar monitorizar os pedidos a

este serviço, tão logo que alguém solicite o Telnet o inetd vai

carregar o Telnet na memória, o utilizador remoto vai usar o Telnet

Page 21: Níveis de Execução e Serviços

20 UFCD 0838 - Administração

normalmente, quando a conexão for finalizada o inetd vai retirar o

serviço da memória e continua a “ouvir” a porta.

Portanto, o Super-servidor conhecido por inetd (Internet Daemon) é

um servidor de servidores que é utilizado dentro outros, para poupar

recursos da máquina servidora, centralizar a activação de serviços,

etc.

O inetd é normalmente iniciado quando o sistema é iniciado. O inetd

recebe uma lista de serviços a serem monitorizados a partir de um

arquivo de configuração denominado /etc/inetd.conf.

O arquivo /etc/inetd.conf é um arquivo de texto que contém como

informação como e quais são os serviços de rede fornecidos pelo

inetd.

Uma linha típica do arquivo /etc/inetd.conf é composta pelos

seguintes campos:

<serviço> <tipo> <protocolo> <espera> <usuário>

<servidor> <linha_de_comando> finger stream tcp nowait

nobody /usr/libexec/fingerd fingerd –s

O significado de cada campo do /etc/inetd.conf é o seguinte:

Serviço ou Name - Este campo é o nome do serviço a ser

disponibilizado. Os nomes do serviço podem ser vistos no arquivo

/etc/services. Este nome mapeia o número de porta ao serviço.

Tipo ou Type - Este é o tipo de soquete (socket-type) oferecido ao

serviço para a entrega de dados. Os dois tipos de soquetes para

entrega de dados mais utilizados são: dgram para o serviço de

Page 22: Níveis de Execução e Serviços

21 UFCD 0838 - Administração

datagramas (sem conexão) e stream para o serviço de fluxo de dados

orientado a conexão.

Protocolo ou Protocol - É o nome do protocolo usado pelo serviço, é

definido no arquivo /etc/protocols. O nome mapeia um número de

protocolo. São na maioria tcp e udp.

Espera ou Wait-status - indica se o daemon invocado pelo inetd é

capaz de lidar com seu próprio socket ou não. Sockets do tipo dgram

precisam usar a opção wait, enquanto daemons de sockets tipo

stream, os quais geralmente são multi-threaded, devem usar a opção

nowait. O tipo wait geralmente repassa múltiplos sockets para um

único daemon, enquanto nowait dispara um daemon “filho” para cada

novo socket.

Utilizador ou UID - Nome de utilizador sob o qual o serviço é

executado. Normalmente este é root, mas por razões de segurança,

alguns processos são executados sob o ID do utilizador nobody.

Servidor ou Server - Caminho do programa de servidor a ser

executado. As entradas compartilham o mesmo caminho

/usr/sbin/tcp, mas este realmente não é o caminho para o servidor

ftp, telnet ou qualquer outro servidor. Na realidade, o tcpd é um

recurso de segurança usado pelo Linux, sendo que o tcpd chamado

de TCP Wrapper (invólucro de TCP), é usado para prover segurança.

Linha de comando ou Arguments - São argumentos de linha de

comando que são passados ao programa do servidor. O primeiro

argumento é sempre o nome do programa do servidor executado. A

lista de argumentos parece exactamente como o comando se

estivesse a ser digitado em um prompt shell.

Atenção, dentro do arquivo /etc/inetd.conf (tal como, a maioria dos

arquivos de configuração do Linux), tudo que preceder um # é um

comentário e será ignorado pelo script de iniciação do indetd.

Page 23: Níveis de Execução e Serviços

22 UFCD 0838 - Administração

Exemplo do arquivo /etc/inetd.conf:

Para activar um serviço de rede pelo inetd, basta editar o arquivo

/etc/inetd.conf e retirar o # da linha referente ao serviço desejado,

ou ainda, caso a linha não exista acrescentar uma linha passando os

parâmetros para iniciar o serviço via inetd.

Por exemplo, caso se quiser iniciar o Telnet com o Super-servidor

inetd, basta procurar a seguinte linha do Telnet no arquivo

/etc/inetd.conf e retirar o #, vejamos o exemplo:

Ilustração 10 - Ficheiro /etc/inetd.conf

Ilustração 11 - Exemplo de edição Telnet

Page 24: Níveis de Execução e Serviços

23 UFCD 0838 - Administração

Após, de retirar ou acrescentar o serviço desejado será necessário

reiniciar o servidor inetd, isto é possível através da execução do

script de iniciação /etc/rc.d/rc.inedt. O diretório /etc/rc.d/ contém a

grande maioria dos scripts de iniciação de serviços da rede.

Assim, para reiniciar o inetd execute:

#/etc/rc.d/rc.inedt restart

ou

#/etc/rc.d/rc.inedt stop

#/etc/rc.d/rc.inedt start

Tão logo que o servidor seja reiniciado o serviço estará pronto para

ser utilizado. É de lembrar que sempre que se alterar o arquivo

/etc/inetd.conf é obrigatório reiniciar o servidor para a alteração seja

completa, caso contrário, a alteração será completa somente quando

o sistema for reiniciado.

Para desactivar um serviço de rede pelo inetd, basta editar o arquivo

/etc/inetd.conf e comentar (adicionar no inicio da linha um #) na

linha referente ao serviço, não é recomendado a exclusão da linha,

pois quando for necessário activar o serviço o utilizador terá que

refazer a linha novamente, o que pode ser muito trabalhoso.

Por exemplo, caso se quiser desactivar o Telnet com o Super-servidor

inetd, basta procurar a linha do Telnet no arquivo /etc/inetd.conf e

comenta-la, vejamos o exemplo:

Page 25: Níveis de Execução e Serviços

24 UFCD 0838 - Administração

Reinicie o servidor após a alteração, para que o processo fique

completo.

Configuração dos serviços Xinetd no Ubuntu:

Digitamos o comando more /etc/Xinetd.d/daytime e obtivemos o

seguinte resultado:

Ilustração 12 - Exemplo de edição Telnet 2

Ilustração 13 - Print screen xinetd

Page 26: Níveis de Execução e Serviços

25 UFCD 0838 - Administração

Ilustração 14 - Print screen xinetd 2

Page 27: Níveis de Execução e Serviços

26 UFCD 0838 - Administração

Conclusão

Neste trabalho abordamos alguns conceitos fundamentais na

configuração de um servidor Linux. Começamos por explicar o

conceito de níveis de execução (runlevels), que permite definir

diferentes estados de funcionamento para um servidor Linux.

Um runlevel encontra-se associado a um conjunto de serviços em

modo standalone, que são activados quando mudamos para este

nível de execução. Alguns serviços podem ser activados num

contexto do serviço standalone especial, o serviço Xinetd, que poupa

recursos de sistema evitando assim manter a execução dos serviços

que não recebem pedidos frequentemente.

Apresentamos as configurações para a maioria das funcionalidades

nos restantes servidores, em cada um deles devemos decidir quais os

serviços efectivamente necessários, activando ou desactivando como

nos interessar.

A simplicidade é, normalmente, uma boa aliada ao adoministrador de

sistemas, uma regra que interessa manter sempre presente.

Page 28: Níveis de Execução e Serviços

27 UFCD 0838 - Administração

Bibliografia

O nosso trabalho teve como apoio:

O livro:

“Gestão de Sistemas de Redes Linux”;

O site:

http://www.xinetd.org;

http://tldp.org/LDP/sag/html/init-intro.html;

Algumas imagens foram retiradas do site:

http://www.google.pt/imghp?hl=pt-PT&tab=wi;