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


Capitolo 379.   Filtri di accesso standard

Il primo punto su cui intervenire per affrontare i problemi di sicurezza di un sistema, è quello del filtro di accesso. Questo compito è svolto fondamentalmente da Login, che può essere configurato in modo differente a seconda dell'organizzazione della propria distribuzione GNU.

Normalmente dipende dalla configurazione delle librerie PAM, che sia previsto o meno l'uso di questi file. La configurazione delle librerie PAM per ciò che riguarda Login potrebbe essere contenuta nel file /etc/pam.d/login.

379.1   Login in generale

Come accennato, Login potrebbe offrire qualche strumento minimo di configurazione per controllare gli accessi. In generale, la presenza del file /etc/nologin impedisce l'accesso e il file /etc/securetty stabilisce da quali terminali può accedere l'utente root.

Alcuni tipi di Login permettono di controllare l'accesso degli utenti comuni attraverso la configurazione del file /etc/usertty; altri potrebbero utilizzare la configurazione di /etc/login.access. Qui viene mostrato come si potrebbero utilizzare questi file, quando il programma Login che si ha a disposizione ne prevede l'uso.

Per quanto riguarda l'uso di /etc/login.defs, si veda il capitolo 131, dedicato alle parole d'ordine oscurate.

Per sapere esattamente come è organizzato il proprio Login, è indispensabile leggere la sua pagina di manuale, login(1), tenendo conto però, che potrebbe anche non essere aggiornata.

379.1.1   file «/etc/usertty»

Attraverso il file /etc/usertty dovrebbe essere possibile limitare l'accesso degli utenti. Solitamente non viene utilizzato e la sua mancanza consente a tutti gli utenti del sistema di accedere da dove vogliono, quando vogliono, a parte la restrizione che riguarda l'utente root in base alla configurazione del file /etc/securetty.

In linea di massima, se il programma Login è stato compilato in modo da utilizzarlo, il file /etc/usertty permette di definire l'origine e la fascia oraria attraverso cui ogni utente può accedere.

Il file /etc/usertty può contenere commenti, introdotti dal simbolo # e terminati dalla fine della riga; inoltre può contenere righe bianche o vuote, che vengono ignorate. Per il resto, le direttive che può contenere sono raggruppate in tre sezioni possibili, denominate: CLASSES, GROUPS e USERS.

CLASSES | GROUPS | USERS
elemento     origine...
...

Ognuna delle tre sezioni inizia con la parola chiave che la identifica, scritta con tutti i caratteri maiuscoli, come si vede dallo schema sintattico. Le righe seguenti, fino all'indicazione della sezione successiva, rappresentano la definizione di elementi della sezione a cui si abbinano delle origini. In pratica,

elemento origine...

serve a definire il nome di un elemento riferito alla sezione a cui appartiene, il quale consente l'accesso dalle origini indicate. Tra il nome e l'elenco di origini si possono utilizzare uno o più spazi orizzontali (comprese le tabulazioni); l'elenco dei nomi è separato a sua volta attraverso altri spazi orizzontali.

Un'origine, nel senso degli schemi sintattici mostrati, rappresenta un terminale o un nodo espressi in qualche modo, da cui l'utente che vi appartiene può accedere. L'origine può contenere anche l'indicazione di una fascia oraria in cui è consentito l'accesso.

La cosa migliore, per cominciare, è mostrare un esempio in cui appare l'uso di tutte le sezioni.

CLASSES
terminale_console     tty1 tty2 tty3 tty4 tty5 tty6
elaboratore_locale    @localhost
rete_locale           @.brot.dg @192.168.1.0/255.255.255.0

GROUPS
studenti              rete_locale tty1
prof                  terminale_console elaboratore_locale rete_locale

USERS
tizio                 tty1 tty2 tty3
caio                  tty4 tty5 tty6
*                     rete_locale

L'esempio mostra la sequenza normale nell'indicazione delle sezioni. La prima, CLASSES, permette di definire delle classi, ovvero dei nomi che possono essere richiamati nelle altre sezioni. A fianco di ogni nome di classe viene riportato l'elenco delle origini a cui queste fanno riferimento. Intuitivamente, si intende che la classe terminale_console rappresenta gli accessi provenienti da una console virtuale qualunque, da /dev/tty1 a /dev/tty6; nello stesso modo si può comprendere che la classe rete_locale rappresenta tutti gli accessi provenienti da nodi appartenenti al dominio brot.dg o alla sottorete 192.168.1.*.

La sezione GROUPS permette di definire dei gruppi, secondo quanto riportato nel file /etc/group, abbinando agli utenti relativi la possibilità di accedere attraverso origini determinate. Nell'esempio, gli utenti del gruppo studenti possono accedere dagli accessi definiti dalla classe rete_locale e anche dalla prima console (/dev/tty1).

La sezione USERS permette di definire l'accesso dei singoli utenti. Per esempio, l'utente tizio può accedere solo dalle prime tre console virtuali.

In generale, se un utente ricade all'interno della definizione di un elemento della sezione GROUPS e anche in uno della sezione USERS, le sue possibilità di accesso sono date dall'unione delle due.

All'interno della sezione USERS può apparire un elemento speciale, l'asterisco (*), che rappresenta qualsiasi utente. Seguendo l'esempio, oltre ai nominativi indicati esplicitamente, si fa in modo che ogni utente possa accedere da qualunque nodo della rete locale.

A parte la comprensione intuitiva, le origini possono essere espresse in modi differenti, secondo uno degli schemi seguenti.

classe
dispositivo_di_terminale
@.dominio
@numero_ipv4/maschera
@localhost

Quanto mostrato rappresenta solo una prima approssimazione; in ogni caso, un'origine può essere espressa da:

  1. il nome di una classe definita precedentemente;

  2. il nome del file di dispositivo del terminale corrispondente, togliendo il percorso /dev/;

  3. un nome di dominio che rappresenta tutti i nodi che gli appartengono;

  4. l'indirizzo di una sottorete, composto dal numero IPv4 e dalla maschera relativa;

  5. la sigla @localhost che rappresenta un accesso proveniente dallo stesso sistema locale.

Tuttavia, l'origine può contenere anche l'indicazione di una fascia oraria in cui quella tale origine fisica (o logica) può avere accesso. Naturalmente, questo vale per tutti i casi visti, escluso le classi, che in realtà servono per definire un gruppo di origini complete.

Una fascia oraria viene indicata davanti a un'origine di quelle elencate fino a questo punto e la si distingue perché è racchiusa tra parentesi quadre. La fascia oraria può contenere l'indicazione di uno o più giorni della settimana e di uno o più intervalli orari. La fascia oraria è composta quindi da un elenco di elementi, separati da due punti verticali (:). Si osservi l'esempio seguente:

...
[mon:tue:wed:thu:fri:8-17:20]
...

L'esempio rappresenta una fascia oraria corrispondente all'intervallo dalle 8:00 alle 17:59 e dalle 20:00 alle 20:59, di tutti i giorni da lunedì a venerdì. Intuitivamente si comprende che esiste un'approssimazione obbligata di un'ora per gli intervalli orari e che non è possibile indicare informazioni sui giorni diversi da un ambito strettamente settimanale.

Una fascia oraria di questo tipo deve contenere almeno un'indicazione di un intervallo orario.

Per un esempio più completo, si osservi il pezzo seguente del file /etc/usertty che rappresenta una sezione USERS. L'utente tizio può accedere dalla prima console virtuale solo il sabato e la domenica dalle 8:00 alle 22:59; poi può accedere anche dalle origini specificate dalla classe rete_locale, dato che ciò è concesso indistintamente per tutti gli utenti.

USERS
tizio                   [sat:sun:8-22]tty1
caio                    tty4 tty5 tty6
*                       rete_locale

379.1.2   File «/etc/login.access»

Il file /etc/login.access svolge funzioni simili a /etc/usertty. Il suo scopo è quello di definire chi può o non può accedere al sistema, in base all'origine da cui tenta di accedere. A differenza di /etc/usertty, non è possibile definire delle fasce orarie; ma per questo viene in aiuto il file di configurazione /etc/porttime.

Il file /etc/login.access può contenere commenti, preceduti dal simbolo #, righe bianche e righe vuote. Per il resto si tratta di direttive in forma di record composti da tre campi separati attraverso il simbolo di due punti (:). Si osservi lo schema sintattico seguente:

permesso:elenco_utenti:origini

Il primo campo può contenere solo i simboli + e -, che indicano rispettivamente la concessione o il rifiuto all'accesso.

+|-:elenco_utenti:origini

Le direttive vengono lette sequenzialmente nel momento in cui un utente tenta di accedere; la prima a cui corrisponde l'utente stesso, è quella che viene applicata. Se nessuna direttiva corrisponde, l'accesso viene concesso.

L'elenco degli utenti, è un elenco spaziato di nomi di utente o di gruppo. In generale, viene cercata prima la corrispondenza con il nome dell'utente e solo dopo si prova con il gruppo. Tuttavia, la corrispondenza con il gruppo avviene solo se l'utente in questione è aggregato esplicitamente al gruppo stesso. Ciò significa che se l'utente tizio è abbinato al gruppo lavoro, ma nel file /etc/group questo non è indicato, l'utente in questione non viene riconosciuto come appartenente a tale gruppo.

Nel secondo campo può apparire anche la parola chiave ALL, ovvero un jolly che rappresenta tutti gli utenti.

Nel terzo campo si indicano le origini da cui potrebbero provenire i tentativi di accesso; anche in questo caso si tratta di un elenco spaziato. Può trattarsi di:

Nel terzo campo possono apparire anche le parole chiave ALL e LOCAL, che indicano rispettivamente tutte le origini, oppure solo le origini locali (ovvero qualunque stringa che non contenga un punto).

Viene mostrato un esempio descritto attraverso dei commenti:

# L'utente root può accedere solo da origini locali.
+:root:LOCAL

# Gli utenti tizio, caio e sempronio possono accedere dalle prime
# sei console virtuali, dal nodo locale e anche da roggen.brot.dg.
+:tizio caio sempronio:tty1 tty2 tty3 tty4 tty5 tty6
+:tizio caio sempronio:localhost roggen.brot.dg

# Tutte le altre combinazioni di accesso non sono consentite.
-:ALL:ALL

379.1.3   File «/etc/porttime»

Il file di configurazione /etc/porttime completa le funzionalità di /etc/login.access. Il suo utilizzo effettivo dipende da Login e probabilmente dalla configurazione attraverso /etc/login.defs, descritto nel capitolo 131.

Il file /etc/porttime permette di definire delle combinazioni tra i terminali di accesso e i tempi in cui gli utenti possono accedere. Il file può contenere commenti, preceduti dal simbolo #, righe bianche e righe vuote. Per il resto si tratta di direttive in forma di record composti da tre campi separati attraverso il simbolo di due punti (:). Si osservi lo schema sintattico seguente:

terminale[, terminale]...:utente[, utente]...:periodo[, periodo]...

I tre campi consentono l'indicazione di elenchi di elementi, separati attraverso una virgola. Il primo campo rappresenta il nome di uno o più terminali, così come sono identificati dai file di dispositivo (senza il percorso); in particolare, per indicare tutti i terminali, si può usare l'asterisco. Il secondo campo è un elenco di utenti a cui si vuole applicare la direttiva; anche in questo caso si può usare l'asterisco per indicarli tutti. Il terzo campo indica i periodi di accesso, attraverso una stringa un po' articolata:

sigle_giorni_settimanaora_inizio-ora_fine

I giorni della settimana si esprimono attraverso sigle particolari, come si vede nella tabella 379.5; se necessario si possono unire più sigle assieme.

Tabella 379.5. Elenco delle sigle utilizzabili per identificare i giorni della settimana.

Sigla Significato
Al
Tutti i giorni della settimana.
Wk
I giorni dal lunedì al venerdì.
Mo
Il lunedì.
Tu
Il martedì.
We
Il mercoledì.
Th
Il giovedì.
Fr
Il venerdì.
Sa
Il sabato.
Su
La domenica.

Gli orari si indicano con stringhe di quattro cifre numeriche, dove la prima coppia di cifre rappresenta l'ora e la seconda i minuti. Per esempio,

...
*:tizio,caio:Wk1630-2400
...

consente l'accesso da parte degli utenti tizio e caio tutti i giorni dal lunedì al venerdì dalle ore 16:30 alla mezzanotte. L'esempio seguente, invece, consente solo all'utente root di accedere attraverso /dev/console, escludendo tutti gli altri utenti:

...
console:root:Al0000-2400
console:*:
...

La prima direttiva per la quale si ottenga corrispondenza tra i primi due campi e l'utente che tenta di accedere, è quella che si applica. Se nel seguito ci fossero direttive più permissive, queste non verrebbero applicate.

L'esempio seguente esclude l'accesso di tutti gli utenti, incluso l'utente root, perché la seconda direttiva non viene presa in considerazione:

...
*:*:
*:*:Al0000-2400
...

Infine, l'esempio seguente consente l'accesso all'utente tizio solo nei giorni di lunedì e martedì:

...
*:tizio:MoTu0000-2400
...

Per come è stato descritto, questo file di configurazione permette soltanto di impedire gli accessi al di fuori degli orari stabiliti. Per imporre che siano rispettati i tempi, occorre il demone logoutd, descritto nella pagina di manuale logoutd(8), il cui scopo è di sorvegliare in tal senso, imponendo la chiusura delle connessioni quando queste superano gli orari previsti.

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


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

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

Valid ISO-HTML!

CSS validator!