2009-01-09 15 views

Respuesta

2

soy consciente de lo que hace kchuid exactamente eso, y aunque parece abandonada, que no parece que sería difícil de llevar hasta a la fecha.

Dicho esto, el hosting company en el que trabajo permite (en los paquetes de alojamiento compartido) a los usuarios ejecutar su propio servidor web, incluido Tomcat, en el puerto 80. Esto se hace utilizando una herramienta llamada authbind que no requiere el servidor comience como root, pero simplemente permite que los usuarios no root se unan a las direcciones IP seleccionadas y los puertos seleccionados.

El único inconveniente es que authbind no funcionará con la capa de abstracción de red de Java de forma predeterminada. Necesitará deshabilitar el soporte IPV6 de Java, y probablemente especifique una dirección IP específica para enlazar dentro de su aplicación. El primero se puede hacer al iniciar el JRE con -Djava.net.preferIPv4Stack=true, pero este último es específico de la aplicación.

0

Mientras que un proceso puede quitar sus propios privilegios, no creo que pueda simplemente cambiar el usuario de otro proceso en ejecución.

0

¿Puedes explicar por qué quieres hacer esto? En general, es mejor definir un usuario que tenga los privilegios necesarios (ver "Principle of Least Privilege") y ejecutarlo como ese usuario.

+1

probablemente porque quiere escuchar en un puerto privilegiado (<1024)! – Alnitak

0

Puede crear un programa separado que se inicia con privilegios de administrador (por ejemplo, al tener el archivo binario), realiza el trabajo que necesita privilegios, descarta los privilegios mediante el uso de setuid y finalmente ejecuta el tomcat.

Dependiendo del problema que intente resolver, esto puede o no ser una solución. P.ej. si necesita ejecutar el servidor con mayor prioridad, esto funcionaría.

4

La llamada al sistema subyacente que necesita es setuid(2), pero no está expuesta por ninguna de las API de Java.

No es difícil escribir un envoltorio de JNI que daría acceso a él sin embargo, aunque incluso entonces que había necesidad de encontrar un lugar adecuado en el código de inicio de Tomcat para invocar setuid después de los bind(2) llamadas se han hecho (los que están siendo los que normalmente requieren los privilegios de root).

Según lo recomendado por geocar puede usar authbind para que Tomcat nunca tenga que ejecutar como root.

Alternativamente, como presumiblemente tiene acceso de root en el servidor en cuestión, simplemente ejecute Tomcat en un puerto no privilegiado y luego use trucos iptables para reenviar las solicitudes entrantes desde el puerto privilegiado al que Tomcat está realmente escuchando en. Consulte this SO post para obtener información sobre cómo hacer esto.

Cuestiones relacionadas