[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ next ]

Guia Foca GNU/Linux
Chapter 6 - Arquivos e daemons de Log


A atividade dos programas são registradas em arquivos localizados em /var/log . Estes arquivos de registros são chamados de logs e contém a data, hora e a mensagem emitida pelo programa (violações do sistema, mensagens de error, alerta e outros eventos) entre outros campos. Enfim, muitos detalhes úteis ao administrador tanto para acompanhar o funcionamento do seu sistema, comportamento dos programas ou ajudar na solução e prevenção de problemas.

Alguns programas como o Apache, exim, ircd e squid criam diversos arquivos de log e por este motivo estes são organizados em sub-diretórios (a mesma técnica é usada nos arquivos de configuração em /etc, conforme a padrão FHS atual).


6.1 Formato do arquivo de log

Um arquivo de log é normalmente composto pelos seguintes campos:

     Data|Hora|Máquina|daemon|mensagem

O campo máquina é o nome do computador que registrou a mensagem (a máquina pode atuar como um servidor de logs registrando mensagens de diversos computadores em sua rede). O campo daemon indica qual programa gravou a mensagem.

O uso dos utilitários do console pode ajudar muito na pesquisa e monitoração dos logs, por exemplo, para obter todas as mensagens do daemon kernel da estação de trabalho wrk1, eliminando os campos "wrk1" e "kernel":

     cat /var/log/*|grep 'wrk1'|grep 'kernel'|awk '{print $1 $2 $3 $6 $7 $8 $9 $10 $11 $12}'

Os parâmetros "$1", "$2" do comando awk indica que campos serão listados, (omitimos $4 e $5 que são respectivamente "wrk1" e "kernel"). Um bom utilitário para monitoração de logs está documentado em logcheck, Section 6.4.1.


6.2 Daemons de log do sistema

Os daemons de log do sistema registram as mensagens de saída do kernel (klogd) e sistema (syslogd) nos arquivos em /var/log .

A classificação de qual arquivo em /var/log receberá qual tipo de mensagem é controlado pelo arquivo de configuração /etc/syslog.conf através de facilidades e níveis (veja Arquivo de configuração syslog.conf, Section 6.2.1.1 para detalhes).


6.2.1 syslogd

Este daemon controla o registro de logs do sistema.

syslogd [opções]

opções
-f
Especifica um arquivo de configuração alternativo ao /etc/syslog.conf.
-h
Permite redirecionar mensagens recebidas a outros servidores de logs especificados.
-l [computadores]
Especifica um ou mais computadores (separados por ":") que deverão ser registrados somente com o nome de máquina ao invés do FQDN (nome completo, incluindo domínio).
-m [minutos]
Intervalo em minutos que o syslog mostrará a mensagem --MARK--. O valor padrão padrão é 20 minutos, 0 desativa.
-n
Evita que o processo caia automaticamente em background. Necessário principalmente se o syslogd for controlado pelo init.
-p [soquete]
Especifica um soquete UNIX alternativo ao invés de usar o padrão /dev/log.
-r
Permite o recebimento de mensagens através da rede através da porta UDP 514. Esta opção é útil para criar um servidor de logs centralizado na rede. Por padrão, o servidor syslog rejeitará conexões externas.
-s [domínios]
Especifica a lista de domínios (separados por ":") que deverão ser retirados antes de enviados ao log.
-a [soquetes]
Especifica soquetes adicionais que serão monitorados. Esta opção será necessária se estiver usando um ambiente chroot. É possível usar até 19 soquetes adicionais
-d
Ativa o modo de depuração do syslog. O syslog permanecerá operando em primeiro plano e mostrará as mensagens no terminal atual.

Na distribuição Debian, o daemon syslogd é iniciado através do script /etc/init.d/sysklogd.


6.2.1.1 Arquivo de configuração syslog.conf

O arquivo de configuração /etc/syslog.conf possui o seguinte formato:

     facilidade.nível                    destino

A facilidade e nível são separadas por um "." e contém parâmetros que definem o que será registrado nos arquivos de log do sistema:

Todas as mensagens com o nível especificado e superiores a esta especificadas no syslog.conf serão registradas, de acordo com as opções usadas. Conjuntos de facilidades e níveis podem ser agrupadas separando-as por ";".

OBS1: Sempre use TABS ao invés de espaços para separar os parâmetros do syslog.conf.

OBS2: Algumas facilidades como security, emitem um beep de alerta no sistema e enviam uma mensagem para o console, como forma de alerta ao administrador e usuários logados no sistema.

Existem ainda 4 caracteres que garantes funções especiais: "*", "=", "!" e "-":

Os caracteres especiais "=" e "!" podem ser combinados em uma mesma regra.

Exemplo: Veja abaixo um exemplo de um arquivo /etc/syslog.conf padrão de sistemas Debian

     #
     # Primeiro alguns arquivos de log padrões. Registrados por facilidade
     #
     
     auth,authpriv.*                 /var/log/auth.log
     *.*;auth,authpriv.none          -/var/log/syslog
     cron.*                         /var/log/cron.log
     daemon.*                        -/var/log/daemon.log
     kern.*                          -/var/log/kern.log
     lpr.*                           -/var/log/lpr.log
     mail.*                          /var/log/mail.log
     user.*                          -/var/log/user.log
     uucp.*                          -/var/log/uucp.log
     
     #
     # Registro de logs do sistema de mensagens. Divididos para facilitar
     # a criação de scripts para manipular estes arquivos.
     #
     mail.info                       -/var/log/mail.info
     mail.warn                       -/var/log/mail.warn
     mail.err                        /var/log/mail.err
     
     # Registro para o sistema de news INN
     #
     news.crit                       /var/log/news/news.crit
     news.err                        /var/log/news/news.err
     news.notice                     -/var/log/news/news.notice
     
     #
     # Alguns arquivos de registro "pega-tudo".
     # São usadas "," para especificar mais de uma prioridade (por 
     # exemplo, "auth,authpriv.none") e ";" para especificar mais de uma 
     # facilidade.nível que será gravada naquele arquivo.
     # Isto permite deixar as regras consideravelmente menores e mais legíveis
     #
     *.=debug;\
             auth,authpriv.none;\
             news.none;mail.none     -/var/log/debug
     *.=info;*.=notice;*.=warn;\
             auth,authpriv.none;\
             cron,daemon.none;\
             mail,news.none          -/var/log/messages
     
     #
     # Emergências são enviadas para qualquer um que estiver logado no sistema. Isto
     # é feito através da especificação do "*" como destino das mensagens e são
     # enviadas através do comando wall.
     #
     *.emerg                         *
     
     #
     # Eu gosto de ter mensagens mostradas no console, mas somente em consoles que 
     # não utilizo.
     #
     #daemon,mail.*;\
     #       news.=crit;news.=err;news.=notice;\
     #       *.=debug;*.=info;\
     #       *.=notice;*.=warn       /dev/tty8
     
     # O pipe /dev/xconsole é usado pelo utilitário "xconsole". Para usa-lo,
     # você deve executar o "xconsole" com a opção "-file":
     # 
     #    $ xconsole -file /dev/xconsole [...]
     #
     # NOTA: ajuste as regras abaixo, ou ficará maluco se tiver um um site 
     # muito movimentado...
     #
     daemon.*;mail.*;\
             news.crit;news.err;news.notice;\
             *.=debug;*.=info;\
             *.=notice;*.=warn       |/dev/xconsole
     
     # A linha baixo envia mensagens importantes para o console em que 
     # estamos trabalhando logados (principalmente para quem gosta de ter 
     # controle total sobre o que está acontecendo com seu sistema).
     *.err;kern.debug;auth.notice;mail.crit	/dev/console

6.2.2 klogd

Este daemon controla o registro de mensagens do kernel. Ele monitora as mensagens do kernel e as envia para o daemon de monitoramento syslogd, por padrão.

klogd [opções]

opções
-d
Ativa o modo de depuração do daemon
-f [arquivo]
Envia as mensagens do kernel para o arquivo especificado ao invés de enviar ao daemon do syslog
-i
Envia um sinal para o daemon recarregar os símbolos de módulos do kernel.
-I
Envia um sinal para o daemon recarregar os símbolos estáticos e de módulos do kernel.
-n
Evita a operação em segundo plano. Útil se iniciado pelo init
-k [arquivo]
Especifica o arquivo que contém os símbolos do kernel. Exemplos deste arquivo estão localizados em /boot/System.map-xx.xx.xx.
-o
Faz com que o daemon leia e registre todas as mensagens encontradas nos buffers do kernel, após isto o daemon é encerrado.
-p
Ativa o modo paranóia. Isto fará o klogd somente carregar detalhes sobre os módulos quando os caracteres Oops forem detectados nas mensagens do kernel. É recomendável ter sempre a última versão do klogd e evitar a utilização desta opção em ambientes críticos.
-s
Força a utilização da interface de chamadas do sistema para comunicação com o kernel.
-x
Esconde tradução EIP, assim ele não lê o arquivo /boot/System.map-xx-xx-xx.

A especificação de um arquivo com a opção -k é necessária se desejar que sejam mostradas a tabela de símbolos ao invés de endereços numéricos do kernel.


6.3 logger

Este comando permite enviar uma mensagem nos log do sistema. A mensagem é enviada aos logs via daemon syslogd ou via soquete do sistema, é possível especificar a prioridade, nível, um nome identificando o processo, etc. Seu uso é muito útil em shell scripts ou em outros eventos do sistema.

logger [opções] [mensagem]

Onde:

mensagem
Mensagem que será enviada ao daemon syslog
opções
-i
Registra o PID do processo
-s
Envia a mensagem ambos para a saída padrão (STDOUT) e syslog.
-f [arquivo]
Envia o conteúdo do arquivo especificado como mensagem ao syslog.
-t [nome]
Especifica o nome do processo responsável pelo log que será exibido antes do PID na mensagem do syslog.
-p [prioridade]
Especifica a prioridade da mensagem do syslog, especificada como facilidade.nível. Veja os tipos de prioridade/níveis em Arquivo de configuração syslog.conf, Section 6.2.1.1. O valor padrão prioridade.nível é user.notice
-u [soquete]
Envia a mensagem para o [soquete] especificado ao invés do syslog

Mais detalhes sobre o funcionamento sobre o daemon de log do sistema syslogd, pode ser encontrado em syslogd, Section 6.2.1

Exemplos: logger -i -t focalinux Teste teste teste, logger -i -f /tmp/mensagem -p security.emerg


6.4 Programas úteis para monitoração e gerenciamento de arquivos de logs


6.4.1 logcheck

É um programa usado para enviar um e-mail periodicamente ao administrador do sistema (através do cron ou outro daemon com a mesma função) alertando sobre os eventos que ocorreram desde a última execução do programa. As mensagens do logcheck são tratadas por arquivos em /etc/logcheck e organizadas em categorias antes de ser enviada por e-mail, isto garante muita praticidade na interpretação dos eventos ocorridos no sistema.

As categorias são organizadas da mais importantes para a menos importante, e vão desde "Hacking em andamento" (providências devem ser tomadas imediatamente para resolver a situação) até "eventos anormais do sistema" (mensagens de inicialização, mensagens dos daemons do sistema, etc.).

O tipo de mensagem que será incluída/ignorada nos logs enviados podem ser personalizadas pelo administrador do sistema através dos arquivos/diretórios dentro de /etc/logcheck. Nomes de arquivos/diretórios contendo a palavra "ignore" são usados para armazenar expressões regulares que NÃO serão enviadas pelo logcheck. É permitido o uso de expressões regulares perl/sed para especificar as mensagens nos arquivos de log.


6.4.2 logrotate

Usado para fazer backups dos logs atuais do sistema (programado via cron, ou outro daemon com a mesma função) e criando novos arquivos de logs que serão usados pelo sistema. Opcionalmente os arquivos de logs antigos serão compactados para diminuir a utilização de espaço em disco ou enviados por e-mail ao administrador. A rotação dos arquivos de logs proporciona maior agilidade quando precisamos encontrar algum detalhe útil (que seria mais difícil de se achar em um arquivo de log de 10MB ou maior).

A rotação de logs é feita de acordo com o tamanho do arquivo de logs especificado, mas a opção -f pode ser usada para "forçar" a rotação de logs. A opção -d fornece mais detalhes sobre o que o logrotate está fazendo. Seu arquivo principal de configuração é o /etc/logrotate.conf. Um modelo deste tipo de arquivo é o seguinte:

     #### Estas opções afetam globalmente o funcionamento do logrotate
     # roda os arquivos de log semanalmente
     weekly
     
     # mantém as últimas 4 cópias de logs anteriores
     rotate 4
     
     # Erros de não existência dos logs são enviados para o usuário root
     mail root
     
     # Cria novos arquivos de log (vazios) após rodar os antigos
     create
     
     # Descomente isso se desejar seus arquivos de logs compactados. O parâmetro
     # delaycompress é usado para que o primeiro log rodado seja mantido 
     # descompactado
     compress
     delaycompress
     
     # Executam os scripts em prerotate e postrotate a cada vez que os logs 
     # forem rodados. 
     nosharedscripts
     
     # Definimos um diretório que poderá conter definições individuais para 
     # diversos serviços no sistema, eles podem ir neste arquivo mas 
     # diversas configurações individuais podem deixar a interpretação
     # deste arquivo confusa.
     include /etc/logrotate.d
     
     
     # Define opções específicas para a rotação mensal de /var/log/wtmp, o novo arquivo 
     # de log somente será rodados caso tenha mais de 5MB (size 5M), será criado 
     # com a permissão 0664 e pertencerá ao usuário root grupo utmp
     # (create 0664 root utmp) e será mantida somente uma cópia do log anterior.
     # (rotate 1)
     /var/log/wtmp {
         monthly
         create 0664 root utmp
         size 5M
         rotate 1
     }
     
     # Define opções específicas para a rotação mensal de /var/log/btmp, se o arquivo 
     # não existir não será necessário gerar alertas (missinkok) que serão enviados 
     # ao administrador. O novo arquivo criado deverá ter a permissão 0664 com o 
     # dono root e grupo utmp (create 0664 root utmp) e será 
     # mantida somente uma cópia do log anterior.
     /var/log/btmp {
         missingok
         monthly
         create 0664 root utmp
         rotate 1
     }
     
     # Define opções específicas para a rotação mensal de /var/log/lastlog, o novo 
     # arquivo será criado com a permissão 0664 com o dono root e grupo 
     # utmp e será mantida somente uma cópia do arquivo de log anterior 
     # (rotate 1).
     /var/log/lastlog {
         missingok
         monthly
         create 0664 root utmp
         rotate 1
     }
     
     # Define opções específicas para a rotação diária de /var/log/messages, o 
     # arquivo será rodado se atingir o tamanho de 1Mb, então o
     # novo arquivo será criado com as mesmas permissões do arquivo anterior. 
     # O comando killall -1 syslogd será executado após a rotação 
     # para que o daemon syslogd funcione corretamente mas somente uma vez
     # durante a rotação de vários arquivos de logs (sharedscripts). 
     # Serão mantidas as 10 últimas cópias do arquivo /var/log/messages 
     # compactadas (o parâmetro compress foi especificado na seção global deste
     # arquivo de configuração).
     /var/log/messages {
         daily
         size 1M
         sharedscripts
         postrotate
           /sbin/killall -1 syslogd
         endscript
         rotate 10
     }
     
     # Define opções específicas para a rotação mensal dos arquivos em /var/log/mirror/*, 
     # a falta desses arquivos não precisa ser notificada ao administrador (missingok), 
     # mesmo assim o parâmetro "nomail" evitará isto de qualquer forma. Os logs 
     # rodados não serão compactados (nocompress) e serão mantidas as últimas 7 cópias
     # dos logs.
     /var/log/mirror/* {
        montly
        nomail
        missingok
        nocompress
        rotate 7
     }
     	    
     # logs específicos do sistema podem ser configurados aqui. As opções padrões e 
     # definidas na seção global deste arquivo serão usadas para processar os 
     # arquivos de logs restantes.

Qualquer definição de parâmetro especificado no arquivo de configuração, substituirá as definições anteriores. Quando o número máximo de logs mantidos pela opção rotate [num] é atingida, os logs eliminados serão enviados para o usuário especificado na opção mail [email]. A utilização da diretiva nomail evita isso.

OBS: É importante enviar um sinal HUP ao programa que grava para aquele arquivo de log para que não ocorram problemas após a rotação, isto é feito usando o parâmetro postrotate.


6.5 Configurando um servidor de logs

As mensagens das máquinas de sua rede podem ser centralizadas em uma única máquina, isto facilita o gerenciamento, análise e solução de problemas que ocorrem nas máquinas da rede. Mais importante ainda é que qualquer invasão a estação de trabalho não será registrada localmente (podendo ser apagada posteriormente pelo invasor, isso é comum).

Configurando o servidor de logs
Adicione a opção -r ao iniciar o daemon syslogd para aceitar logs enviados das máquinas clientes. Na distribuição Debian modifique o arquivo /etc/init.d/sysklogd colocando a opção -r na variável SYSLOGD e reinicie o serviço usando ./sysklogd restart.

Adicionalmente poderão ser usadas as opções -l máquina (é um "L" minúsculo não uma letra "I") para registrar o nome FQDN da máquina e -h para redirecionar conexões a outros servidores de logs (veja syslogd, Section 6.2.1).

Configurando máquinas cliente
Modifique o arquivo /etc/syslogd.conf (veja Arquivo de configuração syslog.conf, Section 6.2.1.1 colocando o nome do computador seguido de "@" para redirecionar as mensagens dos logs:
     auth,authpriv.*                 @servlog
     *.*;auth,authpriv.none          @servlog
     cron.*                          @servlog
     daemon.*                        @servlog
     kern.*                          -/var/log/kern.log
     kern.*						@servlog
     lpr.*                           @servlog
     mail.*                          /var/log/mail.log
     user.*                          -/var/log/user.log
     user.*						@servlog
     uucp.*                          -/var/log/uucp.log

E reinicie o daemon syslogd da máquina cliente para re-ler o arquivo de configuração: killall -HUP syslogd ou /etc/init.d/sysklogd restart.

OBS1: Mantenha o relógio do servidor de logs sempre atualizado (use o chrony ou outro daemon de sincronismo NTP para automatizar esta tarefa).

OBS2: É interessante compilar um daemon syslogd personalizado modificando o nome e localização do arquivo /etc/syslog.conf para enganar possíveis invasores. Isto pode ser modificado no arquivo syslogd.c na linha:

     #define _PATH_LOGCONF   "/etc/syslog.conf"

Use a imaginação para escolher um nome de arquivo e localização que dificulte a localização deste arquivo.

OBS3: Em uma grande rede, é recomendável configurar um computador dedicado como servidor de log (desativando qualquer outro serviço) e configurar o iptables para aceitar somente o tráfego indo para a porta UDP 514 (syslogd):

     iptables -P INPUT DROP
     iptables -A INPUT -p udp --dport 514 -j ACCEPT

[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ next ]

Guia Foca GNU/Linux

Versão 6.10 - Sunday, 03 de November de 2002
Gleydson Mazioli da Silva gleydson@cipsga.org.br