Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/library/linux/AppLinux/al240.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:56 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 10:28:12 2007 Êîäèðîâêà: |
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/Linux.
Il programma che si occupa di controllare chi accede attraverso una console o un terminale al sistema, ovvero Login, potrebbe offrire qualche strumento minimo di configurazione per controllare gli accessi. In generale, se Õ presente il file /etc/nologin
, questo 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 sapere esattamente come Õ organizzato il proprio Login, Õ indispensabile leggere la sua pagina di manuale, login(1), tenendo conto perÐ, che questa potrebbe anche non essere aggiornata.
Attraverso il file /etc/usertty
Õ 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; 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 della 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 appartiene in qualche modo a quell'elemento, 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 classe_console tty1 tty2 tty3 tty4 tty5 tty6 classe_locali @localhost classe_rete_locale @.brot.dg @192.168.1.0/255.255.255.0 GROUPS studenti classe_rete_locale tty1 prof classe_console utenti_locali utenti_rete_locale USERS tizio tty1 tty2 tty3 caio tty4 tty5 tty6 * classe_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 utenti_console
rappresenta gli accessi provenienti da una qualunque console virtuale, da /dev/tty1
a /dev/tty6
; nello stesso modo si puÐ comprendere che la classe 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
, e di abbinare agli utenti relativi la possibilitÞ di accedere attraverso origini determinate. Nell'esempio, gli utenti del gruppo studenti
possono accedere dagli accessi definiti dalla classe 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 agli accessi concessi 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, e in ogni caso, un'origine puÐ essere espressa da:
il nome di una classe definita precedentemente;
il nome del file di dispositivo del terminale corrispondente, togliendo il percorso /dev/
;
un nome di dominio che rappresenta tutti i nodi che gli appartengono;
l'indirizzo di una sottorete, composto dal numero IPv4 e dalla maschera relativa;
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 dal lunedË al 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, e poi, anche dalle origini specificate dalla classe classe_rete_locale
, dato che ciÐ Õ concesso indistintamente per tutti gli utenti.
USERS tizio [sat:sun:8-22]tty1 caio tty4 tty5 tty6 * classe_rete_locale |
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, e tutte queste righe vengono ignorate. Le direttive del file sono 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.
-
+|
|
Le direttive vengono lette sequenzialmente nel momento in cui un utente tenta di accedere, e 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. Questo significa che se l'utente tizio
Õ abbinato al gruppo lavoro
, ma nel file /etc/group
questo non Õ indicato, l'utente in questione non verrÞ riconosciuto come appartenente a tale gruppo.
Nel secondo campo puÐ apparire anche le parole chiave ALL
che in pratica Õ 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:
terminali locali, ovvero console virtuali, e in tal caso si utilizzano i nomi dei file di dispositivo, senza l'indicazione del percorso (tty1
, tty2
, ecc.);
nomi di dominio completo o parziale (in tal caso si riconoscono perchÈ iniziano con un punto);
indirizzi IP, che in tal caso devono terminare con un punto;
nomi di domini NIS, che iniziano con il simbolo @
.
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 i suoi commenti:
# L'utente root puÐ accedere solo da origini locali. +:root:LOCAL # Gli utenti tizio, caio e semproni possono accedere dalle prime # sei console virtuali, dal nodo locale, e anche da roggen.brot.dg. +:tizio caio semproni:tty1 tty2 tty3 tty4 tty5 tty6 +:tizio caio semproni:localhost roggen.brot.dg # Tutte le altre combinazioni di accesso non sono consentite. -:ALL:ALL |
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
37.
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, e tutte queste righe vengono ignorate. Le direttive del file sono 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, e 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-settimana><ora-inizio>
|
I giorni della settimana si esprimono attraverso sigle particolari, come si vede nella tabella 185.1; e se necessario si possono unire piÛ sigle assieme.
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 Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ pluto.linux.it