exec / shell_exec -- wakelan -- Safe Mode

Status
Für weitere Antworten geschlossen.

brian

Benutzer
Mitglied seit
13. Feb 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Hallo liebes Forum !

Ich habe Zuhause eine DS107+ und einen HP Proliant rumstehen.

Von der DS wollte ich gerne per WOL den HP Server einschalten. Also hab ich mich schlau gemacht, Wikipedia befragt und rausgefunden das man dafür nur ein Magic-Packet versenden muss. Hab mir als erstes ein normales Windows-Tool gedownloadet und damit den HP Server getestet, funktioniert ohne Probleme.

Nächste Stufe sollte das einschalten per Website sein.
Dafür hab ich nach PHP-WOL Lösungen gesucht. Hab auch so 3-5 gefunden und getestet. Nur ist hier der HP Server immer ausgeblieben.
Da hab ich dann entnervt aufgegeben und nach ner Alternative gesucht.

Daraufhin hab ich das "wakelan" für die DS gefunden, vorher noch eben ipkg installiert und testen. Per
wakelan -b [broadcast-ip] -m [mac-adresse]
über Putty auf der DS funktioniert das super. Hp Server startet genau wie er soll.

Jetzt bleibt nur noch die letzte Stufe den Befehl per PHP-Script ausführen zu können:
PHP:
<?php

shell_exec('wakelan -b [broadcast-ip] -m [mac-adresse]');

?>

Das erzeugt folgende Fehlermeldung:
Warning: shell_exec(): Cannot execute using backquotes in Safe Mode in /volume1/web/web2/wake_3.php on line 3

Daraufhin hab ich mich rund um safe_mode, exec() und shell_exec() schlau gemacht.

in der phpinfo() stehen folgende Werte für safe_mode: local & master "off"

Eine weitere Idee war den
safe_mode_exec_dir = /usr/syno/bin
auf
safe_mode_exec_dir =
zu setzen

Hat leider nichts gebracht.

Hab dann hier im Forum gekramt und bissel was zu php.ini gefunden und nachgesehen:
-> safe_mode = off
Dann war noch ein Vorschlag shell_exec() einfach durch exec() zu ersetzen, dann gibts zwar keinen Fehler mehr, aber funzt trotzdem nicht.
Noch eine Idee war in der php.ini die verbotenen Funktionen, aber da steht auch keine als verboten drinne.


Was mache ich falsch ?
Könnte irg.was an der DS verstellt sein ?

brian
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
den exec()-Aufruf verwenden und das Tool 'wakelan' ins das Verzeichnis kopieren, wo du dein PHP-Skript liegen hast

Itari
 

brian

Benutzer
Mitglied seit
13. Feb 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Hi itari,

sry das ich erst jetzt antworte, war leider kurzfristig beruflich unterwegs und hatte daher keine Möglich das geschriebene mal zu testen.

Du hast geschrieben ich soll wakelan in das Verzeichnis kopieren.
Wie ist das gemeint?
Installiert hab ich das programm ja per:
ipkg install wakelan
... muss ich das jetzt auf der diskstation über ssh raussuchen und dann in den Ordner kopieren ?

liebe Grüße
Brian
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
wenn du exec() verwendest musst du auch sicherstellen, dass PHP auf den angegebenen Pfad zugreifen darf. Dazu gibt es in der php.ini den openbasedir-Parameter. Den müsstest du so anpassen, dass PHP auf den Pfad von ipkg wakelan zugreifen darf. In den aktuellen FW-Versionen kann man diesen Parameter im DSM setzen
 

brian

Benutzer
Mitglied seit
13. Feb 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Hi jahlives,

das Prizip von der OpenBaseDir hab ich mittlerweile verstanden, hab jetzt grade mal ins wiki geschaut und google gefragt, aber wo wird denn ipkg installiert ?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
es geht mehr darum, wo wurde dein wakelan installiert. Gib mal auf der Konsole
Code:
which wakelan
ein und es sollte dir mitgeteilt werden wo der Befehl liegt. Darauf muss dann PHP zugreifen dürfen. Ziemlich sicher wird es wohl /opt/bin/wakelan sein
 

brian

Benutzer
Mitglied seit
13. Feb 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Ah super thx!! Das werd ich morgen oder Sonntag testen!!

Danke und bis dann!
 

brian

Benutzer
Mitglied seit
13. Feb 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
hi jahlives,

ich hab das heute getestet, which wakelan ergab genau das was du gesagt hast.
Hab dann
einmal per Syno-Weboberfläche und einmal über die user-settings.ini in '/usr/syno/etc/php' hinzugefügt.

Leider passiert nichts. Keine Fehlermeldung, Alles okey (scheinbar).

Hab ich was falsch gemacht oder müssen eventuell noch andere Dinge aktiviert sein? (--> PHP extensions)



Brian
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Webserver nach der Anpassung neugestartet?
 

brian

Benutzer
Mitglied seit
13. Feb 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Ich hab das nach der Änderung in der Web-Oberfläche nicht gemacht.
Nach deiner Antwort hab ich es aber noch mal extra gemacht und es scheint keine Auswirkung zu haben.

Hab jetzt den Pfad nochmal rausgenommen, dann beide Apachen (user, sys) neugestartet, dann Pfad erneut über Weboberfläche eingetragen und wieder beide Apachen neugestartet.
Der Befehl funktioniert immer noch nicht.

Hab jetzt nochmal google gefragt,
es wurde teilweise bei anderen Problemen vorgeschlagen:
$cmd_output = exec('/bin/bash shellscript.sh ' . $params . ' 2>&1');
Muss mal eventuell auch einen Pfad zur Shell voranstellen ?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
So ungefähr könte es funktionieren:

Rich (BBCode):
$PATH = '/volume1/web/xyz/'; // xyz ist der Pfad, wo dein Skript liegt
exec('/bin/bash '.$PATH.'shellscript.sh ' . $params . ' 2>&1', $cmd_output);
// var_dump($cmd_output);
foreach($cmd_output as $line) print nl2br($line);

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@brian
bist du sicher, dass /bin/bash bei dir eine gültige Shell ist? Wäre mir neu, dass in der Firmware eine bash dabei wäre. Oder haste ipkg bash installiert und den Shellinterpreter nach /bin kopiert?
 

brian

Benutzer
Mitglied seit
13. Feb 2009
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Hi @itari, @jahlives

danke für eure großartige Hilfe. Ihr habt mir jetzt auf den richtigen Weg geholfen!

@jahlives
Ja das ist mir dann auch aufgefallen, weil das script dann rumgemault hat.
Hatte es dann einfach in /bin/sh geändert, der kannte aber das wakelan nicht.

@itari
Danke für den Tipp, mit dem Prinzip hab ich jetzt die richtige Einstellung gefunden.

-----------

Zusammengefasst in meinem Fall:

=> open_basedir (in /usr/syno/etc/php/user-setting.ini) spielt keine Rolle
Habs grade nochmal getestet, man muss hier also nix anfügen. (liegt vill am safe_mode = off ???)

=> der Befehl funktioniert bei mir wie folgt:
PHP:
<?php

$cmd_output = array();
exec('/opt/bin/wakelan -b <<<broadcast-ip>>> -m <<<mac-Adresse-des-Geräts>>>'.' 2>&1', $cmd_output);
foreach($cmd_output as $line) print nl2br($line);

?>

VIELEN VIELEN DANKE nochmal an alle die geholfen haben das Problem zu lösen!!!

THX !!! :D

brian
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat