2017年更新:
CAP_NET_BIND_SERVICEまたはカスタムカーネルよりもはるかに優れています。
カーネルをハックするためのJoshuaのすばらしい(=何をすべきかを知らない限り推奨されない)推奨事項のフォローアップとして:
最初にここに投稿しました。
シンプル。通常または古いカーネルでは、そうではありません。
他の人が指摘したように、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プログラムがシステムポートをバインドできることを意味します。
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を使用し、この制限が二度と気にならないようにしたい場合はカーネルをコンパイルします。