Ejecute Tomcat7 como usuario tomcat7 (o cualquier otro)

10

¿Cuál será la forma recomendada de garantizar que una instancia de Tomcat7 se ejecute como usuario de tomcat7 (o cualquier otro)?

Supongo que puedo modificar tomcat7-instance/bin/startup.shy tomcat7-instance/bin/shutdown.shagregar 'su tomcat7' en la parte superior.

En Tomcat6 creo que fue la variable de entorno TOMCAT6_USER.

Adrian Ber
fuente
Si está pidiendo la "forma segura", lo más probable es que provoque debates. Ahora, si pregunta "¿cómo configurar un usuario diferente para tomcat7?" Eso es responsable. Por cierto, tomcat comienza con el usuario tomcat, hasta donde recuerdo si instaló el paquete deb ..
Braiam

Respuestas:

13

La forma más común es instalar el tomcat7paquete estándar con apt-gety comenzarlo usando:

sudo service tomcat7 start

El usuario y el grupo predeterminados están configurados /etc/default/tomcat7como puede ver en este extracto:

# Run Tomcat as this user ID. Not setting this or leaving it blank will use the
# default of tomcat7.
TOMCAT7_USER=tomcat7

# Run Tomcat as this group ID. Not setting this or leaving it blank will use
# the default of tomcat7.
TOMCAT7_GROUP=tomcat7
David Levesque
fuente
TOMCAT7_USER y TOMCAT7_GROUP era lo que estaba buscando. Gracias
Adrian Ber
Modifiqué TOMCAT7_USER en tomcat7-instance / bin / setenv.sh e inicié el servidor. Pero si visualizo el proceso usando ps, el usuario no es el especificado en TOMCAT7_USER.
Adrian Ber el
¿Por qué no lo modificas directamente /etc/default/tomcat7?
David Levesque
Digamos que tengo dos instancias de usuario de Tomcat y quiero iniciarlas como usuarios diferentes.
Adrian Ber
Es un escenario con el que no estoy familiarizado, pero en este caso no creo que pueda ejecutar Tomcat como un servicio y la configuración anterior no se aplica. Tal vez deberías hacer una pregunta por separado sobre eso.
David Levesque
11

EDITAR: ¡Lea los comentarios a continuación! Es posible que esta solución no sea aplicable a todas las situaciones.

La respuesta aceptada es excelente, pero como ejecuté Tomcat 7 en Ubuntu 14.04, había algunas cosas adicionales que necesitaba hacer para que todo funcionara:

  1. Debe detener el servicio tomcat antes de editar el archivo /etc/default/tomcat7. Una vez que cambie el usuario y el grupo, ya no será posible detener un servicio con el usuario anterior.
  2. Cambiar el usuario y el grupo en el archivo /etc/default/tomcat7

  3. Debe cambiar la propiedad de la carpeta /var/log/tomcat7y todos sus archivos. Tenga en cuenta que es una ventaja mantener el grupo adm para que todos los usuarios adm puedan leer los registros.

    sudo chown -R newuser:adm /var/log/tomcat7

  4. Cambiar la propiedad de la carpeta /var/lib/tomcat7/webapps

    sudo chown -R newuser:newgroup /var/lib/tomcat7/webapps

  5. Si se ejecuta en el puerto 80/443 en Ubuntu 14.04, debe cambiar la propiedad de los archivos authbind:

    sudo chown newuser /etc/authbind/byport/80

    sudo chown newuser /etc/authbind/byport/443

  6. Cambiar la propiedad de la carpeta de trabajo

    sudo chown newuser:adm /var/cache/tomcat7

    sudo chown -R newuser:newgroup /var/cache/tomcat7/Catalina

  7. Haga que los archivos de configuración sean legibles. Aquí tiene dos opciones: agregar su nuevo usuario al grupo tomcat7 por:

    sudo usermod -a -G tomcat7 newuser

    ... o cambiar la propiedad de los archivos de configuración:

    sudo chown -R :newgroup /var/lib/tomcat7/conf/*

  8. Si tiene otros archivos a los que acceden sus aplicaciones web, como archivos de configuración de archivos de registro, etc., también debe cambiar la propiedad de esos archivos.

  9. Ahora, todo debería estar listo para iniciar el servicio nuevamente con el nuevo usuario.

EDIT 2: después de actualizar a tomcat 8 y Ubuntu 18.04, apareció otro problema al ejecutar tomcat como un usuario diferente. En la secuencia de comandos, /etc/init.d/tomcat8la siguiente línea parece alterar la carpeta de inicio del usuario de tomcat, pero el resultado no es lo que desea si está utilizando un usuario diferente.

usermod --home /var/lib/tomcat8 $TOMCAT8_USER > /dev/null 2>&1 || true

Al eliminar o comentar esta línea, puede evitar que se modifique la carpeta de inicio para el nuevo usuario de tomcat.

stenix
fuente
Hay un gran problema con su respuesta. En la próxima actualización del paquete tomcat7 (corrección de seguridad / corrección de errores), su configuración se interrumpirá porque apt instalará la nueva versión del paquete tomcat7 utilizando el mismo usuario (tomcat7) nuevamente. Por lo tanto, no puede realizar actualizaciones desatendidas y tiene que acordarse de hacer una copia de seguridad después de cada actualización.
user323094
No me di cuenta de eso y tampoco tengo una buena solución en este momento. Alguna sugerencia, alguien?
stenix
No existe tal archivo en Tomcat9.
Stephane