Tomcat 9 на порту 443 работает только с правами root, что может быть опасно [дубликат]
На чтение 3 минОпубликовано
Вопрос или проблема
После стольких чтений статей на serverfault.com я успешно настроил свой Tomcat 9 на порту 443.
Но проблема в том, что 443 — это привилегированный порт, в который я добавил пользователя root в приведённый ниже tomcat.service, но как мне избежать этого, так как я хочу предоставить разрешение пользователю Tomcat только для одной службы. Я надеюсь, вы понимаете мою проблему и подскажете лучший ответ.
Вы можете запускать Tomcat (или что угодно) от не-root пользователя и все еще связываться с системными портами, если вы предоставили возможность CAP_NET_BIND_SERVICE. Вы можете сделать это в вашем unit systemd, добавив AmbientCapabilities= в секцию [Service]:
AmbientCapabilities=CAP_NET_BIND_SERVICE
Очевидно, вам также нужно будет удалить User= и Group=.
Вам также следует рассмотреть возможность использования NoNewPrivileges=true, чтобы ограничить приложение в повышении своих привилегий.
Ответ или решение
Чтобы запустить Tomcat 9 на порт 443, не используя пользователя root, вы можете воспользоваться возможностями системы Linux, такими как предоставление специфических привилегий для вашего сервиса. Использование пользователя root для выполнения веб-сервера является плохой практикой с точки зрения безопасности, так как это увеличивает риск потенциальных уязвимостей.
Для того чтобы ваш Tomcat пользователь мог связываться с привилегированными портами (ports < 1024), можно использовать функционал CAP_NET_BIND_SERVICE, который позволит вашему приложению привязываться к этому порту без необходимости работать от имени root.
Вот как можно настроить вашу службу Tomcat, чтобы использовать возможности ambient capabilities:
Измените файл tomcat.service:
Вам нужно удалить строки User= и Group= и добавить AmbientCapabilities= для указания необходимой возможности:
Убедитесь, что Tomcat запущен и работает корректно:
sudo systemctl status tomcat
Эти изменения позволят вашему процессу Tomcat работать на порту 443 без необходимости выполнения под пользователем root, что значительно повысит безопасность вашей системы.