Заставить сервер Ruby работать на порту 80 - PullRequest
1 голос
/ 18 декабря 2009

Я создаю простой веб-сервер в Ruby, который отображает текст LOLZ в браузере. У меня есть это сейчас:

#!/usr/bin/ruby
require 'socket'

server = TCPServer.open(2000)
loop do

client = server.accept
client.puts "HTTP/1.1 200 OK\r\n"
client.puts "Content-type: text/plain\r\n"
client.puts "\r\n"
client.puts "LOLZ"
client.close

end

Это работает как ожидалось. Однако я хочу, чтобы он работал на порте 80. Всякий раз, когда я изменяю 2000 на 80 и запускаю сервер, используя bash, я получаю эту ошибку:

unknown-00-25-4b-8c-b9-b3:rServe koningbaardxiv$ ./rServe.rb
    ./rServe.rb:4:in `initialize': Permission denied - bind(2) (Errno::EACCES)
        from ./rServe.rb:4:in `open'
        from ./rServe.rb:4

Кто-нибудь может мне помочь? Спасибо

РЕДАКТИРОВАТЬ: я только что понял, что это для всех портов в диапазоне от 0 до 999: S

1 Ответ

4 голосов
/ 18 декабря 2009

Порты ниже 1024 зарезервированы (также называемые известными портами). Вы можете получить к ним доступ только как пользователь root.

$ sudo ./rServe.rb

С http://www.iana.org/assignments/port-numbers:

Номера портов разделены на три диапазона: хорошо известные порты, зарегистрированные порты, а также динамические и / или частные порты.

Хорошо известные порты - от 0 до 1023.

С http://www.linuxquestions.org/linux/articles/Technical/Why_can_only_root_listen_to_ports_below_1024:

Я не виню тех, кто изобрел ограничение порта 1024, это была естественная и важная функция безопасности, учитывая то, как машины UNIX использовались в 1970-х и 1980-х годах. Типичная машина UNIX позволяла множеству не обязательно полностью доверенных людей войти в систему и делать вещи. Вы не хотите, чтобы эти ненадежные пользователи имели возможность установить пользовательский демон, притворяющийся широко известным сервисом, таким как telnet или ftp, поскольку его можно использовать для кражи паролей и других неприятных вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...