[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


221. Acua

Un sistema dedicato prevalentemente agli utenti, sul quale possano accedere un gran numero di persone, richiede la definizione di una regolazione di tali accessi, in base alle politiche che si vogliono attuare. In tali situazioni di affollamento è importante poter definire degli orari o delle preferenze in base al carico, e questo non può essere fatto in modo manuale, con un controllo umano diretto.

Oltre a questo, quando si amministrano centinaia di utenti, diventa molto impegnativo il compito di ricordare le scadenze previste per le utenze, e si rischia di lasciare attive quelle che non servono più, o sono inutilizzate da tanto tempo.

Acua è un applicativo che permette di risolvere in parte questi problemi, permettendo di stabilire in particolare: degli orari, dei limiti di tempo, il numero massimo di accessi contemporanei da parte dello stesso utente, delle preferenze in base al carico del sistema, l'eliminazione delle utenze scadute (provvedendo all'avviso preventivo), e all'eliminazione di utenze inattive da molto tempo.

Acua è lo strumento ideale per un fornitore di accesso a Internet, ma anche altri ambienti possono trovare utile l'utilizzo di questo software.

221.1 Organizzazione generale

Il controllo di Acua si basa su un registro degli utenti sottoposti alla sua amministrazione, un demone che verifica la presenza di tali utenti nel sistema e di cui controlla l'utilizzo di risorse, avvalendosi di una serie di programmi e script di contorno.

Perché il controllo abbia un senso, Acua deve avere il modo di impedire l'accesso agli utenti che accedono al di fuori della loro fascia oraria, o che tentano di utilizzare risorse superiori a quanto loro concesso. Per questo, la procedura che permette all'utente di accedere deve essere ritoccata, in modo da inserire una verifica attraverso Acua.

Inoltre, per forzare il rispetto delle regole poste, il demone di Acua deve poter chiudere una connessione con un utente che ha esaurito le risorse a sua disposizione o che comunque non ha più diritto di continuare a mantenere la connessione. Ancora, il demone deve prendersi cura di avvisare dell'imminente scadenza dell'utenza, anche attraverso la posta elettronica, prima di provvedere alla sua eliminazione definitiva.

Come si può intuire, Acua va a interferire con la gestione tradizionale degli utenti; di sicuro, almeno quando questo provvede da solo all'eliminazione delle utenze. Infatti, ciò implica la cancellazione dai file `/etc/passwd', `/etc/group' (con modalità differenti, a seconda che si usino i gruppi privati o meno) e `/etc/shadow', e inoltre implica l'eliminazione della directory personale dell'utente, assieme alla sua posta elettronica sospesa. Per questo, Acua deve sapere come gestire questi file, e soprattutto, dove trovare le directory personali e i file della posta elettronica.

Acua è così coinvolto nella creazione ed eliminazione degli utenti, che si utilizzano normalmente due script appositi: `acua_adduser' e `acua_deluser', al posto dei tradizionali `adduser' (`useradd') e `deluser' (`userdel'). *1*

Il compito di questi è così delicato che non si può evitare di controllarli e modificarli. Solo se Acua viene distribuito tra i pacchetti ufficiali della propria distribuzione si può sperare che non si debbano toccare tali script.

Il demone di Acua, e il comportamento dei comandi che si occupano di inserire o modificare le registrazioni degli utenti sottoposti al controllo di Acua, può essere configurato attraverso un file di configurazione generale.

Il problema di Acua è che raramente fa parte della tipica distribuzione GNU/Linux, e questo significa che lo si trova spesso come pacchetto aggiunto nei contributi. Ciò comporta che non siano stati presi tutti gli accorgimenti necessari a farlo funzionare subito, e che si debbano modificare necessariamente gli script di creazione e cancellazione degli utenti.

221.1.1 Problemi

Acua non è un sistema di controllo perfetto, e nemmeno giunto a un livello di maturazione accettabile per l'uso improvvisato. Dato il tipo di problema che intente cercare di risolvere, si rivolge a persone che hanno un'ottima esperienza dei sistemi Unix. In tal senso, la documentazione è insufficiente, e l'attuazione di determinate strategie implica un'organizzazione iniziale che poi non può essere sconvolta. Quindi, prima di usare Acua seriamente, occorre essere sicuri di averne compreso la filosofia e tutte le sue debolezze.

Acua dipende dal funzionamento corretto della registrazione nei file `/var/run/utmp' e `/var/log/wtmp'. Per esempio, se un utente accede senza che ciò venga registrato in questi file, Acua non può verificare la sua presenza, e generalmente si rifiuta di accettarlo. Questo tipo di problema si verifica effettivamente in alcune distribuzioni GNU/Linux in presenza di accessi attraverso il PPP, quando vengono utilizzate le librerie PAM; si tratta di un difetto di queste edizioni del demone `pppd', ma questo basta a mettere in crisi Acua.

Acua mantiene un proprio elenco degli utenti in cui annota le risorse concesse e utilizzate. Questo elenco è troppo poco dettagliato, per cui gli utenti sono annotati solo attraverso il numero UID, e non per nome. Inoltre, l'utilizzo di risorse da parte degli utenti è fatto attraverso l'uso di interi: se per qualche errore di configurazione gli utenti riescono a utilizzare un'unità in più delle risorse concesse, la detrazione genera un valore negativo, che in un intero produce l'equivalente del valore massimo gestibile.

221.1.2 Definizione delle risorse

Acua utilizza alcuni concetti per definire le risorse che controlla. Questi concetti, e i termini utilizzati, è bene siano chiariti prima di mettersi a predisporre la configurazione. I più importanti sono riferiti all'utilizzo orario da parte degli utenti e al carico del sistema. Però è importante non illudersi: alcune cose non funzionano come dovrebbero, e per determinarlo si possono solo fare esperimenti. Precisamente, si distingue tra:

A questo si affianca poi il concetto del carico del sistema, in base al quale, alcuni utenti possono essere preferiti ad altri. Il carico del sistema può servire anche per condizionare l'applicazione delle regole stabilite attraverso le fasce orarie e la durata delle connessioni (opzioni smart...).

221.1.3 Variabili

Nell'elenco degli utenti di Acua vengono gestite una serie di informazioni che all'esterno sono mostrate come delle variabili. Queste variabili possono essere usate per personalizzare i file dei messaggi generati da Acua, sia per quanto viene mostrato sullo schermo del terminale, sia per ciò che viene inviato attraverso la posta elettronica. Per evitare confusioni inutili, è meglio avere sotto mano uno specchietto di questi nomi, con il loro significato. La tabella 221.1 mostra l'elenco delle variabili a cui può essere assegnato un valore che esprime una quantità, mentre la tabella 221.2 elenca le variabili booleane, cioè quelle che rappresentano l'attivazione o meno di una modalità.

Nome Descrizione
expire Scadenza dell'utenza.
phNo Numero telefonico dell'utente.
priority Priorità.
maxLogins Numero massimo di accessi simultanei.
maxDeduct Numero massimo di minuti da dedurre per minuto (<= maxLogins).
PPPidleBytes Byte transitati al di sotto dei quali la connessione sembra inattiva.
PPPidleMin Minuti di tempo durante i quali si calcola il transito minimo.
tLeft Tempo complessivo rimasto (minuti).
tLimit Tempo complessivo concesso (minuti).
credit Credito di tempo accumulato (minuti).
sLeft Tempo di sessione rimasto (minuti).
sLimit Tempo di sessione concesso (minuti).
cLeft Tempo di fascia rimasto (minuti).
cLimit Tempo di fascia concesso (minuti).
bTx Byte trasmessi.
bRx Byte ricevuti (scaricati).
bTxLimit Limite massimo di byte che possono essere trasmessi.
bRxLimit Limite massimo di byte che possono essere ricevuti.
bLimit Limite complessivo al trasferimento in byte.
bStxLimit Limite di sessione dei byte che possono essere trasmessi.
bSrxLimit Limite di sessione dei byte che possono essere ricevuti.
bSLimit Limite di sessione complessivo al trasferimento in byte.

Tabella 221.1: Elenco delle variabili principali riferite alla gestione di Acua.

Nome Descrizione
SMARTTIME Non deduce il tempo complessivo se il sistema non è sotto carico.
SSMARTTIME Non deduce il tempo di sessione se il sistema non è sotto carico.
TCSMARTTIME Non deduce il tempo della fascia oraria se il sistema non è sotto carico.
SMARTBOOT Se il carico è ridotto, non allontana l'utente allo scadere del tempo complessivo.
SSMARTBOOT Se il carico è ridotto, non allontana l'utente allo scadere del tempo di sessione.
TCSMARTBOOT Se il carico è ridotto, non allontana l'utente allo scadere del tempo di fascia.
ISMARTBOOT In caso di inattività, l'utente non viene allontanato se il sistema non è sotto carico.
WARNBOOT L'utente può essere avvisato della disconnessione imminente.
EXPLAINBOOT L'utente può essere avvisato della motivazione della disconnessione.

Tabella 221.2: Elenco delle variabili booleane di Acua.

221.2 Preparazione

Per utilizzare Acua, è necessario mettere in funzione il demone `acua_updated', e prima di poterlo fare, è necessario preparare il file di configurazione generale. Come al solito, il posto corretto per i file di configurazione dovrebbe essere la directory `/etc/', ma se Acua non viene configurato correttamente prima della compilazione, oppure se si utilizza un pacchetto già compilato che non fa parte della propria distribuzione GNU/Linux ufficiale, è probabile che si trovi altrove (`/usr/lib/acua/' per esempio). *3*

221.2.1 Azzeramenti

Oltre all'avvio del demone, per utilizzare Acua è necessario azzerare periodicamente i conteggi dell'utilizzo delle risorse. In precedenza si è accennato alla differenza tra la durata complessiva dell'utilizzo del sistema da parte di un utente e la durata di un collegamento singolo. La durata complessiva va riferita a un dato intervallo di tempo, che potrebbe essere l'arco di 24 ore, oppure una settimana, o un mese, o anche un anno; in ogni caso, qualcosa di ben definito. L'azzeramento di questi conteggi (che possono riguardare anche altri parametri) deve avvenire con una cadenza equivalente.

Se si gestiscono le fasce orarie, occorre anche aggiungere un azzeramento giornaliero relativo a queste. Supponendo che la durata complessiva sia riferita a un anno di tempo, si potrebbero utilizzare le direttive seguenti nel file di configurazione del sistema Cron (La scelta delle ore 4:02 e 4:03 è solo un esempio, con l'intenzione di indicare un momento in cui l'utilizzo del sistema è minimo).

02 4 * * * root /usr/bin/acua renew -c	
03 4 1 1 * root /usr/bin/acua renew

221.2.2 Configurazione del demone

La configurazione attraverso il file `/etc/acua/acua.config' è piuttosto delicata e importante. La documentazione per questo è composta praticamente solo dai commenti contenuti nell'esempio allegato al pacchetto di Acua. Di seguito verranno mostrati e descritti solo alcune direttive importanti.

In ogni caso, è bene precisare che i commenti si rappresentano con il simbolo `#', dove ciò che segue tale simbolo, fino alla fine della riga, viene ignorato; inoltre, come al solito, le righe vuote e quelle bianche vengono ignorate.

Alcune direttive si riferiscono a caratteristiche delle utenze che vengono prese in considerazione quando si utilizza `acua addRec' (ovvero lo script `acua_adduser'). Ciò serve a facilitare il compito dell'amministratore nell'uniformare gli utenti. Questi dati possono poi essere modificati attraverso `acua modRec'.

Devices <dispositivo> [<n-quantità>] [ <dispositivo> [<n-quantità>] ]...

La direttiva `Devices' serve a definire quali dispositivi, utilizzabili per l'accesso, devono essere controllati dal demone. Ogni dispositivo va indicato senza comprendere la directory che lo contiene, per cui, `/dev/ttyS0' viene annotato come `ttyS0' e basta.

Se i dispositivi sono in sequenza, cioè se hanno lo stesso numero primario (major), e il numero secondario (minor) è in sequenza, si può indicare il primo dispositivo seguito da un numero che esprime la quantità di questi dispositivi da includere. Per esempio, `ttyp0 4' rappresenta i dispositivi da `/dev/ttyp0' a `/dev/ttyp3'.

PurgeDays <n-giorni>

Con questa direttiva è possibile automatizzare l'eliminazione delle utenze inutilizzate da tanto tempo, precisamente dal numero di giorni indicato.

L'eliminazione di questi utenti avviene attraverso uno script di Acua, in questo caso avviato dal demone. Tuttavia la cosa è così delicata che è importante ricordare di verificare questo script, prima di avviare il demone stesso.

Se si vuole impedire questo comportamento di Acua, basta indicare il valore zero.

MailHost <nome-host>

Acua può occuparsi di inviare dei messaggi di preavviso prima della scadenza dell'utenza, e per farlo si avvale della posta elettronica. A volte però, il nodo presso cui sono gestiti gli accessi, non è quello presso cui gli utenti ricevono la posta elettronica. In tal caso si deve utilizzare questa direttiva, che serve a specificare il nome di dominio completo del nodo a cui fare riferimento per l'invio dei messaggi.

WarnBoot <n-minuti>...

PPPWarnBoot <n-minuti>...

Permette di definire quanti minuti prima della scadenza della connessione avvisare l'utente. Nel primo caso si tratta di utenti che accedono attraverso un terminale normale (TTY), a cui viene inviato un messaggio sul terminale, nel secondo si tratta di utenti che accedono attraverso il PPP, a cui l'avvertimento viene dato per mezzo della posta elettronica.

È molto probabile che ci siano situazioni in cui, sia un tipo di avvertimento, sia l'altro, sono perfettamente inutili. Per esempio, l'utente che accede a un ISP, e utilizza una connessione PPP, dovrebbe avere sempre attivo un programma per la lettura della posta elettronica dal servente presso cui questa viene depositata.

WarnExpire <n-giorni>...

WarnExpireCC <indirizzo-email>

Questo è un altro tipo di avvertimento che riguarda la scadenza dell'utenza, e viene dato solo attraverso la posta elettronica, qualche giorno prima di tale scadenza. I valori numerici indicati nella prima direttiva sono il numero di giorni prima che si vuole sia emesso l'avvertimento; più numeri indicano più avvertimenti.

La seconda delle due direttive, serve a inviare una copia di tale messaggio di avvertimento anche all'amministratore, specificato attraverso il suo indirizzo di posta elettronica.

IdleBoot <n-minuti>

PPPIdleBoot <n-minuti> <n-byte>

Dovrebbe essere conveniente interrompere le connessioni che risultano inattive (idle). Si distingue tra le connessioni da terminale normale, rispetto a quelle che usano il PPP. Nel secondo caso non è facile determinare bene che la connessione sia inattiva, per cui si stabilisce una quantità di byte minima che deve transitare attraverso la connessione in un dato intervallo di tempo, per poter affermare che la connessione sia ancora utilizzata effettivamente.

SmartTime

SessionSmartTime

TimeClassSmartTime

Le direttive booleane mostrate, se utilizzate, specificano che l'applicazione delle regole riferite al tempo di utilizzo, al tempo di connessione e ai tempi nelle fasce orarie, è subordinata all'effettiva necessità di limitare il carico del sistema. Il risultato pratico è che quando il sistema non è carico eccessivamente, i contatori di utilizzo delle risorse di tempo relative non vengono incrementati.

In effetti, si distinguono due situazioni fondamentali per cui si utilizza Acua: un ISP che offre un servizio a pagamento; un ente che offre l'accesso alle persone che ne fanno parte. Nel primo caso, è improbabile che venga offerto un accesso smart, mentre nel secondo dovrebbe essere logico questo tipo di approccio.

Queste direttive si riferiscono rispettivamente alle variabili `SMARTTIME', `SSMARTTIME' e `TCSMARTTIME'.

SmartBoot

SessionSmartBoot

TimeClassSmartBoot

IdleSmartBoot

A differenza delle direttive precedenti, l'utilizzo di queste non interrompe il conteggio dell'utilizzo delle risorse, ma evita la chiusura di una connessione se il carico del sistema non lo richiede.

In questo caso, si può anche evitare di imporre l'eliminazione di una connessione inattiva (idle), se il carico del sistema non lo richiede.

Queste direttive si riferiscono rispettivamente alle variabili `SMARTBOOT', `SSMARTBOOT', `TCSMARTTIME' e `ISMARTBOOT'.

TimeClass <fascia-oraria>...

La definizione delle fasce orarie è fondamentale, perché nelle indicazioni annotate per ogni utente, si può fare riferimento solo a fasce orarie definite con questa direttiva: la prima, la seconda, la terza,...

Una fascia oraria è composta dall'indicazione dei giorni della settimana a cui si riferisce e dall'intervallo orario. I giorni della settimana si esprimono attraverso un numero, dove lo zero corrisponde a domenica, mentre gli orari si esprimono in ore e minuti, uniti con un punto. Per esempio, `0-6:0.0-24.0' indica ogni momento di qualunque giorno della settimana, mentre `1-5:8.0-18.0' rappresenta la fascia oraria che va dalle 8.00 alle 18.00 dei giorni lavorativi normali (dal lunedì al venerdì).

Generalmente, dovrebbe essere sufficiente l'indicazione delle fasce orarie standard che appaiono già nel file di configurazione che accompagna Acua.

TimeClass  0-6:0.0-24.0  1-5:8.0-18.0  1-5:19.0-22.0  6-0:0.0-24.0

Infine, è fondamentale escludere alcuni utenti dalle interferenza di Acua. Per la precisione, si possono escludere alcuni utenti dalle scansioni fatte attraverso il comando `acua forEach', che verrà descritto in seguito. Si tratta evidentemente degli utenti di sistema, oltre a utenti che hanno compiti di amministrazione di qualunque tipo.

ForEachExclude <utente>...

La direttiva può essere usata anche più volte, e ciò è utile dal momento che l'elenco di tali utenti può essere piuttosto lungo. È molto importante osservare bene il proprio file `/etc/passwd' per segnalare tutti gli utenti di sistema, e tutti gli amministratori, che sono presenti effettivamente.

A titolo di esempio, viene mostrata una configurazione possibile, in cui, come si noterà, non si concedono privilegi di tipo smart.

# Controlla l'accesso attraverso gli pseudoterminali e i terminali seriali.
Devices ttyp0 64 ttyS0 64

# Elimina le utenze inutilizzate da 6 mesi (180 giorni).
PurgeDays 180

# La deduzione minima per collegamento è di un minuto.
MinDeduct 1

# Il sistema viene considerato carico (impegnato) quando non ci sono
# più linee dial-up (di accesso telefonico) libere.
BusyThreshold 0

# Mappa le priorità di CPU secondo la classificazione di Acua.
CPUpriority 19 -20

# Il nome dell'host presso cui risiedono le caselle postali degli 
# utenti a cui inviare i messaggi di avvertimento.
#MailHost posta.mio.dominio

# Avvisa della scadenza attraverso la posta elettronica: due settimane
# prima, una settimana prima e un giorno prima.
WarnExpire 14 7 1

# Avvisa anche l'amministratore.
#WarnExpireCC root@mio.dominio

# Vengono concessi al massimo 15 minuti di inattività.
IdleBoot 15

# Attraverso la connessione PPP, vengono concessi un massimo di 15 minuti
# di inattività, e per determinarlo, si stabilisce che si arriva a questo
# se sono stati trasferiti meno di 15360 byte (1 Kbyte al minuto).
PPPIdleBoot 15 15360

# Non viene concesso alcun privilegio «smart».
#
# SmartTime
# SessionSmartTime
# TimeClassSmartTime
# SmartBoot
# SessionSmartBoot
# TimeClassSmartBoot
# IdleSmartBoot

# Si fissano le fasce orarie standard.
# fascia 0:  24 ore da lunedì a domenica
# fascia 1:  dalle 8 alle 18, da lunedì a venerdì	(orario di ufficio)
# fascia 2:  dalle 19 alle 22, da lunedì a venerdì	(prima serata)
# fascia 3:  24 ore da sabato a domenica		(fine settimana)
TimeClass  0-6:0.0-24.0  1-5:8.0-18.0  1-5:19.0-22.0  6-0:0.0-24.0

# Esclude gli utenti di sistema e di amministrazione dalle scansioni
# fatte attraverso «acua forEach».
ForEachExclude root bin daemon adm lp sync shutdown halt mail news uucp
ForEachExclude operator games gopher ftp nobody postgres exim
ForEachExclude daniele

221.2.3 Creazione ed eliminazione degli utenti

La creazione e l'eliminazione degli utenti gestiti da Acua, deve essere predisposta attraverso due script che vanno modificati opportunamente. Anche questa fase è da considerare parte della configurazione. Eventualmente, gli utenti potrebbero essere inseriti nel controllo di Acua anche in modo differente, ma è importante che lo script di cancellazione, `acua_deluser', funzioni correttamente, dal momento che può essere utilizzato dal demone per eliminare le utenze scadute e quelle inutilizzate da molto tempo.

221.2.3.1 Creazione con acua_adduser

acua_adduser <utente> [<numero-telefonico>]

Si tratta di uno script preparato per una shell di Bourne, e quindi compatibile anche con la shell Bash.

#! /bin/sh

Nella prima parte vengono definite alcune variabili, attraverso cui diventa più facile impostare i parametri essenziali per l'utilizzo di `acua addRec', che verrà descritto più avanti.

DEFAULT_EXPIRY=0
DEFAULT_TLIMIT=120
DEFAULT_SLIMIT=120
DEFAULT_PRIORITY=4

La variabile `DEFAULT_EXPIRY' permette di indicare quanto tempo è valida la registrazione dell'utenza, e questo viene espresso generalmente in giorni. Lo zero rappresenta l'assenza di una scadenza.

Le variabili `DEFAULT_TLIMIT' e `DEFAULT_SLIMIT' servono a indicare rispettivamente il tempo complessivo a disposizione e il tempo massimo di sessione. Il valore si esprime in minuti, e nell'esempio i dati coincidono, a indicare che l'utente ha a disposizione due ore che può impiegare anche completamente in una sola sessione.

Più avanti, dopo la definizione di alcune funzioni, inizia l'acquisizione degli argomenti forniti. Se non si indica il numero telefonico, viene utilizzato il valore -1. Ciò che si ottiene sono le variabili `LOGIN' e `PH_NO', contenenti rispettivamente il nominativo-utente da creare e il suo numero di telefono.

Infine viene creato l'utente, attraverso `adduser' (se si usano le password shadow si tratterà di un collegamento a `useradd'), e poi viene registrato all'interno di Acua, utilizzando i parametri indicati con le variabili già viste.

# Crea l'utente
adduser $LOGIN || err
# Registra l'utente in Acua
acua addRec $LOGIN $DEFAULT_EXPIRY $DEFAULT_TLIMIT $DEFAULT_SLIMIT \
    $DEFAULT_PRIORITY "$PH_NO" || err
# Impone l'indicazione della password
passwd $LOGIN || err
# Cambia la shell
#chsh -s /bin/zsh $LOGIN || err
# Accumula le informazioni finger
chfn $LOGIN
exit 0

Questa parte richiede attenzione. Per prima cosa occorre notare la modifica della shell dell'utente. A parte la scelta proposta dall'autore di Acua, che vorrebbe che tutti usassero `zsh', se si tratta della creazione di utenze per l'accesso attraverso la linea commutata, è molto probabile che non possa trattarsi di una shell comune, e debba essere piuttosto uno script di connessione per l'attivazione del PPP.

Inoltre, come si vedrà in seguito a proposito di `acua addRec', non appare definito l'utilizzo delle fasce orarie, cosa che si colloca dopo l'indicazione del numero telefonico.

Una volta definite le politiche cui sottoporre gli utenti, è possibile predisporre degli script diversi, in funzione delle diverse categorie che si desiderano gestire.

221.2.3.2 Eliminazione con acua_deluser

acua_deluser <utente>

Questo script è più importante di quello di creazione, soprattutto perché potrebbe essere avviato dal demone `acua_updated' (attraverso il comando `acua delUser'). Inoltre, è anche più delicato, perché va direttamente a modificare i file `/etc/passwd', `/etc/group' e `/etc/shadow'.

A proposito dell'intervento nel file `/etc/group', occorre verificare se gli utenti fanno parte di un gruppo comune, o se si applica la politica dei gruppi privati, in cui ogni utente ha un proprio gruppo. Infatti, solo nel secondo caso ha senso eliminare il gruppo dell'utente che viene cancellato.

acua kickUser $LOGIN
acua delRec $LOGIN

Per prima cosa, come si vede, l'utente viene disconnesso, e subito dopo viene rimosso dal registro di Acua.

Successivamente si passa all'eliminazione vera e propria dell'utente, come si vede sotto. Il problema è che si deve verificare che tutto corrisponda alla realtà del proprio sistema. L'esempio mostrato sotto è un po' diverso rispetto al contenuto standard di questo script; in particolare, si fa riferimento ai gruppi privati, per cui viene eliminato anche il gruppo che abbia lo stesso nome dell'utente.

# Si modifica opportunamente la maschera umask per motivi di sicurezza.
umask 077

# Si fa una copia di sicurezza del file /etc/passwd
cp -f /etc/passwd /etc/passwd.orig

# Toglie il record dell'utente dal file /etc/passwd
grep -v \^$LOGIN: /etc/passwd > /etc/passwd.$$
mv /etc/passwd.$$ /etc/passwd

# Sistema la proprietà e i permessi
chown root.root /etc/passwd ; chmod 644 /etc/passwd

# Se esiste il file /etc/shadow, cerca di intervenire anche lì.
if [ -f /etc/shadow ]; then

    # Si fa una copia di sicurezza del file /etc/shadow
    cp -f /etc/shadow /etc/shadow.orig

    # Toglie il record dell'utente dal file /etc/passwd
    grep -v \^$LOGIN: /etc/shadow > /etc/shadow.$$
    mv /etc/shadow.$$ /etc/shadow

    # Sistema la proprietà e i permessi
    chown root.root /etc/shadow ; chmod 400 /etc/shadow

fi

# Si fa una copia di sicurezza del file /etc/group
cp -f /etc/group /etc/group.orig

# Cerca di eliminare le tracce dell'utente dal file /etc/group:
# sia le aggregazioni nei gruppi, sia il suo gruppo privato.
gawk -v login=$LOGIN '{
    if ($0 ~ ".*" login ".*") {
	if ($0 !~ "^" login ":.*") {
	    gsub("," login, "");
	    gsub(":" login, ":");
	    print;
	}
    } else print;
}' /etc/group > /etc/group.$$
mv /etc/group.$$ /etc/group

# Sistema la proprietà e i permessi
chown root.root /etc/group ; chmod 644 /etc/group

Infine, si eliminano la directory personale dell'utente e la casella di posta elettronica. Anche questi due elementi possono essere delicati per il proprio sistema; infatti, non è detto che le directory personali degli utenti si trovino necessariamente nella directory `/home/', e anche la posizione della casella postale non è ovvia.

# Elimina la directory home e il file della casella postale
rm -rf /home/$LOGIN
rm -f /var/mail/$LOGIN

221.2.4 Filtro di ingresso

Acua deve avere il modo di impedire l'accesso agli utenti che hanno esaurito le loro risorse, inoltre deve essere «avvisato» quando l'utente accede. Per questo si interviene normalmente attraverso la shell, oppure attraverso lo script che ne prende il posto.

Per comprendere il problema, si immagini il controllo di un accesso normale attraverso un terminale, dove l'utente corrispondente ha una shell Bash. In tal caso, si può modificare il file `/etc/profile' di questa shell per inserire questo comando:

/usr/sbin/acua_login || logout

In pratica, sarebbe come se fosse stato scritto quanto segue:

if ! /usr/sbin/acua_login
then
    logout
fi

221.3 Gestione

Tutti i comandi di Acua che possono servire per la sua gestione sono filtrati dall'eseguibile `acua', che a seconda del primo argomento si comporta in modi molto differenti. Spesso, l'eseguibile `acua' deve avviare a sua volta altri eseguibili, o anche degli script; quando si tratta di operazioni che non possono essere accessibili agli utenti comuni, i permessi che contano sono dati proprio da questi programmi avviati successivamente da `acua'.

In queste sezioni verranno mostrati solo alcuni dei comandi di Acua, a volte anche in modo approssimativo. Per gli altri si può consultare la documentazione originale, che su questo punto è sufficientemente dettagliata.

221.3.1 # acua addUser

acua addUser <utente>

`acua addUser' permette di creare un nuovo utente, registrandolo anche sotto Acua. Questo comando, tuttavia, richiama semplicemente lo script `acua_adduser', che come già spiegato, deve essere modificato opportunamente.

Non c'è alcuna necessità di utilizzare il comando `acua addUser', in quanto lo script da solo è più che sufficiente. Anzi, potrebbero essere preparati più script per diversi tipi di utenti che si vogliono poter inserire nel sistema.

È bene ricordare che dipende dallo script se poi è necessario intervenire ulteriormente oppure no. Per esempio, potrebbe essere necessario definire la password dell'utente, e forse anche la shell, tenendo conto del tipo di accesso che viene consentito all'utente.

221.3.2 # acua delUser

acua delUser <utente>

`acua delUser' permette di eliminare un utente registrato anche sotto Acua. Questo comando, tuttavia, richiama semplicemente lo script `acua_deluser', che come già spiegato, deve essere modificato opportunamente.

Non c'è alcuna necessità di utilizzare il comando `acua delUser', in quanto lo script da solo è più che sufficiente.

221.3.3 # acua addRec

acua addRec <utente> <scadenza> <tempo-massimo> [<sessione-massima> [<priorità> [<telefono> [<limite-di-fascia>...]]]]

`acua addRec' permette di aggiungere un utente nel registro di Acua. Viene usato all'interno dello script `acua_adduser', e può essere usato direttamente per aggiungere il controllo di un utente che è già stato inserito nel sistema (ma non ancora sotto il controllo di Acua).

Sono obbligatori solo i primi tre argomenti (dopo `addRec'), mentre a partire dal quarto, sono obbligatori solo gli argomenti precedenti a quello che si vuole inserire (per esempio, non si può saltare il numero telefonico e inserire i limiti di fascia oraria).

  1. <utente>

    Il nome utilizzato dall'utente per identificarsi all'atto dell'accesso.

  2. <scadenza>

    Rappresenta la scadenza dell'utenza secondo Acua (indipendente da quanto indicato nel file `/etc/shadow'). La scadenza può essere definita attraverso un numero, che rappresenta normalmente una quantità di giorni, oppure in modo esplicito, nella forma `<aa>/<mm>/<gg>' (anno/mese/giorno), dove l'anno può utilizzare solo due cifre numeriche, anche nel caso si superi il 1999.

    Se si indica un numero, questo può anche essere seguito da una lettera, per esprimere: `d', giorni (predefinito); `m', mesi; `y', anni. La scadenza è riferita sempre alla fine dell'unità indicata, ma per difetto; per esempio, nel caso si indichino mesi, la scadenza si riferisce alla fine del mese finale, contando però anche il mese in corso, anche se questo è già a metà, oppure oltre.

    Per inibire la scadenza, basta utilizzare il valore zero.

    Questo valore viene annotato nella variabile `expire'.

  3. <tempo-massimo>

    Il tempo massimo concesso all'utente. Tale durata si esprime in minuti.

    Se si indica il valore -1, si intende una durata indefinitamente grande.

    Questo valore viene annotato nella variabile `tLimit'.

  4. <sessione-massima>

    Stabilisce la durata massima della sessione. Anche questo valore si esprime in minuti. Se non viene specificato, si assume corrisponda al tempo massimo.

    Questo valore viene annotato nella variabile `sLimit'.

  5. <priorità>

    Fissa la priorità di questo utente, che si esprime con un valore che va da zero a sette, dove lo zero esprime il trattamento peggiore.

    Questo valore può tradursi in una diversa priorità di CPU, secondo quanto definito nel file di configurazione, con la direttiva `CPUpriority'. Se è così, dovrebbe essere sconveniente tentare di utilizzare priorità di Acua che poi si traducono in priorità di CPU negative.

    In generale, il valore predefinito per questa priorità di Acua è quattro.

    Questo valore viene annotato nella variabile `priority'.

  6. <numero-telefonico>

    Questo argomento è dedicato al numero telefonico dell'utente. A quanto pare, Acua accetta solo un formato particolare che non è indicato nella documentazione; inoltre, è probabile che tale informazione possa essere ottenuta anche da utenti comuni che hanno accesso al sistema, mentre si presume che si tratti di una notizia riservata.

    Si può trascurare questo argomento, indicando eventualmente il valore zero, o -1.

    Questo valore viene annotato nella variabile `phNo'.

  7. <limite-di-fascia>...

    Gli ultimi argomenti sono in quantità variabile, e dipendono delle fasce orarie definite nel file di configurazione generale. Se si lasciano le fasce orarie standard, si hanno a disposizione quattro fasce, e per ognuna di queste può apparire un argomento che definisce il limite relativo.

    Per ogni fascia oraria può essere indicato un valore che corrisponde al limite di tempo consentito per gli accessi, espresso in minuti. Evidentemente, tale limite si sostituisce a quello generico definito con il terzo argomento di questo comando. In alternativa si possono indicare i valori seguenti:

    • 0  -- viene usato per impedire l'accesso in quella fascia oraria;

    • -1 -- rappresenta l'utilizzo del limite di tempo stabilito in modo generico (il terzo argomento del comando), ed è il dato predefinito;

    • -2 -- fa in modo che in quella fascia oraria non venga calcolato il tempo di sessione, mentre il tempo complessivo continua a esserlo;

    • -3 -- fa in modo che in quella fascia oraria non venga calcolato né il tempo di sessione né il tempo complessivo.

Molte informazioni che riguardano l'utente non possono essere indicate attraverso `acua addRec'. Queste possono essere specificate in modo predefinito nel file di configurazione (`/etc/acua/acua.config'), e poi possono essere modificate attraverso `acua modRec'.

Esempi

acua addRec pippo 365 120 120 4 0 -1 -1 -1 -1

Registra l'utente `pippo' all'interno della gestione di Acua, specificando una scadenza dell'utenza dopo 365 giorni, con un tempo massimo di accesso (probabilmente giornaliero) di due ore, un tempo massimo di sessione di due ore, un livello di priorità pari a quattro, senza telefono e senza limitazioni riferite alle fasce orarie (gli ultimi quattro -1).

acua addRec pippo 365 120

Esattamente come nell'esempio precedente, perché gli argomenti mancanti corrispondono ai valori predefiniti.

acua addRec pippo 365 120 120 4 0 -1 0 -1 -1

Come nell'esempio precedente, con la differenza che l'utente `pippo' non può accedere nella seconda fascia oraria (il valore zero).

acua addRec pippo 365 120 120 4 0 -1 60 -1 -1

Come nell'esempio precedente, con la differenza che l'utente può utilizzare solo un'ora nella seconda fascia oraria.

acua addRec pippo 10/01/01 120 120 4 0 -1 -1 -1 -1

Registra l'utente `pippo' all'interno della gestione di Acua, specificando la scadenza dell'utenza nel primo gennaio del 2010. Gli altri dati sono uguali a quelli del primo esempio.

221.3.4 # acua modRec

acua modRec [-s] <utente> <altri-argomenti>

Il comando `acua modRec' è molto importante e può articolarsi in forme molto differenti. Il suo scopo è quello di modificare la configurazione di un utente, soprattutto su particolari che non possono essere definiti attraverso `acua addRec'.

In questa sezione verranno mostrate solo alcune delle possibilità di questo comando. Per un dettaglio maggiore si può provare a consultare la documentazione originale.

L'azione di `acua modRec' è limitata a ciò che si specifica, senza alcuna verifica della congruenza di ciò che si fa. Per fare un esempio, se si decide di aumentare il tempo totale concesso a un utente, è anche probabile che gli si voglia aumentare il tempo totale rimasto a disposizione, altrimenti il risultato pratico potrebbe non corrispondere a quanto inteso. A questo proposito, è bene usare sempre `acua viewRec' dopo ogni modifica, per verificare che la situazione dell'utente corrisponda a quanto voluto.

Caratteristiche generali

acua modRec <utente> <scadenza> <tempo-massimo> [<sessione-massima> [<priorità> [<limite-di-fascia>...]]]

In questo modo è possibile definire gli elementi principali riferiti alla registrazione di un certo utente. Come si può osservare, è quasi uguale alla sintassi di `acua addRec', con la differenza che non è prevista l'indicazione del telefono.

Purtroppo, questa forma di utilizzo di `acua modRec' non funziona sempre come dovrebbe. In particolare, potrebbero essere cancellate le fasce orarie, e potrebbe anche essere impossibile modificarle successivamente. Se questo dovesse succedere, probabilmente l'unica possibilità di rimediare è l'uso di `acua delRec' seguito da `acua addRec', utilizzando i valori corretti; successivamente, come si può leggere sotto, attraverso `acua modRec' usato nella sua sintassi alternativa, si possono ripristinare i valori corretti per quanto riguarda le risorse già utilizzate.

Modalità

acua modRec <utente> {+|-}<modalità>

Le informazioni legate agli utenti prevedono la presenza di molte variabili booleane, corrispondenti a modalità che possono essere attivate o disattivate. Come si può intuire, il simbolo `+' davanti a un nome attiva la modalità corrispondente, mentre il segno `-' la disattiva.

È possibile definire una configurazione predefinita per queste modalità, attraverso il file di configurazione generale, anche se i nomi utilizzati non sono gli stessi. Di seguito appare l'elenco di alcuni di questi nomi di modalità, per ciò che riguarda `acua modRec'.

  • `SMARTTIME'

    Equivale alla direttiva `SmartTime'; permette di non incrementare il conteggio della durata globale di utilizzo del servizio se il carico del sistema non risulta eccessivo.

  • `SSMARTTIME'

    Equivale alla direttiva `SessionSmartTime'; permette di non incrementare il conteggio della durata della sessione se il carico del sistema non risulta eccessivo.

  • `TCSMARTTIME'

    Equivale alla direttiva `TimeClassSmartTime'; permette di non incrementare il conteggio della durata di utilizzo riferito alla fascia oraria corrispondente se il carico del sistema non risulta eccessivo.

  • `SMARTBOOT'

    Equivale alla direttiva `SmartBoot'; consente all'utente di restare nel sistema quando il tempo complessivo è esaurito se il carico del sistema non risulta eccessivo.

  • `SSMARTBOOT'

    Equivale alla direttiva `SessionSmartBoot'; consente all'utente di restare nel sistema quando il tempo massimo per una singola sessione è esaurito se il carico del sistema non risulta eccessivo.

  • `TCSMARTBOOT'

    Equivale alla direttiva `TimeClassSmartBoot'; consente all'utente di restare nel sistema quando il tempo complessivo riferito alla fascia oraria è esaurito se il carico del sistema non risulta eccessivo.

  • `ISMARTBOOT'

    Equivale alla direttiva `IdleSmartBoot'; consente all'utente di restare nel sistema quando il tempo massimo di inattività è stato superato se il carico del sistema non risulta eccessivo.

  • `WARNBOOT'

    Equivale alla direttiva `WarnBoot'; fa sì che l'utente sia avvisato dell'imminente disconnessione.

  • `EXPLAINBOOT'

    Equivale alla direttiva `ExplainBoot'; fa sì che l'utente venga informato del motivo per cui è stato disconnesso. Questa informazione viene fornita attraverso un messaggio di posta elettronica, e se possibile, anche attraverso il terminale, quando il tipo di accesso lo consente.

Assegnamento di valori a opzioni

acua modRec <utente> <variabile> {=|+=|-=} <valore>

Oltre alle modalità (booleane), sono annotate una serie di informazioni che possono essere modificate con un assegnamento (`='), con un incremento (`+=') o con un decremento (`-=').

La maggior parte di queste indicazioni sono definite in modo preliminare nel file di configurazione generale, mentre altre riguardano la contabilizzazione degli accessi, e vengono gestite dinamicamente in base all'utilizzo da parte dell'utente. Di seguito appare l'elenco di alcune di queste variabili.

  • `priority'

    Definisce il livello di priorità dell'utente.

  • `maxLogins'

    Il numero massimo di accessi simultanei (di solito ne viene consentito uno solo).

  • `PPPidleByte', `PPPidleMin'

    La connessione PPP viene considerata inattiva se sono stati trasmessi meno di `PPPidleByte' byte in `PPPidleMin' minuti.

    Nel file di configurazione può essere usata la direttiva `PPPIdleBoot' per definire entrambi questi valori.

  • `tLimit', `tLeft'

    L'accesso a queste due variabili permette di modificare rispettivamente il tempo massimo a disposizione, e il tempo rimasto, alterando così quanto contabilizzato da Acua.

  • `sLimit', `sLeft'

    L'accesso a queste due variabili permette di modificare rispettivamente il tempo massimo di sessione, e il tempo di sessione rimanente, alterando così quanto contabilizzato da Acua.

  • `cLimit', `cLeft'

    L'accesso a queste due variabili permette di modificare rispettivamente il tempo massimo di fascia oraria, e il tempo di fascia rimanente, alterando così quanto contabilizzato da Acua.

  • `bTx', `bRx'

    Definiscono la quantità di byte trasmessi e ricevuti (upload, download). Intervenendo su questi valori si altera la contabilizzazione di Acua.

  • `bTxLimit', `bRxLimit'

    Definiscono il limite massimo di byte trasmessi e ricevuti (upload, download).

  • `bLimit'

    Definisce il limite massimo di byte che possono transitare (la somma di quelli trasmessi e di quelli ricevuti).

  • `bStxLimit', `bStxLimit'

    Definiscono il limite massimo di byte trasmessi e ricevuti per sessione (upload, download).

  • `bSLimit'

    Definisce il limite massimo di byte che possono transitare per sessione (la somma di quelli trasmessi e di quelli ricevuti).

Esempi

acua modRec pippo 10/01/01 12000 12000 4 -1 60 -1 -1

Modifica l'impostazione dell'utente `pippo', fissando la scadenza al 1/1/2010, definendo il tempo massimo complessivo e anche quello di sessione in 200 ore (12000 minuti), indicando il livello di priorità (4) e le fasce orarie (nella seconda viene concesso di accedere per un'ora).

Purtroppo, è probabile che questo comando non funzioni, pur essendo corretto sintatticamente. Se `acua modRec' non risponde correttamente a questa forma della sintassi, non ci sono altri rimedi che farne a meno.

acua modRec pippo +EXPLAINBOOT

Attiva la modalità `EXPLAINBOOT' per l'utente `pippo'.

acua modRec pippo -WARNBOOT

Disattiva la modalità `WARNBOOT' per l'utente `pippo'.

acua modRec pippo tLimit = 24000

Modifica il tempo complessivo concesso, portandolo a 400 ore (24000 minuti).

acua modRec pippo tLeft = 24000

Modifica il tempo complessivo rimanente, portandolo a 400 ore (24000 minuti).

221.3.5 # acua subscribe

acua subscribe <utente> <scadenza> <tempo-massimo> [<sessione-massima> [<priorità> [<limite-di-fascia>...]]]

Per motivi di praticità, è possibile definire una registrazione aggiuntiva che si sovrappone alla situazione esistente dell'utente a cui viene applicata. Quando l'utente è «sottoscritto», tutte le modifiche che possono essere fatte attraverso `acua modRec' si riferiscono a questo strato aggiuntivo, che ha effetto fino alla scadenza stabilita (l'argomento che segue l'indicazione dell'utente), oppure fino a quando si utilizza `acua unsubscribe'.

È importante chiarire che tutte le modifiche apportate quando è attiva la «sottoscrizione», vengono perdute nel momento in cui questa viene rimossa, e tutto torna allo stato precedente.

Esempi

acua subscribe pippo 05/01/01 24000 24000 4 -1 120 -1 -1

Modifica temporaneamente l'impostazione dell'utente `pippo', fissando la scadenza di queste modifiche al 1/1/2005, definendo il tempo massimo complessivo e anche quello di sessione in 400 ore (24000 minuti), indicando il livello di priorità (4) e le fasce orarie (nella seconda viene concesso di accedere per due ore).

Come nel caso di `acua modRec', è probabile che questo comando, pur essendo corretto sintatticamente, non funzioni, andando a modificare in modo errato i tempi assegnati alle fasce orarie

221.3.6 # acua unsubscribe

acua unsubscribe <utente>

Elimina lo strato aggiunto attraverso la «sottoscrizione» di un utente, riportando il suo stato a quello esistente prima di quel momento.

221.3.7 # acua delRec

acua delRec <utente>

Toglie un utente dal controllo di Acua, cancellando la registrazione corrispondente. Di solito, viene utilizzato direttamente dallo script `acua_deluser', ovvero dal comando `acua delUser'.

221.3.8 # acua viewRec

acua viewRec [<utente>]

`acua viewRec' permette di conoscere lo stato dell'utente specificato, o di quello che ha avviato il comando. Per farlo si avvale di `acua_viewRec'. Il problema di questo comando è che può essere utilizzato da qualunque utente, e ciò potrebbe essere interpretato come una violazione della riservatezza personale.

È importante decidere se rendere pubbliche tali informazioni o meno. Se si vuole evitarlo, basta che il programma `acua_viewRec' abbia i permessi di esecuzione esclusivamente per l'utente `root'.

Segue un esempio riferito all'utente `tizio', appena creato, al quale viene concesso un tempo complessivo e un tempo di sessione di 200 ore (12000 minuti), inoltre, nella seconda fascia oraria gli viene concesso di accedere solo per un'ora. Per quanto riguarda le altre risorse non sono stati stabiliti limiti particolari; la scadenza dell'utenza è il giorno 1/1/2010.

login:      tizio
util:       0.00%
online:     NO
phone:      N/A
priority:   4
flags:      [TCSMARTBOOT WARNBOOT EXPLAINBOOT]
uflags:     []
maxLogins:  1 [maxDeduct = 1]
idleLimit:  [TTY = 00:15]  [PPP = 15360 bytes in 00:15]
time:       total: [200:00 + 00:00 / 200:00]  session: [200:00 / 200:00]
class:      [-00:01 / +INF]  [01:00 / 01:00]  [-00:01 / +INF]  [-00:01 / +INF]
data:       total: [0.00 KB / +INF]  session: [0.00 KB / +INF]
data TX:    total: [0.00 KB / +INF]  session: [0.00 KB / +INF]
data RX:    total: [0.00 KB / +INF]  session: [0.00 KB / +INF]
creation:   Sat Jan  2 21:42:23 1999
expiry:     DELETE in 4016.10 days [Fri Jan  1 00:00:00 2010]
lock:       N/A
subscr:     N/A
last log:   Sat Jan  2 21:42:23 1999
last on:    -0.00 days [Sat Jan  2 21:42:23 1999]

221.3.9 # acua forEach

acua forEach [<opzioni>] <comando>

`acua forEach' permette di scandire l'elenco degli utenti, eseguendo per ognuno di loro il comando posto alla fine degli argomenti. `acua forEach' esclude dalla scansione gli utenti indicati espressamente nel file di configurazione generale con la direttiva `ForEachExclude'.

All'interno del comando da eseguire attraverso `acua forEach' è possibile passare il nome dell'utente per il quale viene eseguito, inserendo il simbolo `{}', come si fa con `find' per passare il nome del file trovato. Come al solito, può darsi che le parentesi graffe debbano essere protette dall'interpretazione della shell, come succede se si usa la shell Bash.

Alcune opzioni

-u

Specifica che deve essere fatta la scansione dei soli utenti per i quali esista effettivamente una registrazione all'interno di Acua.

Esempi

acua forEach -u acua modRec \{\} expire = 1y

Scandisce ogni utente registrato con Acua e gli assegna la scadenza dell'utenza alla fine dell'anno in corso.

acua forEach acua addRec \{\} 1y 120

Scandisce tutti gli utenti, esclusi quelli indicati nella configurazione generale con la direttiva `ForEachExclude', allo scopo di aggiungerli alla gestione di Acua, assegnando la scadenza dell'utenza alla fine dell'anno in corso, concedendo un tempo massimo di due ore (120 minuti).

221.4 Funzionamento

Il funzionamento quotidiano di Acua è attuato dal demone `acua_updated', il quale si avvale di altri programmi e script, e da `acua_login' che annota immediatamente l'ingresso di un utente, o gli impedisce di accedere.

221.4.1 # acua_updated

acua_updated [<opzioni>]

`acua_updated' è il demone che controlla l'utilizzo del sistema, esegue le operazioni di contabilizzazione, interrompe le connessioni quando necessario, ed eventualmente elimina gli utenti.

Per compiere queste funzioni si avvale eventualmente dei comandi `acua sync', `acua purge', e `acua expire'.

Generalmente, `acua_updated' viene avviato senza opzioni, o al massimo con l'opzione `-a', che serve a evitare che vengano compiute operazioni di manutenzione che implicano l'utilizzo di `acua sync', `acua purge', e `acua expire', lasciando all'amministratore il compito di provvedere a queste cose.

221.4.2 # acua sync

acua sync

`acua sync' serve a sincronizzare le informazioni di Acua con il file `/etc/passwd', allo scopo di eliminare registrazioni riferite a utenti che non esistono più. In generale, questo comando dovrebbe essere eseguito periodicamente da `acua_updated'.

221.4.3 # acua purge

acua purge <giorni>

`acua purge' elimina le utenze che risultano inutilizzate dal numero di giorni indicato come argomento. Viene usato generalmente in modo automatico da `acua_updated', che a sua volta utilizza quanto definito nella configurazione.

221.4.4 # acua expire

acua expire

`acua expire' elimina le utenze scadute, oppure le «sottoscrizioni» scadute. In pratica, se un utente ha una sottoscrizione scaduta, viene eseguito `acua unsubscribe', se invece è scaduta proprio la registrazione, allora l'utente viene eliminato attraverso `acua delUser' (cosa che poi avvia il solito script `acua_deluser').

`acua expire' viene eseguito normalmente attraverso `acua_updated', in modo da rendere automatica l'operazione.

221.4.5 $ acua_login

acua_login [<utente>]

acua_login < <terminale>

`acua_login' deve essere utilizzato per autorizzare l'accesso degli utenti controllati da Acua. Se l'utente non è autorizzato, `acua_login' restituisce un valore diverso da zero (Falso), e questo viene sfruttato per realizzare uno script per controllare l'accesso, come già mostrato all'inizio del capitolo.

L'avvio di `acua_login' è necessario anche per inizializzare alcuni valori riferiti all'utente nel sistema di Acua, e quindi non se ne può fare a meno.

`acua_login' può essere avviato senza l'indicazione esplicita dell'utente, se il processo appartiene all'utente stesso; in alternativa, si può fornire a `acua_login' il dispositivo del terminale da cui accede l'utente, e anche questo serve per riconoscerlo.

`acua_login' dipende dalle informazioni contenute nei file `/var/run/utmp' e `/var/log/wtmp'; se per qualche motivo questi non vengono aggiornati correttamente, `acua_login' non riesce a verificare l'accesso da parte dell'utente, e restituisce il valore Falso.

Esempi

#!/bin/sh

/usr/bin/mesg n
/bin/stty -tostop

# Verifica che l'utente possa accedere.
if /usr/sbin/acua_login
then
    # L'utente viene accolto.
    echo Benvenuto $LOGNAME
else
    # L'utente viene estromesso.
    logout
fi

# Attiva la connessione PPP.
echo "Viene attivata la connessione PPP."
exec /usr/sbin/pppd crtscts modem noauth refuse-chap refuse-pap \
    debug proxyarp idle 600

Lo script che si vede è un esempio di shell per un utente che sfrutta la connessione per attivare un collegamento PPP, alla fine della procedura di autenticazione tradizionale.

#! /bin/sh
# /etc/ppp/ip-up

#...

if ! /usr/sbin/acua_login < $DEVICE
then
    kill -15 "$PPID"
    exit
fi

Quello che si vede sopra è una parte di un ipotetico script `/etc/ppp/ip-up'. Questo viene avviato da `pppd' dopo la connessione, e serve nel caso l'autenticazione avvenga attraverso il protocollo PPP stesso. In particolare, la variabile di ambiente `DEVICE' contiene il percorso assoluto del dispositivo di terminale attraverso il quale l'utente accede, e la variabile `PPID' contiene il numero del processo corrispondente a `pppd'.

221.4.6 $ acua renew

acua renew [<opzioni>]

`acua renew' viene usato per azzerare i conteggi riferiti a tutti gli utenti. Se non vengono utilizzate le opzioni, si azzera tutto ciò che può esserlo.

Alcune opzioni

-c

Azzera i conteggi riferiti alle fasce orarie. Di solito, il tempo a disposizione riferito a una determinata fascia oraria, viene inteso come utilizzabile nell'arco delle 24 ore, per cui è opportuno eseguire il comando `acua renew -c' ogni giorno, attraverso il sistema Cron.

-d

Azzera i conteggi riferiti ai trasferimenti di dati.

-t

Azzera i conteggi riferiti al tempo complessivo.

221.5 Altra configurazione

È possibile personalizzare meglio il funzionamento di Acua intervenendo su altri file, oltre a quello di configurazione generale. All'interno della directory `/etc/acua/' (ma potrebbe trattarsi invece di `/usr/lib/acua/') dovrebbero trovarsi altri file di configurazione, assieme ai messaggi che possono essere generati da Acua (per avvisare l'utente dell'imminente disconnessione, o di altre cose).

Se si vuole utilizzare Acua professionalmente, diventa indispensabile tradurre tali file.

A titolo di esempio, viene mostrato il contenuto del file `/usr/lib/acua_viewRec', quello utilizzato per generare il rapporto di `acua viewRec'.

login:      $login
util:       $overallUtilization
online:     $online
phone:      $phNo
priority:   $priority
flags:      [$flags]
uflags:     [$uflags]
maxLogins:  $maxLogins [maxDeduct = $maxDeduct]
idleLimit:  [TTY = $idleLimit]  [PPP = $PPPidleBytes bytes in $PPPidleMinutes]
time:       total: [$tLeft + $credit / $tLimit]  session: [$sLeft / $sLimit]
class:      [$cLeft0 / $cLimit0]  [$cLeft1 / $cLimit1]  [$cLeft2 / $cLimit2]  [$cLeft3 / $cLimit3]
data:       total: [$bXfer / $bLimit]  session: [$bSxfer / $bSlimit]
data TX:    total: [$bTx / $bTxLimit]  session: [$bStx / $bStxLimit]
data RX:    total: [$bRx / $bRxLimit]  session: [$bSRx / $bSrxLimit]
creation:   $creationDate
expiry:     $expireAction
lock:       $lockInfo
subscr:     $subscriptionInfo
last log:   $lastLogin
last on:    $lastOnDays days [$lastOnline]

Si intuisce il senso delle variabili, anche se la maggior parte di queste non sono documentate.

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Per la precisione, si utilizzano i comandi `acua addUser' e `acua delUser', ma questo verrà chiarito in seguito.

2.) A meno di avere verificato effettivamente il funzionamento della gestione del tempo di sessione, è meglio non farne uso, o al massimo indicare lo stesso valore del tempo totale.

3.) Nel seguito si farà riferimento al file `/etc/acua/acua.config', confidando che sia quella la collocazione comune.


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]