Обновление 2017:
Гораздо лучше, чем CAP_NET_BIND_SERVICE или пользовательское ядро.
В качестве продолжения сказочной рекомендации Джошуа (= не рекомендуется, если вы не знаете, что делаете) взломать ядро:
Я впервые опубликовал это здесь .
Просто. С нормальным или старым ядром у вас нет.
Как отмечают другие, iptables может переадресовывать порт.
Как также отметили другие, CAP_NET_BIND_SERVICE также может выполнять эту работу.
Конечно, CAP_NET_BIND_SERVICE потерпит неудачу, если вы запустите свою программу из скрипта, если вы не установите ограничение на интерпретатор оболочки, что бессмысленно, вы также можете запустить свой сервис как root ...
например, для Java вы должны применить его в JAVA JVM
sudo /sbin/setcap 'cap_net_bind_service=ep' /usr/lib/jvm/java-8-openjdk/jre/bin/java
Очевидно, это означает, что любая Java-программа может связывать системные порты.
Дито для моно / .NET.
Я также уверен, что xinetd не лучшая идея.
Но поскольку оба метода являются хакерами, почему бы просто не снять ограничение, сняв ограничение?
Никто не говорил, что вам нужно запустить нормальное ядро, поэтому вы можете просто запустить свое собственное.
Вы просто скачиваете исходный код для самого последнего ядра (или того же, что у вас есть). После этого вы идете к:
/usr/src/linux-<version_number>/include/net/sock.h:
Там вы ищете эту строку
/* Sockets 0-1023 can't be bound to unless you are superuser */
#define PROT_SOCK 1024
и изменить его на
#define PROT_SOCK 0
если вы не хотите иметь небезопасную ситуацию с ssh, измените ее следующим образом: #define PROT_SOCK 24
Как правило, я бы использовал самый низкий параметр, который вам нужен, например, 79 для http или 24 при использовании SMTP на порту 25.
Это уже все.
Скомпилируйте ядро и установите его.
Перезагрузка.
Закончено - этот глупый предел ушел, и это также работает для сценариев.
Вот как вы собираете ядро:
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 ..
Короче говоря, используйте iptables, если вы хотите оставаться в безопасности, скомпилируйте ядро, если вы хотите быть уверенным, что это ограничение вас больше не беспокоит.