Serveur : Envoyer des commandes "screen" via une page web (php ?) - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 23-07-2014 à 19:02:01
Tu ne peux pas "simplement" faire l'export du screen -ls vers un fichier texte que tu affiches par ton PHP ?
Avec un cron tu l'appelles régulièrement, avec l'heure :
Un script bash "classique" status.sh :
Code :
|
Avec un pseudo-logrotate toutes les 24h logtar.sh:
Code :
|
chmod u+x sur chacun des 2 scripts.
Avec en cron :
*/5 * * * * status.sh |
Côté PHP :
Code :
|
Après pour redémarrer la solution la plus sécurisée sera d'utiliser une connexion SSH et d'éviter tout exec/shell_exec !
Sous Windows un bête PuTTY, sous Linux un terminal avec ssh.
Sur le serveur un compte utilisateur avec les droits nécessaires pour lancer le screen sur gmod, et un script bash "reboot-gmod.sh" avec le code de ton launcher
PuTTY ça ne prend pas de place, tu mémorises ta connexion dessus, et c'est tout.
Après en bricolant un peu de PHP, il est possible de faire un status "temps réel" sur Twitter (même si le lien du script originel est down, l'idée est reprise ailleurs) ou sur Status.net / Identi.ca.
Marsh Posté le 23-07-2014 à 21:26:35
Ouiii ! Une réponse !
Après une journée de :
Merci bardiel de te pencher sur mon cas !
Le log est intéressant; de la sorte, les autres admins pourront consulter le log du serv et y détecter des anomalies au moment des crahs, plugins défaillants, tentatives de hack, props flooders etc. sans avoir besoin de se connecter en SSH. Car c'est bien une condition que j'ai omis d'évoquer : Personne d'autre que moi ne peut avoir accès au SSH, étant tristement le plus calé, et le moins jeune, et surtout, y'a pas qu'un serveur sur la machine, même si j'ai bien crée différents users, on peut déjà mettre le souk avec un user... En gros eux ils sont modos et je suis webmaster, il faut que ça reste comme ça tant que je n'ai pas un informate de confiance parmi les admins.
Bon, j'ai pas tout compris à ton code hein, je suis autodidacte en linux et j'ai commencé en avril, mais j'ai saisi l'esprit et ça me semble vraiment bien, donc merci, c'est super gentil de ta part !
Par contre la problématique principale n'est pas celle du log, c'est celle de permettre à des neophytes de rebooter le serveur, et pas de soluce pour l'heure du coup ?
J'ai bien trouvé ça, http://ubuntuforums.org/showthread.php?t=299286
Mais je capte pas la partie
"CTRL-A
:acladd bjones"
et autres : C'est quoi ? Une commande dans la session screen, une option de lancement, un raccourci clavier et suivi d'une commande à taper ?
Je crains que ce ne soit un raccourci clavier et qu'il faille le faire à chaque fois, ce qui retire toute possibilité de lancement via script... Tant de questions...
Marsh Posté le 23-07-2014 à 22:09:04
rorogeek a écrit : Par contre la problématique principale n'est pas celle du log, c'est celle de permettre à des neophytes de rebooter le serveur, et pas de soluce pour l'heure du coup ? |
A la base de l'exec/shell exec dans du php, je considère ça comme une faille possible... donc "prout à éviter "
rorogeek a écrit :
|
Pour faire court là on te propose de permettre au screen d'être récupéré par un autre accès en SSH ou sur un terminal X distant (donc du Linux, sauf à bricoler avec du cygwin sous Windows). Mais vu que tu souhaites l'éviter c'est pas trop ça donc
Le premier code, status.sh qui te créé un fichier de log, peut être agrémenté d'autres options suivant ce que tu souhaites avoir comme informations, notamment l'utilisation CPU et RAM.
Ou même ajouter vnstat/vnstati pour générer des graphiques d'utilisation réseau... mais bon ça c'est autre chose.
Là la problèmatique principale restant : "comment on redémarre tel truc depuis du PHP".
De base ton code avec le whoami est intéressant, dans le sens où le serveur web est en général exécuté sur l'utilisateur www-data. Or ce qui sera attendu pour pouvoir redémarrer le gmod sera probablement root ou (mieux) un utilisateur dédié.
"Tant pis" tu passeras par du script du même genre que tu avais réalisé pour la partie reboot, à un détail près que tu devras voir : autoriser l'utilisateur www-data a exécuter une commande unique. En l'occurrence via visudo, uniquement "/home/gameservers/launcher_gmodconstruct.sh".
Par la suite ton code "status-reboot.php" à mettre dans ton dossier www (dans un sous-dossier avec un .htaccess) :
<!DOCTYPE html> |
Et je te conseillerais d'ajouter dans ton launcher_gmodconstruct.sh :
NOW=$(date +"%d-%m-%Y-%T" ) |
Avec donc :
Un script bash status.sh qui te génère les logs (à compléter au besoin, CPU, RAM, réseau) :
#! /bin/bash |
Le pseudo-logrotate qui va juste compresser le fichier log en cours, logtar.sh:
#! /bin/bash |
chmod u+x sur chacun des 2 scripts. Et en cron :
*/5 * * * * status.sh |
ça sera peut être à revoir, mais il s'agit d'une base de travail plus complète que ce que tu avais déjà.
Marsh Posté le 23-07-2014 à 22:57:49
Je suis full hétéro, mais j'aurais presque envie de te faire un enfant !
Je vais examiner ça ! Le serveur a aussi moyen de faire son log directement, plus simple mais moins complet, à explorer, mais du coup la méthode est semble-t-il la même pour le récupérer.
Je vais explorer tout ça calmement, dormir peut-être un peu, et bien-sûr je tiendrai au jus !
En tout cas je découvre de plus en plus grâce à toi que le PHP est vraiment un outil magique, j'aurais dû m'y intéresser plus tôt !
J'aurais juste une dernière question : Pourquoi pas secure les exec dans PHP dans la mesure où c'est protégé par .htaccess ?
Merci encore, infiniment, et à bientôt si jamais tu repasses par là !
Marsh Posté le 27-07-2014 à 20:00:05
rorogeek a écrit : J'aurais juste une dernière question : Pourquoi pas secure les exec dans PHP dans la mesure où c'est protégé par .htaccess ? |
Le truc c'est que tu peux envoyer des commandes en tant que root, c'est pas facile à réaliser mais cela peut être une faille possible.
Quand cela s'impose aussi cela passe bien souvent par du script perl ou python exécuté en tant que "CGI" (même si le terme est impropre), avec des droits et possibilité limité, et sur un frond-end (la partie visible) sécurisé aussi par l'IP demandeuse en plus du login/mot de passe.
Marsh Posté le 09-10-2014 à 09:11:18
Coucou !
Alors je réponds avec un temps fou, j'ai eu une vie de dingue ces derniers temps !
D'abord encore merci, sachez que j'ai finalement trouvé une autre solution !
D'abord, pour faire ce qu'on voulait, la solution était suEXEC et suPHP, avec un bon tuto ici : http://www.tutoriels-video.fr/secu [...] -et-suphp/
Et ensuite la solution que j'ai trouvé qui a enfin marché, c'est un script de gestion de serveur gmod fait par Daniel Gibbs : http://danielgibbs.co.uk/lgsm/gmodserver/ qui permet avec gsquery de vérifier que le serv répond bien. Fiabilité désormais : 100% de reboot en cas de non réponse du serveur, avec un crontab qui vérifie l'état du serv toutes les 3 minutes et un reboot auto à 5h du mat.
En espérant que ça aide quelqu'un un jour
J'en profite pour caler un petit tuto sur comment configurer le workshop pour son serveur garry's mod : http://mesnie.org/viewtopic.php?f=49&t=175 (et si vous visitez ce lien dans quelques temps, l'adresse sera sûrement : http://www.mesnie.org/forum/viewto [...] f=49&t=175 )
Voilà, bon geekage à tous !
Marsh Posté le 23-07-2014 à 09:10:52
Salut à vous maîtres geeks !
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.
Fichier admin.php
status.php
startscript.php
Le script du launcher, au cas où il faudrait changer les arguments
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 ? ) et qui en sait plus que moi voudra bien me filer un coup de pouce (pas trop fort quand même, je suis sensible ) !
Cya !
Message édité par rorogeek le 23-07-2014 à 10:03:36
---------------
GLHF !