Update 2017:
Viel besser als CAP_NET_BIND_SERVICE oder ein benutzerdefinierter Kernel.
Als Folge von Joshuas fabelhafter Empfehlung (= nicht empfohlen, es sei denn, Sie wissen, was Sie tun), den Kernel zu hacken:
Ich habe es zuerst geschrieben hier .
Einfach. Mit einem normalen oder alten Kernel tun Sie das nicht.
Wie von anderen hervorgehoben, können iptables einen Port weiterleiten.
Wie auch von anderen hervorgehoben, kann CAP_NET_BIND_SERVICE die Aufgabe ebenfalls erledigen.
Natürlich schlägt CAP_NET_BIND_SERVICE fehl, wenn Sie Ihr Programm über ein Skript starten. Wenn Sie die Obergrenze für den Shell-Interpreter nicht festlegen, was sinnlos ist, können Sie Ihren Dienst genauso gut wie root ausführen. ZB
für Java müssen Sie ihn anwenden an die JAVA JVM
sudo /sbin/setcap 'cap_net_bind_service=ep' /usr/lib/jvm/java-8-openjdk/jre/bin/java
Das bedeutet natürlich, dass jedes Java-Programm Systemports binden kann.
Dito für Mono / .NET.
Ich bin mir auch ziemlich sicher, dass xinetd nicht die beste Idee ist.
Aber da beide Methoden Hacks sind, warum nicht einfach das Limit durch Aufheben der Restriktion aufheben?
Niemand hat gesagt, dass Sie einen normalen Kernel ausführen müssen, damit Sie einfach Ihren eigenen ausführen können.
Sie laden einfach die Quelle für den neuesten Kernel herunter (oder den gleichen, den Sie derzeit haben). Danach gehen Sie zu:
/usr/src/linux-<version_number>/include/net/sock.h:
Dort suchen Sie nach dieser Linie
/* Sockets 0-1023 can't be bound to unless you are superuser */
#define PROT_SOCK 1024
und ändern Sie es in
#define PROT_SOCK 0
Wenn Sie keine unsichere SSH-Situation haben möchten, ändern Sie diese wie folgt: #define PROT_SOCK 24
Im Allgemeinen würde ich die niedrigste Einstellung verwenden, die Sie benötigen, z. B. 79 für http oder 24, wenn Sie SMTP an Port 25 verwenden.
Das ist schon alles.
Kompilieren Sie den Kernel und installieren Sie ihn.
Starten Sie neu.
Fertig - diese dumme Grenze ist GEGANGEN und das funktioniert auch für Skripte.
So kompilieren Sie einen Kernel:
https://help.ubuntu.com/community/Kernel/Compile
# You can get the kernel-source via package linux-source, no manual download required
apt-get install linux-source fakeroot
mkdir ~/src
cd ~/src
tar xjvf /usr/src/linux-source-<version>.tar.bz2
cd linux-source-<version>
# Apply the changes to PROT_SOCK define in /include/net/sock.h
# Copy the kernel config file you are currently using
cp -vi /boot/config-`uname -r` .config
# Install ncurses libary, if you want to run menuconfig
apt-get install libncurses5 libncurses5-dev
# Run menuconfig (optional)
make menuconfig
# Define the number of threads you wanna use when compiling (should be <number CPU cores> - 1), e.g. for quad-core
export CONCURRENCY_LEVEL=3
# Now compile the custom kernel
fakeroot make-kpkg --initrd --append-to-version=custom kernel-image kernel-headers
# And wait a long long time
cd ..
Kurz gesagt, verwenden Sie iptables, wenn Sie sicher bleiben möchten, kompilieren Sie den Kernel, wenn Sie sicher sein möchten, dass Sie diese Einschränkung nie wieder stört.