registo de logins e logouts

Publicado por antonio mauricio sousa 16/05/2005

[ Hits: 5.009 ]

Download logs.sh




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....

  



Esconder código-fonte

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


Scripts recomendados

Script para instalar o vsftpd

Unrar no linux

"Wnslookup" - Monitorando os DNS da Rede

Pesquisa Preços pela Internet

GoogleChromeUpdate.sh para Slackware


  

Comentários
[1] Comentário enviado por franciane em 13/11/2008 - 09:37h

Olá antonio, muito interessante o seu script, vou tentar adapta-lo para o que necessito, mas quem sabe você pode me dar uma dica.
Estou usando o Openkiosk instalado no slax, porem ele tem um certo problema, ou melhor ou melhor não gostei, quando o usario sai da sessão, e se outro usuário entrar ele encontra tudo aberto que o outro usuario deixou anteriromente, porém preciso matar a sessão, só que eu mato a sessão e entro novamente os arquivos foram restaurado, tenho que tirar o autosave, será que você pode me ajudar com faço isso.

att
Franciane Pessanha


Contribuir com comentário