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
PHP: system()
Re: PHP: system()
Hi!
den "init" darf nur der "root" machen. Also musst du Apache als "root" laufen lassen... Aber: SECURITY!!!
Gruß
Chris
den "init" darf nur der "root" machen. Also musst du Apache als "root" laufen lassen... Aber: SECURITY!!!
Gruß
Chris
Re: PHP: system()
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
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
Re: PHP: system()
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?
Re: PHP: system()
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
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