Nome
hosts_access: il formato di accesso host ai file di controllo di Linux.
Descrizione
Questa pagina di manuale descrive Linux come un semplice linguaggio di controllo degli accessi basato su modelli client (nome host / indirizzo, nome utente) e server (nome processo, nome host / indirizzo). Gli esempi sono forniti alla fine. Il lettore impaziente è invitato a saltare alla sezione degli esempi per una rapida introduzione. Una versione estesa della lingua di controllo degli accessi è descritta nel hosts_options (5) documento. Le estensioni sono attivate al momento della compilazione del programma costruendo con -DPROCESS_OPTIONS.
Nel seguente testo, demone è il nome del processo di un processo daemon di rete, e cliente è il nome e / o l'indirizzo di un host che richiede il servizio. I nomi dei processi del daemon di rete sono specificati nel file di configurazione inetd.
File di controllo di accesso
Il software di controllo degli accessi consulta due file. La ricerca si ferma alla prima partita.
L'accesso verrà concesso quando una coppia (daemon, client) corrisponde a una voce nel file /etc/hosts.allow file.
In caso contrario, l'accesso verrà negato quando una coppia (daemon, client) corrisponde a una voce nel file /etc/hosts.deny file.
Altrimenti, l'accesso sarà garantito.
Un file di controllo di accesso non esistente viene trattato come se fosse un file vuoto. Pertanto, il controllo degli accessi può essere disattivato non fornendo file di controllo degli accessi.
Regole di controllo dell'accesso
Ogni file di controllo accessi è costituito da zero o più righe di testo. Queste linee vengono elaborate in ordine di apparizione. La ricerca termina quando viene trovata una corrispondenza.
Un carattere di nuova riga viene ignorato quando è preceduto da un carattere barra retroversa. Questo ti permette di suddividere le linee lunghe in modo che siano più facili da modificare.
Le linee vuote o le righe che iniziano con un carattere `# 'vengono ignorate. Ciò consente di inserire commenti e spazi bianchi in modo che le tabelle siano più facili da leggere.
Tutte le altre linee devono soddisfare il seguente formato, le cose tra essendo facoltative:
daemon_list: client_list : shell_command
daemon_list è un elenco di uno o più nomi di processi daemon (valori argv 0) o caratteri jolly (vedere sotto).
lista clienti è un elenco di uno o più nomi host, indirizzi host, modelli o caratteri jolly (vedere di seguito) che verranno confrontati con il nome host o l'indirizzo del client.
Le forme più complesse daemon @ host e user @ host sono illustrati nelle sezioni sui modelli di endpoint del server e sulle ricerche del nome utente del client, rispettivamente.
Gli elementi dell'elenco devono essere separati da spazi vuoti e / o virgole.
Ad eccezione delle ricerche su netgroup NIS (YP), tutti i controlli di controllo degli accessi non fanno distinzione tra maiuscole e minuscole.
Patterns
Il linguaggio di controllo degli accessi implementa i seguenti modelli:
Una stringa che inizia con un `. ' personaggio. Un nome host è abbinato se gli ultimi componenti del nome corrispondono al modello specificato. Ad esempio, il pattern `.tue.nl 'corrisponde al nome host` wzv.win.tue.nl'.
Una stringa che termina con un `. ' personaggio. Un indirizzo host è abbinato se i suoi primi campi numerici corrispondono alla stringa data. Ad esempio, il pattern `131.155. ' corrisponde all'indirizzo (quasi) di ogni host sulla rete dell'Università di Eindhoven (131.155.x.x).
Una stringa che inizia con un carattere `@ 'viene trattata come un nome di netgroup NIS (precedentemente YP). Un nome host è abbinato se si tratta di un membro host del netgroup specificato. Le corrispondenze di Netgroup non sono supportate per i nomi dei processi daemon o per i nomi utente dei client.
Un'espressione della forma "n.n.n / m.m.m.m" è interpretata come una coppia `net / mask '. Un indirizzo host IPv4 viene confrontato se `net 'è uguale a AND bit a bit dell'indirizzo e` maschera'. Ad esempio, il pattern net / mask `131.155.72.0/255.255.254.0 'corrisponde a tutti gli indirizzi nell'intervallo` 131.155.72.0' tramite `131.155.73.255 '.
Un'espressione della forma `n: n: n: n: n: n: n / m 'è interpretata come una coppia` net / prefixlen'. Un indirizzo host IPv6 è abbinato se i bit `prefixlen 'di` net' sono uguali ai bit `prefixlen 'dell'indirizzo. Ad esempio, il modello net / prefixlen `3ffe: 505: 2: 1 :: / 64 'corrisponde a tutti gli indirizzi nell'intervallo` 3ffe: 505: 2: 1 ::' tramite `3ffe: 505: 2: 1: ffff: ffff: ffff: ffff'.
Una stringa che inizia con un carattere `/ 'viene trattata come un nome di file. Un nome host o indirizzo è abbinato se corrisponde a qualsiasi nome host o modello di indirizzo elencato nel file indicato. Il formato del file è zero o più righe con zero o più nomi host o pattern di indirizzo separati da spazi bianchi. Un modello di nome file può essere utilizzato ovunque sia possibile utilizzare un nome host o un pattern di indirizzo.
Caratteri jolly `* 'e`?' può essere usato per abbinare nomi host o indirizzi IP. Questo metodo di abbinamento non può essere utilizzato in combinazione con la corrispondenza di `net / mask ', la corrispondenza del nome host che inizia con`.' o corrispondenza dell'indirizzo IP che termina con `. '.
I caratteri jolly
La lingua di controllo degli accessi supporta i caratteri jolly espliciti, tra cui:
'TUTTI'
Il carattere jolly universale, corrisponde sempre.
'LOCALE'
Corrisponde a qualsiasi host il cui nome non contiene un carattere punto.
'SCONOSCIUTO'
Corrisponde a qualsiasi utente il cui nome è sconosciuto e corrisponde a qualsiasi host il cui nome o l'indirizzo è sconosciuto Questo modello deve essere utilizzato con attenzione: i nomi host potrebbero non essere disponibili a causa di problemi temporanei del server dei nomi. Un indirizzo di rete non sarà disponibile quando il software non è in grado di capire il tipo di rete con cui sta parlando.
'CONOSCIUTO'
Corrisponde a qualsiasi utente il cui nome è noto e corrisponde a qualsiasi host il cui nome e l'indirizzo è notoQuesto modello deve essere utilizzato con attenzione: i nomi host potrebbero non essere disponibili a causa di problemi temporanei del server dei nomi. Un indirizzo di rete non sarà disponibile quando il software non è in grado di capire il tipo di rete con cui sta parlando.
'PARANOICO'
Corrisponde a qualsiasi host il cui nome non corrisponde al suo indirizzo. Quando tcpd è costruito con -DPARANOID (modalità predefinita), elimina le richieste da tali client anche prima di esaminare le tabelle di controllo degli accessi. Costruisci senza -DPARANOID quando vuoi un maggiore controllo su tali richieste.
'operatori'
'Tranne'
L'uso previsto è nella forma: `list_1 EXCEPT list_2 '; questo costrutto corrisponde a tutto ciò che corrisponde list_1 a meno che non corrisponda list_2 . L'operatore EXCEPT può essere utilizzato in daemon_lists e in client_lists. L'operatore EXCEPT può essere annidato: se la lingua di controllo consente l'uso di parentesi, `a EXCE b EXCEPT c 'analizzerà come` (a EXCEPT (b EXCEPT c))'.
Comandi della shell
Se la regola di controllo di accesso con la prima corrispondenza contiene un comando di shell, tale comando è soggetto a sostituzioni di% (vedere la sezione successiva). Il risultato è eseguito da a / Bin / sh processo figlio con input, output e errore standard collegati a / Dev / null . Specificare un `& 'alla fine del comando del terminale se non si desidera attendere fino al completamento.
I comandi di shell non dovrebbero fare affidamento sull'impostazione PATH di inetd. Invece, dovrebbero usare nomi assoluti del percorso, oppure dovrebbero iniziare con un esplicito PATH = qualunque affermazione.
Il hosts_options (5) documento descrive un linguaggio alternativo che utilizza il campo di comando della shell in un modo diverso e incompatibile.
% Espansioni
Le espansioni seguenti sono disponibili nei comandi shell:
%aa) - L'indirizzo host del client (server).
% c - Informazioni sul client: utente @ host, indirizzo utente @, nome host o solo un indirizzo, a seconda di quante informazioni sono disponibili.
% d - Il nome del processo daemon (valore argv 0).
% h (% H) - Il nome host o l'indirizzo del client (server), se il nome host non è disponibile.
% n (% N) - Il nome host del client (server) (o "sconosciuto" o "paranoico").
% p - L'ID del processo del daemon.
%S - Informazioni sul server: daemon @ host, daemon @ indirizzo o solo un nome daemon, a seconda di quante informazioni sono disponibili.
% u - Il nome utente del client (o "sconosciuto").
%% - Si espande in un singolo carattere `% '.
I caratteri in% di espansioni che potrebbero confondere la shell sono sostituiti da underscore.
Pattern di endpoint del server
Per distinguere i client dall'indirizzo di rete a cui si connettono, utilizzare i modelli del modulo:
process_name @ host_pattern: client_list …
Pattern come questi possono essere usati quando la macchina ha diversi indirizzi internet con diversi nomi di host internet. I fornitori di servizi possono utilizzare questa funzione per offrire archivi FTP, GOPHER o WWW con nomi Internet che possono appartenere a organizzazioni diverse. Vedi anche l'opzione `twist 'nel documento hosts_options (5). Alcuni sistemi (Solaris, FreeBSD) possono avere più di un indirizzo internet su un'unica interfaccia fisica; con altri sistemi potrebbe essere necessario ricorrere a interfacce pseudo SLIP o PPP che vivono in uno spazio di indirizzi di rete dedicato.
L'host_pattern obbedisce alle stesse regole di sintassi dei nomi host e degli indirizzi nel contesto client_list. Di solito, le informazioni sull'endpoint del server sono disponibili solo con servizi orientati alla connessione.
Ricerca del nome utente del client
Quando l'host client supporta il protocollo RFC 931 o uno dei suoi discendenti (TAP, IDENT, RFC 1413) i programmi wrapper possono recuperare ulteriori informazioni sul proprietario di una connessione. Le informazioni sul nome utente del client, se disponibili, vengono registrate insieme al nome host del client e possono essere utilizzate per associare pattern come:
daemon_list: … user_pattern @ host_pattern …
I wrapper del daemon possono essere configurati in fase di compilazione per eseguire ricerche con nome utente guidate da regole (predefinito) o per interrogare sempre l'host del client. Nel caso di ricerche con nome utente guidate da regole, la regola precedente causerebbe la ricerca del nome utente solo quando entrambi daemon_list e il host_pattern incontro.
Un pattern utente ha la stessa sintassi di un pattern di processo daemon, quindi si applicano gli stessi caratteri jolly (l'appartenenza a netgroup non è supportata). Uno non dovrebbe essere portato via con le ricerche di username, però.
Le informazioni sul nome utente del client non possono essere attendibili quando è più necessaria, cioè quando il sistema client è stato compromesso. In generale, TUTTI e (UN) CONOSCIUTI sono gli unici modelli di nome utente che hanno senso.
Le ricerche di nomi utente sono possibili solo con servizi basati su TCP e solo quando l'host client esegue un demone adatto; in tutti gli altri casi il risultato è "sconosciuto".
Un noto bug del kernel UNIX può causare la perdita di servizio quando le ricerche del nome utente vengono bloccate da un firewall. Il documento README wrapper descrive una procedura per scoprire se il tuo kernel ha questo bug.
Le ricerche nel nome utente possono causare ritardi notevoli per gli utenti non UNIX. Il timeout predefinito per le ricerche del nome utente è di 10 secondi: troppo breve per far fronte a reti lente, ma abbastanza a lungo da irritare gli utenti di PC.
Le ricerche selettive sul nome utente possono alleviare l'ultimo problema. Ad esempio, una regola come:daemon_list: @pcnetgroup ALL @ ALL
corrisponderebbe ai membri del netgroup del pc senza fare ricerche sul nome utente, ma eseguirà ricerche di nome utente con tutti gli altri sistemi. Un difetto nel generatore di numeri di sequenza di molte implementazioni TCP / IP consente agli intrusi di impersonare facilmente host attendibili e di penetrare tramite, ad esempio, il servizio shell remoto.Il servizio IDENT (RFC931, ecc.) Può essere utilizzato per rilevare tali e altri attacchi di spoofing dell'indirizzo host. Prima di accettare una richiesta del client, i wrapper possono utilizzare il servizio IDENT per scoprire che il client non ha inviato la richiesta. Quando l'host client fornisce il servizio IDENT, un risultato di ricerca IDENT negativo (il client corrisponde a `UNKNOWN @ host ') è una prova evidente di un attacco di spoofing dell'host. Un risultato di ricerca IDENT positivo (il client corrisponde a "KNOWN @ host") è meno affidabile. È possibile che un intruso divida sia la connessione client che la ricerca IDENT, sebbene farlo sia molto più difficile dello spoofing solo di una connessione client. Potrebbe anche essere che il server IDENT del client stia mentendo. Nota: le ricerche IDENT non funzionano con i servizi UDP. La lingua è abbastanza flessibile da poter esprimere diversi tipi di politica di controllo degli accessi con un minimo di confusione. Sebbene la lingua utilizzi due tabelle di controllo degli accessi, le politiche più comuni possono essere implementate con una delle tabelle banali o addirittura vuote. Durante la lettura degli esempi riportati di seguito è importante rendersi conto che la tabella dei permessi viene scansionata prima della tabella deny, che la ricerca termina quando viene trovata una corrispondenza e che l'accesso è concesso quando non viene trovata alcuna corrispondenza. Gli esempi utilizzano nomi host e domini. Possono essere migliorati includendo le informazioni sull'indirizzo e / o sulla rete / maschera di rete, per ridurre l'impatto degli errori temporanei di ricerca dei name server. In questo caso, l'accesso è negato per impostazione predefinita. Solo gli host esplicitamente autorizzati sono autorizzati ad accedere. La politica predefinita (nessun accesso) è implementata con un file di rifiuto banale: /etc/hosts.deny: TUTTI: TUTTI Ciò nega tutto il servizio a tutti gli host, a meno che non sia consentito l'accesso tramite voci nel file allow. Gli host esplicitamente autorizzati sono elencati nel file allow. Per esempio: /etc/hosts.allow: ALL: LOCAL @some_netgroupTUTTI: .foobar.edu TRANNE terminalerver.foobar.edu La prima regola consente l'accesso da host nel dominio locale (non `. 'Nel nome host) e da membri del some_netgroup netgroup. La seconda regola consente l'accesso da tutti gli host nel foobar.edu dominio (notare il punto iniziale), ad eccezione di terminalserver.foobar.edu . Qui, l'accesso è concesso per impostazione predefinita; solo gli host esplicitamente specificati vengono rifiutati dal servizio. La politica di default (accesso concesso) rende il file allow ridondante in modo che possa essere omesso. Gli host esplicitamente non autorizzati sono elencati nel file deny. Per esempio: /etc/hosts.deny: ALL: some.host.name, .some.domainTUTTO ECCEZIONALE in.fingerd: other.host.name, .other.domain La prima regola nega ad alcuni host e domini tutti i servizi; la seconda regola consente comunque le richieste di finger da altri host e domini. Il prossimo esempio consente le richieste tftp dagli host nel dominio locale (notare il punto iniziale). Le richieste provenienti da altri host sono negate. Invece del file richiesto, viene inviato un finger probe all'host che ha commesso il fallo. Il risultato viene inviato al superutente. /etc/hosts.allow: in.tftpd: LOCAL, .my.domain/etc/hosts.deny:in.tftpd: ALL: spawn (/ some / where / safe_finger -l @% h | / usr / ucb / mail -s% d-% h root) &
Il comando safe_finger viene fornito con il wrapper tcpd e deve essere installato in un luogo adatto. Limita il possibile danno dai dati inviati dal server finger remoto. Offre una protezione migliore rispetto al comando dito standard. L'espansione delle sequenze% h (host client) e% d (nome servizio) è descritta nella sezione sui comandi della shell. Avvertimento: Non imbrogliare il demone del dito, a meno che non siate pronti per infiniti loop di dita. Sui sistemi firewall di rete questo trucco può essere portato anche oltre. Il tipico firewall di rete fornisce solo un insieme limitato di servizi al mondo esterno. Tutti gli altri servizi possono essere "infestati" proprio come nell'esempio precedente di tftp. Il risultato è un eccellente sistema di allarme precoce. tcpd (8) programma wrapper daemon tcp / ip.tcpdchk (8), tcpdmatch (8), programmi di test.
Importante: Utilizzare il uomo comando ( % uomo ) per vedere come viene utilizzato un comando sul tuo computer specifico. Rilevazione degli attacchi di spoofing degli indirizzi
Esempi
Principalmente chiuso
Principalmente aperto
Trappole esplosive
Guarda anche