В Linux люди загружают веб-приложение Java или используют IPTables и работают как не-root? - PullRequest
5 голосов
/ 17 июня 2010

Когда вы запускаете контейнер сервлетов Java, который вы хотите обслуживать как статическим, так и динамическим контентом на порте 80, у вас возникает классический вопрос: нужно ли запускать сервер как:

  1. Надеемся, что вы используете rootchroot jail, если вы можете (пока не работали)
  2. Как пользователь без полномочий root, а затем используйте IPTables для перенаправления порта 80 на другой порт (> 1024), на котором работает контейнер
  3. Оба: как пользователь без полномочий root, IPTables и chroot jail.

Проблема с опцией.1 - сложность рутирования и проблемы безопасности запуска root. Проблема с опцией.2 заключается в том, что в каждом дистрибутиве Linux есть свой способ сохранения IPTables.Вариант 3, вероятно, является идеальным, но его очень сложно настроить.

Наконец, в каждом дистрибутиве есть раздражающие различия в сценариях демона.

Что люди считают лучшим решением, не зависящим от дистрибутивов, и есть ли ресурсычтобы показать, как это сделать?

РЕДАКТИРОВАТЬ: Я бы предпочел не запускать Apache перед контейнером сервлета, потому что сайт в основном динамический и важен общий объем памяти (расходы на хостинг).

Ответы [ 5 ]

5 голосов
/ 17 июня 2010

Запуск от имени пользователя root и использование стандартного веб-сервера ( apache ) или упрощенного (например, lighttpd или nginx ) на порту 80 для перенаправленияк вашему экземпляру.

Это имеет то преимущество, что стандартный веб-сервер может обслуживать статический контент, снижая нагрузку на ваше веб-приложение.Вы могли бы даже иметь его обратный прокси и кэшировать трафик веб-приложения.

3 голосов
/ 18 июня 2010

Check authbind , который разработан специально для того, чтобы разрешить некорневым пользователям контролировать доступ к привилегированным портам.

Таким образом, вы можете эффективно повысить привилегии пользователя Tomcat до уровня rootполномочия, которые вы хотите (открыть привилегированные порты), не давая процессу веб-приложения ненужные полномочия, чтобы нанести ущерб.

2 голосов
/ 19 июня 2010

Я использую причал на порту 8080 и перенаправляю с

iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

0 голосов
/ 23 марта 2017

Недавно обнаруженная уязвимость в Struts2 - https://www.imperva.com/blog/2017/03/cve-2017-5638-new-remote-code-execution-rce-vulnerability-in-apache-struts-2/ - ясно показывает, что запуск от имени root опасен.

0 голосов
/ 18 июня 2010

почему бы просто не запустить его как root?что плохого может случиться?

Я никогда не слышал о взломе контейнера сервлетов Java, и хакер может выйти из JVM и получить доступ к ОС.Хакер прочитал код JVM и обнаружил дыру.Он врывается в вашу систему через ваш контейнер сервлетов и входит в систему как пользователь, который запускает контейнер сервлетов.

тогда вы облажались.самые ценные и единственные ценные вещи на вашем сервере все доступны для этого пользователя.Неважно, что пользователь является обычным пользователем.

Какой еще ущерб может быть нанесен, если этот пользователь является пользователем root?ОС одноразовая, просто протрите ее и переустановите.

...