The appropriate system call you need is setuid(2) , but it is not displayed by any of the Java APIs.
It's easy to write a JNI shell that would give it access, although even then you would need to find a suitable place in Tomcat's startup codes to call setuid after the bind(2) calls (those that usually require root privileges) were called.
As recommended by geocar , you can use authbind so that Tomcat never starts as root.
Alternatively, since you supposedly got root access on the appropriate server, just run Tomcat on an unprivileged port and then use t24 tweaks to forward incoming requests from the privileged port to the one Tomcat is actually listening to. See this SO post for information on how to do this.
Alnitak
source share