포트 443의 Tomcat 9는 햄풀할 수 있는 루트로만 작동합니다.

포트 443의 Tomcat 9는 햄풀할 수 있는 루트로만 작동합니다.

serverfault.com 기사를 너무 많이 읽은 후 포트 443에서 Tomcat 9를 성공적으로 구성했습니다.

하지만 문제는 443이 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

CAP_NET_BIND_SERVICE 기능 세트를 부여한 경우 루트가 아닌 사용자로 Tomcat(또는 기타 항목)을 실행할 수 있으며 여전히 시스템 포트에 바인딩할 수 있습니다. 다음을 추가하여 시스템 장치에서 이 작업을 수행할 수 있습니다.AmbientCapabilities=섹션에서 [Service]:

AmbientCapabilities=CAP_NET_BIND_SERVICE

User=물론 및 도 제거해야 합니다 Group=.

당신은 또한 사용을 고려해야합니다NoNewPrivileges=true앱의 권한 상승을 제한합니다.

관련 정보