Оновлення 2017 року:
Набагато краще, ніж CAP_NET_BIND_SERVICE або власне ядро.
Як продовження чудової рекомендації Джошуа (= не рекомендується, якщо ви не знаєте, що ви робите), щоб зламати ядро:
Я вперше опублікував це тут .
Простий. З нормальним чи старим ядром ви цього не зробите.
Як зазначають інші, iptables можуть пересилати порт.
Як також вказували інші, CAP_NET_BIND_SERVICE також може виконати цю роботу.
Звичайно, CAP_NET_BIND_SERVICE вийде з ладу, якщо ви запустите свою програму зі скрипту, якщо ви не встановите заглушку інтерпретатора оболонки, що безглуздо, ви могли б так само добре запустити свою службу як root ...
наприклад, для Java, ви повинні застосувати її до JVA JVM
sudo /sbin/setcap 'cap_net_bind_service=ep' /usr/lib/jvm/java-8-openjdk/jre/bin/java
Очевидно, що тоді означає, що будь-яка програма Java може зв'язати системні порти.
Dito для моно / .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.
Це вже все.
Складіть ядро та встановіть його.
Перезавантажте.
Готово - цей дурний ліміт GONE, і він також працює для сценаріїв.
Ось як ви компілюєте ядро:
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, якщо ви хочете залишатися в безпеці, компілюйте ядро, якщо хочете бути впевненим, що це обмеження вас більше не турбує.