php > linux question débutant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : php > linux question débutant

Re: php > linux question débutant

par Sékiltoyai » 28 mars 2013, 00:59

je comprend les problème de sécurité qu'implique de tenter des jouer avec les autorisations genre
http://blog.khemael.net/2010/08/26/de-l ... -en-php/3/

et ça m'emmène un peu trop loin là
Oui, et à ne pas prendre ce qu'il dit au pied de la lettre ! Mis à part les attaques gratuites contre PHP on peut dire que ce bon monsieur se permet de donner des leçons aux autres alors que lui-même donne une solution plus sûre que les autres mais loin d'être optimale !
A savoir que s'il s'agit juste d'ajouter des routes sur le système, autant limiter les droits super-utilisateur aux fonctions d'administration réseau via l'utilisation de capabilities (http://linux.die.net/man/7/capabilities). Ce serait dommage de pouvoir rebooter le système ou killer des processus avec son script...

Re: php > linux question débutant

par lebuttazzoni » 27 mars 2013, 22:31

je comprend les problème de sécurité qu'implique de tenter des jouer avec les autorisations genre
http://blog.khemael.net/2010/08/26/de-l ... -en-php/3/

et ça m'emmène un peu trop loin là


merci pour les réponses

Re: php > linux question débutant

par Sékiltoyai » 27 mars 2013, 21:41

mais comment ce fait il que la commande
$output = shell_exec('/etc/init.d/screencap status');

ne donne rien et que de la même façon /etc/init.d/screencap start ou /etc/init.d/screencap stop
Les commandes /etc/init.d/ requièrent des droits super-utilisateur (ou root), droits que tu n'as typiquement pas lorsque tu lances une commande depuis un script php qui est lancé en général avec les droits du serveur web.
Lorsque tu le lances en ligne de commande tu dois le lancer en root sans t'en rendre compte, ce qui est d'ailleurs un très mauvais signe parce que ça veut dire que tu te connectes systématiquement avec les droits root sur ta machine.

Cordialement.

Re: php > linux question débutant

par lebuttazzoni » 27 mars 2013, 20:39

Ok oui ça ça marche c'est cool, merci

mais comment ce fait il que la commande
$output = shell_exec('/etc/init.d/screencap status');

ne donne rien et que de la même façon /etc/init.d/screencap start ou /etc/init.d/screencap stop

non plus

si idée

Re: php > linux question débutant

par Sékiltoyai » 27 mars 2013, 20:08

la première commande ne liste qu'un fichier log présent dans root, la seconde elle liste bien le contenu du répertoire. mais je ne comprend pas bien ce qu'est ncurse.
C'est une librairie qui permet d'afficher une interface graphique dans un terminal et qui fait que top te montre un résultat "joli".
Tout ce que tu dois savoir c'est que ce n'est pas fait pour être récupéré et traité par un autre programme. Pour ça tu dois utiliser la commande ps, qui par ailleurs a énormément de fonctions de mise en forme pour sélectionner les informations et le format que tu désires. Je te renvoie vers le man de la commande ps pour plus d'informations: https://www.google.fr/search?client=ope ... el=suggest

Cordialement

Re: php > linux question débutant

par lebuttazzoni » 27 mars 2013, 19:57

merci pour le conseil de test

j'ai donc fait pour tester

Code : Tout sélectionner

<?php echo exec('cd /root/ ; ls'); $output = shell_exec('cd /root/ ; ls'); echo "<pre>$output</pre>"; ?>
j'arrive aussi à lister /etc/init.d/

la première commande ne liste qu'un fichier log présent dans root, la seconde elle liste bien le contenu du répertoire. mais je ne comprend pas bien ce qu'est ncurse.

Re: php > linux question débutant

par Sékiltoyai » 27 mars 2013, 19:38

Bonjour,

Ouch, il peut y avoir de nombreuses raisons de failer à partir du moment où on tape dans la ligne de commande en PHP. Je vais y aller du plus probable au moins probable.
  • En un, tu essayes d'exécuter top, qui est un programme fait en ncurses. Concrètement quand tu le lances en SSH il n'y a pas de problème vu qu'il autodétecte ton terminal et t'affiche sa belle interface à la bonne taille jusqu'à ce que tu le killes.
    En PHP d'une part tu n'as pas les capabilités du terminal pour récupérer la sortie (PHP récupère la sortie standard), d'autre part PHP doit attendre patiemment que la commande s'arrête.
    Par ailleurs certains programmes changent leur comportement en fonction de si la sortie est capable de faire tourner l'interface ncurses mais top ne semble pas en faire partie.
  • En deux un problème de droits. Il est possible que ta conf de PHP interdise l'exécution de certaines commandes. Bon, je n'y crois pas trop car normalement ça tu dois le voir dans tes logs.
Mes conseils:
  • Commencer par exécuter un programme plus simple pour valider que tu réussis bien à exécuter des commandes et en récupérer la sortie standard en PHP. Un petit `ls .` fera tout à fait l'affaire puisqu'il ne sera pas contraint en terme de sécurité.
  • Ensuite plutôt que d'exécuter des programmes en ncurses, utilise des commandes qui s'exécutent en one shot, comme `ps`.
Cordialement

php > linux question débutant

par lebuttazzoni » 27 mars 2013, 18:49

Bonjour,
je n'arrive pas a envoyer des commande linux à mon serveur en php ( je suis en php 5)

exemple le tout bête

Code : Tout sélectionner

<?php echo exec('top'); ?>
ne donne rien
idem

Code : Tout sélectionner

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

Le but de tout ça et de créer une petite interface pour gérer mon Xvfb qui est en service : savoir si il tourne et l'arrêter et le relancer quand il se bloque


dans le shell si je fais '/etc/init.d/screencap status'
j'ai 'Xvfb is running.'

mais si je met dans une page truc.php

Code : Tout sélectionner

<?php $output = shell_exec('/etc/init.d/screencap status'); echo "<pre>$output</pre>"; ?>
Je pense oublier un truc tout con si quelsu'un a une idée