Die Verwendung eines Forward Proxy ist in der Tat die einfachste und am meisten empfohlene Lösung. Es hat auch den Vorteil, schrecklich ungültige Anfragen zu filtern, bevor sie Ihren selbstgeschriebenen Server erreichen.
Falls Ihre Anwendung die IP-Adresse des Benutzers für etwas verwendet, denken Sie daran, es aus der von Ihrem Webserver verwendeten Kopfzeile abzurufen (X-Client-IP
usw.). Allerdings nur für Anfragen, die wirklich von Ihrem Webserver kommen, sonst können Nutzer ihre IP spoofen. Sie können dies tun, indem Sie prüfen, ob die Anfrage von Ihrer IP-Adresse stammt, und in diesem Fall nur die Kopfzeile überprüfen oder Ihre Anwendung an localhost binden.
Eine andere Lösung würde dem Programm die CAP_NET_BIND_SERVICE
Fähigkeit geben. Dazu muss root setcap cap_net_bind_service=ep /path/to/the/executable
verwenden. Da das Flag in einem Dateisystemattribut gespeichert wird, geht es verloren, wenn die Datei auf ein anderes System kopiert oder die Anwendung neu kompiliert wird.
Natürlich könnten Sie auch Ihr Programm setuid root machen und dann direkt nach dem Aufruf bind()
zu einem unprivilegierten Benutzer wechseln. Abhängig davon, wie Ihr Programm funktioniert und was es tut, ist dies möglicherweise keine gute Idee. Wenn es zum Beispiel den abhörenden Socket aus irgendeinem Grund schließen und wieder öffnen muss, würde es einen vollständigen Neustart des Prozesses erfordern.
+1 für Fähigkeiten, obwohl sie nicht zu einem anderen Unix tragbar sind. – dwalter
Die meisten Leute benutzen sowieso Linux. Und ich denke * BSD hat etwas ähnliches. – ThiefMaster