Ansatz gesucht: Installation per PHP anstatt bash-script

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

  • 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.

    Kommentar


    • #4
      Zitat von gulliver4711 Beitrag anzeigen
      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.
      Zuletzt geändert von Wordpressy; 13.05.2024, 09:01.

      Kommentar


      • #5
        To execute the file my_skript.php with PHP 8.1, enter the following command: /usr/bin/php8.1-cli my_skript.php.​
        Zuletzt geändert von admin; 17.01.2024, 10:04.

        Kommentar


        • #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!)
          Zuletzt geändert von cober93327; 14.03.2024, 15:42.
          Projekte: php-instanceid

          Kommentar


          • #7
            Zitat von cober93327 Beitrag anzeigen
            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.

            Kommentar

            Lädt...
            X