Aggiornamento 2017:
Molto meglio di CAP_NET_BIND_SERVICE o di un kernel personalizzato.
Come seguito alla favolosa raccomandazione di Joshua (= sconsigliata se non sai cosa fai) di hackerare il kernel:
L'ho pubblicato prima qui .
Semplice. Con un kernel normale o vecchio, non lo fai.
Come sottolineato da altri, iptables può inoltrare una porta.
Come sottolineato anche da altri, CAP_NET_BIND_SERVICE può anche fare il lavoro.
Ovviamente CAP_NET_BIND_SERVICE fallirà se avvii il tuo programma da uno script, a meno che tu non imposti il cap sull'interprete della shell, il che è inutile, potresti anche eseguire il tuo servizio come root ...
ad esempio per Java, devi applicarlo alla JAVA JVM
sudo /sbin/setcap 'cap_net_bind_service=ep' /usr/lib/jvm/java-8-openjdk/jre/bin/java
Ovviamente, ciò significa che qualsiasi programma Java può associare le porte di sistema.
Dito per mono / .NET.
Sono anche abbastanza sicuro che xinetd non sia la migliore delle idee.
Ma poiché entrambi i metodi sono hack, perché non alzare il limite alzando la restrizione?
Nessuno ha detto che devi eseguire un kernel normale, quindi puoi semplicemente eseguire il tuo.
Devi solo scaricare il sorgente per l'ultimo kernel (o lo stesso che hai attualmente). Successivamente, vai a:
/usr/src/linux-<version_number>/include/net/sock.h:
Lì cerchi questa linea
/* Sockets 0-1023 can't be bound to unless you are superuser */
#define PROT_SOCK 1024
e cambiarlo in
#define PROT_SOCK 0
se non vuoi avere una situazione ssh insicura, la modifichi in questo: #define PROT_SOCK 24
In genere, utilizzerei l'impostazione più bassa di cui hai bisogno, ad esempio 79 per http o 24 quando utilizzo SMTP sulla porta 25.
Questo è già tutto.
Compilare il kernel e installarlo.
Reboot.
Finito: quello stupido limite è ANDATO e funziona anche per gli script.
Ecco come compilare un 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 ..
In poche parole, usa iptables se vuoi rimanere sicuro, compila il kernel se vuoi essere sicuro che questa restrizione non ti disturbi mai più.