registo de logins e logouts

Publicado por antonio mauricio sousa 16/05/2005

[ Hits: 5.427 ]

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

Resolvendo NO_PUBKEY

Jogo da Velha para 2 jogadores

Renomear Volume Group

Backup para J-Pilot evitando arquivos problemáticos

Prova 1.0


  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts