Ankündigung

Einklappen
Keine Ankündigung bisher.

[GELÖST] Apache PHP und sudo

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    sorry, üblicherweise wird hier auch der Tip rausgehohlt, üblicherweise mit message queue.
    ein ebuild bringt mir so nichts, da ich Deine sonstigen Einstellungen nicht kenne, zudem ist es alles andere als nett das so zu posten, es gibt ja Zeilenumbrüche.
    Nur wie erstelle ich so einen Daemon? Kann das auch mit PHP gemacht werden? Wenn ja, wo muss ich die named Pipe erstellen, beim Daemon oder beim Web-Server?
    Gibt es hier im Forum gute Beispiele, wie mit mit posix_mkfifo solche Pipes erstellt und auch wieder löscht?
    Mir ist nicht klar, was Du an Recherche und Wissen mitbringst; da Du gentoo nutzt ging ich wohl von zuviel aus.
    zur fifo
    https://linux.die.net/man/1/mkfifo
    zum löschen jeder art von Datei
    http://man7.org/linux/man-pages/man1/rm.1.html
    beispiel :
    Code:
    :~$ mkfifo fifo
    :~$ ls -al  fifo
    prw-r--r-- 1 xxx xxx Nov 12 06:12 fifo
    :~$ rm fifo




    Kommentar


    • #17
      Ein einfacher Deamon in PHP könnte so in der Art aussehen:
      PHP-Code:
      <?php
      // Apache user/group
      define("WWW_USER""apache");
      define("WWW_GROUP""apache");

      define("FIFO_FILE""/tmp/my-named-fifo");

      if (
      file_exists(FIFO_FILE)) {
          
      unlink(FIFO_FILE);
      }

      function 
      handleRequest($command) {
          echo 
      "Received: "$commandPHP_EOL;
          
      // system, exec whatever hier
      }

      // nur apache-user (und selbstverständlich root) kann auf den FIFO zugreifen
      if(posix_mkfifo(FIFO_FILE0600)) {
          
      chgrp(FIFO_FILEWWW_GROUP);
          
      chown(FIFO_FILEWWW_USER);

          
      $fp fopen(FIFO_FILE"r+");
          
      stream_set_blocking($fptrue);

          echo 
      "Deamon running.\n";
          while (
      true) {
              
      $line chop(fgets($fp));
              
      handleRequest($line);
          }
      }
      Das ist keines Falls Production-Code und muss noch entsprechend angepasst werden. z.B. Eingabe validieren ect

      Um den anzusprechen braucht man dann nur in den FIFO zu schreiben:

      PHP-Code:
      <?php
      define
      ("FIFO_FILE""/tmp/my-named-fifo");

      if (
      file_exists(FIFO_FILE)) {
          
      $fp fopen(FIFO_FILE"w");
          
      fputs($fp"message goes here\n");
      } else {
          echo 
      "FIFO not found!";
      }
      Oder auch einfach ein simples echo:
      Code:
      echo "bla" > /tmp/my-named-fifo
      Grüße.

      Kommentar


      • #18
        apache läuft afaik unter gentoo in einer chroot umgebung per defaut und ein zugriff auf /tmp ist somit schwer möglich.
        wieso kein sudo geht hätte ich auch gerne in erfahrung gebracht, ohne auf meiner schwachen mühle in gentoo renne zu lassen.
        ein demand an excecute monitor mit root rechten, ob man da nicht eleganter wege zur interprocess communication wählen kann;
        immerhin wurde früher bei gentoo bei jeder sich bietenden gelegenheit, auf uid 0 verzichtet.
        das entscheindende haben wir glücklicherweise beide weggelassen, weswegen der der Code glücklicherweise so nicht produktiv einsetzbar ist php1704 ;
        ob der TE sonst Deinem Rat folgen würde, wage ich zu bezweifeln.

        Kommentar

        Lädt...
        X