shell_exec

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

D A U

Benutzer
Registriert
06. März 2011
Beiträge
8
Reaktionspunkte
0
Punkte
0
Hallo
ich hab ein Problem mit RSDM 6.6.0
Installation und einlogen funktionieren, nur downloaden (im free-Modus) kann ich nicht.
Folgende Fehlermeldung wird angezeigt:shell_exec(): Cannot execute using backquotes in Safe Mode in /volume1/web/rsdm_660/functions.inc.php on line 363
Die Downloaddatei ...../sh im RSDM Ordner wird angelegt.
In der functions.inc.php hab ich schon testweise shell_ entfernt.->gab ne andere Fehlermeldung mit exec
-der Safe_Mode ist Off
Hab schon viel im Forum gelesen und auch hier sowie bei kingofcomedy nachgefragt,leider keine Antwort.Vieleicht stelle ich nur die falschen fragen ?
Vieleicht kann mir ja jemand helfen ?

D A U :rolleyes:
 
Es scheint so auf der DS zu sein, dass 'shell_exec()' in PHP-Skripten öfters mal aufstossen bzw. nicht gehen. Äderen die Aufrufe einfach ab in normale 'exec()'-Aufrufe.

Itari
 
@itari
hast du es irgendwann und irgendwie mal geschafft mittels exec resp shell_exec Kommandos wie ping oder top auszuführen? Ich versuche mich schon länger an einem ping aus einem PHP Script, bin aber immer kolossal gescheitert.
 
Hallo

Juch Huh es hat jemand geantwortet.Vielen DANK!

In der functions.inc.php im RSDM Ordner hab ich das schon probiert, ohne Erfolg.
Wo könnte ich noch suchen ?

Muss jetzt arbeiten gehen , werd mich morgen weiter damit rumärgern.

D A U
 
@itari
hast du es irgendwann und irgendwie mal geschafft mittels exec resp shell_exec Kommandos wie ping oder top auszuführen? Ich versuche mich schon länger an einem ping aus einem PHP Script, bin aber immer kolossal gescheitert.

Ist im AdminTool bei Netzwerken verbaut ... exec('ping -c 2 ipkg.nslu2-linux.org',....) - top hab ich auch, aber mit Nachverarbeitung (grep, awk) um bestimmte Zeilen zu analysieren.

Itari
 
Dann muss ich wohl auch mal wieder dran rumprobieren. Geht es bei dir denn auch als nicht-root User? Könnte es sein, dass das nur am System Apache geht?
 
Hallo

Ich bins wieder.

habe alle php-Dateien im RSDM-Ordner nach shell_exec durchsucht,bin nur in "functions.inc.php" fündig geworden.

shell_ habe ich 4x enfernt.

Jetzt habe ich folgende Fehlermeldung : Warning: exec(): PHP exec disable. in /volume1/web/rsdm_660/functions.inc.php on line 363

Soll wohl heißen PHP exec ist ausgeschalten. Wie schalt ich es wieder ein?

Gruss D A U
 
Kann es sein, dass der 'safe_mode' an ist?

Itari
 
Hallo

In der phpinfo.php ist safe_mode = OFF

Was mich wundert ist laut Anleitung soll safe_mode_exec_dir = leer sein

inder phpinfo steht jedoch:/usr/syno/bin

Rufe ich php.ini über Putty auf ist safe_mode_exec_dir = leer

Danke für Deine Antwort

Gruss D A U

Muss schon wieder arbeiten gehen mache morgen weiter.
 
Gewisse Konfigwerte werden durch das Startscript des Apache gesetzt
 
wiedermal @itari:
Hast du eine Idee wieso bei mir beim exec und ping nur die erste Zeile des Kommandos zurückkommt? Steigt da PHP vor dem Ende des Kommandos aus? Ich kriege als Antwort bei exec beim ping immer
Code:
[FONT=monospace]
[/FONT]array(1) {   
[0]=>   string(49) "PING www.google.ch (74.125.77.104): 56 data bytes" 
}
 
wiedermal @itari:
Hast du eine Idee wieso bei mir beim exec und ping nur die erste Zeile des Kommandos zurückkommt? Steigt da PHP vor dem Ende des Kommandos aus? Ich kriege als Antwort bei exec beim ping immer
Code:
[FONT=monospace]
[/FONT]array(1) {   
[0]=>   string(49) "PING www.google.ch (74.125.77.104): 56 data bytes" 
}

Nö ... aber der ping mit dem exec() geht nu, nicht wahr?

Itari
 
Sieht so aus als würde es gehen. Zumindest der nslookup geht definitiv ;-) Nur ohne Rückgabe von ping bringt das ned so viel. Weder die Rückgabe der Funktion exec noch das Array, welches man exec als Parameter übergeben kann, enthalten mehr als diese eine Zeile. Normale Kommandos z.B. ls -al / gehen problemlos.
 
Hast auch schon mal mit einem IPKG-ping probiert?

PS.

Hab gerade nochmal das AdminTool aufgerufen. Da kommt ohne Probleme mit einem exec() herüber:

Rich (BBCode):
Synology> ping -c 2 ipkg.nslu2-linux.org

PING limax.nslu2-linux.org (140.211.169.169): 56 data bytes
84 bytes from 140.211.169.169: icmp_seq=0 ttl=53 time=218.8 ms
84 bytes from 140.211.169.169: icmp_seq=1 ttl=53 time=216.6 ms

--- limax.nslu2-linux.org ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 216.6/217.7/218.8 ms

Das einzige, was sein kann, wäre, dass ich noch stderr auf stdout gemappt hab. Also "2>&1".
 
ah das mit dem stderr auf stdout hat mir den Grund gezeigt:
Code:
[FONT=monospace]
[/FONT]array(2) {   [0]=>   string(49) "PING www.google.ch (74.125.77.104): 56 data bytes"   [1]=>   string(39) "ping: permission denied (are you root?)" }
Somit wärs dann wohl so, dass es mit dem Systemapache geht und mit dem Userapache ned. Wieso muss man für ping root sein? Darf nur root einen icmp Socket öffnen auf einer Linux?
 
Habe gerade mal probiert das Script auf der Konsole als root aufzurufen. Geht wie erwartet. Könnte man da was mit suid machen um das Script unter root laufen zu kriegen (gestartet von nobody)?
 
So geht es auch mit nobody: Das Kommando ping muss mit suid chmod u+s behandelt werden. Dann gehts.
Code:
chmod u+s /bin/ping
 
Hallo jahlives

Wo finde ich das Startscript des Apache ?
Was muss ich da ändern?

Ich denke mein Fehler : Warning: exec(): PHP exec disable. in /volume1/web/rsdm_660/functions.inc.php on line 363

liegt in der functions.inc.php.

Hier mal ein Auszug :

function doIt($cmd, $escape, $return=0){
if($escape == 1){
if($return == 1){
return shell_exec(escapeshellcmd($cmd));
}else{
shell_exec(escapeshellcmd($cmd));
}
}else{
if($return == 1){
return shell_exec($cmd);
}else{
shell_exec($cmd);
}
}
}


"shell_" habe ich entfernt -> bringt nix

Gruss
D A U
 
Hallo,
die Einstellungen für save_mode_exec_dir und open_base_dir findest Du im DSM unter Webdienste->PHP-Einstellungen.

Gruß Götz
 
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