8

ポート 80 を c のソケットにバインドしようとすると、このポートを使用する権限がないというエラーが常に表示されます。この許可を取得する簡単な方法はありますか?

4

9 に答える 9

17

通常、スーパーユーザー (root) のみが「特権」ポート (つまり、1024 未満のポート番号) にバインドできます。

これは、プログラムを root として実行するか、実行可能ファイルを「suid root」にする必要があることを意味します。

これらは両方ともセキュリティに影響を与えるため、bind 呼び出しが行われた後に suid アプローチを使用し、スーパーユーザー権限を放棄することを検討することをお勧めします。

于 2008-10-03T22:25:43.883 に答える
4

このチュートリアルは、C/C++ を使用したネットワーク プログラミングに非常に役立ちます。

ところで、ANSI Cにはネットワークにアクセスする方法がありません。winsockこの機能を提供するのは、OS が提供するライブラリ (BSD ソケット API、Windows にも移植されている) です。

于 2008-10-03T22:28:36.327 に答える
3

ポート 1024 以下はPrivileged Portsと呼ばれ、これらのポートにバインドするには昇格された権限が必要です。

1024 を超えるポートはEmphemeral Portsと呼ばれます。これらへのバインドには、特別な権限は必要ありません。

特権ポートにアクセスする最も簡単な方法は、root ユーザーになることです。

于 2008-10-03T22:38:01.003 に答える
0

root ではない共有システム (大学のコンピューターなど) を使用している場合、設計上、その許可を取得する「簡単な」方法はありません。

于 2008-10-03T22:27:21.883 に答える
0

@Charles Bailey が述べているとおりです...これが、URL のポート指定によって 8080 で http サーバーのアドレスをhttp://some.url :8080 /として表示していた理由であることを付け加えたいと思います。

于 2008-10-03T22:30:03.720 に答える
0

S.Lott の回答は非常に否定的な反応を引き起こしたかもしれませんが、彼の考えは愚かではありません: 元の質問が実際のプログラム (学校の課題ではない) に対するものである場合、HTTP サーバーの背後でアプリケーションとして開発することは、多くの場合合理的な選択です。そうすれば、多くの低レベルの詳細を、よくデバッグされた優れたプログラムである Apache に任せることができます。

アプリケーションは CGI である必要はなく、Apache モジュールでもかまいません。バージョン 2 以降の Apache は、もはや単なる HTTP サーバーではありません。現在は、ネットワーク プログラムを開発するためのプラットフォームです。元の質問に対する正しい答えは、Apache モジュールを作成することです ( Apache のドキュメントを参照してください) 。

于 2008-10-04T20:38:45.067 に答える
0

従来、1024 未満のポートにソケットをバインドできるのは root だけでした。

于 2008-10-03T22:34:38.233 に答える
0

通常のプログラムは、「特権」ポート (1024 未満のポート) をバインドできません。これは、UNIX ライクなオペレーティング システムのほとんどが廃止されたセキュリティ機能です。

スーパーユーザーとして実行することは、ここで他の多くの人が提案していますが、この問題に対する悪い解決策です。Debian または Ubuntu システムで実行している場合は、authbindパッケージをインストールすることをお勧めします。これにより、プログラムに他の特別なアクセス許可を実際に与えることなく、特権ポートを開く許可をプログラムに与えることができます。

他のシステムで実行している場合は、debian または ubuntu をインストールすることをお勧めします ;-)。

于 2008-10-16T12:11:03.670 に答える
-3

はい、ポート 80 に簡単にバインドできます。Apache を使用してください。Web アプリケーションを作成します。Apache はポート 80 にバインドし、Web アプリケーションを実行します。

次の Apache を書こうとしていますか? その場合は、オペレーティング システムのsetuid API 呼び出しについて学習する必要があります。

新しいバージョンの Apache を作成していない場合、ほとんどの人は非特権ポートを使用します。8000 が人気で、8080 も人気です。

于 2008-10-03T23:22:28.123 に答える