Warum erlaubt Linux keine Netzwerkportberechtigungen auf Benutzerebene? [geschlossen]

8

Hin und wieder werde ich nach Möglichkeiten suchen, wie Berechtigungen auf Benutzerebene für den Netzwerkportzugriff unter Linux ausgeführt werden können, und dabei ziemlich trocken werden. Wenn Sie beispielsweise einen Computer haben, auf dem ein kritischer Prozess ausgeführt wird, der Port 5080 überwacht, sollte es meiner Meinung nach eine Möglichkeit geben, nur einer bestimmten Gruppe vertrauenswürdiger Benutzer Zugriff auf diesen Port zu gewähren - genau wie bei jedem anderen Prozess mit vernünftigen Berechtigungen erledigt, wie Dateisystemberechtigungen.

Es scheint jedoch, dass High-Ports für alle Benutzer verfügbar sind und Low-Ports nur für Root verfügbar sind. Es gibt nur grobe Hacks wie Authbind und Weiterleitung mit iptables, damit andere Benutzer Low-Ports verwenden können. Es scheint eine sehr seltsame Situation zu sein, also frage ich mich, warum es so konzipiert wurde und warum die Leute nicht das Bedürfnis hatten, diese Situation zu ändern?

BT
quelle

Antworten:

4

Linux unterstützt Netzwerk-Namespaces. Sie können verschiedene Prozesse dazu bringen, verschiedene Sätze von Netzwerkschnittstellen anzuzeigen. Dies ist ein breites Thema.

Wenn Sie einen Kommunikationsport wünschen, auf den nur bestimmte Benutzer innerhalb des Computers zugreifen können, können Sie einen herkömmlichen Unix-Socket verwenden, der im Dateisystembereich einen Namen mit Berechtigungen hat. Linux erkennt Lese- / Schreibberechtigungen für AF_UNIX-Sockets an.

Wenn ein Computer externe TCP- oder UDP-Anforderungen an Port 5080 abhört, die von anderen Computern eingehen, können wir nicht mehr wirklich über Benutzerberechtigungen sprechen . Sie müssen Sicherheit in das Protokoll einbauen, das über 5080 hinausgeht: Authentifizierung, Verschlüsselung, Integrität / Spoof-Proofing / Dos-Resistenz.

Kaz
quelle
Ermöglichen Netzwerk-Namespaces verschiedenen Benutzern den Zugriff auf verschiedene Namespaces, die im Wesentlichen alle Benutzer einiger Ports und andere blockieren könnten?
BT
2

Anfangs denke ich, weil es ein komplexes Design erfordert hätte, das nicht mit dem Umfang früherer Unix-Systeme übereinstimmte.

Später, denke ich, weil es eine etablierte Methode zum Implementieren von Netzwerkportberechtigungen auf Benutzerebene für häufige Fälle gab: inetd , die etwa ein paar Jahre nach ( 4.3BSD ) TCP / IP ( 4.2BSD ) erschien. Der inetdDaemon wird als Root ausgeführt und überwacht die in seiner Konfigurationsdatei angegebenen Ports. Bei einer eingehenden Verbindung wird ein inetdanderes Programm erzeugt, das in der Konfigurationsdatei angegeben ist und als Benutzer ausgeführt wird, der auch in der inetd-Konfigurationsdatei angegeben ist. Zumindest für Dienste, bei denen es akzeptabel ist, bei jeder Verbindung einen neuen Prozess zu starten, ist das Problem gelöst.

Gilles 'SO - hör auf böse zu sein'
quelle
Interessant. Ich muss sagen, das ist so eine Linux-Sache, um eine Lösung zu finden, bei der jede Aktion einen neuen Prozess erfordert.
BT
0

Ich denke, ein Grund dafür ist, dass die meisten Benutzer in der Lage sein müssen, kurzlebige Ports für die Verbindung mit anderen Servern zu verwenden, ohne unbedingt root zu sein.

Eine TCP / IPv4-Verbindung besteht aus zwei Endpunkten, und jeder Endpunkt besteht aus einer IP-Adresse und einer Portnummer. Wenn ein Clientbenutzer eine Verbindung zu einem Servercomputer herstellt, kann eine hergestellte Verbindung daher als 4-Tupel von (Server-IP, Server-Port, Client-IP, Client-Port) betrachtet werden. Normalerweise sind drei der vier leicht bekannt: Der Client-Computer verwendet seine eigene IP-Adresse. Bei der Verbindung mit einem Remote-Dienst sind die IP-Adresse und die Service-Port-Nummer des Server-Computers erforderlich.

Was nicht sofort ersichtlich ist, ist, dass die Client-Seite der Verbindung beim Herstellen einer Verbindung eine Portnummer verwendet. Sofern ein Client-Programm nicht explizit eine bestimmte Portnummer anfordert, ist die verwendete Portnummer eine kurzlebige Portnummer. Vergängliche Ports sind temporäre Ports, die vom IP-Stack eines Computers zugewiesen werden und zu diesem Zweck aus einem festgelegten Bereich von Ports zugewiesen werden. Wenn die Verbindung beendet wird, steht der kurzlebige Port zur Wiederverwendung zur Verfügung, obwohl die meisten IP-Stacks diese Portnummer erst wiederverwenden, wenn der gesamte Pool kurzlebiger Ports verwendet wurde. Wenn das Client-Programm erneut eine Verbindung herstellt, wird ihm eine andere kurzlebige Portnummer für seine Seite der neuen Verbindung zugewiesen.

Paul Calabro
quelle
1
Wie würden Netzwerkberechtigungen auf Benutzerebene dies verhindern?
BT