[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 135.   Limiti alle utenze

Nella gestione di sistemi con molte utenze, diventa presto importante trovare un modo semplice per limitare l'accesso o le risorse loro concesse. In questo capitolo si annotano alcune soluzione «semplici» dal punto di vista realizzativo.

135.1   Una shell per impedire l'accesso

Un metodo molto semplice per impedire l'accesso a un utente, tanto più se si tratta di un utente fittizio, che non può e non deve avere materialmente accesso, consiste nell'attribuire come shell un programma che si comporti in modo diverso dal previsto. Di solito, per queste cose si usa il programma false, che tradizionalmente si limita a restituire un valore che rappresenta un errore, cosa che generalmente si considera equivalere a Falso. Ecco un esempio estratto da un file /etc/passwd:

...
daemon:x:1:1:daemon:/usr/sbin:/bin/false
bin:x:2:2:bin:/bin:/bin/false
sys:x:3:3:sys:/dev:/bin/false
...

È evidente che tali utenti non hanno nemmeno una parola d'ordine valida, ma questa prudenza ulteriore non può essere dannosa.

Quando si vuole usare un metodo del genere per delle utenze reali, allo scopo di impedire temporaneamente l'accesso per qualche ragione, può essere più conveniente l'uso di un programma specifico, che possa dare delle informazioni all'utente che viene allontanato dal sistema. A questo proposito si può usare, per esempio, il programma falselogin, (1) che va utilizzato nel modo seguente nel file /etc/passwd:

...
tizio:x:499:499:Tizio,,,:/home/tizio:/usr/bin/falselogin
caio:x:498:498:Caio,,,:/home/caio:/usr/bin/falselogin
sempronio:x:497:497:Sempronio,,,:/home/sempronio:/usr/bin/falselogin
mevio:x:496:496:Mevio,,,:/home/mevio:/usr/bin/falselogin
filano:x:495:495:Filano,,,:/home/filano:/usr/bin/falselogin
martino:x:494:494:Martino,,,:/home/martino:/usr/bin/falselogin
calpurnio:x:493:493:calpurnio,,,:/home/calpurnio:/usr/bin/falselogin
...

Lo scopo di falselogin è quello di mostrare all'utente un messaggio, che viene configurato con il file /etc/falselogin.conf. Quello che segue è l'esempio del file di configurazione predefinito nella distribuzione GNU/Linux Debian:

Welcome at %host% (Debian %debian_version% %sysname% %release%)!

%mail%

Sorry %user% but our server does not accept shell logins.
So long and thanks for all the fish.

Come si può intuire, sono disponibili delle metavariabili indicate secondo la forma %nome%. L'elenco completo di queste è disponibile nella pagina di manuale falselogin(1).

Qualunque sia il programma che si intende indicare in funzione di shell (reale o fittizia che sia), è necessario che questo sia previsto nel file /etc/shells:

...
/bin/false
/usr/bin/falselogin
...

135.2   Controllo dello spazio utilizzato, senza l'uso tradizionale delle quote

In certi casi, la gestione delle quote (capitolo 164) può essere scomoda o creare una complicazione eccessiva. Se si limita agli utenti la disponibilità di poche shell compatibili nell'uso dei file di configurazione, si può intervenire proprio su questi per svolgere una serie di controlli prima di mettere l'utente in condizione di operare.

Se si può contare sull'uso del file /etc/profile per un gruppo limitato di shell più o meno compatibili con lo standard POSIX, si può aggiungere in coda a tale script il codice seguente:

      1 #
      2 # Check "$HOME" usage
      3 #
      4 if [ "$USER" != "root" ]
      5 then
      6     HOME_DISK_SPACE_ALLOWED="10000000"
      7     echo ""
      8     echo "Please wait for disk space usage verification..."
      9     echo ""
     10     #
     11     # Calculate user's disk space usage.
     12     #
     13     HOME_DISK_SPACE_USED=`du -bs $HOME 2> /dev/null | sed "s/\t.*$//"`
     14     #
     15     HOME_DISK_SPACE_USED_PERCENTAGE=\
  \`echo "$HOME_DISK_SPACE_USED*100/$HOME_DISK_SPACE_ALLOWED" | bc` 16 # 17 echo "Your disk usage is $HOME_DISK_SPACE_USED bytes." 18 echo "You are allowed to use up to $HOME_DISK_SPACE_ALLOWED bytes." 19 echo "You are using $HOME_DISK_SPACE_USED_PERCENTAGE% \
  \of the allowed disk space." 20 echo "" 21 if [ "$HOME_DISK_SPACE_USED_PERCENTAGE" -gt "100" ] 22 then 23 echo "YOU ARE REQUIRED TO REDUCE YOUR DISK USAGE TO THE \
  \ALLOWED VALUE!" 24 echo "If you don't do it alone, your account might be removed \
  \from the administrator." 25 fi 26 echo "" 27 fi

Lo scopo è, come si può intuire, quello di informare l'utente, contando sulla sua collaborazione. È evidente che lo script può essere reso più efficace, per esempio inviando un messaggio di posta elettronica all'amministratore quando un utente supera lo spazio consentito, arrivando anche a interdire l'utenza se si l'utente non provvede. Per esempio, si potrebbe intervenire così:

     17     echo "Your disk usage is $HOME_DISK_SPACE_USED bytes."
     18     echo "You are allowed to use up to $HOME_DISK_SPACE_ALLOWED bytes."
     19     echo "You are using $HOME_DISK_SPACE_USED_PERCENTAGE% \
  \of the allowed disk space." 20 echo "" 21 if [ "$HOME_DISK_SPACE_USED_PERCENTAGE" -gt "200" ] 22 then 23 echo "YOUR ACCOUNT IS LOCKED!" 24 echo "Please contact the administrator." 25 echo "account $USER locked" | mail root 26 exit 27 elif [ "$HOME_DISK_SPACE_USED_PERCENTAGE" -gt "100" ] 28 then 29 echo "YOU ARE REQUIRED TO REDUCE YOUR DISK USAGE TO THE \
  \ALLOWED VALUE!" 30 echo "If you don't do it alone, your account might be removed \
  \from the administrator." 31 fi 32 echo "" 33 fi

Vale la pena di descrivere alcuni comandi che possono risultare un po' complessi a prima vista. Nella riga numero 13 si vede l'uso del comando du per contare lo spazio utilizzato a partire dalla directory personale dell'utente:

du -bs $HOME

L'opzione -bs serve a richiedere un conteggio complessivo, espresso in byte. Il risultato viene filtrato da sed per conservare solo l'informazione numerica, infatti, ciò che emette du potrebbe essere un testo simile a quello seguente:

29546091        /home/tizio

Dal momento che tra il numero che esprime lo spazio utilizzato e la directory c'è esattamente un carattere di tabulazione (il carattere <HT>), sed va a cercare proprio quello ed elimina tutto il resto. Alla fine, il valore viene assegnato alla variabile di ambiente HOME_DISK_SPACE_USED.

Nella riga numero 15 viene eseguito un calcolo, con l'aiuto di bc, che riceve l'espressione da calcolare attraverso lo standard input. Il risultato emesso alla fine da bc, viene assegnato alla variabile HOME_DISK_SPACE_USED_PERCENTAGE.

Si osservi che lo script proposto non è un metodo sicuro per impedire agli utenti di non utilizzare più spazio del consentito, anche perché è sufficiente premere la combinazione [Ctrl c] durante la scansione eseguita da du per saltare il controllo. Pertanto, si tratta solo di un sistema blando per consentire agli utenti di rendersi conto della loro situazione.

135.3   Accesso consentito soltanto ad alcuni utenti

Quando si condividono le stesse utenze in una rete locale (si veda il capitolo sul NIS: 291), può capitare che si voglia evitare la possibilità di accedere agli utenti comuni presso un elaboratore particolare. Si può svolgere un controllo di questo tipo, rifiutando l'accesso a tutti gli utenti, tranne l'amministratore e altre utenze particolari, utilizzando la stessa tecnica già mostrata nella sezione precedente, intervenendo nel file /etc/profile:

      1 #
      2 # Refuse access to most users.
      3 #
      4 USER_ALLOWED="0"
      5 #
      6 for u in root tizio caio
      7 do
      8     if [ "$u" = "$USER" ]
      9     then
     10         USER_ALLOWED="1"
     11     fi
     12 done
     13 #
     14 if [ "$USER_ALLOWED" = "0" ]
     15 then
     16     #
     17     # The user is not allowed.
     18     #
     19     echo ""
     20     echo "You are not allowed to use this computer."
     21     echo ""
     22     exit
     23 fi

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Falselogin   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome limiti_alle_utenze.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!