registo de logins e logouts
Publicado por antonio mauricio sousa 16/05/2005
[ Hits: 5.536 ]
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"
Automatizar backup do PostgreSQL
Script para informar o IP válido
Script para ripar CDs de audio e codificar as faixas para MP3
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Estou com sede em aprender sobre o nosso querido Linux. (1)
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta