Обновление 2017:
Гораздо лучше, чем CAP_NET_BIND_SERVICE или пользовательское ядро.
<ч />
В качестве продолжения невероятной (= не рекомендуется, если вы не знаете, что делаете) Джошуа рекомендации взломать ядро:
Я впервые опубликовал это здесь .
Simple. С нормальным или старым ядром у вас нет.
Как отмечают другие, 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, если хотите оставаться в безопасности, скомпилируйте ядро, если хотите быть уверенным, что это ограничение больше вас не беспокоит.