如何更改套接字的权限?

6 投票
2 回答
5352 浏览
提问于 2025-04-15 19:39

我正在尝试运行一个简单的基于Python的网页服务器,具体内容可以在这里找到。

但是我遇到了以下错误信息:

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 个回答

2

如果你想在1024以下的端口上运行程序,你需要有管理员权限。你可以先打开一个连接,然后在程序的其他部分切换到普通用户,这样就不需要一直用管理员权限了。

大多数情况下,直接在80端口上运行一个真正的网页服务器(比如nginx)会更简单,然后把请求转发到你自己程序的高端口(比如8080)。这样你就不用担心在程序以管理员身份运行时出错,因为它实际上并不会一直以管理员身份运行。

如果只是为了测试,可以在8080端口上运行服务器,然后通过 http://localhost:8080/ 来连接。

11

如果你想要绑定到小于1024的端口号,你需要拥有管理员权限(也就是root权限)。这不是防火墙的问题,而是操作系统的规定。这里有一个来自w3.org的参考链接,还有一个关于Unix的常见问题解答

撰写回答