Monitoramento de usuário via screenshots
Publicado por Maicon Souza (última atualização em 18/10/2016)
[ Hits: 3.348 ]
Homepage: ---
Esse script foi criado devido a uma necessidade real. Na empresa onde trabalho foi necessário criar uma rotina de monitoramento das atividades dos usuários. Foi definido que screenshots deveriam ocorrer a cada "X" segundos. Tentei dividir o script em funções, para facilitar o entendimento.
Como funciona:
* Após o logon do usuário, o script fica tirando screenshots e envia por FTP para um local definido (exemplo: um servidor em sua rede).
Pacotes necessários:
# apt-get install imagemagick -y
# apt-get install xdotool -y
# apt-get install gnome-schedule -y
# apt-get install mysql-server
*** Provavelmente seu servidor de banco de dados estará em outra máquina.
Se os pacotes não forem instalados no Desktop do usuário, os comandos do script não serão executados corretamente.
Configurações:
Dentro do pacote compactado, existem dois arquivos (.sql, .sh).
1 - Suba a base de dados "so_linux_configs", para o MYSQL.
2 - Edite o arquivo "Start_Screen", alterando o endereço do banco e suas credenciais de acesso.
3 - Usando o phpMyAdmin, edite a tabela "lx_brmonitor_parametros", respeitando os parâmetros abaixo:
SENHA_ZIP = Senha usada nos arquivos compactados;
FREQUENCIA = Frequência em que os Screenshots serão tirados (em segundos);
LIMPAR_DIR_APOS = Quantidade de dias em que os Screenshots ficarão no disco local (máquina do usuário);
USER_FTP = Usuário FTP;
SENHA_FTP = Senha FTP;
IP_FTP = IP do FTP, para onde serão enviados os screenshots;
4 - Crie uma tarefa no Gnome Schedule, fazendo com que o script rode a cada minuto (* * * * *).
*** Em breve espero gravar um vídeo, mostrando o funcionamento.
#!/bin/bash # Autor Maicon Souza # Script Screenshots Ubuntu # Data: 11-08-16 USER_SENHA_BD(){ ###### INFORME AQUI O USER E SENHA DE ACESSO AO BANCO ###### USER_BANCO="admin" SENHA_BANCO="BDSenha" IP_BD="192.168.7.116" BASE="so_linux_configs" ###### INFORME AQUI O USER E SENHA DE ACESSO AO BANCO ###### } CONFIGS(){ RmOk="-1" #Dia Atual DiaAtual=`date +%d-%m-%Y` # HORA ATUAL HoraAtual=`date +%r` # HORA ATUAL NOME DIR HoraNomeDir=`echo $HoraAtual | sed 's/:/-/g'` # CONT Cont="1" # CRIA DIR OCULTO UserLogado=`id | cut -f2 -d "(" | cut -f1 -d ")"` mkdir /home/$UserLogado/.BRMONITOR/ mkdir /home/$UserLogado/.BRMONITOR/$DiaAtual DestPNG=/home/$UserLogado/.BRMONITOR/$DiaAtual # DIR TMP mkdir /home/$UserLogado/.TMP mkdir /home/$UserLogado/.TMP2 DIRTMP=/home/$UserLogado/.TMP DIRTMP2=/home/$UserLogado/.TMP2 # ARQ ZIP ARQZIP="LOG-BRMONITOR-$UserLogado-$DiaAtual-($HoraNomeDir).zip" # DADOS ZIP DADOS=$DIRTMP } LIMPAR_DIR(){ rm -Rf /home/$UserLogado/.TMP if [ $TOTALDIAS -gt $QTDIAS ] ; then rm -Rf /home/$UserLogado/.TMP2 rm -Rf /home/$UserLogado/.BRMONITOR LIMPAR_TMP_DIAS RmOk=$? fi } LOG_FIM(){ # USADO NOS LOGS DATAFIN=`date +%c` } CONSULTA_BD(){ USER_SENHA_BD # USER FTP USER_FTP=$(mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "select valor from lx_brmonitor_parametros where Nome = 'USER_FTP' and ativo = '1';" | sed '1d') # SENHA FTP SENHA_FTP=$(mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "select valor from lx_brmonitor_parametros where Nome = 'SENHA_FTP' and ativo = '1';" | sed '1d') # IP FTP IP_FTP=$(mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "select valor from lx_brmonitor_parametros where Nome = 'IP_FTP' and ativo = '1';" | sed '1d') # SENHA ZIP SENHA_CRIPTOG=$(mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "select valor from lx_brmonitor_parametros where Nome = 'SENHA_ZIP' and ativo = '1';" | sed '1d') # FREQUENCIA DOS PRINTS FREQUENCIA=$(mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "select valor from lx_brmonitor_parametros where Nome = 'FREQUENCIA' and ativo = '1';" | sed '1d') # TOTAL DE DIAS (DELETE PNG) TOTALDIAS=$(mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "select COUNT(DISTINCT(DATE_FORMAT(Data, '%d/%m/%Y'))) from lx_brmonitor_tmp_total_dias WHERE Colaborador = '$UserLogado';" | sed '1d') # QUANTIDADE DE DIAS Q AS IMAGENS SERAO MANTIDAS QTDIAS=$(mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "select valor from lx_brmonitor_parametros where Nome = 'LIMPAR_DIR_APOS' and ativo = '1';" | sed '1d') } GRAVA_HIST(){ USER_SENHA_BD (mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "INSERT INTO lx_brmonitor_historico_geracao (Colaborador, Data, NomeZIP) VALUES ('$UserLogado',NOW(),'$ARQZIP');") (mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "INSERT INTO lx_brmonitor_tmp_total_dias (Colaborador, Data) VALUES ('$UserLogado',NOW());") # GRAVA HISTORICO DELETE if [ $RmOk -eq 0 ] ; then (mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "INSERT INTO lx_brmonitor_historico (Colaborador, Data, Resultado) VALUES ('$UserLogado',NOW(),'DIRETORIO LOCAL LIMPO APOS $QTDIAS DIAS');") fi } LIMPAR_TMP_DIAS(){ USER_SENHA_BD (mysql $BASE -h $IP_BD -u $USER_BANCO -p$SENHA_BANCO -e "DELETE FROM lx_brmonitor_tmp_total_dias WHERE Colaborador = '$UserLogado';") } ZIPAR_ARQS_FULL(){ sleep 2 sync zip -r9 -e -P $SENHA_CRIPTOG "$DIRTMP2/$ARQZIP" "$DADOS" erroZIP=$? # USADO NOS LOGS DATAIN=`date +%c` ENVIA_FTP if [ $erroZIP -eq 0 ] ; then LIMPAR_DIR GRAVA_HIST fi } ENVIA_FTP(){ sleep 2 #ftp -in $IP_FTP $PORTAFTP <<EOF ftp -in $IP_FTP 21 <<EOF user $USER_FTP $SENHA_FTP bin lcd $DIRTMP2 put $ARQZIP quit EOF erro=$? } EXEC_SCREENSHOT(){ TotalMin=$((50/$FREQUENCIA)) while [ $Cont -le $TotalMin ] do NomeArqPNG=$(date --iso-8601=seconds).png import -window root $DestPNG/$NomeArqPNG ImportOk=$? cp $DestPNG/$NomeArqPNG $DIRTMP sleep $FREQUENCIA let Cont++ done # ZIPAR P/ ENVIO FTP PNG ZIPAR_ARQS_FULL } CONFIGS CONSULTA_BD EXEC_SCREENSHOT exit 0
Script de Backup para FITA DAT usando "afio"
Cluster multi-master com MariaDB 10.1 + Galera
Configurando CISCO por Shell Script
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Preciso resolver um erro de DPKG (0)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta