PHP: system()

Post Reply
Message
Author
theo

PHP: system()

#1 Post by theo »

ich will mit system ein paar Befehle ausführen (init x,adsl-start etc). PHP ist als mod_php4 zu meinem Apache auf Suse 7.1 installiert. Wenn ich aber die Seite mit dem Skript aufrufe, bekomme ich zwar die Seite angezeigt, aber auf dem server passiert nix. Der Befehl, den ich nutze lautet:

system("init 6");

Kann es sein, dass ich irgendwas mit den Nutzerrechen ändern muss? Wenn ja, was?

Danke im Voraus, Theo

Chris

Re: PHP: system()

#2 Post by Chris »

Hi!

den "init" darf nur der "root" machen. Also musst du Apache als "root" laufen lassen... Aber: SECURITY!!!


Gruß
Chris

otto

Re: PHP: system()

#3 Post by otto »

kann ich dabei nicht auch mit su arbeiten?

otto

hanna

Re: PHP: system()

#4 Post by hanna »

nein, du kannst nicht mit su arbeiten.
es gibt aber noch einen anderen trick, ist wie alles mit root aber auch mit vorsicht zu geniessen:

erstelle ein extra verzeichnis. dort kopierst du das entsprechende programm (z. b. "cat", "ls" oder halt "init") hinein. den dort enthaltenen programmen verpasst du dass user-ID-bit und das grout-ID-bit:
# chmod 6777 /path/init

zudem (wenn nicht schon vorhanden) die datei dem besitzer und der gruppe "root" zuordnen:

# chown root /path/init
# chgrp root /path/init

siehe zu, dass ausser dem apache-benutzer niemand auf das entsprechende verzeichnis zugreiffen darf.

nun ein kleines php-script:

-- snip --
$command = "/path/program arguments";
exec($command, $array);

echo "<FONT FACE='COURIER NEW'><BR>
";
echo "command: $command<BR><BR>
";
echo "result: <BR><BR>
";

foreach ($array as $key=>$elem) {
echo $elem;
echo "<BR>";
}
echo "</FONT>
";
-- snap --

hoffe, dass hilft.
hanna

theo

Re: PHP: system()

#5 Post by theo »

Hab alles gemacht. Bekomm aber immer nur angezeigt command:Der Befehl und result: Dann kommt nix mehr. Als Verzeichnis hab ich /usr/local/httpd/sbin genommen. An was kann das liegen?

Theo

Re: PHP: system()

#6 Post by Theo »

habs jetzt so geregelt (Mit Hilfe von einem Kumpel):

in die /etc/sudoers wwwrun ALL=NOPASSWD:ALL eingetragen
in der /etc/httpd/php.ini safe_mode auf off gestellt. (War der wichtigste Schritt, vorher gingen nicht mal irgendwelche echo Kommandos)
und dann die Befehle mit sudo -u root Befehl in die Skripte eingetragen.

Die Lösung mit sudo ist übrigens deshalb notwendig, weil init und adsl-stop/adsl-start als root ausgeführt werden müssen, auch wenn die Berechtigungen was anderes zulassen. Jetzt klappts aber. Danke für eure Hilfsbereitschaft

Theo

Post Reply