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.
Rispondi
zxzxasas
Linux 2.x
Linux 2.x
Messaggi: 397
Iscritto il: sab 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Tempo di login

Messaggio da zxzxasas »

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: 1665
Iscritto il: mer 6 giu 2007, 14:44
Nome Cognome: Andrea Peluso
Slackware: 64-current
Kernel: ultimo
Desktop: KDE
Località: (Salerno)
Contatta:

Re: Tempo di login

Messaggio da sya54M »

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 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggio da zxzxasas »

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 7 set 2006, 6:31

Re: Tempo di login

Messaggio da paperboy »

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

Messaggio da raffaele181188 »

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 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggio da zxzxasas »

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 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggio da zxzxasas »

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: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Tempo di login

Messaggio da conraid »

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 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggio da zxzxasas »

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: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Tempo di login

Messaggio da conraid »

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 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggio da zxzxasas »

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

Messaggio da raffaele181188 »

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 15 nov 2008, 2:28
Nome Cognome: Pasquale
Slackware: current
Kernel: 2.6.35.7
Desktop: KDE 4.5.2

Re: Tempo di login

Messaggio da zxzxasas »

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!

Rispondi