cee jay: php, apache und userrechte

kleineres problem (reines intranet):

kleine linux-möhre mit apache 1.3 und php 4.was weiß ich
läuft soweit gut, und logger.

habe eine php-seite geschrieben, die meine DNS-Datenbanken (/var/named/db.****) befüllen oder verändern kann.

"leider" will named erst nach einem "ndc reload ZONE" oder einem "ndc restart" die neu eingetragenen namen auflösen.
deshalb woll ich per exec(anweisung); ein shell-command ausführen lassen, das oben jenes asuführt. auch kein problem.

nur das resultat läßt zu wünschen übrig :
da der (web)user, der auf die seite zugreift, und scripte etc. nur mit USER NOBODY ausgeführt / aufgerufen werden, habe ich nach einem  exec("ndc restart",$x,$y); dann 2 named zu laufen, da nobody den von root gestarteten named nicht "killen" darf, und der ndc trotz allem einen neuen startet. also zugriffsrechteproblem.
da ich bei: su -c "ndc restart" root - noch das passwort extra eingeben muss, fällt das leider weg (oder kennt jemand eine methode um su das passwort zu übergeben ? nicht sinnvoll - aber interessant!).

nächste idee war, das per : exec("ndc reload zone",$x,$y); zu versuchen, aber wieder nix - hatte jedenfalls nichts bemerkt

deswegen, erhoffe ich mir jetzt erleuchtung durch euch ;)

merkwürdig war auch, das ja $x mit der rückgabe als array befüllt werden sollte - komischerweise hatte $x bei mir keinen inhalt, und $y war generell 1 ...

---> also hoffe ich auf antwort ...
---> und schaue derweil win 2000 prof. beim fehlermelden zu

  1. Hallo,

    da ich bei: su -c "ndc restart" root - noch das passwort extra eingeben muss, fällt das leider weg (oder kennt jemand eine methode um su das passwort zu übergeben ? nicht sinnvoll - aber interessant!).

    $rootpasswd="yoursecretpwd";
    $command = "/bin/su -c "rcnamed restart""; // so mach ich es unter SUSE
    $fp = popen($command,"w")or die("Mist fehler");
    fputs($fp,$rootpasswd)or die("Na geht net");
    pclose($fp);

    1. Hallo,

      da ich bei: su -c "ndc restart" root - noch das passwort extra eingeben muss, fällt das leider weg (oder kennt jemand eine methode um su das passwort zu übergeben ? nicht sinnvoll - aber interessant!).

      $rootpasswd="yoursecretpwd";
      $command = "/bin/su -c "rcnamed restart""; // so mach ich es unter SUSE
      $fp = popen($command,"w")or die("Mist fehler");
      fputs($fp,$rootpasswd)or die("Na geht net");
      pclose($fp);

      gibts noch eine andere lösung ?
      ich bin zwar VÖLLIG zufrieden, denn sie funktioniert.
      nur das die betreffenden Seiten im Moment per Samba und per FTP erreichbar sind - und mein root password in der Seite - na ich weiß ja nicht *ggg* - is nicht wild, aber wenns weitere Lösungen gibt, immer her damit

      1. gibts noch eine andere lösung ?
        ich bin zwar VÖLLIG zufrieden, denn sie funktioniert.
        nur das die betreffenden Seiten im Moment per Samba und per FTP erreichbar sind - und mein root password in der Seite - na ich weiß ja nicht *ggg* - is nicht wild, aber wenns weitere Lösungen gibt, immer her damit

        Ja, ich kann mir verschiedene vorstellen. Zum einen ueber einen cronjob. Im einfachsten Fall kann ueber die crontab kann "ndc reload" (o.ae.) alle 30 min ausgefuehrt werden. Oder man prueft zuvor, ob eine Aenderung an den Zonen durchgefuehrt wurde.

        Andererseits kann man sich realitiv einfach ein eigenes sudo bauen, dass den Befehl mit der richtigen Berechtigung ausfruft, aber nicht die Eingabe eines Passworts erfordert. Hier reicht ein kleines C-Programm, dem man per setuid root-Rechte gibt. Hier besteht aber die Moeglichkeit, dass jeder, der ein Skript mit der Berechtigung des Webservers aufrufen kann, auch faehig ist, den Nameserver neu zu starten. Evt. kann man hier einen eigenen Webserver nehmen, der auch unter einer eigenen Berechtigung laeuft.

        Peter

  2. Hi, schau dir mal

    http://www.freebsd.org/cgi/man.cgi?query=sudo&apropos=0&sektion=0&manpath=FreeBSD+4.0-RELEASE%2FPorts&format=html

    an, besorge dir anschliessend sudo ;-) wenn du das root pwd irgwendwo in eine Datei schreibst bist du wahnsinnig ;-) bei sudo kannst du einzelne "root befehle" auch useren zugaengig machen, die dann vor dem ausfuehren dieser nur nochmal ihr user pwd eingeben muessen. wurde das passwort dann einmal eingegeben kannst du ohne das pwd erneut eingeben zu meussen (fuer eine bestimmte dauer) weitere befehle ausfuehren die der erlaubt worden sind per Voreinmstellung betraegt diese Zeitspanne 5 Min.

    MfG Olli