Tempo di login

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab nov 15, 2008 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Tempo di login

Messaggioda zxzxasas » lun ago 24, 2009 14:44

Buongiorno!

Ho realizzato uno script che esegue un logout dopo 1:45. Posto il codice:

Codice: Seleziona tutto

#!/bin/bash
user="`users`"
dir="/var/log/script/"
if [[ ! -d $dir ]];then
 mkdir /var/log/script
fi
if [[ ! -e $dir$user ]];then
 touch $dir$user //ecco il problema
fi

tmp=`cat $dir$user`
for((;tmp<=6300;tmp++));do
 echo $tmp > $dir$user
 sleep 1
done
zenity --info --text="Hai finito il tempo a tua disposizione, il computer si spegnerà  tra un minuto" &
sleep 60
/sbin/shutdown -r now


Ho un problema.
Questo script deve avviarsi da solo al login e chiudersi al logout dell' utente, ma l' utente stesso non deve poter nè leggere nè scrivere sullo script, ma soprattutto non deve poter scrivere sul file dove è conservato il tempo trascorso.

Per il primo problema avevo pensato di modificare lo script adduser e aggiungere le righe:

Codice: Seleziona tutto

cp /root/tempo.sh /home/"$1"/.kde/Autostart/tempo.sh
chown root:root /home/"$1"/.kde/Autostart/tempo.sh
chmod 711 /home/"$1"/.kde/Autostart/tempo.sh

Gli utenti vanno aggiunti da root.

(ancora non ho provato, spero di non aver detto idiozie)

Però, così facendo, non saprei come risolvere il secondo problema, perchè se lo script è avviato dall' utente, l' utente non può scrivere sul file dove viene registrato il tempo trascorso.

Idee? Soluzioni alternative?

Avatar utente
sya54M
Master
Master
Messaggi: 1614
Iscritto il: mer giu 06, 2007 14:44
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 4.16.x
Desktop: KDE
Località: (Salerno)
Contatta:

Re: Tempo di login

Messaggioda sya54M » lun ago 24, 2009 15:42

ciao pasquale, il fatto che scrivi su disco ogni secondo è la stessa cosa spiacevole che non volevo fare io quando parlammo di un mio script, ricordi? :)
riguardo il tuo problema, credo sia impossibile che l'utente non possa avere accesso al file creato se è lui a crearlo, devi solo sperare che l'utente non sappia come funziona il sistema.
lo sleep 60 e il conseguente shutdown -r now è poco elegante:

Codice: Seleziona tutto

shutdown -r -t 60

e perchè usi zenity per la finestrella, che non cè su slackware? :(
è così bello kdialog... :D

zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab nov 15, 2008 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggioda zxzxasas » lun ago 24, 2009 15:58

Beh Andrè, considerando che è per una manifestazione dove devo fare un server, 7 client e il cablaggio senza che mi diano un centesimo, onestamente non mi faccio particolari problemi circa lo stress dell' hardware, visto che mi hanno chiamato loro e non mi sono proposto io!

Comunque, a me serve un sistema che mi permetta di fare una cosa simile. Nessuna idea?

Avevo ora pensato ad usare il SetUID. In modo tale da permettere l' esecuzione all' utente ma con i permessi di amministratore.
In tal modo dando chown root:root e chmod 711 il proprietario è root e l' utente può solo eseguire. Ora se spunto il SetUID dovrei riuscire ad eseguire lo script come root senza che l' utente possa toccare nulla.

Giusto?

Per la finestrella, credo che userò knotify (anche se i clients hanno debian)

paperboy
Linux 0.x
Linux 0.x
Messaggi: 60
Iscritto il: gio set 07, 2006 6:31

Re: Tempo di login

Messaggioda paperboy » lun ago 24, 2009 16:22

shutdown -r -t 105 & dentro /etc/profile.d non funge?

oppure {sleep $tempo; kdialog --sorry "messaggio di avviso" &; shutdown -r -t 60}& sempre in /etc/profile.d

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

Re: Tempo di login

Messaggioda raffaele181188 » lun ago 24, 2009 16:39

Il quesito è interessante, pensavo fosse più semplice da risolvere, invece da quello che ho cercato non ho trovato niente nemmeno per le sessioni di X, KDE o GNOME... Comunque le soluzioni che proponi mi sembrano troppo intricate, e poi un utente normale può eseguire /sbin/shutdown? Una soluzione potrebbe essere farsi un programmino demone, registrarci l'utente all'avvio con una riga in /etc/profile, e lasciare a quel programmino il compito di avvisare l'utente che il tempo a sua disposizione sta per scadere (magari anche 15, 10 e 5 minuti prima), per poi effettuare logout e shutdown (ma perchè proprio lo shutdown e non il logout?). Comunque non credo che questa cosa sia facile/bella da risolvere con la shell

zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab nov 15, 2008 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggioda zxzxasas » lun ago 24, 2009 17:04

C' è un problema. Il tempo deve essere cumulativo, cioè deve essere distribuito su 24 ore anche ad intervalli di n minuti.

Per quanto riguarda l' esecuzione di shutdown, un utente normale non può farlo.
Ma comunque, io devo solamente disconnettere l' utente, non spegnere il pc. Effettivamente, quando ho scritto quelle righe l' idea di fondo era ancora di mettere le righe in /etc/rc.d/rc.local e quindi per chiudere lo script occorreva riavviare. Però poi mi sono accorto che `users` non può restituire nulla dato che nessun utente è loggato.

Ad ogni modo, ho provato a fare qualcosa tipo questa:

Codice: Seleziona tutto

#!/bin/bash

dir=/var/log/script/
for((;;));do
user=`users`
if [[ ! -z $user ]];then
 if[[ $user != root ]];then
  if [[ ! -e $dir$user ]];then
   touch $dir$user
  fi
  tt=`cat $dir$user`
  sleep 1
  tt=tt+1
  if ((i>=6300));then
   //chiudi sessione
  fi
 fi
fi
done


Ma non so `users` come funziona, quindi faccio qualche prova!

zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab nov 15, 2008 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggioda zxzxasas » lun ago 24, 2009 18:28

Codice: Seleziona tutto

#!/bin/bash
dir=/var/log/time/

if [[ ! -d $dir ]];then           
mkdir $dir
fi

for((;;));do                       
 user=`users`                     
 if [[ ! -z "$user" ]];then         
  if [[ ! -e "$dir$user" ]];then     
   touch "$dir$user"                 
   echo 0 > "$dir$user"             
  fi               
  tt=`cat $dir$user`                                         
  ((tt=tt+1))   
  echo "Stampo incremento"                       
  echo $tt > "$dir$user"             
 fi       
 sleep 1           
 tt=0             
done                               


Allora, questo è il codice di uno script funzionante...quasi!

Chiamato rc.time e fatto avviare da rc.local in background funziona...quasi!
Il punto è che `users` a un certo punto comincia non più a restituire l' utente, ma comincia a fare qualcosa del tipo:

Codice: Seleziona tutto

pasquale@darkstar:~$ cat /var/log/time/
pasquale
pasquale pasquale
pasquale pasquale pasquale
pasquale pasquale pasquale pasquale
pasquale pasquale pasquale pasquale pasquale


Codice: Seleziona tutto

pasquale@darkstar:~$ cat /var/log/time/pasquale
23


Codice: Seleziona tutto

pasquale@darkstar:~$ cat /var/log/time/pasquale\ pasquale
24


Codice: Seleziona tutto

pasquale@darkstar:~$ cat /var/log/time/pasquale\ pasquale\ pasquale
24


Insomma, un comportamento abbastanza strano...

Avatar utente
conraid
Staff
Staff
Messaggi: 13168
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: Tempo di login

Messaggioda conraid » lun ago 24, 2009 19:46

users ti fa gli utenti collegati, basta che apri un terminale ed hai quel comportamento
prova con whoami

zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab nov 15, 2008 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggioda zxzxasas » lun ago 24, 2009 20:03

Conraid, il problema è che se faccio avviare lo script in rc.local, whoami cosa mi dice?

Codice: Seleziona tutto

#!/bin/bash
dir=/var/log/time/

if [[ ! -d $dir ]];then
mkdir $dir
fi

for((;;));do
 user=`users | cut -d ' ' -f 1`
 if [[ ! -z "$user" ]];then
  if [[ ! -e "$dir$user" ]];then
   touch "$dir$user"
   echo 0 > "$dir$user"
  fi
  tt=`cat $dir$user`
  ((tt=tt+1))
  echo "Stampo incremento"
  echo $tt > "$dir$user"
 fi
 if ((tt>=6200));then
  kdialog --sorry "Il Sistema si spegnerà tra 60 secondi" &;
  sleep 60
  pkill X
 fi
 sleep 1
done


Ho pensato che tagliando la stdout di users poteva funzionare.
In effetti pare che vada ma non conoscendo bene users non so se ci sono delle problematiche che sto trascurando...

Avatar utente
conraid
Staff
Staff
Messaggi: 13168
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: Tempo di login

Messaggioda conraid » mar ago 25, 2009 10:50

zxzxasas ha scritto:Conraid, il problema è che se faccio avviare lo script in rc.local, whoami cosa mi dice?


probabilmente root, visto che nessun utente si è ancora collegato
Io lo metterei nel profile.d cercando un modo di non farlo ripetere (se un utente si logga in altro terminale, etc...)
In questo modo hai anche la possibilità di valutare i casi in cui il pc non viene spento o riavviato, ma l'utente cambia

zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab nov 15, 2008 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggioda zxzxasas » mar ago 25, 2009 20:14

conraid ha scritto:
zxzxasas ha scritto:Conraid, il problema è che se faccio avviare lo script in rc.local, whoami cosa mi dice?


probabilmente root, visto che nessun utente si è ancora collegato
Io lo metterei nel profile.d cercando un modo di non farlo ripetere (se un utente si logga in altro terminale, etc...)
In questo modo hai anche la possibilità di valutare i casi in cui il pc non viene spento o riavviato, ma l'utente cambia


Beh comunque, lo script sopra, a condizione che sia loggato solo un utente, va più che bene. Ovviamente il problema si pone quando ci sono più utenti loggati.
`users` dà stringa vuota se non è loggato alcun utente, quindi basta controllare se la stringa è vuota o è un utente (diverso da root possibilmente :D)

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

Re: Tempo di login

Messaggioda raffaele181188 » mar ago 25, 2009 23:20

Comunque, dal momento che il quesito che hai posto è davvero interessante, io mi sto documentando
Solo che, da quanto ho capito, "artigianalmente" non è possibile trovare soluzioni raffinate, quindi sto cercando qualche distro nata apposta

Non immaginavo, all'inizio della ricerca, che questa cosa potesse essere così difficile, e ancora adesso mi pare strano per un sistema nato multiusers... [-(

zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab nov 15, 2008 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggioda zxzxasas » mer ago 26, 2009 2:22

raffaele181188 ha scritto:Comunque, dal momento che il quesito che hai posto è davvero interessante, io mi sto documentando
Solo che, da quanto ho capito, "artigianalmente" non è possibile trovare soluzioni raffinate, quindi sto cercando qualche distro nata apposta

Non immaginavo, all'inizio della ricerca, che questa cosa potesse essere così difficile, e ancora adesso mi pare strano per un sistema nato multiusers... [-(

Ci sto lavorando alla versione multiutente...allora quello che sto considerando è:

-possono esserci più utenti loggati
-l' accento grave dovrebbe restituire stdout argomento per argomento

Quindi, supponiamo che l' stdout di users è:
pasquale utente pasquale utente utente asd asd asd io slack

il problema dell' utente che si chiama "io slack" viene gestito in automatico perchè dovrebbe essere un solo argomento.
Inoltre, passando direttamente nel path `users` anzichè dovrebbe considerare l' output argomento per argomento...ma che ne esce? un casino? inoltre, non mi pare che funzioni...beh, domani provo!