Отказано в разрешении привязки к порту при запуске приложения Scala через SBT


Я пытаюсь запустить свой код Scala с SBT, но получаю ошибку ниже. Это происходит как с SBT, использующим командную строку, так и с IntelliJ Idea.

    [error] (run-main) org.jboss.netty.channel.ChannelException:
    Failed to bind to: /127.0.0.1:80
    org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:80
    ....
    ....
    Caused by: java.net.SocketException: Permission denied

Что я настраиваю, чтобы разрешить доступ к порту. Это происходит как при попытке запуска на локальном компьютере Mac, так и на удаленном сервере Ubuntu.

Запуск sbt с "sudo sbt" устраняет проблему, но это не решение. Где я могу установить разрешение, чтобы разрешить моему приложению Scala доступ к порту 80.

3 6

3 ответа:

Решение этой проблемы будет зависеть от операционной системы, а не от того, что могут сделать SBT, Scala или Java.

Например, Debian предлагает три различных решения, все из которых могут быть использованы в других дистрибутивах Linux-два из них являются вариациями запуска от имени root, а третий использует iptables для подделки прослушивания на порту 80.

Во FreeBSD можно полностью отключить ограничение низкого порта, и Solaris может сделать это для каждого порта и пользователя, как описано выше (для обоих) здесь .

Запуск sbt с "sudo sbt" устраняет проблему, но это не решение. Где я могу установить разрешение, чтобы разрешить моему приложению Scala доступ к порту 80.

Хотя я думаю, что это ваше единственное решение. Только привилегированные приложения могут привязываться к портам под 1024.

Может быть, вам удобнее запускать HTTP-прокси на порту 80 (только прокси в качестве root), или у вас есть какое-то правило ipfilter, которое перенаправляет входящий порт 80 на порт 8080 ? Смотрите также этот ответ.

Возможно, вы захотите взглянуть на commons-daemon [1] и его двоичный файл jsvc. Это позволяет вам начинать как root и отбрасывать привилегии после выполнения некоторых задач. Задачи здесь могут быть привязкой порта.

[1] http://commons.apache.org/daemon/