Exécutez Tomcat7 en tant qu'utilisateur tomcat7 (ou tout autre)

10

Quelle sera la méthode recommandée pour garantir qu'une instance Tomcat7 s'exécute en tant qu'utilisateur tomcat7 (ou tout autre)?

Je suppose que je peux modifier tomcat7-instance/bin/startup.shet tomcat7-instance/bin/shutdown.shajouter "su tomcat7" en haut.

Dans Tomcat6, je pense que c'était la variable d'environnement TOMCAT6_USER.

Adrian Ber
la source
Si vous demandez la "voie sécurisée", cela provoquera probablement des débats. Maintenant, si vous demandez "comment définir un autre utilisateur pour tomcat7?" c'est responsable. BTW, tomcat commence par l'utilisateur tomcat, pour autant que je me souvienne si vous avez installé le paquet deb ..
Braiam

Réponses:

13

La manière la plus courante consiste à installer le tomcat7package standard avec apt-getet à le démarrer à l'aide de:

sudo service tomcat7 start

L'utilisateur et le groupe par défaut sont configurés /etc/default/tomcat7comme vous pouvez le voir dans cet extrait:

# 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
la source
TOMCAT7_USER et TOMCAT7_GROUP était ce que je cherchais. Merci
Adrian Ber
J'ai modifié TOMCAT7_USER dans tomcat7-instance / bin / setenv.sh et j'ai démarré le serveur. Mais si j'affiche le processus en utilisant ps, l'utilisateur n'est pas celui spécifié dans TOMCAT7_USER.
Adrian Ber
Pourquoi ne le modifiez-vous pas directement dans /etc/default/tomcat7?
David Levesque
Supposons que j'ai deux instances d'utilisateurs Tomcat et que je souhaite les lancer en tant qu'utilisateurs différents.
Adrian Ber
C'est un scénario que je ne connais pas, mais dans ce cas, je ne pense pas que vous pouvez exécuter Tomcat en tant que service et la configuration ci-dessus ne s'applique pas. Vous devriez peut-être poser une question distincte à ce sujet.
David Levesque
11

EDIT: Veuillez lire les commentaires ci-dessous! Cette solution peut ne pas être applicable à toutes les situations.

La réponse acceptée est excellente, mais depuis que j'exécute Tomcat 7 sur Ubuntu 14.04, il y avait des choses supplémentaires que je devais faire pour que tout fonctionne:

  1. Vous devez arrêter le service tomcat avant de modifier le fichier /etc/default/tomcat7. Une fois l'utilisateur et le groupe modifiés, il ne sera plus possible d'arrêter un service en utilisant l'ancien utilisateur.
  2. Changer l'utilisateur et le groupe dans le fichier /etc/default/tomcat7

  3. Vous devez changer la propriété du dossier /var/log/tomcat7et de tous ses fichiers. Veuillez noter qu'il est avantageux de conserver le groupe adm afin que tous les utilisateurs adm puissent lire les journaux.

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

  4. Changer la propriété du dossier /var/lib/tomcat7/webapps

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

  5. Si vous utilisez le port 80/443 sur Ubuntu 14.04, vous devez changer la propriété des fichiers authbind:

    sudo chown newuser /etc/authbind/byport/80

    sudo chown newuser /etc/authbind/byport/443

  6. Changer la propriété du dossier de travail

    sudo chown newuser:adm /var/cache/tomcat7

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

  7. Rendez les fichiers de configuration lisibles. Ici, vous avez deux options: Soit vous ajoutez un nouvel utilisateur au groupe tomcat7 en:

    sudo usermod -a -G tomcat7 newuser

    ... ou changez de propriétaire des fichiers de configuration:

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

  8. Si vous avez d'autres fichiers auxquels vos applications Web accèdent, tels que les fichiers de configuration des fichiers journaux, etc., vous devez également modifier la propriété de ces fichiers.

  9. Maintenant, tout devrait être prêt à redémarrer le service avec le nouvel utilisateur.

EDIT 2: Après la mise à niveau vers tomcat 8 et Ubuntu 18.04, un autre problème est apparu lors de l'exécution de tomcat en tant qu'utilisateur différent. Dans le script, /etc/init.d/tomcat8la ligne suivante semble modifier le dossier de départ de l'utilisateur tomcat mais le résultat n'est pas ce que vous voulez si vous utilisez un autre utilisateur.

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

En supprimant ou en commentant cette ligne, vous pouvez éviter de modifier le dossier de base du nouvel utilisateur tomcat.

stenix
la source
Il y a un énorme problème avec votre réponse. Lors de la prochaine mise à niveau du package tomcat7 (correctif de sécurité / correction de bogue), votre configuration sera interrompue car apt réinstallera la nouvelle version du package tomcat7 en utilisant le même utilisateur (tomcat7). Vous ne pouvez donc pas effectuer de mises à niveau sans surveillance et vous devez vous rappeler de les afficher après chaque mise à niveau.
user323094
Je ne m'en rendais pas compte et je n'ai pas non plus de bonne solution pour le moment. Des suggestions, quelqu'un?
stenix
Il n'existe aucun fichier de ce type dans Tomcat9.
Stephane