6

ここで指定された単純な Python ベースの Web サーバーを実行しようとしています。

そして、次のエラーメッセージが表示されます。

Traceback (most recent call last):
  File "webserver.py", line 63, in <module>
    main()
  File "webserver.py", line 55, in main
    server = HTTPServer(('', 80), MyHandler)
  File "/usr/lib/python2.5/SocketServer.py", line 330, in __init__
    self.server_bind()
  File "/usr/lib/python2.5/BaseHTTPServer.py", line 101, in server_bind
    SocketServer.TCPServer.server_bind(self)
  File "/usr/lib/python2.5/SocketServer.py", line 341, in server_bind
    self.socket.bind(self.server_address)
  File "<string>", line 1, in bind
socket.error: (13, 'Permission denied')

私の知る限り、ファイアウォールがソケットへのアクセスをブロックしていますか? 私は正しいですか?その場合、どうすれば権限を変更できますか? これらの権限を変更するのは危険ですか?

4

2 に答える 2

11

1024 未満のポート番号にバインドする場合は、root になる必要があります。これはファイアウォールの問題ではありません。オペレーティング システムによって強制されます。これは w3.org からの参照と、Unix に固有のFAQ エントリです。

于 2010-02-23T22:51:18.807 に答える
2

1024 未満のポートで実行する場合は、root になる必要があります。別のユーザーに切り替えることで、ソケットを開き、残りのプログラムに対するルート権限を削除できます。

ほとんどの場合、ポート 80 で実際の Web サーバー (nginx など) を実行し、大きい番号のポート (たとえば 8080) で実行できるプログラムにリクエストをプロキシする方が簡単です。この方法では、プロセスがルートとして実行されることはないため、プロセスがルートとして実行されている間に何かを台無しにすることを心配する必要はありません。

テストのみの場合は、ポート 8080 でサーバーを実行し、http://localhost:8080/に接続します。

于 2010-02-24T00:31:30.947 に答える