После прочтения множества статей на serverfault.com мне удалось успешно настроить мой tomcat 9 на порт 443.
Но проблема в том, что 443 — это привилегированный порт, в который я добавил пользователя root в ниже tomcat.service, но как мне этого избежать, если я хочу дать разрешение пользователю tomcat только для одной службы. Надеюсь, вы поймете мою проблему и посоветуете лучший ответ.
vim /etc/systemd/system/tomcat.service
[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
############## I added root user here ##########################
**User=root
Group=root**
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
решение1
Вы можете запустить Tomcat (или что-нибудь еще) как не-root и все равно привязываться к системным портам, если вы предоставили набор возможностей CAP_NET_BIND_SERVICE. Вы можете сделать это в вашем systemd unit, добавивAmbientCapabilities=
в [Service]
разделе:
AmbientCapabilities=CAP_NET_BIND_SERVICE
Очевидно, вам также придется удалить User=
и Group=
.
Вам также следует рассмотреть возможность использованияNoNewPrivileges=true
чтобы ограничить повышение привилегий приложения.