Skip to main content

Hosts.allow - Linux-Befehl

Linux/Mac Terminal Tutorial: Create, Copy, Move, Rename and Delete Files and Directories (Juni 2026)

Linux/Mac Terminal Tutorial: Create, Copy, Move, Rename and Delete Files and Directories (Juni 2026)
Anonim

Name

hosts_access - Format der Linux-Steuerungsdateien für den Hostzugriff.

Beschreibung

Diese Handbuchseite beschreibt Linux als einfache Zugriffskontrollsprache, die auf Client- (Hostname / Adresse, Benutzername) und Servermustern (Prozessname, Hostname / Adresse) basiert. Beispiele sind am Ende angegeben. Der ungeduldige Leser wird aufgefordert, zum Abschnitt "Beispiele" zu gelangen, um eine schnelle Einführung zu erhalten. Eine erweiterte Version der Zugriffskontrollsprache ist in beschrieben hosts_options (5) dokument. Die Erweiterungen werden zur Programmerstellungszeit aktiviert, indem Sie mit -DPROCESS_OPTIONS erstellen.

Im folgenden Text Daemon ist der Prozessname eines Netzwerk-Daemon-Prozesses und Klient ist der Name und / oder die Adresse eines Host-anfordernden Dienstes. Netzwerk-Daemon-Prozessnamen werden in der inetd-Konfigurationsdatei angegeben.

Zugriffskontrolldateien

Die Zugriffskontrollsoftware konsultiert zwei Dateien. Die Suche stoppt beim ersten Treffer.

Der Zugriff wird gewährt, wenn ein Paar (Daemon, Client) mit einem Eintrag im übereinstimmt /etc/hosts.allow Datei.

Andernfalls wird der Zugriff verweigert, wenn ein Paar (Daemon, Client) mit einem Eintrag im übereinstimmt /etc/hosts.deny Datei.

Andernfalls wird der Zugriff gewährt.

Eine nicht vorhandene Zugriffssteuerungsdatei wird behandelt, als wäre sie eine leere Datei. Daher kann die Zugriffssteuerung deaktiviert werden, indem keine Zugriffssteuerungsdateien bereitgestellt werden.

Zugriffssteuerungsregeln

Jede Zugriffssteuerungsdatei besteht aus null oder mehr Textzeilen. Diese Zeilen werden in der Reihenfolge ihres Aussehens verarbeitet. Die Suche wird beendet, wenn eine Übereinstimmung gefunden wird.

Ein Zeilenvorschubzeichen wird ignoriert, wenn vor ihm ein Backslash-Zeichen steht. Auf diese Weise können Sie lange Zeilen aufteilen, um sie leichter bearbeiten zu können.

Leere Zeilen oder Zeilen, die mit einem # -Zeichen beginnen, werden ignoriert. Dadurch können Sie Kommentare und Leerzeichen einfügen, damit die Tabellen leichter lesbar sind.

Alle anderen Zeilen sollten das folgende Format erfüllen, wobei optional sein kann:

daemon_list: client_list : shell_command

daemon_list ist eine Liste von einem oder mehreren Daemon-Prozessnamen (argv 0 -Werten) oder Wildcards (siehe unten).

Klienten Liste ist eine Liste mit einem oder mehreren Hostnamen, Hostadressen, Mustern oder Platzhaltern (siehe unten), die mit dem Hostnamen oder der Adresse des Clients abgeglichen werden.

Die komplexeren Formen daemon @ host und Benutzer @ Host werden in den Abschnitten zu Server-Endpunkt-Mustern bzw. zu Client-Benutzernamensuchen erläutert.

Listenelemente sollten durch Leerzeichen und / oder Kommas getrennt werden.

Mit Ausnahme von NIS (YP) -Netzgruppensuchen sind bei allen Zugriffskontrollüberprüfungen die Groß- und Kleinschreibung nicht zu beachten.

Muster

Die Zugriffskontrollsprache implementiert die folgenden Muster:

Eine Zeichenfolge, die mit einem "." Beginnt. Charakter. Ein Hostname wird gefunden, wenn die letzten Komponenten seines Namens mit dem angegebenen Muster übereinstimmen. Das Muster ".tue.nl" entspricht beispielsweise dem Hostnamen "wzv.win.tue.nl".

Eine Zeichenfolge, die mit einem "." Endet. Charakter. Eine Hostadresse wird abgeglichen, wenn die ersten numerischen Felder der angegebenen Zeichenfolge entsprechen. Zum Beispiel das Muster "131.155". entspricht der Adresse von (fast) jedem Host im Netzwerk der Eindhoven University (131.155.x.x).

Eine Zeichenfolge, die mit einem @ -Zeichen beginnt, wird als NIS (früher YP) -Netzgruppenname behandelt. Ein Hostname wird ermittelt, wenn er Hostmitglied der angegebenen Netzwerkgruppe ist. Netgroup-Übereinstimmungen werden für Daemon-Prozessnamen oder für Clientbenutzernamen nicht unterstützt.

Ein Ausdruck der Form "n.n.n.n / m.m.m.m.m" wird als "net / mask" -Paar interpretiert. Eine IPv4-Hostadresse stimmt überein, wenn "net" dem bitweisen UND der Adresse und der "Maske" entspricht. Beispielsweise passt das Netz- / Maskenmuster '131.155.72.0/255.255.254.0' zu jeder Adresse im Bereich '131.155.72.0' bis `131.155.73.255 '.

Ein Ausdruck der Form `n: n: n: n: n: n: n: n / m 'wird als ein Paar von net / prefixlen interpretiert. Eine IPv6-Hostadresse wird abgeglichen, wenn "prefixlen" -Bits von "net" gleich den "prefixlen" -Bits der Adresse sind. Beispielsweise passt das net / prefixlen-Muster 3ffe: 505: 2: 1 :: / 64 'zu jeder Adresse im Bereich von 3ffe: 505: 2: 1 :: bis 3ffe: 505: 2: 1: ffff: ffff: ffff: ffff '.

Eine Zeichenfolge, die mit einem "/" - Zeichen beginnt, wird als Dateiname behandelt. Ein Hostname oder eine Hostadresse stimmt überein, wenn sie mit einem Hostnamen oder Adressmuster übereinstimmt, das in der genannten Datei aufgeführt ist. Das Dateiformat besteht aus null oder mehr Zeilen mit null oder mehr Hostnamen oder Adressmustern, die durch Leerzeichen getrennt sind. Ein Dateinamenmuster kann überall dort verwendet werden, wo ein Hostname oder Adressmuster verwendet werden kann.

Wildcards "*" und "?" kann verwendet werden, um Hostnamen oder IP-Adressen abzugleichen. Diese Übereinstimmungsmethode kann nicht zusammen mit 'net / mask' verwendet werden, wobei der Hostname mit '.' Beginnt. oder IP-Adresse, die mit "." endet.

Platzhalter

Die Zugriffskontrollsprache unterstützt explizite Platzhalter, einschließlich:

'ALLES'

Der universelle Platzhalter passt immer zusammen.

'LOKAL'

Stimmt mit jedem Host überein, dessen Name kein Punktzeichen enthält.

'UNBEKANNTE'

Stimmt mit jedem Benutzer überein, dessen Name unbekannt ist, und mit jedem Host, dessen Name angegeben ist oder Adresse sind unbekannt. Dieses Muster sollte mit Vorsicht verwendet werden: Hostnamen sind möglicherweise aufgrund von Problemen mit temporären Nameservern nicht verfügbar. Eine Netzwerkadresse ist nicht verfügbar, wenn die Software nicht herausfinden kann, mit welcher Art von Netzwerk sie spricht.

'BEKANNT'

Stimmt mit jedem Benutzer überein, dessen Name bekannt ist, und mit jedem Host, dessen Name bekannt ist und Adresse sind bekannt.Dieses Muster sollte mit Vorsicht verwendet werden: Hostnamen sind möglicherweise aufgrund von Problemen mit temporären Nameservern nicht verfügbar. Eine Netzwerkadresse ist nicht verfügbar, wenn die Software nicht herausfinden kann, mit welcher Art von Netzwerk sie spricht.

'PARANOID'

Stimmt mit jedem Host überein, dessen Name nicht mit seiner Adresse übereinstimmt. Wenn tcpd mit -DPARANOID (Standardmodus) erstellt wird, werden Anforderungen von solchen Clients gelöscht, bevor die Zugriffskontrolltabellen betrachtet werden. Erstellen Sie ohne -DPARANOID, wenn Sie mehr Kontrolle über solche Anforderungen haben möchten.

"Betreiber"

'AUSSER'

Die bestimmungsgemäße Verwendung hat die Form: `list_1 EXCEPT list_2 '; Dieses Konstrukt passt zu allem, was passt list_1 es sei denn, es passt zusammen list_2 . Der EXCEPT-Operator kann in Daemon-Listen und in Client-Listen verwendet werden. Der EXCEPT-Operator kann verschachtelt werden: Wenn die Steuerungssprache die Verwendung von Klammern zulässt, würde "a EXCEPT b EXCEPT c" als "(a EXCEPT (b EXCEPT c))" parsen.

Shell-Befehle

Wenn die erste übereinstimmende Zugriffssteuerungsregel einen Shell-Befehl enthält, unterliegt dieser Befehl% Ersetzungen (siehe nächster Abschnitt). Das Ergebnis wird von a ausgeführt / bin / sh Kindprozess mit Standardeingabe, -ausgabe und -fehler verbunden / dev / null . Geben Sie am Ende des Terminalbefehls ein "&" an, wenn Sie nicht warten möchten, bis der Befehl abgeschlossen ist.

Shell-Befehle sollten sich nicht auf die PATH-Einstellung von inetd verlassen. Stattdessen sollten sie absolute Pfadnamen verwenden oder mit einer expliziten PATH = Anweisung beginnen.

Das hosts_options (5) Das Dokument beschreibt eine alternative Sprache, die das Shell-Befehlsfeld auf eine andere und inkompatible Weise verwendet.

% Erweiterungen

Die folgenden Erweiterungen sind in Shell-Befehlen verfügbar:

% a (% A) - Die Client (Server) -Hostadresse.

% c - Client-Informationen: Benutzer @ Host, Benutzer @ Adresse, Hostname oder nur eine Adresse, je nachdem, wie viele Informationen verfügbar sind.

% d - Der Prozessname des Dämons (argv 0 -Wert).

% h (% H) - Der Hostname oder die Adresse des Clients (Servers), wenn der Hostname nicht verfügbar ist.

% n (% N) - Der Client (Server) -Hostname (oder "unbekannt" oder "paranoid").

% p - Die Daemon-Prozess-ID.

% s - Serverinformationen: Daemon @ Host, Daemon @ -Adresse oder nur ein Daemon-Name, je nachdem, wie viele Informationen verfügbar sind.

% u - Der Client-Benutzername (oder "unbekannt").

%% - Wird zu einem einzelnen% -Zeichen erweitert.

Zeichen in% -Erweiterungen, die die Shell verwirren könnten, werden durch Unterstriche ersetzt.

Server-Endpunktmuster

Verwenden Sie Muster des Formulars, um Clients anhand der Netzwerkadresse zu unterscheiden, zu der sie eine Verbindung herstellen.

process_name @ host_pattern: client_list …

Muster wie diese können verwendet werden, wenn die Maschine über unterschiedliche Internetadressen mit unterschiedlichen Internet-Hostnamen verfügt. Dienstanbieter können mit dieser Funktion FTP-, GOPHER- oder WWW-Archive mit Internetnamen anbieten, die möglicherweise sogar verschiedenen Organisationen gehören. Siehe auch die Option "Verdrehen" im Dokument hosts_options (5). Einige Systeme (Solaris, FreeBSD) können mehrere Internetadressen auf einer physischen Schnittstelle haben. Bei anderen Systemen müssen Sie möglicherweise auf SLIP- oder PPP-Pseudo-Schnittstellen zurückgreifen, die sich in einem dedizierten Netzwerkadressraum befinden.

Das host_pattern folgt den gleichen Syntaxregeln wie Hostnamen und Adressen im client_list-Kontext. In der Regel sind Serverendpunktinformationen nur mit verbindungsorientierten Diensten verfügbar.

Client-Benutzername

Wenn der Client-Host das RFC 931-Protokoll oder eines seiner Nachkommen (TAP, IDENT, RFC 1413) unterstützt, können die Wrapper-Programme zusätzliche Informationen über den Eigentümer einer Verbindung abrufen. Die Informationen zum Client-Benutzernamen werden, sofern verfügbar, zusammen mit dem Client-Hostnamen protokolliert und können verwendet werden, um Muster abzugleichen, die wie folgt aussehen:

daemon_list: … user_pattern @ host_pattern …

Die Daemon-Wrapper können zur Kompilierzeit konfiguriert werden, um regelgesteuerte Benutzernamensuchen durchzuführen (Standard) oder den Client-Host immer abzufragen. Im Falle von regelgesteuerten Benutzernamensuchen führt die obige Regel nur dann zum Suchen des Benutzernamens daemon_list und das host_pattern Spiel.

Ein Benutzermuster hat dieselbe Syntax wie ein Daemon-Prozessmuster, daher gelten dieselben Platzhalterzeichen (die Mitgliedschaft in der Netzgruppe wird nicht unterstützt). Man sollte sich jedoch nicht mit Benutzernamensuchvorgängen hinreißen lassen.

Den Client-Benutzernamen-Informationen kann nicht vertraut werden, wenn sie am dringendsten benötigt werden, d. H. Wenn das Clientsystem gefährdet ist. Im Allgemeinen sind ALL und (UN) KNOWN die einzigen Benutzernamensmuster, die sinnvoll sind.

Nachschlagen von Benutzernamen sind nur mit TCP-basierten Diensten möglich und nur, wenn der Clienthost einen geeigneten Dämon ausführt. In allen anderen Fällen ist das Ergebnis "unbekannt".

Ein bekannter UNIX-Kernel-Fehler kann zu Dienstverlusten führen, wenn die Suche nach Benutzernamen durch eine Firewall blockiert wird. Das README-Dokument des Wrappers beschreibt eine Prozedur, um herauszufinden, ob Ihr Kernel diesen Fehler hat.

Nachschlagen von Benutzern können zu Verzögerungen bei Nicht-UNIX-Benutzern führen. Das Standard-Timeout für die Suche nach Benutzernamen beträgt 10 Sekunden: zu kurz für langsame Netzwerke, aber lang genug, um PC-Benutzer zu irritieren.

Durch selektive Suche nach Benutzernamen kann das letzte Problem gemildert werden. Zum Beispiel eine Regel wie:daemon_list: @pcnetgroup ALL @ ALL

würde mit Mitgliedern der pc netgroup übereinstimmen, ohne Benutzernamen nachzuschlagen, würde aber nach Usernamen mit allen anderen Systemen suchen.

Erkennen von Spoofing-Angriffen

Ein Fehler im Sequenznummerngenerator vieler TCP / IP-Implementierungen ermöglicht es Eindringlingen, vertrauenswürdige Hosts leicht auszugeben und beispielsweise über den Remote-Shell-Service einzubrechen.Der IDENT-Dienst (RFC931 usw.) kann zum Erkennen solcher und anderer Host-Adress-Spoofing-Angriffe verwendet werden.

Vor dem Akzeptieren einer Clientanforderung können die Wrapper den IDENT-Dienst verwenden, um herauszufinden, dass der Client die Anfrage überhaupt nicht gesendet hat. Wenn der Clienthost den IDENT-Dienst bereitstellt, ist ein negatives IDENT-Suchergebnis (der Client stimmt mit `UNKNOWN @ host 'überein) ein starker Beweis für einen Host-Spoofing-Angriff.

Ein positives IDENT-Lookup-Ergebnis (der Client entspricht 'KNOWN @ host') ist weniger vertrauenswürdig. Es ist möglich, dass ein Eindringling sowohl die Client-Verbindung als auch die IDENT-Suche fälscht, obwohl dies viel schwieriger ist als das Spoofing einer Client-Verbindung. Es kann auch sein, dass der IDENT-Server des Clients lügt.

Hinweis: IDENT-Suchvorgänge funktionieren nicht mit UDP-Diensten.

Beispiele

Die Sprache ist so flexibel, dass verschiedene Arten von Zugriffskontrollrichtlinien mit minimalem Aufwand ausgedrückt werden können. Obwohl die Sprache zwei Zugriffssteuertabellen verwendet, können die am häufigsten verwendeten Richtlinien implementiert werden, wobei eine der Tabellen trivial oder sogar leer ist.

Wenn Sie die folgenden Beispiele lesen, ist es wichtig zu wissen, dass die Zulässigkeitstabelle vor der Deny-Tabelle gescannt wird, dass die Suche beendet wird, wenn eine Übereinstimmung gefunden wird, und dass der Zugriff gewährt wird, wenn überhaupt keine Übereinstimmung gefunden wird.

Die Beispiele verwenden Host- und Domainnamen. Sie können durch Hinzufügen von Adress- und / oder Netzwerk- / Netzmaskeninformationen verbessert werden, um die Auswirkungen von Lookup-Fehlern für temporäre Nameserver zu reduzieren.

Meistens geschlossen

In diesem Fall wird der Zugriff standardmäßig verweigert. Zugelassen sind nur ausdrücklich autorisierte Hosts.

Die Standardrichtlinie (kein Zugriff) wird mit einer einfachen Deny-Datei implementiert:

/etc/hosts.deny: ALL: ALL

Dies verweigert allen Hosts alle Dienste, es sei denn, ihnen wird der Zugriff durch Einträge in der Zulassungsdatei gestattet.

Die explizit berechtigten Hosts sind in der Zulassungsdatei aufgeführt. Zum Beispiel:

/etc/hosts.allow: ALL: LOCAL @some_netgroupALL: .foobar.edu EXCEPT Terminalserver.foobar.edu

Die erste Regel erlaubt den Zugriff von Hosts in der lokalen Domäne (kein "." Im Hostnamen) und von Mitgliedern der some_netgroup netgroup. Die zweite Regel erlaubt den Zugriff von allen Hosts in der foobar.edu Domäne (beachten Sie den führenden Punkt), mit Ausnahme von Terminalserver.foobar.edu .

Meist offen

Hier wird standardmäßig der Zugriff gewährt. Nur explizit angegebene Hosts werden abgelehnt.

Die Standardrichtlinie (Zugriff gewährt) macht die Zulassungsdatei überflüssig, sodass sie weggelassen werden kann. Die explizit nicht autorisierten Hosts werden in der Deny-Datei aufgeführt. Zum Beispiel:

/etc/hosts.deny: ALL: some.host.name, .some.domainALLE außer in.fingerd: other.host.name, .other.domain

Die erste Regel verweigert einigen Hosts und Domänen alle Dienste. Die zweite Regel erlaubt weiterhin Fingeranfragen von anderen Hosts und Domänen.

Sprengfallen

Im nächsten Beispiel sind TFTP-Anforderungen von Hosts in der lokalen Domäne zulässig (beachten Sie den führenden Punkt). Anfragen von anderen Hosts werden abgelehnt. Anstelle der angeforderten Datei wird eine Fingersonde an den betreffenden Host gesendet. Das Ergebnis wird an den Superuser gesendet.

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

Der Befehl safe_finger wird mit dem tcpd-Wrapper geliefert und sollte an einem geeigneten Ort installiert werden. Sie begrenzt mögliche Schäden durch vom Remote-Finger-Server gesendete Daten. Es bietet einen besseren Schutz als der Standardfingerbefehl.

Die Erweiterung der Sequenzen% h (Clienthost) und% d (Dienstname) wird im Abschnitt über Shellbefehle beschrieben.

Warnung: Setzen Sie Ihren Finger-Daemon nicht in eine Falle, es sei denn, Sie sind auf unendliche Fingerschlaufen vorbereitet.

Auf Netzwerk-Firewall-Systemen kann dieser Trick noch weiter ausgeführt werden. Die typische Netzwerkfirewall bietet nur eine begrenzte Anzahl von Diensten für die Außenwelt. Alle anderen Dienste können wie im obigen TFTP-Beispiel "abgehört" werden. Das Ergebnis ist ein ausgezeichnetes Frühwarnsystem.

Siehe auch

tcpd (8) TCP / IP-Daemon-Wrapper-Programm.tcpdchk (8), tcpdmatch (8), Testprogramme.

Wichtig: Verwenden Sie die Mann Befehl ( % Mann ), um zu sehen, wie ein Befehl auf Ihrem Computer verwendet wird.