Sie sind nicht angemeldet.

1

17.03.2005, 09:44

Über Web (php script) ein Shell Script als root ausführen?

Hallo,

ich hoffe ihr könnt mir helfen, und zwar mächte ich von einem Webinterface (php) ein Shell Script ausführen was dann als root läuft, um z.B. adsl-start, adsl-stop aufzurufen oder auch die iptables einträge zu erweitern oder zu bearbeiten.

Z.z. habe ich es mit exec so glößt:

PHP-Quelltext

1
2
3
4
5
<?php

  exec("/myscripts/blaatest/test.sh");

?>


Aber dann wird test.sh aber als user apache ausgeführt oder irre ich mich da? Gibt es da eine bessere Lösung oder so?

Grüße,
Daniel

2

17.03.2005, 11:09

Hi,
schau dir mal "sudo" an:
http://www.sudo.ws/

Du kannst das so einstellen, dass nur bestimmte Befehle/Programme als root ausführbar sind.

Flash

3

17.03.2005, 11:31

grundlegend würde ich dir empfehlen, Safe_mode auf on zu schalten, somit können keine Programme mehr gestartet werden über PHP.... Das ist ein enormes sicherheitsrisiko ;)

Wenn du dann doch bestimmte Skripte ausführen möchtest, gibt es die Einstellung:

safe_mode_include_dir

mach dort ein dir rein und kopiere nach dort deine Skripte.....


Grüße

4

18.03.2005, 11:34

Hallo,

danke für eurer Antworten und Tips!

Also ich habe das jetzt mal über sudo getestet, und ich bin der sache schonmal ein stück näher gekommen, aber habe jetzt ein anderes Problem, und zwar:

Quellcode

1
20689 ?        Z      0:00 [test.sh] <defunct>


aufgerufen wird es jetzt über php folgendermaßen:

PHP-Quelltext

1
2
3
4
<?php
  echo "Executing:<br>";
  echo "Result: ".shell_exec("sudo -u root /myscripts/blaatest/test.sh")."<br>";
?>


und im test.sh script hab ich mal testweise stehen:

Quellcode

1
2
3
#!/bin/bash

/etc/init.d/tinyproxy start


was auch funzt, nur das php script hängt und die test.sh ist tot, warum!? :(

5

29.03.2005, 09:56

für sudo wird doch auch noch das Pass gebraucht, oder?!? Führe mal den Befehl auf der Konsole aus, dort wird es benötigt, zumindest beim initialen aufruf!

Ich würde das auf jedenfall anderst lösen, evtl. eine command.exec anlegen und einen Cronjob von root einrichten, der diese Datei alle 5 Minuten ausführt und danach löscht....

So könntest, wenn du was ausführen möchtest einfach in die Datei schreiben.

Grüße

6

15.04.2005, 10:57

@chronos

nein für sudo brauchst du nicht unbedingt ein Passwort je nach dem wie du es in der Config einrichtest.

Zu dem Script, wenn ich es direkt, also von hand aus aufrufe über die cmd geht es, nur aus PHP in keiner form, ob über Apache oder den PHP befehl, wieso?

ich hab auch mal das script etwas angepasst und weiter getestet bis ich dann bemerkte das

Quellcode

1
2
3
#!/bin/bash

/etc/init.d/tinyproxy start >/dev/null


und es geht, warum nur so?