Você está na página 1de 28

Níveis de Execução

e Serviços
Í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

1
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

2
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

3
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.

4
UFCD 0838 - Administração
Vejamos o esquema seguinte para nos ajudar a perceber todo o
processo Init:

Ilustração 2 - Esquema processo int

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.

5
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

6
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.

7
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

8
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

9
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

10
UFCD 0838 - Administração
Em seguida vamos apresentar um ficheiro inittab mínimo, para
análise.

Ilustração 5 - Ficheiro inittab

11
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.

Ilustração 6 - inittab

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.

12
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:

13
UFCD 0838 - Administração
Ilustração 7 - Ficheiro /etc/services

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.

14
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).

15
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:

16
UFCD 0838 - Administração
Ilustração 8 - Print Screen standalone 1

17
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

18
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

19
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

20
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.

21
UFCD 0838 - Administração
Exemplo do arquivo /etc/inetd.conf:

Ilustração 10 - Ficheiro /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 11 - Exemplo de edição Telnet

22
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:

23
UFCD 0838 - Administração
Ilustração 12 - Exemplo de edição Telnet 2

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 13 - Print screen xinetd

24
UFCD 0838 - Administração
Ilustração 14 - Print screen xinetd 2

25
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.

26
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;

27
UFCD 0838 - Administração