registo de logins e logouts
Publicado por antonio mauricio sousa 16/05/2005
[ Hits: 5.796 ]
o objectivo deste script é identificar se um determinado utilizador fez o inicio ou o fim da sessao... ele recebe como input o nome do user e um parametro que indica se pertende detectar o inicio ou o fim da sessao...
quando se pede pelo inicio...ele deve avisar se o utilizador está com a sessao aberta, caso contrario fica á espera que o user faça o login... com o fim acontece o mesmo
acho que esta mt simples....mas qualquer coisa a acrescentar ... avisem.me para eu poder ver onde errei....
#!/bin/bash
#
#=================================================================
# logs.sh
#=================================================================
# script que determine quando os utilizadores fazem login e logout
#=================================================================
# antonio mauricio sousa
#=================================================================
# antonio_sousa@linus.uac.pt
#=================================================================
# primeiro deve.se verificar se os argumentos estao correctos
if [ $# != 2 ]
# se for verdade os argumentos estao mal
then
echo "--Usage: $0 <user> <inicio | fim>"
exit 1
fi
echo "--numero de argumentos é válido"
# quem deve correr este script deve ser o SU
# logo devemos verificar se o user tem as
# permissoes de SU
a=`whoami`
b="root"
if [ "$a" = "$b" ]
then
echo "--o utilizador tem as permissoes de root"
else
echo "--voçe não tem as permissoes de root"
exit 1
fi
# verificar a validade do primeiro argumento
echo "--a verificar se o $1 existe"
grep "^$1:" /etc/passwd > aux
if [ $? -eq 0 ]
then
echo "--$1 é um USER válido"
else
echo "--o user $1 é invalido"
exit 1
fi
# calcular a HOME real do USER
# porque pode nao se no /home...
# o root nao tem a home ai, o nobody nem tem home, e no linus
# o grupo alunos tem a sua home em /users/alunos/dm/~
usr_home=`cut -d: -f6 aux`
rm aux
# aux ja não é necessario
#echo $usr_home
# ficheiro de log
flog=$usr_home/rlog.log
# ficheiro com todos os resultados
events=$HOME/resultados/eventos.txt
ins=$HOME/resultados/logins.txt
outs=$HOME/resultados/logouts.txt
# verificar a validade do segundo argumento
seg_arg="$2"
[ "$seg_arg" != inicio ] && [ "$seg_arg" != fim ]
if (($? == 0))
then
echo "--o segundo argumento é invalido"
echo "--Usage: $0 <user> < inicio | fim >"
exit 1
fi
echo "--o segundo argumento é valido"
# este script funciona com a ajuda dos ficheiros
# .bash_profile e .bash_logout
# ->o .bash_profile encontra.se na HOME dos utilizadores
# e é chamado quando o USER faz o login
# por isso é necessário acrescentar no final do ficheiro
# o comando:
# echo "inicio:[`date`]" > /home/utilizador/utilizador_logs.log
# e assim o ficheiro guarda a informaçao no num ficheiro
# com o nome do utilizador na sua area de trabalho
# e é apartir deste ficheiro que este script vai retirar as imformaçoes
# ->o .bash_logout funciona da mesma maneira que o outro mas funciona
# em relaçao ao logout. acrescenta.se o comando
# echo "fim:[`date`]" > /home/utilizador/utilizador_logs.log
#
# o ficheiro .bash_profile ja existe na area do utilizador
# mas o ficheiro .bash_logout pode nao existir e tem de ser criado
# ...(o ficheiro teve de ser criado no ubuntu)
# estas informaçoes estao no manual da bash ('man bash')
# agora podemos verificar se o ficheiro $1_logs.log existe
# se nao existir é porque o utilizador nunca fez login
if [ -f "$flog" ]
then
echo "--encontrado o ficheiro de log do utilizador"
else
echo "--nao foi encontrado o ficheiro de log do utilizador"
echo "--por isso o utilizador nunca fez um login na maquina"
exit 1
fi
fun_aux ()
{
# entam ele saiu e vamos esperar pelo login
# primeiro é preciso por o rlog.log em branco
#cat << EOF > $usr_home/rlog.log
#EOF
echo > $usr_home/rlog.log
# e a seguir fazer um ciclo que so acaba quando
# encontar o login...
echo "--à espera que o $1 faça login"
x=0
until ((x != 0))
do
printf "."
grep -q "^inicio" $usr_home/rlog.log
if (($? == 0))
then
x=1
fi
done
printf ".\n"
echo "--$1 fez login"
tex=`grep "^inicio:" $flog`
echo $1:$tex >> $ins
echo $1:$tex >> $events
}
# verificar se 'resultados' já existe..
# se não existe.. vamos criar
# se existe.. substitui.se os ficheiros
if [ -d "$HOME/resultados" ];then
echo "--A directoria 'resultados' existe e vai conter"
echo " os dados resultantes do script."
else
echo "--A directoria 'resultados' não existe mas vai"
echo " ser criada e irá conter os dados resultantes do script"
mkdir -p $HOME/resultados
fi
# se o segundo argumento for inicio:
if [ "$2" = inicio ]
then
grep -q "^fim:" $flog
if (($? == 0))
then
fun_aux
else
echo "--o utilizador está com a sessão aberta"
tex=`grep "^inicio:" $flog`
echo $1:$tex >> $ins
echo $1:$tex >> $events
fi
fi
# se o segundo argumento for fim
if [ "$2" = fim ]
then
echo "--a procurar pelo logout"
grep -q "^fim:" $flog
if (($? == 0))
then
echo "--encontrado e a escrever no registo"
tex=`grep "^fim:" $flog`
echo $1:$tex >> $outs
echo $1:$tex >> $events
else
echo "--$1 tem a sessão aberta"
echo "--esperando pelo logout de $1"
x=0
until ((x != 0))
do
printf "."
grep -q "^fim" $usr_home/rlog.log
if (($? == 0))
then
x=1
fi
done
printf ".\n"
echo "--$1 fez logout"
tex=`grep "^fim:" $flog`
echo $1:$tex >> $outs
echo $1:$tex >> $events
fi
fi
##chamada do nautilus
nautilus $HOME/resultados &
echo "--fim da execução do script"
Pingmon1.0 - Ping Timeout Monitor
Shell Script para consulta a Wikipedia utilizando linhas de comando
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









