如何更改套接字的权限?

时间:2010-02-23 22:48:10

标签: python sockets ubuntu webserver firewall

我正在尝试使用here运行一个简单的基于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')

据我所知,我的防火墙会阻止访问套接字?我对吗?如果是这种情况,我该如何更改权限?更改这些权限是否危险?

2 个答案:

答案 0 :(得分:11)

如果要绑定到端口号&lt; 1024,你需要是root。它不是防火墙 问题;它由操作系统强制执行。这是a reference from w3.org, 和一个特定于Unix的FAQ entry

答案 1 :(得分:2)

如果要在1024以下的端口上运行,则需要是root用户。您可以通过切换到另一个用户来打开套接字并删除root对程序其余部分的权限。

大多数情况下,在端口80上运行真实的网络服务器(比如nginx)更容易,并将请求代理到您的程序,您可以在高编号的端口(例如8080)上运行。这样您就不必担心在进程以root身份运行的过程中搞砸某些内容,因为它从不以root身份运行。

如果仅用于测试,请在端口8080上运行服务器并在http://localhost:8080/处连接