Exemplos de Serviços

Nesta seção serão mostrados alguns serviços utilizados em um sistema, tanto em um servidor como em uma máquina cliente. Para verificar os outros serviços existentes, dirija-se ao diretório /etc/rc.d/init.d ou /etc/init.d (um link para o diretório anterior).

crond

O crond é um serviço que permite a execução periódica de tarefas, sem assistência do administrador. É possível utilizar o crond para executar várias tarefas, como por exemplo:

  • Limpar diretórios de arquivos temporários como o /tmp e o /var/tmp.

  • Rotacionar arquivos de registro para evitar que se tornem muito extensos.

  • Verificar o funcionamento de outros serviços.

Para configurar um agendamento, é preciso verificar se, no mínimo, o pacote vixie-cron está instalado (se tiver dúvidas, leia no capítulo sobre rpm e apt para mais detalhes). É interessante instalar também o pacote crontabs, que cria automaticamente um arquivo crontab predefinido para o superusuário, usado para agendar execuções de vários programas.

O agendamento de tarefas pode ser feito através do Webmin. Para isso, clique no botão Agendar uma nova tarefa no cron localizado em Sistema -> Serviços agendados no cron. Veja a Figura 7.3. Agendamento de uma Tarefa - Cron, que mostra um exemplo de tarefa agendada.

Neste exemplo, o superusuário irá executar um envio de e-mail para , indicando o assunto Lembrete e com o texto do e-mail sendo "Spam é crime!". Esta tarefa será executada todos os dias do mês, todos os meses do ano, porém apenas aos domingos, segundas e terças-feiras, sendo que nesses dias um e-mail será enviado de três em três horas para a conta indicada.

Agendamento de uma Tarefa - Cron

Figura 7.3. Agendamento de uma Tarefa - Cron

É claro que as funções e envio e recebimento de e-mails devem estar funcionando para que este exemplo funcione. Em seguida, clique no botão Criar para colocar esta entrada no cron.

Assim como funciona para o superusuário, também para usuários comuns você pode fazer este agendamento neste mesmo local. O processo de preenchimento é igual ao processo utilizado para o superusuário.

[Tip]Dica

Para selecionar as entradas desejadas nos horários personalizados, pressione a tecla Ctrl e selecione as opções desejadas.

O administrador do sistema também pode filtrar os usuários que poderão criar agendamentos. O link Controle de acesso as tarefas do cron permite esta configuração, que é auto-explicativa.

Se o serviço crond estiver parado, basta reinicializá-lo através do Webmin (Sistema -> Boot e Shutdown). Se ele já estiver sendo executado, não é necessário reinicializá-lo, pois a tarefa será agendada automaticamente.

O agendamento das tarefas pode ser feito também através da linha de comando. Cada usuário do sistema pode executar o seu agendamento separadamente através do comando crontab. Caso exista o arquivo /etc/cron.deny, os usuários listados neste arquivo não poderão usar o comando crontab. Caso exista o arquivo /etc/cron.allow, somente os usuários listados neste arquivo terão acesso ao comando crontab.

A configuração do serviço crond também pode ser feita, somente pelo superusuário, através do arquivo /etc/crontab. Para agendar uma tarefa, pode-se especificar o minuto, a hora, o dia do mês, o mês e o dia da semana.

Tabela 7.1. Campos do Arquivo /etc/crontab

Campo

Valores permitidos

minuto

0-59

hora

0-59

dia do mês

1-31

mês

1-12 (ou os nomes - em inglês)

dia da semana

0-7 (0 e 7 sendo domingo, ou nomes - em inglês)

O campo pode conter um asterisco, o que significa que todos os períodos serão marcados, sejam eles horários, dias ou meses. Pode-se utilizar intervalos de números, que são indicados por dois números separados por um hífen. Por exemplo, 8-10 em uma entrada horas especifica execução às 8, às 9 e às 10 horas.

É possível utilizar listas, que são representadas por números (ou intervalos) separados por vírgulas, como nos seguintes exemplos: 1,2,5,6; 12-17, 21,23.

Um /número imediatamente após um intervalo especifica um passo no valor do número através do intervalo. Por exemplo, 0-23/2 pode ser usado no campo das horas para especificar que o comando deve ser executado a cada duas horas (0,2,4,6,8,10,12,14,16,18,20,22). Estes intervalos também são permitidos depois de um asterisco. Logo, se você simplesmente desejar que uma ação ocorra a cada duas horas use */2.

O último campo serve para especificar o comando, que será executado pelo interpretador de comandos especificado na variável SHELL do arquivo /etc/crontab.

Portanto, o formato de uma linha de comando no arquivo /etc/crontab segue basicamente a seguinte estrutura:

min hora dia_mês mês dia_semana comando

ou seja, são seis campos, que poderão ser preenchidos de acordo com o que foi descrito anteriormente. Veja o Exemplo 7.2. Exemplo de Arquivo cron que mostra um exemplo do arquivo cron.

Exemplo 7.2. Exemplo de Arquivo cron

# usa /bin/sh para executar comandos, independentemente
# do que o /etc/passwd diz.
SHELL=/bin/sh
# envia (por e-mail) toda saída para o usuário indicado,
# independentemente de  quem é o dono do crontab.
MAILTO=joao

# executa às 0h05, todo dia.
5 0 * * *    $HOME/bin/daily.job >> $HOME/tmp/out 2>&1

# executa às 14h15 no dia primeiro de cada mês - a
# saída é enviada para joao
15 14 1 * *     $HOME/bin/monthly

# executa às 22h00 em dias de semana.
0 22 * * 1-5   mail -s "São 22 horas" joao
23 */2 * * * echo "executa a 0h23, 2h23, ... todo dia"
5 4 * * sun     echo "executa às 4h05 todo domingo"

Se o serviço crond já estiver sendo executado, não será necessário reinicializá-lo, pois ele irá executar as tarefas agendadas automaticamente. Se ele não estiver sendo executado, pode-se executar o serviço para inicializar o serviço:

# service crond start
Iniciando cron:                     [  OK  ]
[Note]Nota

Para que usuários comuns agendem suas tarefas, o arquivo de cron pode ser criado através do comando crontab -e, que abrirá um editor de textos para a montagem das opções. O formato para este arquivo é igual ao formato do arquivo do superusuário (campos de horas, ação, etc.).

Para mais detalhes sobre comandos verifique as páginas de manual do cron (man crontab e man cron).

atd

O atd é um serviço que executa comandos especificados em um determinado horário fornecido. Ele é muito similar ao crond, mas está limitado a uma única execução: o comando é executado em horário e datas fornecidas, mas não repetidas vezes como o cron.

É possível utilizar o Webmin para configurar o atd. Na página Sistema, selecione o ícone Comandos agendados. Você verá uma tela como a da Figura 7.4. Agendamento de uma Tarefa - At:

Agendamento de uma Tarefa - At

Figura 7.4. Agendamento de uma Tarefa - At

Escolha o usuário que irá executar a tarefa, a data/hora da execução e qual é a tarefa/comando.

A opção Executar no diretório especifica onde o comando at será executado, e assim, o comando cd será executado antes do comando propriamente configurado. É importante observar que este diretório deve estar acessível para o usuário que irá executar os comandos, caso ele não seja o superusuário.

No campo Comandos a executar você deve colocar o comando que o at deve executar na data/hora especificada, e caso você deseje incluir vários comandos, basta colocá-los em linhas separadas, e o at irá executá-las na seqüência fornecida. Para terminar, clique em Criar para finalizar o agendamento da tarefa.

Para utilizar o atd pela linha de comando, é usado o comando at, que aceita várias opções de agendamento. O superusuário pode usar este comando em qualquer caso. Para os outros usuários, a permissão para usar o comando at é determinada pelos arquivos /etc/at.allow e /etc/at.deny.

Suponha então que exista um script chamado baixar-kernel, com permissões de execução. Primeiramente, deve-se inicializar o serviço atd:

# service atd start
Iniciando o servidor at:               [  OK  ]

Após inicializado, o serviço estará pronto para receber uma tarefa para ser agendada através do comando at. Por exemplo, para agendar a execução do script anterior para às 4 horas da madrugada, deve-se fazer da seguinte maneira:

# at -f baixar-kernel 4:00
warning: commands will be executed using /bin/sh
job 1 at 2004-04-17 04:00

O parâmetro -f faz com que o comando obtenha as informações do arquivo indicado (baixar-kernel). É claro que além de executar o serviço, você deverá também estar conectado à Internet neste horário, mas se você usar scripts de conexão, será extremamente simples adicionar no baixar-kernel o comando para efetuar a conexão antes de tentar baixar o kernel efetivamente.

Um outro exemplo bastante simples:

# at 18:00
at> ls /tmp > ~/teste_atd
at> <EOT>
warning: commands will be executed using /bin/sh
job 4 at 2004-04-05 18:00

A diferença aqui é que é mostrado um prompt, onde o usuário pode digitar o comando para agendar; para finalizar o agendamento, basta pressionar Ctrl-D e se o serviço atd já estiver rodando, a tarefa já estará agendada.

Mais detalhes sobre o serviço e o comando poderão ser obtidos nas páginas de manual (man at e man atd).

syslog

O kernel e muitos programas do sistema produzem avisos, mensagens de erros e outros alertas. É importante que estas mensagens sejam armazenadas para que possam ser lidas a qualquer momento. O serviço responsável pelo arquivamento destas mensagens é o syslog. Ele pode ser configurado para gravar as mensagens em diferentes arquivos, de acordo com o nível de importância ou origem.

O syslogd é o serviço responsável por estas tarefas e sua configuração pode ser feita através do Webmin, ou através da configuração do arquivo. Os detalhes de sua configuração serão vistos em um capítulo posterior.

network

O serviço network auxilia a manutenção da rede, gerenciando todas as interfaces de rede configuradas para serem habilitadas durante a inicialização, e assim, gerencia a manutenção das interfaces de uma máquina para rede.

O pacote utilizado por este serviço é o initscripts. Ele contém scripts usados durante a inicialização do sistema para mudar níveis de execução (runlevels) e desligar o sistema corretamente. O pacote contém principalmente scripts que ativam/desativam as interfaces de rede que a máquina possui.

Para iniciar o serviço de rede, pode-se utilizar o Webmin (pelo caminho Sistema -> Boot e Shutdown) ou através da linha de comando, usando o service.

portmap

Portmap é um serviço que basicamente converte programas RPC[26] para o protocolo DARPA[27].

Quando um serviço RPC é inicializado ele envia através do portmap qual a porta que está “ouvindo” e quais os programas para os quais ele está preparado para servir. Quando uma máquina cliente deseja fazer uma chamada RPC, ela primeiramente irá contatar o portmap do servidor para determinar o número da porta pela qual os pacotes RPC devem ser enviados. Portanto, o portmap deve estar sendo executado a fim de receber chamadas RPC e deve ser inicializado antes dos servidores RPC serem invocados.

O portmap é utilizado por alguns serviços que necessitam de gerenciamento das conexões RPC, como por exemplo o NFS e NIS. É aconselhável deixar o portmap ser automaticamente executado, pois muitos serviços e programas precisam obrigatoriamente dele.

Para iniciar este serviço, pode-se utilizar o Webmin ou usar o comando service:

# service portmap start

xinet

Quando instala-se o Conectiva Linux, por padrão, o superserver instalado é o xinet.

O xinet é um servidor de serviços de rede, e possui vários recursos, como os citados abaixo:

  • Controle de acesso baseado em destino e hora;

  • Redirecionamentos;

  • Grande capacidade de logs;

  • Ligar serviços a interfaces específicas;

  • Possibilidade de limitar o número de máquinas simultâneas em um determinado serviço.

Toda a configuração do xinet é feita através do arquivo /etc/xinetd.conf. O exemplo a seguir mostra algumas configurações que poderão ser utilizadas pelo arquivo /etc/xinetd.conf, sendo que as configurações inseridas dentro da sessão defaults serão aplicadas para todos os outros serviços configurados.

defaults
{
        instances               = 25
        per_source              = 10
        log_type                = SYSLOG authpriv
        log_on_success  = HOST PID USERID
        log_on_failure = HOST RECORD USERID
}

instances: Esta opção controla o número de conexões simultâneas em um serviço e sua configuração pode acabar evitando um ataque do tipo DoS (Denial of Service) em seu serviço.

per_source: Controla o número máximo de conexões originadas de uma mesma máquina.

log_type: Indica como o xinetd irá logar (registrar) as requisições. eles podem ser direcionados para um arquivo, ou deixar que o sistema registre tudo (usando o SYSLOG).

log_on_success: Informa ao xinetd quais informações ele deverá capturar do usuário que conseguir logar.

log_on_failure: Indica quais informações deverão ser capturadas dos usuários que não conseguirem logar.

Caso o usuário queira configurar o serviço de telnet, por exemplo, ele poderá fazê-lo da seguinte maneira:

service telnet
          {
             flags = IPv4
             log_type = FILE /var/log/telnet.log
             socket_type = stream
             protocol = tcp
             wait = no
             user = root
             server = /usr/sbin/in.telnetd
             bind = 200.1.1.20
             redirect = 192.168.1.111 23
             only_from = 192.168.1.0/24
          }

onde:

flags: Recebe as opções passadas em linha de comando para o daemon. No exemplo anterior, fala para o serviço telnet usar explicitamente o protocolo IPv4.

socket_type: Especifica o tipo de socket usado: dgram, stream ou raw.

protocol: Indica o protocolo usado pelo serviço.

wait: Diz ao xinetd se ele deve chamar o serviço sobre demanda ou não.

user: Usuário que executará o serviço.

server: Localização do daemon do serviço.

bind: O endereço IP ou nome da máquina especificado aqui será origem quando um serviço for redirecionado com o uso da opção redirect.

redirect: Nome ou IP da máquina que receberá a requisição do serviço.

only_from: Limita os endereços de IP que terão acesso a determinado serviço.

Para mais informações sobre a configuração do xinetd.conf e um arquivo exemplo, consulte a página de manual do arquivo executando o comando:

$ man xinetd.conf

O xinetd também pode ser configurado pelo Webmin. Para isso, dirija-se a sua página de configuração, localizada através de Rede -> Serviços xinetd.

Esta tela mostra as informações sobre os serviços configurados no xinetd, estejam eles sendo executados no momento ou não; para habilitar um serviço que está parado, clique sobre o seu nome, modifique o parâmetro da opção Serviço habilitado? para Sim e inicie o xinetd (Iniciar servidor) ou aplique as modificações, caso ele já esteja sendo executado.

Para criar um novo serviço, clique no link Criar um novo serviço internet e preencha as opções; é importante que você já possua todas as informações em mãos antes de iniciar a criação do novo serviço. Caso tenha dúvidas, poderá consultar a configuração dos outros serviços que já estão sendo administrados pelo xinetd. Clique no botão Criar e reinicie o servidor, ou aplique as modificações.

Configuração do Xinet pelo Webmin

Figura 7.5. Configuração do Xinet pelo Webmin



[26] Tipo de protocolo que permite a um programa de um computador executar uma aplicação do servidor.

[27] Defense Advanced Research Projects Agency ou Agência de Projetos de Pesquisa Avançada de Defesa.