2010-02-23 18 views
6

Estoy tratando de ejecutar un simple servidor web basado en Python dado here.¿Cómo cambio los permisos a un socket?

Y me sale el siguiente mensaje de error:

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

Por lo que yo entiendo mis cortafuegos bloquea el acceso a una toma de corriente? ¿Estoy en lo cierto? Si es el caso, ¿cómo puedo cambiar los permisos? ¿Es peligroso cambiar estos permisos?

Respuesta

11

Si desea enlazar a los números de puerto < 1024, debe ser root. No es un problema de firewall ; es impuesta por el sistema operativo. Aquí hay a reference from w3.org, y un FAQ entry específico para Unix.

+0

http://www.unixguide.net/network/socketfaq/4.8.shtml –

+0

@ THC4k: Gracias por la referencia adicional; Lo he incorporado a mi respuesta. –

2

Si desea ejecutar en un puerto de menos de 1024, deberá ser root. Puede abrir el socket y soltar el permiso de root para el resto de su programa cambiando a otro usuario.

La mayoría de las veces es más fácil ejecutar un servidor web real (digamos nginx) en el puerto 80 y proxy las solicitudes a su programa que puede ejecutar en un puerto numerado alto (8080 por ejemplo). De esta forma, no tendrá que preocuparse por atornillar algo durante el tiempo en que su proceso se ejecuta como root, ya que nunca se ejecuta como root.

Si es sólo para las pruebas, ejecutar el servidor en el puerto 8080 y conectarse a http://localhost:8080/

Cuestiones relacionadas