ホームページ  >  記事  >  バックエンド開発  >  Linux で非 root ユーザー プログラムに 1024 より小さいポートを使用させる方法

Linux で非 root ユーザー プログラムに 1024 より小さいポートを使用させる方法

WBOY
WBOYオリジナル
2016-07-25 08:46:471439ブラウズ
Linux では、デフォルトで 1024 未満のポートは root でのみ使用できます。他のユーザーで使用しようとすると、エラーが報告されます。場合によっては、root アカウントでプログラムを実行することを検討することがありますが、これは Linux システムにセキュリティ リスクをもたらす可能性があります。では、root 以外のユーザーが実行するプログラムで 1024 より小さいポートを外部に有効にできるようにするにはどうすればよいでしょうか?
この記事では、いくつかの方法を紹介します:
最初のメソッド: SetUID
ユーザーのアプリケーションの実行位置にユーザー ID を設定すると、プログラムを root 権限で実行できるようになります。ただし、この方法には十分な注意が必要です。特に、実行されるプログラムが本質的にセキュリティ リスクを引き起こす場合。
使用される方法は次のとおりです:
chown root.root /path/to/application
#SetUID を使用する
chmod u+s /path/to/application
システムでは、/usr/bin/passwd などのファイルが SetUID を使用していることがわかります。そのため、システム内のすべてのユーザーは passwd を使用してパスワードを変更できます。これは、/etc/passwd を変更するファイルです (root のみが権限を持っています)これをする)。
非 root ユーザーを使用してプログラムを実行するのは、プログラム自体がシステムにもたらすセキュリティ リスクを軽減するためです。そのため、この方法を使用する場合は特に注意する必要があります。

2 番目の方法: CAP_NET_BIND_SERVICE
バージョン 2.1 以降、Linux カーネルには機能の概念があり、これにより、ポートの使用など、スーパーユーザーのみが実行できる操作を一般ユーザーが実行できるようになります。
CAP_NET_BIND_SERVICE 機能を取得すると、サービス プログラムが非 root アカウントで実行されている場合でも、低いポートにバンド接続できるようになります。使用した方法:
# CAP_NET_BIND_SERVICE を設定します
setcap cap_net_bind_service =+ep /path/to/application
注:
1. この方法はすべての Linux システムに適しているわけではありません。2.1 より前のカーネルではこの方法が提供されていないため、この方法を使用するシステムがそれをサポートしているかどうかを確認する必要があります。 2. もう 1 つの注意点は、実行するプログラム ファイルがスクリプトである場合、この方法は正しく機能しないことです。

3 番目の方法: ポート転送
実行したいプログラムに他のポートをリッスンする権限がある場合は、この方法を使用できます。まず、プログラムを非 root アカウントで実行し、1024 より高いポートをバインドします。正常に動作することを確認するには、次のようにします。 pass the low port ポート フォワーディングは、low ポートを high ポートに転送することで、root 以外で実行されているプログラムを low ポートにバインドできるようにします。この方法を使用するには、次を使用できます:
# IP FORWARD カーネルパラメータを有効にします。
sysctl -w net.ipv4.ip_forward=1
# iptables ルールを使用してパケットをリダイレクトします
iptables -F -t nat
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to:8088
最初のステップは、sysctl を使用して IP FORWARD 機能が有効になっていることを確認することです (この機能は Red Hat/CentOS ではデフォルトで無効になっています)。コードで使用されている sysctl 設定は一時的な設定であり、再起動後にリセットされることに注意してください。それらを永久に保存したい場合は、/etc/sysctl.conf ファイルを変更する必要があります:
# デフォルト値は 0 ですが、1 に変更する必要があります。
# net.ipv4.ip_forward = 0
net.ipv4.ip_forward = 1
次に、ファイルから新しい設定をロードします
# 新しいsysctl.confをロードします
sysctl -p /etc/sysctl.conf
# または sysctl -p
# デフォルトのファイル名は /etc/sysctl.conf です
2 番目のステップでは、iptables ルールを使用して、プログラムが配置されているポートにポートを転送します。この例では、ポート 80 を 8088 に転送します。
この方法により、プログラムは非 root ユーザーでも実行でき、外部に低いポート番号のサービスを提供できます。

4 番目の方法: RINETD
この方法ではポート フォワーディングも使用されます。このツールはローカル ポートをリモート ポートにマッピングできますが、結局のところ、この機能は現在の機能には少し役に立たず、システム リスクが増加する可能性があります。ここには推奨事項はありません。
Brothers IT Education のオリジナル Linux 運用保守エンジニア ビデオ/詳細な Linux チュートリアルを無料で入手できます。詳細については、公式 Web サイトのカスタマー サービスにお問い合わせください: http://www.lampbrother.net/linux/
PHP、Linux、HTML5、UI、Android、その他のビデオ チュートリアル (コースウェア + ノート + ビデオ)!お問い合わせQ2430675018


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。