Shell Script mit PHP aufrufen

greetz

Neuling
Thread Starter
Mitglied seit
22.05.2006
Beiträge
453
Mahlzeit allerseits,

System: Ubuntu 10.10
ich habe vor ein bisher realtiv simples Shell Script mittel PHP auszuführen.
Es geht um folgendes:
Script:
Code:
#!/bin/bash
echo "Netzlast ist 98%"
#IP=10.32.33.117
#packet=1000
#port=80
sudo hping3 --flood -p 80 -d 1000 10.32.33.117
PHP:
Code:
<html>
<body>
<?php
$output = shell_exec('/opt/lampp/htdocs/test/test.sh');
echo "<pre>$output</pre>";
#system('/opt/lampp/htdocs/test/test.sh');
?>
</body>
</html>

Bisher habe ich meinem User und dem User www-data die Passwortfreie Ausführung von sudo Befehlen mittels sudoers erlaubt.
Das echo wird im Browser ausgegeben, allerdings wird hping3 nicht ausgeführt.

Kann mir jemand weiterhelfen?

Falls Infos fehlen sollten, einfach melden.

Danke.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
www-data hat ne begrenzte shell und kann damit kein sudo.
Ne andere möglichkeit wäre es, wenn du dich per SSH einloggst und den Befehl mit einen User ausführst. Lektüre dazu: PHP: SSH2 - Manual
Das Modul ist standardmäßig nicht aktiv/installiert.

Kann z.b. so klappen:
PHP:
<?
$user = "user";
$password = "";
$command = "uptime";
if($ssh = ssh2_connect('127.0.0.1', 22)) {
    if(ssh2_auth_password($ssh, $user, $password)) {
        $stream = ssh2_exec($ssh, $command);
        stream_set_blocking($stream, true);
        $data = '';
        while($buffer = fread($stream, 4096)) {
            $data .= $buffer;
        }
        fclose($stream);
       echo "<pre>";
        echo $data; 
        echo "</pre>";
    }
}
?>

Lässt sich natürlich auch mit Keybasedlogins realisieren.
 
Zuletzt bearbeitet:
wozu soll das script denn gebrauht werden?
sieht ja verdächtig danach aus wölltest du damit ne dos attacke starten ;) "--flood"
 
Hey,
das Script wird nicht für ne dos attacke missbraucht, ich habe lediglich vor in einem Testnetz die Netzlast ans Maximum zu bringen.
Die Implementierung in den Browser ist später dann für eine einfachere Handhabung gedacht.

Gibt es keine Möglichkeit dem User www-data eine "Erweiterte Shell" zur Verfügung zu stellen?

Gruß
 
wenn du das netz auslasten willst würde ich netperf empfehlen ^^
du kannst ne sh aufrufen die nen suid bit gesetzt hat und user root gehört
damit sparst du dir das ganze gefrickel mit der erweiterten shell
 
Mach das doch über ein CGI Script, dann sollte das gehen.
 
Bei einem Linux Server kannst du folgendes probieren:

Code:
#include <stdio.h>
#include <stdlib.h>

int main() {

	setuid( 0 );

	char *args[4] = { "ping", "127.0.0.1", NULL };    
	return execv ("/bin/ping", args);
}

Die Parameter allerdings ändern, hier ist das nur mit einem simplen Ping, müsste in etwa so aussehen

char *args[4] = { "hping3", "--flood", "-p", "80", "-d", "1000", "10.32.33.117", NULL };
return execv ("/bin/hping3", args);
(oder /usr/bin/hping3)
Habe ich so allerdings nicht getestet.

Per gcc compilen, dann
chmod u+s PROG
chown root:www-data PROG
chmod 750 PROG

So sind die Parameter hardcoded und ich denke, dass müsste wesentlich sicherer sein, als dem Skript eine root-shell zu bieten.

Edit: Sorry fürs Fleddern oO Erst im nachhinein gesehen
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh