níveis de execução e serviços
Post on 29-Jun-2015
350 Views
Preview:
TRANSCRIPT
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
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
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
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.
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
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
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.
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
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
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
11 UFCD 0838 - Administração
Em seguida vamos apresentar um ficheiro inittab mínimo, para
análise.
Ilustração 5 - Ficheiro inittab
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
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:
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
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).
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:
17 UFCD 0838 - Administração
Ilustração 8 - Print Screen standalone 1
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
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
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
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.
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
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:
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
25 UFCD 0838 - Administração
Ilustração 14 - Print screen xinetd 2
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.
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;
top related