Hosts.allow - Comandamentul Linux - Comandamentul Unix

NUME

hosts_access - format de fișiere de control al accesului gazdă

DESCRIERE

Această pagină manuală descrie un limbaj simplu de control al accesului care se bazează pe tiparele clientului (numele gazdă / adresa, numele de utilizator) și numele serverului (numele procesului, numele gazdei / adresa). Exemple sunt date la sfârșit. Cititorul nerăbdător este încurajat să treacă la secțiunea EXAMPLES pentru o introducere rapidă. O versiune extinsă a limbajului de control al accesului este descrisă în documentul hosts_options (5). Extensiile sunt activate la ora de construire a programului prin construirea cu -DPROCESS_OPTIONS.

În următorul text, daemonul este numele procesului de proces de daemon de rețea , iar clientul este numele și / sau adresa unui serviciu care solicită o gazdă. Numele proceselor de daemon de rețea sunt specificate în fișierul de configurare inetd.

ACCES CONTROL FILES

Software-ul de control al accesului consultă două fișiere . Căutarea se oprește la primul meci.

Accesul va fi acordat atunci când o pereche (daemon, client) se potrivește cu o intrare din fișierul /etc/hosts.allow .

În caz contrar, accesul va fi interzis atunci când o pereche (daemon, client) se potrivește cu o intrare din fișierul /etc/hosts.deny .

În caz contrar, accesul va fi acordat.

Un fișier de control al accesului non-existent este tratat ca și cum ar fi un fișier gol. Astfel, controlul accesului poate fi oprit prin furnizarea de fișiere de control al accesului.

REGULI DE CONTROL ACCES

Fiecare fișier de control al accesului este format din zero sau mai multe linii de text. Aceste linii sunt prelucrate în ordinea apariției. Căutarea se termină când se găsește o potrivire.

Un caracter de linie nouă este ignorat atunci când este precedat de caracterul invers. Acest lucru vă permite să rupeți linii lungi, astfel încât să fie mai ușor de editat.

Linii sau linii goale care încep cu un caracter "#" sunt ignorate. Acest lucru vă permite să introduceți comentariile și spațiile libere, astfel încât mesele să fie mai ușor de citit.

Toate celelalte linii trebuie să satisfacă următorul format, lucrurile între [] fiind opționale:

daemon_list: client_list [: shell_command]

daemon_list este o listă cu unul sau mai multe nume de procese de daemon (valori argv [0]) sau cu metacarduri (vedeți mai jos).

client_list este o listă cu unul sau mai multe nume de gazdă, adrese de gazdă, modele sau caractere (vezi mai jos) care vor fi potrivite cu numele sau adresa gazdei clientului.

Formatele mai complexe, daemon @ host și user @ host, sunt explicate în secțiunile de pe modelele terminale ale serverului și, respectiv, pe căutările de nume de utilizator ale clientului.

Elementele din listă trebuie separate prin semne și / sau virgule.

Cu excepția căutărilor Netgroup NIS (YP), toate verificările de control al accesului sunt insuficiente pentru litere mici.

MODELELOR

Limbajul de control al accesului implementează următoarele modele:

Un șir care începe cu un "." caracter. Un nume de gazdă se potrivește dacă ultimele componente ale acestuia corespund modelului specificat. De exemplu, modelul ".tue.nl" se potrivește cu numele de gazdă "wzv.win.tue.nl".

Un șir care se termină cu un "." caracter. O adresă gazdă este potrivită dacă primele câmpuri numerice se potrivesc cu șirul dat. De exemplu, modelul "131.155". se potrivește cu adresa (aproape) fiecărei gazde din rețeaua Universității din Eindhoven (131.155.xx).

Un șir care începe cu un caracter `@ 'este tratat ca un nume de rețea NIS (fostul YP) netgroup. Un nume de gazdă este asociat dacă este un membru gazdă al grupului net specificat. Corespondențele Netgroup nu sunt acceptate pentru numele proceselor de daemon sau pentru numele de utilizatori clienți.

O expresie a formularului "nnnn / mmmm" este interpretată ca o pereche "net / mască". O adresă gazdă IPv4 este potrivită dacă `net 'este egal cu bitul AND al adresei și` masca'. De exemplu, modelul net / mască `131.155.72.0/255.255.254.0 'se potrivește cu fiecare adresă din intervalul` 131.155.72.0' prin `131.155.73.255 '.

O expresie a formularului "[n: n: n: n: n: n: n: n] / m" este interpretată ca o pereche "[net] / prefixlen". O adresă gazdă IPv6 este potrivită dacă biții `prefixlen 'ai` net' sunt egali cu biții `prefixlen 'ai adresei. De exemplu, modelul [net] / prefixlen "[3ffe: 505: 2: 1 ::] / 64" se potrivește cu fiecare adresă din intervalul 3ffe: 505: 1: ffff: ffff: ffff: ffff“.

Un șir care începe cu un caracter "/" este tratat ca un nume de fișier . Un nume sau o adresă gazdă este potrivită dacă se potrivește cu orice nume de gazdă sau cu un model de adresă listat în fișierul numit. Formatul de fișier este zero sau mai multe linii cu zero sau mai multe nume de gazdă sau modele de adrese separate prin spații albe. Un model de nume de fișier poate fi utilizat oriunde se poate utiliza un nume de gazdă sau un model de adresă.

Cartelele wild `* 'și`?' pot fi utilizate pentru a se potrivi numelor de gazde sau adreselor IP . Această metodă de potrivire nu poate fi folosită împreună cu potrivirea "net / mask", potrivirea numelui de gazdă începând cu `. ' sau potrivirea adresei IP care se încheie cu `. '.

metacaractere

Limbajul de control al accesului acceptă caracterele explicite explicite:

TOATE

Mânerul universal universal se potrivește întotdeauna.

LOCAL

Se potrivește cu orice gazdă al cărei nume nu conține un caracter punct.

NECUNOSCUT

Potrivește orice utilizator al cărui nume nu este cunoscut și se potrivește cu orice gazdă a cărei nume sau adresă nu este cunoscută; Acest model ar trebui folosit cu grijă: numele gazdă pot fi indisponibile din cauza problemelor serverului de nume temporar. O adresă de rețea nu va fi disponibilă atunci când software-ul nu poate afla ce tip de rețea este vorba.

CUNOSCUT

Împlinește orice utilizator al cărui nume este cunoscut și se potrivește cu orice gazdă al cărei nume și adresă sunt cunoscute. Acest model ar trebui folosit cu grijă: numele gazdă pot fi indisponibile din cauza problemelor serverului de nume temporar. O adresă de rețea nu va fi disponibilă atunci când software-ul nu poate afla ce tip de rețea este vorba.

PARANOID

Se potrivește cu orice gazdă a cărei nume nu corespunde adresei sale. Când tcpd este construit cu -DPARANOID (modul implicit), acesta scade solicitările de la acești clienți chiar înainte de a privi la tabelele de control al accesului. Construiți fără -DPARANOID atunci când doriți mai mult control asupra acestor solicitări.

OPERATORII

CU EXCEPTIA

Utilizarea intenționată este de forma: `list_1 EXCEPT list_2 '; acest construct se potrivește cu orice se potrivește cu lista_1, cu excepția cazului în care se potrivește cu lista_2 . Operatorul EXCEPT poate fi utilizat în daemon_lists și în listele client_lists. Operatorul EXCEPT poate fi imbricat: dacă limbajul de control ar permite utilizarea parantezelor, `a EXCEPT b EXCEPT c 'ar fi analizat ca` (EXCEPT (EXCEPT c))'.

Comandă SHELL

Dacă regula de control al accesului pentru prima potrivire conține o comandă shell, comanda respectivă este supusă% substituțiilor (a se vedea secțiunea următoare). Rezultatul este executat de un proces a / bin / sh copil cu intrare standard, ieșire și eroare conectată la / dev / null . Specificați un "&" la sfârșitul comenzii dacă nu doriți să așteptați până când nu se termină.

Comenzile Shell nu trebuie să se bazeze pe setarea PATH a inetd-ului. În schimb, ar trebui să utilizeze nume de cale absolută sau ar trebui să înceapă cu o explicită PATH = indiferent de declarație.

Documentul hosts_options (5) descrie o limbă alternativă care folosește câmpul de comandă shell într-un mod diferit și incompatibil.

Expansiuni%

Următoarele extinderi sunt disponibile în comenzile shell:

% a (% A)

Adresa gazdă client (server).

% c

Informații despre client: user @ host, user @ address, un nume de gazdă sau doar o adresă, în funcție de cantitatea de informații disponibile.

% d

Numele procesului daemon (argv [0]).

% h (% H)

Numele sau adresa gazdei clientului (serverului), dacă numele gazdei nu este disponibil.

% n (% N)

Numele gazdei client (server) (sau "necunoscut" sau "paranoic").

% p

ID-ul procesului daemon.

% s

Informații despre server: daemon @ host, daemon @ address, sau doar un nume de daemon, în funcție de cât de multe informații sunt disponibile.

% u

Numele de utilizator al clientului (sau "necunoscut").

%%

Se extinde la un singur caracter "%".

Caracterele în% expansiuni care ar putea confunda shell-ul se înlocuiesc cu sublinieri.

PERSOANELE DE UTILIZARE SERVER

Pentru a distinge clienții de adresa de rețea la care se conectează, utilizați modelele formularului:

process_name @ host_pattern: client_list ...

Modele ca acestea pot fi utilizate atunci când aparatul are adrese de internet diferite cu nume de gazdă diferite pe internet. Furnizorii de servicii pot folosi această facilitate pentru a oferi arhive FTP, GOPHER sau WWW cu nume de internet care pot chiar aparține diferitelor organizații. Vedeți și opțiunea `twist 'din documentul hosts_options (5). Unele sisteme (Solaris, FreeBSD) pot avea mai multe adrese de internet pe o interfață fizică; cu alte sisteme poate fi necesar să recurgeți la interfețe SLIP sau PPP care trăiesc într-un spațiu dedicat adreselor de rețea.

Modelul_proprietate gazdă respectă aceleași reguli de sintaxă ca și numele și adresele gazdă în contextul client_list. De obicei, informațiile despre punctul final al serverului sunt disponibile numai cu servicii orientate pe conexiune.

CLIENTUL USERNAME LOOKUP

Atunci când gazda client acceptă protocolul RFC 931 sau unul dintre descendenții săi (TAP, IDENT, RFC 1413), programele de împachetare pot prelua informații suplimentare despre proprietarul unei conexiuni. Informațiile despre numele de utilizator al clientului, atunci când sunt disponibile, sunt înregistrate împreună cu numele gazdei clientului și pot fi utilizate pentru a se potrivi cu modele cum ar fi:

daemon_list: ... user_pattern @ host_pattern ...

Împacheturile daemon pot fi configurate la timpul de compilare pentru a efectua căutări de nume de utilizator bazate pe reguli (implicit) sau pentru a interoga întotdeauna gazda clientului. În cazul căutărilor de nume de utilizatori bazate pe reguli, regula de mai sus ar determina căutarea de nume de utilizator numai când se potrivesc atât cu daemon_list, cât și cu match_pattern .

Un model de utilizator are aceeași sintaxă ca un model de proces daemon, astfel că se aplică aceleași metacaractere (calitatea de membru netgroup nu este acceptată). Cu toate acestea, nu ar trebui să fugim cu căutări de nume de utilizator.

Informațiile despre numele de utilizator al clientului nu pot fi de încredere atunci când este cel mai necesar, adică atunci când sistemul client a fost compromis. În general, ALL și (UN) KNOWN sunt singurele modele de nume de utilizator care au sens.

Căutările de nume de utilizator sunt posibile numai cu serviciile bazate pe TCP și numai atunci când gazda client rulează un daemon adecvat; în toate celelalte cazuri rezultatul este "necunoscut".

O eroare binecunoscută a kernelului UNIX poate duce la pierderea serviciului atunci când căutările de nume de utilizator sunt blocate de un paravan de protecție. Documentul README înfășurat descrie o procedură pentru a afla dacă nucleul dvs. are acest bug.

Căutările de utilizatori pot cauza întârzieri considerabile pentru utilizatorii care nu sunt membri UNIX. Timpul prestabilit pentru căutările de nume de utilizator este de 10 secunde: prea scurt pentru a face față rețelelor lente, dar suficient de lung pentru a irita utilizatorii de PC-uri.

Căutările selective ale numelor de utilizatori pot atenua ultima problemă. De exemplu, o regulă precum:


daemon_list: @pcnetgroup ALL @ ALL

s-ar potrivi membrilor grupului de utilizatori pc fără a face căutări de nume de utilizator, dar ar efectua căutări de nume de utilizator cu toate celelalte sisteme.

DETECTAREA ATRACȚIILOR SPOFING DE ADRESE

Un defect al generatorului de numere de secvențe al multor implementări TCP / IP permite intrușilor să imite ușor gospodăriile de încredere și să le spargă, de exemplu, prin intermediul serviciului shell shell. Serviciul IDENT (RFC931 etc.) poate fi utilizat pentru a detecta astfel de atacuri și alte atacuri de spionaj de adrese gazdă.

Înainte de a accepta o solicitare de client, ambalajele pot utiliza serviciul IDENT pentru a afla că clientul nu a trimis deloc solicitarea. Atunci când gazda clientului furnizează un serviciu IDENT, rezultatul negativ al identificării IDENT (clientul se potrivește cu "UNKNOWN @ host") este o dovadă puternică a atacului de spionaj gazdă.

Un rezultat pozitiv de căutare IDENT (clientul se potrivește cu "KNOWN @ host") este mai puțin demn de încredere. Este posibil ca un intrus să păcălească atât conexiunea clientului cât și căutarea IDENT, deși acest lucru este mult mai greu decât să spionezi doar o conexiune client. De asemenea, este posibil ca serverul IDENT al clientului să fie în minte.

Notă: căutările IDENT nu funcționează cu serviciile UDP.

EXEMPLE

Limba este destul de flexibilă încât diferite tipuri de politică de control al accesului pot fi exprimate cu un minim de agitație. Deși limba utilizează două tabele de control al accesului, politicile cele mai comune pot fi implementate, unul dintre tabele fiind trivial sau chiar gol.

Când citiți exemplele de mai jos, este important să vă dați seama că tabela de permisițe este scanată înainte de tabela de respingere, căutarea se termină când se găsește o potrivire și că accesul este acordat atunci când nu se găsește nicio potrivire.

Exemplele utilizează numele de gazdă și de domenii. Ele pot fi îmbunătățite prin includerea informațiilor de adresă și / sau rețea / rețea masca, pentru a reduce impactul erorilor de căutare temporară ale serverului de nume.

ÎNCHISĂ ÎNALTĂ

În acest caz, accesul este refuzat în mod implicit. Numai gazdele autorizate în mod explicit au acces permis.

Politica implicită (fără acces) este implementată cu un fișier negativ trivial:

/etc/hosts.deny: ALL: ALL

Aceasta neagă tot serviciul pentru toate gazdele, dacă nu li se permite accesul prin intrări în fișierul permis.

Gazdele explicit autorizate sunt listate în fișierul permis. De exemplu:

/etc/hosts.allow: ALL: LOCAL @some_netgroup
TOATE: .foobar.edu EXCEPT terminalserver.foobar.edu

Prima regulă permite accesul de la gazdele din domeniul local (nu "." În numele gazdei) și de la membrii netgrupului some_netgroup. A doua regulă permite accesul tuturor gazdelor din domeniul foobar.edu (observați punctul principal), cu excepția terminalserver.foobar.edu .

OPEN DESCHIS

Aici accesul este acordat în mod implicit; Numai gazdele specificate în mod explicit sunt refuzate.

Politica implicită (acces acordat) face ca fișierul permis să fie redundant astfel încât să poată fi omis. Gazdele explicit neautorizate sunt listate în fișierul deny. De exemplu:

/etc/hosts.deny: ALL: some.host.name, .some.domain
TOATE EXCEPȚII in.fingerd: other.host.name, .other.domain

Prima regulă neagă anumite gazde și domenii toate serviciile; a doua regulă permite încă solicitări de deget de la alte gazde și domenii.

FACILITATEA BOOBY

Următorul exemplu permite solicitările tftp de la gazdele din domeniul local (observați punctul principal). Solicitările de la orice alte gazde sunt respinse. În locul fișierului solicitat, o sondă deget este trimisă gazdei ofensatoare. Rezultatul este trimis prin poștă superutilizatorului.

/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)

Comanda safe_finger vine cu pachetul tcpd și trebuie instalat într-un loc potrivit. Limitează posibilele daune cauzate de datele trimise de serverul cu degetul de la distanță. Oferă o protecție mai bună decât comanda standard deget.

Extinderea secvențelor% h (gazdă client) și% d (nume serviciu) este descrisă în secțiunea de pe comenzile shell.

Avertisment: nu vă loviți de daemon cu degetul, dacă nu sunteți pregătiți pentru buclele degetelor infinite.

Pe sistemele de firewall de rețea acest trick poate fi purtat și mai mult. Paravanul tipic de rețea oferă doar un set limitat de servicii pentru lumea exterioară. Toate celelalte servicii pot fi "bugate" la fel ca exemplul tftp de mai sus. Rezultatul este un excelent sistem de avertizare timpurie.

VEZI SI

tcpd (8) program de împachetare daemon tcp / ip. tcpdchk (8), tcpdmatch (8), programe de testare.

Important: Utilizați comanda om ( % man ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.