2010-02-23 49 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/