2010-02-23 78 views
6

我想運行一個簡單的基於Python的網絡服務器here如何更改套接字的權限?

我也得到了以下錯誤消息:

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') 

據我瞭解我的防火牆阻止用戶訪問一個插座?我對嗎?如果是這種情況,我該如何更改權限?更改這些權限有危險嗎?

回答

11

如果要綁定端口號< 1024,則需要root。這不是防火牆 問題;它由操作系統強制執行。這裏是特定於Unix的a reference from w3.org, 和FAQ entry

+0

http://www.unixguide.net/network/socketfaq/4.8.shtml – 2010-02-23 22:54:41

+0

@ THC4k連接:感謝您的附加參考;我已經將其納入我的答案。 – 2010-02-23 23:22:54

2

如果你想在1024以下的端口上運行,你需要是root用戶。您可以通過切換到另一個用戶來打開套接字並刪除其餘程序的root權限。

大多數情況下,在端口80上運行真正的網絡服務器(比如說nginx)會更容易,並將請求傳遞給您可以在高編號端口(例如8080)上運行的程序。這樣你就不用擔心在你的進程以root身份運行的時候搞砸了某些東西,因爲它永遠不會以root身份運行。

如果它只是用於測試,運行在8080端口上的服務器,並在http://localhost:8080/