Ich habe viele Fragen gefunden, die dies tun, indem Sie große Lücken in den Berechtigungen öffnen oder die Benutzerrechte für Dateien ändern. Für meine aktuelle Anwendung ist keine von beiden eine Option. Was ich versuche, ist eine shell_exec oder ähnliche PHP-Funktion, um ein .sh-Skript in einem völlig anderen Ordner auf meinem System auszuführen, wenn eine Schaltfläche auf meiner Webseite angeklickt wird. . Das Skript muss aus dem Ordner ausgeführt werden soll es in der ich bin auf Debian und haben sudo installiert Apache Benutzer zu ermöglichen, durch das Hinzufügen dieser Zeilen den Befehl auszuführen:Wie führe ich ein Skript von einem Apache-Benutzer in einem nicht besessenen Ordner aus?
www-data ALL=(ALL) NOPASSWD:/opt/folder/run.sh start
www-data ALL=(ALL) NOPASSWD:/opt/folder/run.sh stop
www-data ALL=(ALL) NOPASSWD:/opt/folder/run.sh status
Die run.sh ist nicht etwas, was ich bin erlaubt bearbeiten, so dass ich dies auf dem Apache-Ende verwalten muss, wenn möglich. Ich bin nicht berechtigt, die Berechtigungen oder den Besitz von run.sh zu ändern. Sie können also mein Dilemma sehen. Die PHP-Aufruf Ich benutze sieht wie folgt aus:
$test=shell_exec('cd /opt/folder/ && ./run.sh start&& cd -');
I $ test bin mit dem Ausgang von dem Befehl Echo. Hier wird es komisch. Es gibt eine gute Ausgabe von dem Befehl. Das Skript run.sh wird verwendet, um eine Liste anderer Programme zu starten und zu stoppen und deren Status anzuzeigen. Ich kann ./run.sh status
laufen lassen und ein gutes Ergebnis zurück in der Variablen $ test erhalten. Wenn ich versuche ./run.sh stop
es sagt, es hat funktioniert (Ich bin ziemlich sicher, dass das run.sh-Skript nicht viel Kontrolle eingebaut hat), aber dann passiert nichts wirklich auf dem System. Ich kann eine ps -ef | grep
als eine Gesundheitscheck überprüfen und sehen alle Prozesse, die gestoppt werden sollten. Es ist das gleiche, wenn ich die ./run.sh start
ausführen, aber es wird zurückgeben, dass keines der Programme gestartet wurde.
Also alles was gesagt wird, ich versuche nur herauszufinden, was ich falsch mache. Ich bin sicher, dass der PHP das Bash-Skript ausführt, aber aus irgendeinem Grund nicht in der Lage ist, einen der Start- oder Stoppbefehle im Skript auszuführen. Ich kann run.sh als root auch vollständig vom Betriebssystem ausführen. Ich bin wirklich am Ende meines Seils an diesem, so dass jede Hilfe sehr geschätzt wird. Wenn das nicht möglich ist, gibt es eine Alternative, die keine zusätzliche Programminstallation erfordert.