Monitoramento de usuário via screenshots
Publicado por Maicon Souza (última atualização em 18/10/2016)
[ Hits: 3.647 ]
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
Dê utilidade aquelas teclas que não servem pra nada do seu teclado
Pidshell - Alternativa ao pidof, escrito em shell
Monitorando processo do Squid em diferentes redes
Testando se a conexão com a Internet está ativa
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - ENVIA MSG CASO O USUÁRIO PASSE 90% DA SUA QUOTA
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Erro ao instalar programa, "você tem pacotes retidos quebrados&qu... (10)
VOL já não é mais como antes? (15)
Como personalizar o lxde? [RESOLVIDO] (5)
Flatpaks não funcionam após atualizar pelo Gerenciador de Atualizações... (3)









