2010-02-23 2 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. Это не брандмауэр вопрос; он применяется операционной системой. Вот a reference from w3.org, и FAQ entry для Unix.

+0

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

+0

@ THC4k: Спасибо за дополнительные ссылки; Я включил его в свой ответ. –

2

Если вы хотите запускать порт под 1024, вам нужно быть root. Вы можете открыть сокет и отбросить права root для остальной части вашей программы, переключившись на другого пользователя.

В большинстве случаев проще запускать реальный веб-сервер (скажем nginx) на порт 80 и проксировать запросы через вашу программу, которую вы можете запускать на высоком нумерованном порту (например, 8080). Таким образом, вам не нужно беспокоиться о том, чтобы что-то прикрутить во время выполнения вашего процесса с правами root, поскольку он никогда не запускается с правами root.

Если это только для тестирования, запустить сервер на порту 8080 и подключить на http://localhost:8080/

Смежные вопросы