Monitoramento de usuário via screenshots

Publicado por Maicon Souza (última atualização em 18/10/2016)

[ Hits: 3.346 ]

Homepage: ---

Download MONITOR_SO.zip




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.

  



Esconder código-fonte

#!/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

Scripts recomendados

xt_geoip_build

"Ipscan" com shell script+dialog+nmap

Reconexão automática para internet ADSL

Update no-ip utilizando Shell Script

Script para Firewall - Utlizando iptables


  

Comentários
[1] Comentário enviado por rafaelbsales em 20/10/2016 - 21:34h

Aguardarei o video, mas antes parabéns pela iniciativa!

[2] Comentário enviado por removido em 31/10/2016 - 05:11h

Isto me fez pensar: Será que se eu usar um tee na entrada de texto eu crio um keylogger?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts