2017年更新:
比CAP_NET_BIND_SERVICE或自定义内核好得多。
作为Joshua极好的建议(除非您知道自己的做法,否则不建议这样做),作为对内核的建议:
我先贴在这里。
简单。使用普通或旧内核,则不需要。
正如其他人指出的那样,iptables可以转发端口。
正如其他人指出的那样,CAP_NET_BIND_SERVICE也可以完成这项工作。
当然,如果您从脚本启动程序,CAP_NET_BIND_SERVICE将失败,除非您在shell解释器上设置了上限,这是没有意义的,您也可以以root身份运行服务...
例如,对于Java,您必须应用它到Java JVM
sudo /sbin/setcap 'cap_net_bind_service=ep' /usr/lib/jvm/java-8-openjdk/jre/bin/java
显然,这意味着任何Java程序都可以绑定系统端口。
Dito for mono / .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
通常,我会使用所需的最低设置,例如,http设置为79,端口25上使用SMTP时设置为24。
已经足够了。
编译内核,然后安装它。
重启。
完成-该愚蠢的限制已消失,它也适用于脚本。
这是编译内核的方法:
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;如果要确保此限制永远不会再困扰您,请编译内核。