Serveur : Envoyer des commandes "screen" via une page web: php ?

Fermé
ultimatebyte Messages postés 3 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 23 juillet 2014 - 23 juil. 2014 à 10:25
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 23 juil. 2014 à 22:43
Salut à vous maîtres geeks ! :bounce:
Euh, comment on dit déjà ? Au secours ?!!

PRESENTATION
Je suis jeune admin d'une communauté multi-gaming, et ça fait des mois que je voulais faire un script pour relancer notre serv gmod qui crash 10x par jour via une page web... Evidemment, quand il crashe, c'est sans fermer sa session "screen" et en répondant encore au ping... Et là je bloque un peu n'ayant aucune base en PHP et ayant du mal à saisir le fonctionnement avancé de screen, donc j'aurais besoin d'un bon gros tips pour me faliciter la vie, et celle de la communauté
Le serv est évidemment un dédié et tourne sous Debian (via ESXI, en virtuel donc, mais ça ne change rien à l'affaire).

OBJECTIF
Rendre le reboot du serveur de jeu plus simple et surtout, permettre à d'autres co admins de pouvoir le relancer quand je ne suis pas là. Pour ce-faire, j'ai pensé à une page web (php) où l'on puisse voir le statut de la session screen et avoir un bouton démarrer/redémarrer.
Si possible, il faut que la solution reste secure... (déjà la page admin que j'ai crée est protégée par .htaccess).

PROBLEMES
Si je lance un script en PHP, il est rattaché à l'utilisateur PHP... Donc la console n'est pas accessible, or il faut quand même que j'y accède pour diverses raisons.
A l'inverse, l'utilisateur PHP n'a pas non plus accès aux sessions screen d'un autre user. C'est donc là que ça se gâte.

DEBUT DE SOLUTION ?
Partager le screen avec l'utilisateur que je souhaite utiliser ? J'ai eu beau chercher, pas trop compris le shmilblik.

CE QUI A ETE FAIT
D'abord, j'ai crée un sous domaine et rendu le dossier du jeu accessible pour que certains contenus soient téléchargés plus rapidement (fastDL pour ceux qui connaissent les serveurs "source engine").
J'ai crée au sein de cette arborescence un dossier admin, protégé par .htaccess et .htpasswd dont seul les co-admins auront le mot de passe.
J'ai fait une petite page en HTML, que j'ai finalement renommée en .php pour que des scripts php s'y exécutent (il faudrait sûrement changer les headers pour que ce soit propre mais le PHP et moi...). J'ai aussi fait des débuts de micro scripts. Je vous link tout ça pour que vous puissiez éventuellement me suggérer des modifs. :love:

Fichier admin.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>

<body bgcolor="black">


<font color="white"><h2>Server Status :</h2></font>
<font color="red"><?php include'status.php'; ?></font>



<form action="startscript.php" method="get">
<input type="submit" value="Start Gmod Server">
</form>
</br>
</br>

<font color="white">PHP WhoAmI ? </br>
<?php echo exec('whoami'); ?></font>



</body>
</html>

status.php

<?php
$output = shell_exec('screen -ls');
echo "<pre>$output</pre>";
?>



startscript.php
<?php
echo "Server Started";
exec('/home/gameservers/launcher_gmodconstruct.sh');
?>


Le script du launcher, au cas où il faudrait changer les arguments
[cpp]screen -A -m -d -S gmodconstruct /home/gameservers/gmodconstruct/srcds_run -[etc.]
/cpp


Au final le plus important c'est : comment s'y prendre pour lancer une session screen qui reste accessible via ce moyen ? Est-ce qu'il y a une autre manière plus judicieuse ?

J'espère qu'une âme geek charitable (pléonasme ? :lol: ) et qui en sait plus que moi voudra bien me filer un coup de pouce (pas trop fort quand même, je suis sensible :whistle: ) !
Cya !

2 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
23 juil. 2014 à 11:01
Je pense que suphp pourrait résoudre ton problème :
https://www.debiantutorials.com/installing-suphp/

Bonne chance
0
ultimatebyte Messages postés 3 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 23 juillet 2014
23 juil. 2014 à 11:48
Merci de ton attention.

Je viens de tester... Le hic c'est que ça détruit toute ma configuration apache2... Donc sites plus accessibles, tout à reconfigurer... Heureusement que je suis sur une VM et que j'avais fait un snapshot juste avant !
Mais l'idée de gérer l'user me plaît assez par contre, si y'a un moyen de pas plomber toute la config je suis preneur.
0
ultimatebyte Messages postés 3 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 23 juillet 2014
23 juil. 2014 à 17:07
Je t'avoue que je suis un peu frileux à l'idée que ça risque de ne plus marcher alors qu'il y a du monde qui utilise le serv en permanence... Et en plus ça a l'air d'être une galère à faire. https://forums.cpanel.net/threads/switching-to-suphp.160421/

N'est-ce pas plus simple et safe de trouver un moyen fiable de partager la session screen ?
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
23 juil. 2014 à 22:43
Je viens de tester... Le hic c'est que ça détruit toute ma configuration apache2...

Pourquoi ?

N'est-ce pas plus simple et safe de trouver un moyen fiable de partager la session screen ?

Dans le cas général un processus P lancé par un utilisateur U ne peut être manipulé que par U et root (car root a tous les droits, y compris celui de devenir U). Partant de là deux solutions :
- soit le script php (lancé par apache) est lancé avec des droits root
- soit il est lancé en tant que U
C'est l'approche qu'on tente d'avoir avec
suphp
.

Autre solution, ici il s'agit d'un processus particulier,
screen
qui peut à ce que je vois être lancé par U et manipulé par U' si on le configure pour :
https://wiki.networksecuritytoolkit.org/nstwiki/index.php/HowTo_Share_A_Terminal_Session_Using_Screen

Bonne chance
-1