2016-03-21 5 views
0

ausführen Ich brauche ein Python-Skript, vor dem ich ein virtuelles env aktivieren muss, damit das Skript ausgeführt wird und es im Stammordner ist. Dies ist der entsprechende Befehl (ohne den Quellbefehl zu verwenden)Wie man Skripte im Root-Ordner von Apache mit Hilfe von PHP

Wie führe ich Apache aus? Ich bekomme 126 Fehler in PHP. Ich habe den tatsächlichen Weg angegeben.

126 Fehler bedeutet - "Befehl aufgerufen kann nicht ausgeführt werden. Eine Erlaubnis oder Befehl nicht ausführbar Problem.".

Wie mache ich das? Der tatsächliche Pfad befindet sich im Stammordner, ich kann ihn nicht nach root verschieben.

<?php 
    $op=exec('/root/Envs/ate/bin/python /var/www/cgi-bin/TStool  /box_upgrade.py',$output,$return); 
    echo "Dir returned $return, and output:\n"; 
    var_dump($output); 
    echo $return; 
    echo $op; 
    ?> 

Irgendwelche Vorschläge? Vielen Dank.

+0

Wird Ihr Webserver als root ausgeführt? Wenn nicht, kann es wahrscheinlich auf nichts im '/ root /' -Verzeichnis zugreifen. – Chris

+0

Nein, es läuft als Apache. Aber ich habe auch versucht, den ganzen Envs/ate/bin/python-Ordner in einen anderen Ordner zu verschieben und habe versucht, das Skript auszuführen, aber es gab den Rückkehrcode 1 (allgemeiner Fehler). Nicht sicher, was der Fehler ist. – Learner

+0

Gibt es einen Grund, dass Sie dies als PHP-Skript ausführen müssen anstatt als Machine-Bootstrapping-Bash-Skript oder ähnliches? Die Ausführung von PHP ist normalerweise unglaublich unsicher. –

Antwort

1

Ich habe vor Kurzem ein Projekt veröffentlicht, das es PHP ermöglicht, eine echte Bash-Shell zu erhalten und mit dieser zu interagieren (als root, falls gewünscht), es löst die Einschränkungen von exec() und shell_exec(). Erhalten Sie es hier: https://github.com/merlinthemagic/MTS

Nach dem Herunterladen Sie einfach den folgenden Code verwenden würde:

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
$return1 = $shell->exeCmd('/root/Envs/ate/bin/python /var/www/cgi-bin/TStool/box_upgrade.py'); 
//the return will be a string containing the return of the command 
echo $return1; 

In Bezug auf die Sicherheit, die es weit besser ist als Apache als root ausgeführt wird. Aber PHP irgendwo in der Nähe von Root ist immer schwierig.

Das Projekt i gebaut wird eine Wurzel bash in einer von 2 Möglichkeiten:

1) Sie ermöglichen Apache das Recht auf Sudo Python.

OR

2) übergeben Sie Root-Berechtigungen auf das Objekt jedes Mal, wenn Sie eine Shell mit Root-Setup benötigen.

Wählen Sie Ihr Gift aus. :) Lesen Sie die Dokumentation.

Verwandte Themen