[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]

144. 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 gli account, e si rischia di lasciare attivi quelli che non servono più, o sono inutilizzati 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 di account scaduti (provvedendo all'avviso preventivo), e all'eliminazione di account inattivi da molto tempo.

Acua è lo strumento ideale per un ISP (Internet Service Provider), ma anche altri ambienti possono trovare utile l'utilizzo di questo software.

144.1 Organizzazione generale

Il controllo di Acua si basa su un registro degli utenti sottoposti alla sua amministrazione, un daemon 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 orarie superiori a quanto loro concesso. Per questo, la procedura che permette all'utente di effettuare il login deve essere ritoccata, in modo da inserire una verifica attraverso Acua.

Inoltre, per forzare il rispetto delle regole poste, il daemon 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 proseguire la connessione. Ancora, il daemon deve prendersi cura di avvisare dell'imminente scadenza dell'account, 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 degli account. 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 daemon 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 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 necessariamente modificare gli script di creazione e cancellazione degli utenti.

144.1.1 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. 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...).

144.2 Preparazione

Per utilizzare Acua, è necessario mettere in funzione il daemon 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 Linux ufficiale, è probabile che si trovi altrove (/usr/lib/acua/ per esempio). *2*

Oltre al daemon, è 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 singolo collegamento. 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; in ogni caso, qualcosa di ben definito. L'azzeramento di questi conteggi (che possono riguardare anche altri parametri) deve avvenire con una cadenza equivalente.

Quando questi periodi sono a cadenza giornaliera, l'azzeramento si fa ogni notte, attraverso cron, con una istruzione simile a quella seguente.

02 4 * * * root /usr/bin/acua renew

In generale, in tutti gli esempi che verranno mostrati, si farà sempre riferimento a periodi giornalieri, in cui l'azzeramento avviene ogni notte a una qualche ora non meglio definita.

144.2.1 Configurazione del daemon

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 ad 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.

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

La direttiva Devices serve a definire quali dispositivi utilizzabili per l'accesso, devono essere controllati dal daemon. 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 degli account inutilizzati 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 daemon. Tuttavia la cosa è così delicata che è importante ricordare di verificare questo script, prima di avviare il daemon stesso.

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

MailHost <nome-host>

Acua può occuparsi di inviare dei messaggi di preavviso prima della scadenza dell'account, e per farlo, si avvale della posta elettronica. A volte però, l'host 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 dell'host 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, siano 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 server presso cui questa viene depositata.

WarnExpire <n-giorni>...

WarnExpireCC <indirizzo-email>

Questo è un altro tipo di avvertimento che riguarda la scadenza dell'account, 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 email.

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 alla 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.

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.

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 effettivamente presenti.

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 gli account inutilizzati 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 (1K 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

144.2.2 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 daemon per eliminare gli account scaduti e quelli inutilizzati da molto tempo.

144.2.2.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 Bash.

#! /bin/sh

Nella prima parte vengono definite alcune variabili, attraverso cui diventa più facile definire 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 ha a disposizione l'account, e 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 a disposizione per le connessioni nell'arco delle 24 ore (dipende da quanto frequentemente si azzerano i conteggi), e il tempo massimo per una singola connessione. Il valore si esprime in minuti, e nell'esempio i dati coincidono, a indicare che l'utente ha a disposizione 2 ore che può impiegare anche completamente in una sola connessione.

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 link 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 account 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 desiderano gestire.

144.2.2.2 Eliminazione con acua_deluser

acua_deluser <utente>

Questo script è più importante di quello di creazione, soprattutto perché potrebbe essere avviato dal daemon 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 unico 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 alla eliminazione vera e propria dell'account, 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

144.2.3 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

144.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 normali, 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 è abbastanza dettagliata.

144.3.1 # acua addUser

acua addUser <utente>

acua addUser permette di creare un nuovo account registrato 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.

144.3.2 # acua delUser

acua delUser <utente>

acua delUser permette di eliminare un account 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.

144.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 per il quale è già stato inserito un account nel sistema.

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 del login.

  2. <scadenza>

    Rappresenta la scadenza dell'account secondo Acua (indipendente da quanto indicato nel file /etc/shadow). La scadenza può essere definita attraverso un numero, che normalmente rappresenta una quantità di giorni, oppure in modo esplicito, nella forma <aa>/<mm>/<gg> (anno/mese/giorno).

    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 0 (zero).

  3. <tempo-massimo>

    Il tempo massimo concesso all'utente nel giorno (o in periodi più lunghi se l'azzeramento si compie con cadenze maggiori). Tale durata si esprime in minuti.

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

  4. <sessione-massima>

    Stabilisce la durata massima della sessione, cioè di un unico collegamento ininterrotto. Anche questo valore si esprime in minuti. Se non viene specificato, si assume corrisponda al tempo massimo.

  5. <priorità>

    Fissa la priorità di questo utente, che si esprime con un valore che va da 0 a 7, 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 è 4.

  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 normali che hanno accesso al sistema, mentre si presume che si tratti di una notizia riservata.

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

  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:

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'account dopo 365 giorni, con un tempo massimo di accesso (probabilmente giornaliero) di 2 ore, un tempo massimo di sessione di 2 ore, un livello di priorità pari a 4, 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.

144.3.4 # acua modRec

acua modRec <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ò consultare la documentazione originale.

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.

Flag

acua modRec {+|-}<flag>

Le informazioni legate agli utenti prevedono la presenza di molti flag, 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 questi flag, 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.

Assegnamento di valori a opzioni

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

Oltre ai flag, 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.

144.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.

144.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.

144.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.

144.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.

144.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 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'account 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'account alla fine dell'anno in corso, concedendo un tempo massimo di due ore (120 minuti).

144.4 Funzionamento

Il funzionamento quotidiano di Acua è attuato dal daemon 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 il login.

144.4.1 # acua_updated

acua_updated [<opzioni>]

acua_updated è il daemon 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.

144.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.

144.4.3 # acua purge

acua purge <giorni>

acua purge elimina gli account che risultano inutilizzati 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.

144.4.4 # acua expire

acua expire

acua expire elimina gli account scaduti, 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.

144.4.5 $ acua_login

acua_login [<utente>]

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 di login, 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.

acua_login può essere avviato senza l'indicazione esplicita dell'utente, se il processo appartiene all'utente stesso.

144.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 cron.

-d

Azzera i conteggi riferiti ai trasferimenti di dati.

-t

Azzera i conteggi riferiti al tempo complessivo.

144.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.

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

AppuntiLinux 1998.11.22 --- Copyright © 1997-1998 Daniele Giacomini - daniele@calion.com


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

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


[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]