registo de logins e logouts
Publicado por antonio mauricio sousa 16/05/2005
[ Hits: 5.791 ]
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"
Script simple backup em Fita DAT
extract.sh: Script baseado no extract da phrack
fwgen - gerador de regras de firewall iptables
Instala o InterNet Explorer for Linux
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 quebrar senha usando john the ripper
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Não consigo instalar distro antiga no virtualbox nem direto no hd (17)









