Ansatz gesucht: Installation per PHP anstatt bash-script

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ansatz gesucht: Installation per PHP anstatt bash-script

    Werte Kollegen,

    ich werde und werde nicht schlau, daher wende ich mich vertrauensvoll an Euch und bitte um eine sachliche Antwort.

    Nehmen wir an, ich nutze unter Linux (debian 10-12 auf PC und raspberry) normalerweise ein bash-Script um ein ZIP-Archive zu laden, zu entpacken und dann auf meinerm Rechner zu verteile. Nehmen wir an, das Script sähe (ohne jeden Schnörkel, ohne jeder Sicherheit etc, nur als Beispiel) so aus:
    Code:
    #!/bin/bash
    mkdir temp
    wget https://pfad/Update_104.zip -O temp/Update_104.zip
    unzip temp/Update_104.zip -d temp
    sudo mkdir /var/home/www/download
    cp temp/dateia /var/home/html
    cp temp/dateib /var/home/download
    rm -r temp
    Diesen Vorgang möchte ich nun aber anstatt über das Bash-Script über PHP abbilden:
    1. Temporäres Verzeichnis erzeugen
    2. Datei von einem Server holen und ins Temp-Verzeichnis schreiben
    3. Das Archiv entpacken
    4. im Webroot ein neues Verzeichnis anlegen
    5. Die Dateien dann ins Webroot kopieren
    Wenn das mal läuft, so wie ich mir das vorstelle, werden natürlich VOR der INstallation noch Parameter abgefragt mit einem HTML-Formular.

    Wie kann ich das Ganze (bitte nur mal exemplarisch) am besten unter PHP abbilden?

    Das Ziel: Benutzer laden das PHP-File, starten dieses, wählen dann noch dieses und jenes aus und starten dann die Installation MIT optischer Rückmeldung, ggfs Fehlermeldungen am Bildschirm. Sprich: Ich will die Nutzer den Install-Vorgang grafisch machen lassen und nicht auf Ebene der Kommandozeile.

    Zum Hintergrund: Es wird ein lighttpd/php installiert und danach sollen dann Inhalte über eine Website installiert oder aktualisiert werden können.

    Danke vorab, Gulli

  • #3
    Danke für die Links.

    Comment


    • #4
      Originally posted by gulliver4711 View Post
      Werte Kollegen,

      ich werde und werde nicht schlau, daher wende ich mich vertrauensvoll an Euch und bitte um eine sachliche Antwort.

      Nehmen wir an, ich nutze unter Linux (debian 10-12 auf PC und raspberry) normalerweise ein bash-Script um ein ZIP-Archive zu laden, zu entpacken und dann auf meinerm Rechner zu verteile. Nehmen wir an, das Script sähe (ohne jeden Schnörkel, ohne jeder Sicherheit etc, nur als Beispiel) so aus:
      Code:
      #!/bin/bash
      mkdir temp
      wget https://pfad/Update_104.zip -O temp/Update_104.zip
      unzip temp/Update_104.zip -d temp
      sudo mkdir /var/home/www/download
      cp temp/dateia /var/home/html
      cp temp/dateib /var/home/download
      rm -r temp
      Diesen Vorgang möchte ich nun aber anstatt über das Bash-Script über PHP abbilden:
      1. Temporäres Verzeichnis erzeugen
      2. Datei von einem Server holen und ins Temp-Verzeichnis schreiben
      3. Das Archiv entpacken
      4. im Webroot ein neues Verzeichnis anlegen
      5. Die Dateien dann ins Webroot kopieren
      Wenn das mal läuft, so wie ich mir das vorstelle, werden natürlich VOR der INstallation noch Parameter abgefragt mit einem HTML-Formular.

      Wie kann ich das Ganze (bitte nur mal exemplarisch) am besten unter PHP abbilden?

      Das Ziel: Benutzer laden das PHP-File, starten dieses, wählen dann noch dieses und jenes aus und starten dann die Installation MIT optischer Rückmeldung, ggfs Fehlermeldungen am Bildschirm. Sprich: Ich will die Nutzer den Install-Vorgang grafisch machen lassen und nicht auf Ebene der Kommandozeile.

      Zum Hintergrund: Es wird ein lighttpd/php installiert und danach sollen dann Inhalte über eine Website installiert oder aktualisiert werden können.

      Danke vorab, Gulli
      Hallo Gulli,
      um den von dir beschriebenen Prozess in PHP umzusetzen, kannst du die folgenden Schritte verwenden. Beachte jedoch, dass dies nur ein einfaches Beispiel ist und du möglicherweise Anpassungen vornehmen musst, um es an deine speziellen Anforderungen anzupassen.


      PHP Code:
      <?php
      // PHP-Script für die Installation

      // 1. Temporäres Verzeichnis erstellen
      $tempDir 'temp';
      if (!
      file_exists($tempDir)) {
          
      mkdir($tempDir);
      }

      // 2. Datei von einem Server herunterladen und ins Temp-Verzeichnis schreiben
      $fileURL 'https://pfad/Update_104.zip';
      $downloadedFile $tempDir '/Update_104.zip';
      file_put_contents($downloadedFilefile_get_contents($fileURL));

      // 3. Archiv entpacken
      $zip = new ZipArchive;
      if (
      $zip->open($downloadedFile) === TRUE) {
          
      $zip->extractTo($tempDir);
          
      $zip->close();
      }

      // 4. Im Webroot ein neues Verzeichnis erstellen
      $webrootDir '/var/home/www/download'// Passe den Pfad an
      if (!file_exists($webrootDir)) {
          
      mkdir($webrootDir);
      }

      // 5. Dateien ins Webroot kopieren
      $sourceDir $tempDir;
      $destinationDir '/var/home/html'// Passe den Pfad an
      $files scandir($sourceDir);
      foreach (
      $files as $file) {
          if (
      $file != '.' && $file != '..') {
              
      copy($sourceDir '/' $file$destinationDir '/' $file);
          }
      }

      // 6. Temporäres Verzeichnis löschen
      if (file_exists($tempDir)) {
          
      array_map('unlink'glob("$tempDir/*.*"));
          
      rmdir($tempDir);
      }

      // Hier könntest du weitere Logik für die Parameterabfrage und Fehlerbehandlung einfügen

      // Beispiel für optische Rückmeldung
      echo 'Installation abgeschlossen!';

      ?>

      Als Power BI Developer entwicklere ich Freelance Data Analyst und Power Automate Developer auch VB Analyst und VB Webmedia

      Dieses einfache Beispiel erledigt die Schritte, die du in deinem Bash-Skript beschrieben hast. Du kannst dies als Ausgangspunkt verwenden und je nach Bedarf weitere Funktionen hinzufügen, z.B. Parameterabfrage über ein HTML-Formular und entsprechende Fehlerbehandlung. Beachte, dass du die Pfade und Dateinamen entsprechend deiner Umgebung anpassen musst.
      Last edited by Wordpressy; 13-05-2024, 09:01.

      Comment


      • #5
        To execute the file my_skript.php with PHP 8.1, enter the following command: /usr/bin/php8.1-cli my_skript.php.​
        Last edited by admin; 17-01-2024, 10:04.

        Comment


        • #6
          Du lädst zwar immerhin das Update.zip anscheinend per HTTPS runter, was ja schon mal gut ist.

          Dennoch würde dringend dazu raten, dass das Update-Skript das runtergeladene Update.zip nicht einfach "blind" akzeptiert, sondern zuerst mal eine Signatur-Prüfung durchführt!

          Dazu berechnest Du zuerst den Hash (z.B. SHA-256) über das heruntergeladene ZIP File:
          https://www.php.net/manual/en/function.hash-file.php

          ...anschließend kannst Du dann die Signatur prüfen, wobei als "data" der zuvor berechnete Hash benutzt wird und "signature" ebenfalls vom Server runter geladen wird:
          https://www.php.net/manual/en/functi...ssl-verify.php

          Das Zertifikat bzw. der Public-Key für die Signatur-Prüfung kann in dem Update-Skript "eingebaut" sein. Der zugehörige Private-Key muss aber unbedingt geheim gehalten werden und wird nur benutzt, um ggf. das neue Update.zip zu signieren, bevor es auf den Update-Server gelegt wird. Am besten der Private-Key wird auf einem "offline" Rechner aufbewahrt.


          Ohne ordentliche Signatur-Pürfung muss Dir bloß einmal jemand den Download-Server aufmachen, seine eigene "bösartige" Update.zip dort platzieren und schon sind potentiell viele tausende User, die das vermeintliche Update runterladen, plötzlich infiziert... (aus diesem Grund sollte man auch nicht den Signatur-Schlüssel auf dem Download-Server rumliegen lassen!)
          Last edited by cober93327; 14-03-2024, 15:42.
          Projekte: php-instanceid

          Comment


          • #7
            Originally posted by cober93327 View Post
            Du lädst zwar immerhin das Update.zip anscheinend per HTTPS runter, was ja schon mal gut ist.

            Dennoch würde dringend dazu raten, dass das Update-Skript das runtergeladene Update.zip nicht einfach "blind" akzeptiert, sondern zuerst mal eine Signatur-Prüfung durchführt! basketball stars

            Dazu berechnest Du zuerst den Hash (z.B. SHA-256) über das heruntergeladene ZIP File:
            https://www.php.net/manual/en/function.hash-file.php

            ...anschließend kannst Du dann die Signatur prüfen, wobei als "data" der zuvor berechnete Hash benutzt wird und "signature" ebenfalls vom Server runter geladen wird:
            https://www.php.net/manual/en/functi...ssl-verify.php

            Das Zertifikat bzw. der Public-Key für die Signatur-Prüfung kann in dem Update-Skript "eingebaut" sein. Der zugehörige Private-Key muss aber unbedingt geheim gehalten werden und wird nur benutzt, um ggf. das neue Update.zip zu signieren, bevor es auf den Update-Server gelegt wird. Am besten der Private-Key wird auf einem "offline" Rechner aufbewahrt.


            Ohne ordentliche Signatur-Pürfung muss Dir bloß einmal jemand den Download-Server aufmachen, seine eigene "bösartige" Update.zip dort platzieren und schon sind potentiell viele tausende User, die das vermeintliche Update runterladen, plötzlich infiziert... (aus diesem Grund sollte man auch nicht den Signatur-Schlüssel auf dem Download-Server rumliegen lassen!)
            Ich habe die ZIP-Datei heruntergeladen, kann sie aber nicht öffnen. Es scheint ein Fehler aufgetreten zu sein.

            Comment

            Working...
            X