Как правильно разрешить прослушивание привилегированного порта Java-приложению?

Имеется сервер с Debian Squeeze, имеется JRE 7 от Oracle, имеется Java-приложение, которому нужно прослушивать несколько привилегированных портов (ниже 1024).


Способы, которые я пробовал:
  1. authbind — не поддерживает IPv6 и, что странно, работает только для портов ниже 512.
  2. Переадресация через iptables — увы, ip6tables его не поддерживает.
  3. Разрешение CAP_NET_BIND_SERVICE через setcap — JRE начинает выдавать при запуске ошибку
    java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory




Какие пути ещё есть? Проект, конечно, личный и запускать его от root можно (что я и делаю сейчас), но хотелось бы сделать более правильно.
  • Вопрос задан
  • 3787 просмотров
Пригласить эксперта
Ответы на вопрос 4
@YourChief
а если rinetd?
Ответ написан
hard0ff
@hard0ff
Создайте отдельного системного пользователя: useradd -r
Ответ написан
Комментировать
ivnik
@ivnik
Можно ещё собрать своё ядро, для этого в файле .../include/net/sock.h заменить PROT_SOCK с 1024 на 0.
Хотя этот вариант не всегда возможен и понижает безопасность системы.
Ответ написан
Комментировать
johndow
@johndow
Не знаю насколько это вам подойдёт, но можно сделать с использованием Commons Daemon. Он позволяет запустить и инициализировать приложение (забиндиться на порты меньше 1024 например) от рута, а после сбросить привилегии до уровня необходимого вам юзера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы