Как изменить разрешения для сокета? - PullRequest
6 голосов
/ 24 февраля 2010

Я пытаюсь запустить простой веб-сервер на основе 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 ]

11 голосов
/ 24 февраля 2010

Если вы хотите привязать к номерам портов <1024, вам нужно быть пользователем root. Это не брандмауэр вопрос; это обеспечивается операционной системой. Вот <a href="http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html" rel="noreferrer"> ссылка с w3.org , и запись FAQ , специфичная для Unix.

2 голосов
/ 24 февраля 2010

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

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

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

...