GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zulassen, dass ein Benutzer einen Port unter 1024 abhören kann

setcap 'cap_net_bind_service=+ep' /path/to/program

Dies funktioniert für bestimmte Prozesse. Aber um einem bestimmten Benutzer zu erlauben, sich an Ports unter 1024 zu binden, müssen Sie ihn zu sudoers hinzufügen.

Weitere Informationen finden Sie in dieser Diskussion.


(Einige dieser Methoden wurden in anderen Antworten erwähnt; ich gebe mehrere Möglichkeiten in grober Reihenfolge der Präferenz.)

Sie können den Low-Port auf einen High-Port umleiten und den High-Port abhören.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080

Sie können Ihren Server mit Root- und Drop-Privilegien starten, nachdem er mit dem Abhören des privilegierten Ports begonnen hat. Anstatt das selbst zu programmieren, starten Sie Ihren Server vorzugsweise von einem Wrapper aus, der die Arbeit für Sie erledigt. Wenn Ihr Server eine Instanz pro Verbindung startet, starten Sie sie ab inetd (oder ein ähnliches Programm wie xinetd ). Für inetd , verwenden Sie eine Zeile wie diese in /etc/inetd.conf :

http  stream  tcp  nowait  username:groupname  /path/to/server/executable  argv[0] argv[1]…

Wenn Ihr Server in einer einzigen Instanz lauscht, starten Sie ihn von einem Programm wie authbind . Erstellen Sie entweder eine leere Datei /etc/authbind/byport/80 und ihn für den Benutzer ausführbar machen, der den Server betreibt; oder erstellen Sie /etc/authbind/byuid/1234 , wobei 1234 die UID ist, auf der der Server läuft, die die Zeile 0.0.0.0/0:80,80 enthält .

Wenn Ihre ausführbare Serverdatei auf einem Dateisystem gespeichert ist, das Capabilities unterstützt, können Sie ihr den cap_net_bind_service geben Fähigkeit. Beachten Sie, dass die Funktionen noch relativ neu sind und noch ein paar Macken haben.

setcap cap_net_bind_service=ep /path/to/server/executable

Die kurze Antwort lautet, dass dies konstruktionsbedingt nicht möglich ist.

Die lange Antwort lautet, dass es in den Open-Source-Welten viele Leute gibt, die mit dem Design spielen und alternative Methoden entwickeln. Im Allgemeinen ist es allgemein anerkannte Praxis, dass dies nicht möglich sein sollte. Die Tatsache, dass Sie es versuchen, bedeutet wahrscheinlich, dass Sie einen weiteren Designfehler in Ihrem System haben und Ihre gesamte Systemarchitektur im Hinblick auf *nix Best Practices und Auswirkungen auf die Sicherheit überdenken sollten.

Ein Programm zum Autorisieren des Nicht-Root-Zugriffs auf niedrige Ports ist jedoch authbind. Sowohl selinux als auch grsecurity bieten auch Frameworks für solche fein abgestimmten Authentifizierungen.

Und schließlich, wenn Sie möchten, dass bestimmte Benutzer bestimmte Programme als root ausführen, und was Sie wirklich brauchen, ist, einem Benutzer zu erlauben, Apache oder ähnliches neu zu starten, sudo ist dein Freund!


Linux
  1. Einem Benutzer erlauben, Sudo ohne Passwort zu verwenden?

  2. Ändern Sie die Standardportnummer des SSH-Servers

  3. Installieren Sie einen MariaDB-Server auf CentOS

  4. Best Practices für die Sicherheit von Linux-Servern

  5. FTP mit IPTables zulassen

Anleitung zum erstmaligen Einrichten des CentOS 7-Servers

Gewusst wie:Ersteinrichtung des Ubuntu 15.04-Servers

Gewusst wie:Ersteinrichtung des Fedora 21-Servers

Gewusst wie:Ersteinrichtung des Debian 8.2-Servers

Ersteinrichtung des Servers mit Ubuntu 18.04

Wie aktiviere ich den Root-Benutzer in Ubuntu Server?