Pour que ton truc marche, il faut donc s'assurer que l'utilisateur apache peut exécuter ce script shell et que ce script fonctionnera alors correctement.
Comment puis-je vérifier si l'utilisateur apache peut exécuter ce script ? est-ce l'essayer avec un classique http://..... ?
Au passage, si l'utilisateur que vous utilisez réellement pour lancer Tomcat est root (à la place de apache), c'est pas top du tout du tout du tout. Pourquoi ? Parce que ton script sera appelé en tant que root, donc en tant que super utilisateur et donc potentiellement il peut tout faire, y compris des bêtises.
Comment l'administrateur du système peut vérifier si c'est le root qui lance Tomcat ou si c'est un autre utilisateur ?
C'est d'autant plus dangereux si le chemin du script à exécuter apparaît qq part dans les URL. Dans ce cas, pour déconner, un gars peut appeler la commande rm ou je ne sais quoi d'autre et là, c'est la merde. C'est pour ça qu'il faut super bien protéger ton appli et faire en sorte que le nom du script n'apparaisse nulle part.
Non, le chemin du script ne dois pas apparaitre dans les URL, parcontre il va se trouver quelque part dans le code source de l'application. en l'occurence la ligne
Runtime.getRuntime().exec...
Oui, c'est juste, mais ça ne change rien au problème. Tu ne livres pas le script dans ton war, si ? Dans ce cas, je ne suis pas sûr que tu puisses faire fonctionner ton script car il manquera vraisemblablement le flag x (exécutable) sur ton script.
Je ne comprends pas ce que tu veux dire par le flag x. ce script je lui donnerais les droits d'exécution suivants : x pour le owner, pour le groupe, et aussi pour les autres. Alors tout le monde aura le droit d'éxécuter ce script, mais s'ils veulent déconner, ils doivent d'abord passer par un userid et un mot de passe pour ouvrir la connexion avec le serveur. Ce userid et ce mot de passe vont se trouver quelques part dans le code source. à moins que après la connexion, pour une raison ou une autre, l'application se break au milieu, et l'utilisateur se retrouvera directement devant la ligne de commande de ce serveur.
Il faut que ce répertoire soit un paramètre de ton application Tomcat de manière à pouvoir le paramétrer sans avoir à modifier le code de ton appli. Il te suffit alors de récupérer ce répertoire dans ton appli et de l'utiliser dans ton Runtime.exec() pour construire le chemin complet vers ton script. A la limite, ton paramètre est ce chemin complet (/rep1/rep2/script.sh) comme ça, y a pas de pb si le nom du script change.
Pas sur de bien comprendre ici.
Supposons que mon .war se trouve sur
/machin/webapps/monapplication.war
et le script shell se trouve sur
Est-ce que la ligne java qui va lancer le script sera de la forme suivante ?
Runtime.getRuntime().exec("/rep1/rep2/script.sh");
si oui, si un jour le nom du script change ou bien si son emplacement change, on va devoir faire des modifications dans cette ligne :
Runtime.getRuntime().exec("/rep1/rep2/script.sh");
pour moi : parametre = "/rep1/rep2/script.sh" est-ce exact ?
il y a quelque chose que j'échappe.
Diamonds
Partager