Невозможно запустить рельсы на порту 80

Я пытаюсь лучше изучить Linux, но в настоящее время у меня очень ограниченный опыт, поэтому, пожалуйста, извините за мое невежество в этом вопросе.

Я пытаюсь запустить рельсы на порт 80, и как другой пользователь с помощью

sudo -u [user_name] bundle exec rails s --port=80 -e production

но это терпит неудачу с

eventmachine.rb:572:in 'start_tcp_server': no acceptor (RuntimeError)

Бег sudo netstat -anltp|grep :80 показывает, что порт 80 не открыт \ слушает.

Я пробовал следующее с ограниченным успехом:

sudo bundle exec rails s --port=80 -e production работает при запуске сервера на порту 80, но не как пользователь, которого я хочу,

sudo -u [user_name] bundle exec rails s -e production работает при запуске сервера как правильный пользователь, но не на нужном порту.

Я временно установил пользователя в группу "Администраторы", так как я прочитал, что он требуется для портов < 1024, но это, похоже, тоже не помогло.

Что еще я могу попробовать?

1 ответ

Решение

Вы можете запускать службы на портах <1024 с пользователем root. Группа (администратор в вашем случае) не имеет к этому никакого отношения.

Есть несколько вещей, которые вы можете сделать, хотя. Например:

  • Пользователь iptables для перенаправления портов (настраивается с правами root).
  • Если программа позволяет это или у вас есть доступ к коду: начните с прав root, bind(), затем удалите привилегии.
  • Существует утилита authbind, предназначенная для таких случаев, но я лично никогда не пользовался ею, поэтому не могу комментировать, насколько хорошо она работает.
  • Используйте setcap для добавления привилегий в вашу программу.
Другие вопросы по тегам