PHP nginx / Raspberry Pi 2 / shell-command ausführen

CitroenDsVier

Lt. Commander
Registriert
Dez. 2013
Beiträge
1.876
Hallo zusammen,

ich möchte - wie der Titel bereits verrät - auf meinem auf meinem Raspberry Pi laufenden nginx Webserver einen Shell Befehl ausführen (etherwake), der dann meinen PC hochfährt. Anscheinend fehlen dazu aber die benötigten Rechte... (?)

Bisher habe ich probiert:
Code:
<?php
session_start();
if (isset($_SESSION['Username'])) {
	if ($_SESSION['Username']=="yy") {
		$output = shell_exec('sudo etherwake xx:xx:xx:xx:xx:xx'); //
		echo "<pre>$output</pre>";
	}
}
//header("Location:index.php");
?>

Mit dem Ergebnis, dass kein Output ausgegeben wird (etherwake gibt generell nichts zurück), aber auch kein PC hochgefahren wird.

Woran liegt das?

MfG, V40
 
Wer ist denn owner von diesem script, führst du es als SU aus oder gehört es zufällig www-data?
 
CitroenDsVier schrieb:
ich denke www-data ist der Benutzer, hat man da überhaupt Einfluss drauf?
chown? Lerne vielleicht erstmal mit dem Betriebssystem umzugehen. Dann hast du eine bessere Basis zum Arbeiten.
 
asdfman schrieb:
chown? Lerne vielleicht erstmal mit dem Betriebssystem umzugehen. Dann hast du eine bessere Basis zum Arbeiten.

Das war mir auch klar. Aber was soll ich denn 'chown'-en? Den Remote Rechner? Ich kann ja nicht dem Webbenutzer, quasi der Öffentlichkeit, root-Rechte geben?
Und außerdem, wie soll ichs lernen wenn man mir nicht hilft weil ichs lernen soll?! ;)
Ergänzung ()

#push
 
Gib dem Webserver sudo-Rechte auf die etherwake Binary. Aufruf dann mit sudo etherwake <...>
 
sudo kannte ich nach dem 2. RPi dann auch schon... :D

aber tdm bekomme ich den etherwake nicht hin.
ich habe jetzt 'sudo chmod 777 /usr/share/nginx/www' ausgeführt, aber in den Befehl den www-data nicht reinbekommen - wie mach ich das?

Und hab ich dann nicht ne Sicherheitslücke im Webserver wenn der da alles machen darf? Auch wenns nicht der ganze RPi ist?
 
www-data ALL= <pfad zu etherwake>

ins sudoers file

Sudo besteht nicht nur daraus sudo vor einen Befehl zu schreiben wenn man was nicht auf anhieb funktioniert...

/e editieren mit visudo, dann prüfts noch
 
Der Befehl "which" gefolgt vom Name des Programms gibt dir den kompletten Pfad zum jeweiligen Programm. Dieses trägst du dann wie bereits gesagt in die Datei /etc/sudoers ein. Eventuell musst du zusätzlich noch NOPASSWD ergänzen. Am Ende sieht das dann in etwa wie folgt aus:
Code:
www-data ALL = (root) NOPASSWD: /Pfad/zu/etherwake

Aber Pass auf, wenn du in die /etc/sudoers was falsches einträgst und diese Datei dadurch ungültig wird, musst du das ganze mit dem Root-Benutzer wieder lösen können. Stelle also vorher sicher, dass du Zugriff auf das Echte Root Konto besitzt oder alternativ, wie bereits empfohlen, solltest du die Änderung über "visudo" vornehmen, dann kann da nichts ungültiges eingetragen werden.
 
Alles klar, die Zeile ist reingeschrieben, mittels sudo visudo, reboot gemacht und funktioniert nicht. Die Ausgabe von which etherwake war /usr/sbin/etherwake, damit meine Zeile
Code:
www-data ALL = (root) NOPASSWD: /usr/sbin/etherwake
Ergänzung ()

#push
 
Dann müsstest du "funktioniert nicht" halt mal ein bisschen besser erklären, statt dauernd nur zu pushen.

Was wir hier machen ist ein fröhliches Ratespiel.

Kann von Config Fehlern aufm Pi bis zu nicht aktiviertem WoL auf dem PC alles sein
 
CitroenDsVier schrieb:
Alles klar, die Zeile ist reingeschrieben, mittels sudo visudo, reboot gemacht und funktioniert nicht.
Du machst blind irgendwelche Sachen, von denen du keine Ahnung hast, was sie tun. Gibst verzweifelt irgendwelche Dinge ein und wunderst dich, dass es nicht geht.
Ohne ein fundamentales Verständnis dafür, wie du dein Betriebssystem zu bedienen hast, wird das nichts. Und um dir das beizubringen ist ein Forum der falsche Ort.
Und wenn dir zufällig jemand einen Befehl nennen sollte, der vermeintlich dein Problem löst, hast du selbst dadurch am Ende überhaupt nichts gewonnen.
Greif dir Literatur über die Software, die du einsetzt und lern erstmal, was du tust.
 
asdfman schrieb:
Und wenn dir zufällig jemand einen Befehl nennen sollte, der vermeintlich dein Problem löst, hast du selbst dadurch am Ende überhaupt nichts gewonnen.

Nicht? Es macht dann was es soll, oder? Wenn jemand mit seinem Pi mal eben ein Script frickeln will braucht er dazu IMHO nicht unbedingt einen Fortgeschrittenenkurs in Linuxadministration belegen. Er hat ein Ziel, das will er erreichen, wenn es funzt ist er zufrieden.

Zum Thema:
http://www.forum-raspberrypi.de/Thread-php-sudo-befehle-mit-php-absetzen

sudo shell_exec wirft einige Ergebnisse bei Google raus, bevor ich in einem Forum frage würde ich so etwas immer erstmal googlen, erspart viele doofe Kommentare :D
 
Du könntest auch in den Logs von nginx und php schauen. Vielleicht steht da was Erhellendes drin (die Logs findest du unter /var/log/ ).
 
Vielleicht auch mal schauen, ob im STDERR was Informatives steht:
PHP:
		$output = shell_exec('sudo etherwake xx:xx:xx:xx:xx:xx 2>&1');
 
Zurück
Oben