2010-02-23 12 views
6

Sto cercando di eseguire un semplice server web basato su Python dato here.Come posso modificare le autorizzazioni per un socket?

E ottengo il seguente messaggio di errore:

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

Per quanto ho capito i miei firewall blocca l'accesso ad una presa di corrente? Ho ragione? Se è il caso, come posso modificare le autorizzazioni? È pericoloso modificare queste autorizzazioni?

risposta

11

Se si desidera eseguire il binding ai numeri di porta < 1024, è necessario essere root. Non è un problema di firewall ; è applicato dal sistema operativo. Ecco lo a reference from w3.org, e uno FAQ entry specifico per Unix.

+0

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

+0

@ THC4k: Grazie per il riferimento supplementare; L'ho incorporato nella mia risposta. –

2

Se si desidera eseguire su una porta inferiore a 1024, è necessario essere root. È possibile aprire il socket e rilasciare il permesso di root per il resto del programma passando a un altro utente.

La maggior parte delle volte è più semplice eseguire un server Web reale (ad esempio nginx) sulla porta 80 e inoltrare le richieste al programma che è possibile eseguire su una porta con un numero elevato (8080 ad esempio). In questo modo non è necessario preoccuparsi di svitare qualcosa durante il tempo in cui il processo viene eseguito come root, poiché non viene mai eseguito come root.

Se è solo per il test, eseguire il server sulla porta 8080 e connettersi a http://localhost:8080/

Problemi correlati