MacでWebサーバーを非ルートプロセスとして実行したい。通常、ルートプロセスのみがポート80(または1024未満のポート)にバインドできます。
ルート80以外のプロセスがリッスンできるように、特にポート80を開くことはできますか?
MacでWebサーバーを非ルートプロセスとして実行したい。通常、ルートプロセスのみがポート80(または1024未満のポート)にバインドできます。
ルート80以外のプロセスがリッスンできるように、特にポート80を開くことはできますか?
回答:
これは設計上困難です。また、マシンへのルートアクセスがない限り、変更をセットアップするためにルートが必要になるため、次のいずれも機能しません。ただし、一度変更すると、ユーザースペースプログラムはルートなしでアクセスできます。
これを達成するための2つの一般的な方法があり、選択する方法は、制限を回避しようとしている理由によって異なります。
ポート80のすべてのトラフィックをポート8080または任意のポートに渡すようにマシンを再構成することにより、ユーザー空間サーバーがアクセスを許可されたエリアでルート特権ポートを受信できるようにすることができます。
プロセスは簡単です:
手順1:現在のファイアウォールルールを表示します。
sudo ipfw show
ステップ2:ポート転送ルールを追加する(80から8080)
sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
ファイアウォールルールを削除するには、次を実行します。
sudo ipfw flush
(ソース)
これは一時的な変更であり、再起動すると元に戻ります。または、最後の行に示されているようにフラッシュします。
あなたはできるの変更を永続的に、またはあなたはおそらく、セキュリティの観点から、より安全である前に、あなたのサーバを起動すると、スタートアップライン、などのコマンドを追加することができます。
Authbindは、1つのプログラムが完全なルートアクセスを許可せずに、より低いレベルのポートにアクセスできるように特別に設計されました。
MacOSXポートがあります:
https://github.com/Castaglia/MacOSX-authbind
ただし、まだIPv4トラフィックに制限されている可能性があるため、追加の調査を行って、ニーズに合っているかどうかを確認する必要があります。
launchd
.plist
... ` "ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"]
Woohoo!
を使用ncat
して、他のポートで実行されているWebサーバーからのトラフィックを転送できます。
sudo ncat -l -p 80 -c ' ncat -l -p 1234'
これにより、ポート80のトラフィックがlocalhost:1234に転送されます。これはちょっと面倒ですが、簡単なテスト以外では使用せず、実稼働環境では使用しません。
これにより、ルート以外のプロセスはバインドできなくなりますが、プロセスがバインドできるポート(この例では1234)を選択すると、ポート80にバインドされているように見えます。これは、ファイアウォールを使用して、ポート80をポート1234に転送しますが、一時的です。
ncat
は、nmap
Macポート経由でインストールできますsudo port install nmap
。MacPorts自体はmacports.org/install.phpからインストールできます。
sshを使用してポート転送を行うこともできます。8080で実行しているサーバーがある場合、ポート80からトラフィックを転送できます。実行中のネイティブApacheを停止してトラフィックを転送するスクリプトを次に示します。
forward8080to80.command:
echo "You may close this terminal and the forwarding will continue."
echo "To stop, kill the ssh process found by `sudo lsof -i ':80' | grep LISTEN`"
sudo apachectl stop
sudo ssh user@127.0.0.1 -L 80:127.0.0.1:8080
できることは、ルーターのポート80を開いて、WebサーバーのローカルIPアドレスを指すようにすることです。次に、Macで、[システム環境設定]> [共有]設定ペインからWeb共有を有効にし、選択したディレクトリをポイントします。これは、10.6サーバーに切り替えるまで、過去に私にとってはうまくいきました。