segunda-feira, 26 de outubro de 2015

TTYREC grava o que é digitado no terminal

O ttyrec é um pacote livre utilizado para gravar tudo que for feito no terminal como se fosse um arquivo de vídeo.

Objetivo
Explicar a instalação e o funcionamento do ttyrec para uso corporativo ou pessoal, fazendo com que tudo que for digitado no teclado seja capturado e enviado por e-mail, mantendo um histórico de cada usuário.
Ferramentas
Neste projeto iremos utilizar uma máquina virtual Debian 6 Squeeze com acesso a Internet. Caso tenha dificuldade de configurar uma máquina virtual, acesso o tutorial de criação de máquinas virtuais aqui no Mundo TI Brasil.
Configurando
Primeiro de tudo teremos que fazer login como superusuário (root) no Shell. Por questões de compatibilidade com este tutorial, recomendo executar os 2 comandos seguintes antes de realizar a instalação do pacote ttyrec.
# apt-get update
# apt-get upgrade
Após executar os 2 comando informados acima, execute o seguinte comando:
# apt-get install ttyrec
A figura a baixo exibe como proceder. Observe que toda instalação e configuração serão feitas como root.
ttyrec01
Agora iremos realizar um teste para saber se esta tudo funcionando. Neste teste iremos apenas executar os comandos dfls -l pwd, seguido do comando clear.
Para fazer com que o ttyrec funcione, execute:
ttyrec
Após digitar o comando acima e pressionar <enter>. O comando acima funciona como start. A partir daí tudo que for digitado será gravado.
Digite os seguintes comandos:
# ls -l
# pwd
# df
#clear
Para finalizar a gravação, execute o seguinte comando:
# exit
Ao executar o comando acima, note que nada mudou exceto que foi criado um arquivo na posição atual onde você se encontra chamado de:ttyrecord. Este arquivo contém todos os comandos digitados acima.
ttyrec02
O comando exit executado no final funciona como stop por padrão ele cria o arquivo com as permissões de leitura para todos, sendo que somente o dono do arquivo possui permissão de gravação.
Agora iremos rodar a gravação. Para realizar esta etapa, execute o seguinte comando:
ttyplay ttyrecord
Depois de alguns instantes, você veria tudo que foi feito.
Agora preste atenção na imagem a seguir. Realizei um teste onde irei criar arquivos e adicionar algum conteúdo dentro deles.
ttyrec03
Analisando o 1º quadro, criei uma diretório chamado erick e um arquivo chamado martinez.
No 2º quadro, iniciamos a gravação e executamos alguns comandos e ao final foi executado o comando exit.
No 3º quadro, foi inicializado a gravação. Note que em momento algum, ele sobrescreve o arquivo original ou exibe uma mensagem de que já existe um arquivo com o nome.
O exemplo acima serviu para mostrar que não existe problema em executar o comando ttyplay.
Opções do comando ttyrec
Podemos utilizar algumas opções do comando, tais como:
-a
Anexar a saída para o arquivo ou ttyrecord, ao invés de substituí-lo.
-u
Com esta opção, ttyrec chama automaticamente uudecode e salva sua saída quando os dados uuencoded aparecer na sessão. Ele permitirá que você transfira arquivos de host remoto. Você pode chamar ttyrec com esta opção, acesse o host remoto e invocar uuencode com ele para o arquivo que você deseja transferir.
-e comando
Especificar um comando a ser monitorado. Por exemplo, podemos informar que queremos gravar somente a execução do comando rm.
Exemplo:
# ttyrec -e rm
-n
Mostram na tela todos os comandos executados. Não há interatividade, apenas mostra tudo que foi feito.
Exemplo:
ttyplay -n ttyrecord
-s
Determinar a velocidade de reprodução do ttyrecord. Por padrão ele utiliza o valor 1, variando de 1 (mais lento) até 10 (rápido).
Exemplo:
ttyplay -s2 ttyrecord
Se desejarmos manipular a velocidade de reprodução, poderemos utilizar as seguintes letras:
  • S à Diminui a velocidade de reprodução.
  • F à Aumenta a velocidade de reprodução.
Criando um histórico de acesso
Após o entendimento do ttyrec e ttyplay, vamos criar um diretório e dentro dele irá conter os arquivos de gravação, para mantermos um histórico de ações de cada usuário.
Como padrão de extensão irei utilizar o final .tty nos arquivos criados, assim saberemos que os arquivos de log dele, por exemplo: erick-08:50-09-05-2013.tty.
Para criar um histórico de acesso, execute as seguintes linhas:
Primeiro, iremos criar o diretório ttyrec dentro de /var/log/
mkdir -m 777 /var/log/ttyrec
Agora iremos editar o arquivo /etc/profile, o qual será responsável por chamar o ttyrec, independente do usuário que for logar no sistema.
vim /etc/profile
Entre em modo de edição (aperte a letra i do teclado) e na última linha do arquivo adicione as seguintes linhas da imagem 4 e salve as alterações (Aperte uma vez o ESC do teclado e em seguida ).
ttyrec04
Estamos definindo nas linhas acima que quando o usuário log no sistema seja iniciado a gravação do que ele fizer e claro estou utilizando o comando date com as opções %H,%M,%d,%m%Y para criar um log de data.
Ao final, teremos um arquivo contendo o nome do usuário, a hora e minuto em que ele iniciou e a data. A imagem 5 mostra como irá ficar o formato do arquivo.
ttyrec05
Toda vez que o usuário logar, será criado um novo arquivo de gravação. A imagem 6 mostra que o usuário root realizou logon no mesmo dia, mas em hora diferente e que o usuário erick também fez login no sistema.
ttyrec06
Lembrando que para reproduzir a gravação, basta executar o comando ttyplay seguido do arquivo que deseja ver.
Agora a parte boa. Caso não estejamos na empresa, como teremos acesso a esses arquivos? Via SSH? Via FTP? Mas pare e pense, teremos que efetuar login para ter acesso a esses arquivos, então porque não configuramos para que de tempo em tempo ele envie um relatório para o nosso e-mail.
A próxima etapa deste tutorial será para configurar o crontab (Agendador de tarefas do Linux), para que seja enviado um e-mail ao final do dia com os logs de acesso de todos os usuários. Para isso acesse o seguinte link, onde irá explicar como você deve fazer para configurar o e-mail:
www.mundotibrasil.com.br/solucao-para-envio-de-email-de-forma-simples
Sendo que iremos realizar algumas alterações do tipo:
Adicionar as seguintes linhas dentro do arquivo de configuração do ssmtp (/etc/ssmtp/ssmtp.conf):
AuthUser=seuemail@gmail.com
AuthPass=suasenha
Conforme imagem 7.
 ttyrec07
Teremos que instalar o mpack (pacote adicional para que possamos enviar anexo) Caso não esteja instalado, execute a seguinte linha para quer você possa instalar.
apt-get install mpack
Após a instalação vamos realizar um teste de envio de e-mail com anexo, logo execute os seguintes comandos:
# echo “Funcionou o anexo” > teste.txt
mpack -s “Teste de envio de email” -a teste.txt martinezlinux@gmail.com
Claro que coloque seu e-mail. A opção -a serve para informar que será adicionado um anexo e o -s é o Assunto do e-mail.
Caso não funcione, verifique novamente todos os passos.
Criando um script para automatizar o envio das gravações
Nesta parte do tutorial, você irá criar um script e agendar no cron para que sejam enviados todos os dias as gravações. Claro que você pode configurar o envio de acordo com sua necessidade, como por exemplo: semana, mensal, trimestral, etc.
Primeiro, criar um arquivo dentro de /root/script/.
mkdir /root/script
vim /root/script/envgrav.sh
chmod +x /root/script/envgrav.sh
Segundo, dentro do script terá que conter as seguintes linhas:
ttyrec08
Na imagem 8, foram criados 4 variáveis, onde:
  • NOME à O nome que terá o arquivo após ser compactado.
  • LOG à Localização de onde estão os registros gravados.
  • EMAIL à Endereço de e-mail que irá receber as gravações.
  • ASS à Campo referente ao assunto.
Visão geral:
Após definir as variáveis, iremos compactar utilizando o comando tar depois disso será enviado o e-mail com o arquivo em anexo e em seguida deletar este arquivo compactado e os logs já cadastrados.
Caso deseje manter os históricos, basta comentar as linhas do rm.
Agora para automatizar isso tudo que fizemos, iremos utilizar o agendamento do Linux.
Primeiro, vamos editar o crontab:
vim /etc/crontab
Dentro do arquivo, você irá definir a hora que será executada o script envgrav.sh, seguindo a seguinte lógica:
ttyrec09
Minuto – Hora – Dia do Mês – Mês – Dia da semana – usuário – localização do script
Quando tiver *, significa que será feito sempre.
No exemplo acima, esta definido que as 23:59 de todos os dias referente a todos os meses durante as sextas feiras será executo o script.
Após realizar a edição salve o documento e por segurança reinicie o cron.
Execute o seguinte comando:
# service cron restart
Pronto, agora só ficar aguardando os logs.

TTYREC - Gravando Sessões do Terminal Linux

ttyrec é um software que permite gravar tudo que for feito no terminal do Linux.

Com ele é possível gravar a saída TTY de um programa em modo de texto, juntamente com a data e hora e, em seguida, exibi-lo como se fosse um vídeo. É muito útil para realizar auditorias em servidores Linux.

Este breve tutorial tem como objetivo demonstrar a instalação e a utilização do software em um ambiente rodando Debian 7, mas nada impede de ser instalado em outras distribuições.

Mais informações podem ser encontradas em:

PROCEDIMENTOS

Primeiramente, faça o login no servidor e como root rode os seguintes comandos:

# apt-get update
# apt-get install ttyrec

Feito isso o software já estará instalado e pronto para uso. Veja algumas das opções que podem ser utilizadas para gravar:

A opção "-a" permite anexar a saída para o arquivo ou ttyrecord, ao invés de substituí-lo.

Exemplo:

# ttyrec -a arquivo.rec

A opção "-u" chama automaticamente uudecode e salva sua saída quando os dados uuencoded aparecerem na sessão. Ele permitirá que você transfira arquivos de hosts remotos. Você pode chamar o ttyrec com esta opção, acessar o host remoto e invocar uuencode com ele para o arquivo que você deseja transferir.

Exemplo:

# ttyrec -u arquivo.rec

A opção "-e" é utilizada para que você possa monitorar a saída de um comando. Pode-se gravar apenas a execução do comando find.

Exemplo:

# ttyrec -e find

Para reproduzir as gravações utilizaremos o ttyplay. A opção "-n" mostra na tela a saída de todos os comandos que foram executados, parecidos com o comando history.

Exemplo:

# ttyplay -n arquivo.rec

A opção "-s" determina a velocidade de reprodução. Varia de 1 (velocidade normal) a 10 (rápido).

Exemplo:

# ttyplay -s 5 arquivo.rec

No comando acima o vídeo será reproduzido 5 vezes mais rápido que o normal.

Obs.: as opções citadas acima foram retiradas do manual do ttyrec, para mais acesse no seu terminal:

$ man ttyrec

SCRIPT

Criando um script para gravar todas as sessões do terminal, assim que um usuário logar no servidor

Primeiro iremos criar o diretório onde ficarão os arquivos do ttyrec. Eu, por exemplo, costumo usar o caminho /sis-bkp/audit/ttyrec, porém você pode modificar da forma que achar necessário.

# mkdir -m 777 -p /sis-bkp/audit/ttyrec

O comando acima cria todos os diretórios (opção "-p") e ainda seta a permissão 777 para o diretório ttyrec (opção "-m 777") para que todos os usuários do sistema consigam escrever no mesmo.

Para finalizar, precisaremos editar o arquivo /etc/profile, que será responsável por chamar o utilitário ttyrec para gravar as sessões de quaisquer usuários que se conectarem no servidor.

Primeiro, faça um backup do arquivo original para restaurar caso haja problemas:

# cp /etc/profile /etc/profile.bkp

Depois, com um editor de sua preferência, eu utilizei o Vim:

# vim /etc/profile

No final do arquivo, salte uma linha e inclua:

# Gravar sessões do terminal
if [ `id -u` ];
then
LOG="/sis-bkp/audit/ttyrec/log-${LOGNAME}-"`date +%d-%m-%Y_%H:%M`".rec"
ttyrec -u $LOG
fi
# Fim gravar sessões do terminal

Salve o arquivo e estará pronto. Toda vez que um usuário logar no sistema, será gerado um arquivo com extensão ".rec" dentro de /sis-bkp/audit/ttyrec com o seguinte formato "log-usuário-data_hora.rec".

Obs.: caso o seu servidor permita acesso via SSH para o usuário root, remova para que não haja confusão de quem logou no mesmo. Deixe apenas que usuários comuns possam logar via SSH, pois assim o log será gerado com o nome do usuário.