[Problem] shell_exec Problem mit PHP/Apache

heiko@matrix

Neuer User
Mitglied seit
4 Dez 2008
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo,

Ich hab eine 7490 mit Apache/PHP von Radislav auf Port 85 laufen.

Mir ist unklar warum nicht alle Aufrufe in PHP via "shell_exec" funktionieren. Auch die Fehlermeldung "Segmentation fault" im Apache hilft mir nicht wirklich weiter. Hat jemand eine zündende Idee?

Code:
<?php
$output = shell_exec("showroutes"); //funktioniert
#$output = shell_exec("showdsldstat"); //funktioniert nicht...Apache_error_log: "Segmentation fault"

echo "<pre>".$output."</pre>";
?>


...nach einer Woche googelei bin ich am verzweifeln.

Heiko
 
Moin

Ich nutze busybox httpd mit php-cgi.
Bei mir kommt...
Code:
Warning: shell_exec() has been disabled for security reasons in /var/media/ftp/SanDisk-Cruzer-01/index.php on line 2
...so sollte es sein.

Hier meine php.ini...
Code:
cgi.force_redirect = 0
cgi.redirect_status_env = no
disable_functions = curl_exec, curl_multi_exec, define_syslog_variables, disk_free_space, diskfreespace, dl, error_log, escapeshellarg, escapeshellcmd, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, ini_alter, ini_get_all, ini_restore, link, mysql_pconnect, openlog, passthru, pfsockopen, php_uname, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, set_time_limit, shell_exec, symlink, syslog, system, tmpfile, virtual, phpinfo
 
..du arbeitest ja im PHP-Safe-mode. Daher sind die Funktionen inaktiv.
Ich benötige aber die Funktionen (safe-mode ist bei mir aus) um Daten via Shell aus der Box zu holen.
Ich kann halt nur nicht alle Befehle ausführen. (Leider genau die, die ich benötige)
 
Für "Systemnahe" Kommandoausführungen benutze ich viel lieber CGI.
Probier doch mal ob dein Apache dies nicht auch kann.
Ist ohne PHP auch viel schneller.
Aber ich rate dir das cgi-bin Verzeichnis zu schützen.

Beispielskript für Shellskript-CGI...
Code:
#!/bin/sh
echo 'Content-Type: text/plain
'
echo $(netstat -tep)
#EOF
...natürlich geht auch HTML mit Inkludierungen...
Code:
#!/bin/sh
echo "Content-type: text/html"
echo ""
cat hd_st
echo "<title>memory</title>"
cat hd_en
echo "<body>"
cat bd_mn
printf "<table>
<caption>memory</caption>
<thead><tr><th></th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr></thead>
<tfoot><tr><td>%s</td><td>%skb</td><td>%skb</td><td>%skb</td><td>%skb</td><td>%skb</td></tr></tfoot>
<tbody><tr><td>%s</td><td>%skb</td><td>%skb</td><td>%skb</td><td></td><td></td></tr></tbody>
<tbody><tr><td>%s</td><td>%skb</td><td>%skb</td><td>%skb</td><td></td><td></td></tr></tbody>
</table>" $(free)
echo "</body>"
echo "</html>"
#EOF
...die Inkludierungen erkennst du am: cat

Obiges CGI erzeugt...
HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="author" content="koyaanisqatsi" />
<meta name="generator" content="Notepad++" />
<base target="theApp" />
<link rel="shortcut icon" type="image/x-ico" href="/img/favicon.ico" />
<link rel="icon" href="/img/icon-32.gif" type="image/gif">
<link rel="stylesheet" media="screen" type="text/css" href="/css/style.css" /><title>memory</title>
</head>
<body>
<div class="menu">
<button onfocus="this.blur();" onclick="location.replace( '/' )">Start</button>
<button onfocus="this.blur();" onclick="location.reload( true )">Neuladen</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/free' )">Speicher (free)</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/ps' )">Prozesse (ps)</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/top' )">Prozesse (top)</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/ifconfig' )">Schnittstelle</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/uptime' )">Onlinezeit</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/uname' )">System</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/netstat' )">Verbindungen</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/env' )">Umgebungsvariablen</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/syslogd' )">Systemmeldungen</button>
<button onfocus="this.blur();" onclick="location.replace( '/cgi-bin/events' )">Ereignisse</button>
</div>
<table>
<caption>memory</caption>
<thead><tr><th></th><th>total</th><th>used</th><th>free</th><th>shared</th><th>buffers</th></tr></thead>
<tfoot><tr><td>Mem:</td><td>114644kb</td><td>101228kb</td><td>13416kb</td><td>0kb</td><td>14036kb</td></tr></tfoot>
<tbody><tr><td>-/+</td><td>buffers:kb</td><td>87192kb</td><td>27452kb</td><td></td><td></td></tr></tbody>
<tbody><tr><td>Swap:</td><td>8184kb</td><td>36kb</td><td>8148kb</td><td></td><td></td></tr></tbody>
</table></body>
</html>
 
Zuletzt bearbeitet:
auf Anhieb läuft CGI nicht...da muss ich vermutlich erst meine apache.conf anpassen.
Error: Premature end of script headers: /var/media/ftp/Server_1/apache/htdocs/test_1.cgi

Ich werde mal versuchen CGI zum laufen zu bringen...
 
Vergiss aber nicht:
Das CGI braucht ein gültiges SHEBANG = #!/bin/sh
...und einen korrekten HTML Header...
Code:
#!/bin/sh
echo "Content-type: text/html"
echo ""

EDIT: Erstelle den Ordner cgi-bin und kopiere die Skripte dort hinein.
Schau in der Apache Konfig nach, wo dieser Ordner angelegt werden muss.
Bei mir ist es der Serverroot, also: /cgi-bin
 
Zuletzt bearbeitet:

Neueste Beiträge

Statistik des Forums

Themen
244,860
Beiträge
2,219,679
Mitglieder
371,578
Neuestes Mitglied
ingolf01
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.