contao / contao-manager

Contao Manager
GNU Lesser General Public License v3.0
86 stars 33 forks source link

Contao-Manager <= 1.8.9 --> Unexpected output --> Installation schlägt fehl / nicht möglich #825

Open dguelden opened 1 month ago

dguelden commented 1 month ago

Affected version(s):

<= 1.8.9

Description:

Contao Installation schlägt fehl / nicht möglich:

Trace-Output:

a) Warning: Undefined array key "argv" b) Warning: Trying to access array offset on null c) Deprecated: realpath(): Passing null to parameter 1 ($path) of type string is deprecated

Details, siehe Dateianhänge:

Bug-Report_Ausgabe_Erstinstallation.pdf Bug-Report_PHP-8.3.6_phpinfo.pdf

aschempp commented 1 month ago

Vielen Dank für die ausführliche Meldung! /usr/bin/php-cgi8.3 scheint eine CGI-Binary zu sein, das funktioniert nicht immer zuverlässig. Hast du auch eine CLI-Binary auf dem Server?

dguelden commented 1 month ago

Zugang zur CLI besteht, da eigene Hardware, System, etc.

Anbei als Anlage beigefügt ergänzende Infos der CLI Ausgabe bzw. dem Trace-Log.

Insoweit weitere Infos benötigt werden, gerne anfragen.

Ergänzung BugReport_CLI-Ausgaben.pdf

dguelden commented 1 month ago

Habe ein paar weiter Informationen aus den Error-Logs, siehe Anlage Im Rahmen des "Live-Monitoring" war zu sehen, dass bei Aufruf/Prüfung im Rahmen der Contao-Installation der Binaries:

a) /usr/sbin/php b) /usr/bin/php b) /usr/lib/cgi-bin/php

mittels Test aufgerufen werden.

Im Log gibt es den Hinweis auf die php.ini bzw. das setzen der Variable "cgi.force_redirect" auf eigene Gefahr. Getestet über die Variationen - apache, cgi, cli, fpm, keine Installation möglich. Ergebnis "Unexpexted Output".

Wäre ggf. die explizite Verwendung von "cgi.discard_path" in der php.ini eine mögliche Lösung als alternative zur Variable "REDIRECT_STATUS"?

Quelle --> https://www.php.net/security.cgi-bin

Error_Log_FPM-PHP.txt cgi force_redirect_VARIABLE cgi discard_path_VARIABLE

aschempp commented 1 month ago

Ich meinte nicht "Zugang zur CLI" im Sinne von SSH. Sondern die PHP CLI Binary.

Allerdings schreibst du ja bereits von /usr/bin/php, warum wird die nicht vom Contao Manager verwendet? Ist das ev. nicht dieselbe PHP-Version wie der Webserver?

dguelden commented 1 month ago

Die PHP-Binaries lassen sich ganz regulär via SSH-Sitzung ausführen.

Die Installation des Webservers, wie auch von PHP erfolgt über die regulären Repositorien der Distribution, ebenso die Composer Installation. Sollte somit dieselbige PHP-Version sein, mit der der Webserver per Default konfiguriert ist und startet, insofern man nicht einen eigenen FCGI-Starter erstellt, etc.

Gerne hier noch einmal ein paar Info's bzw. zusammenfassend die Log-Auszüge vom letzten Testlauf:

Error_Log_Apache-FPM_25102024.txt Error_Log_Contao_FPM-PHP_25102024.txt Error_Log_Contao-Config-JSON_25102024.txt

An sich kurz zusammengefasst:

a) Aus der Apache-Error-Log:

mod_charset_lite.c(216): [client 127.0.0.1:56578] AH01448: incomplete configuration: src unspecified, dst unspecified, referer: https:///contao-manager.phar.php/

b) Aus der Contao-Error-Log:

app.ERROR: Unexpected output from "/usr/bin/php8.3 -q /var/www///public/contao-manager.phar.php test":

{"exception":"[object] (_ContaoManager\Symfony\Component\Process\Exception\RuntimeException(code: 0): Unexpected output from \"/usr/bin/php8.3 -q /var/www///public/contao-manager.phar.php test\":

at phar:///var/www///public/contao-manager.phar.php/api/Process/PhpExecutableFinder.php:78)"} []


app.ERROR: Unexpected output from "/usr/bin/php -q /var/www///public/contao-manager.phar.php test":

{"exception":"[object] (_ContaoManager\Symfony\Component\Process\Exception\RuntimeException(code: 0): Unexpected output from \"/usr/bin/php -q /var/www///public/contao-manager.phar.php test\":

at phar:///var/www///public/contao-manager.phar.php/api/Process/PhpExecutableFinder.php:78)"} []


app.ERROR: The command "'/usr/lib/cgi-bin/php8.3' '-q' '/var/www///public/contao-manager.phar.php' 'test'" failed.

Exit Code: 255(Unknown error) Working directory: /var/www//

Output:

Security Alert! The PHP CGI cannot be accessed directly. This PHP CGI binary was compiled with force-cgi-redirect enabled.
This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive. For more information as to why this behaviour exists, see the - http://php.net/security.cgi-bin - manual page for CGI security. For more information about changing this behaviour or re-enabling this webserver, consult the installation file that came with this distribution, or visit - http://php.net/install.windows - the manual page. Error Output:

{"exception":"[object] (_ContaoManager\Symfony\Component\Process\Exception\ProcessFailedException(code: 0): The command \"'/usr/lib/cgi-bin/php8.3' '-q' '/var/www///public/contao-manager.phar.php' 'test'\" failed.

at phar:///var/www///public/contao-manager.phar.php/vendor/symfony/process/Process.php:251)"} []


app.ERROR: The command "'/usr/sbin/php-fpm8.3' '-q' '/var/www///public/contao-manager.phar.php' 'test'" failed.

Exit Code: 64(Unknown error)
Working directory: /var/www//
Output:

Usage: ... Error Output:

{"exception":"[object] (_ContaoManager\Symfony\Component\Process\Exception\ProcessFailedException(code: 0): The command \"'/usr/sbin/php-fpm8.3' '-q' '/var/www///public/contao-manager.phar.php' 'test'\" failed.

at phar:///var/www///public/contao-manager.phar.php/vendor/symfony/process/Process.php:251)"} []

Ruft man dementsprechend via CLI den Test auf, erhält man als Meldung:

contao-manager/config.json does not match the expected JSON schema

bei Verwendung von Composer 2.7.7.

Bug via PHP-CLI

dguelden commented 1 week ago

Aktualisierung am Rande. Die Installation via Composer 2.7.7 an sich ist funktional via CLI. Es lässt sich entsprechend dem Contao-Handbuch ein Projekt erstellen, etc. Nach weiteren Konfigurationsanpassungen, befüllen der Datenbank, erstellen des ersten Nutzers via CLI ist die Anmeldung am Backend, etc. wie gewohnt möglich.

Lediglich die Installation mittels dem Contao-Manager läuft auf Fehler auf bei Prüfung der PHP-Version, so dass die Installation nicht fortgeführt werden kann:

/pfad/zum/binary/php -q /var/www/.../.../public/contao-manager.phar.php test

Dies unabhängig ob als Binary - php, php-cgi, php8.3, php8.3-cgi, php-fpm8.3 - Verwendung findet.

Die wesentlichen Fehlermeldungen, insofern via CLI der "test" via Webserver vom Contao Manager in Version 1.8.9 aufgerufen wird:

a) php-fpm8.3

=> JSON Schema, Array value found, but an object is required / Exit Code: 64 (Unknown error)

b) php, php-cgi:

=> Unexpected output, object => contao-manager.phar.php/api/Process/PhpExecutableFinder.php:78 / Exit Code: 255 (Unknown error) => Security Alert! The PHP CGI cannot be accessed directly. => This PHP CGI binary was compiled with force-cgi-redirect enabled. => This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.

Dies ist reproduzierbar unter Ubuntu Server 24.04 LTS.

webwerkwien commented 1 week ago

Hallo, ich klinke mich hier ein, da ich heute ebenfalls Probleme seit dem Update des Managers auf 1.8.9 durchführen musste. Ist bei TimmeHosting die PHP-Version auf 7.4.33 (PHP-FPM) eingestellt, wird der Pfad zur PHP-Binary bei der Systemprüfung nicht mehr erkannt. Das war vorher nie ein Problem. Wenn das ein eigenes Ticket erfordert, sagt bitte Bescheid.

webwerkwien commented 6 days ago

Hallo, ich klinke mich hier ein, da ich heute ebenfalls Probleme seit dem Update des Managers auf 1.8.9 durchführen musste. Ist bei TimmeHosting die PHP-Version auf 7.4.33 (PHP-FPM) eingestellt, wird der Pfad zur PHP-Binary bei der Systemprüfung nicht mehr erkannt. Das war vorher nie ein Problem. Wenn das ein eigenes Ticket erfordert, sagt bitte Bescheid.

TimmeHosting hat sich das Problem nach weiteren Beschwerden angesehen. Da es für Euch vielleicht interessant ist poste ich hier noch deren Antwort: "Die Ursache konnten wir auch bestimmen. Bei den Servern der "neueren" Generation, welche je nach Umstellung älterer Server ja auch schon einige Jahre in Benutzung sind, haben wir die Nutzung von "open_basedir" abgeschafft, da dieses Performance kostet und dennoch mit ein wenig Aufwand noch umgeh bar ist und somit keinen wirklichen Sicherheitsnutzen bringt. Als Alternative setzen wir auf den aktuellen Servern daher auf AppArmor, welches Zugriffe direkt auf Kernel-Ebene unterbindet.

Bei den älteren PHP Versionen, wie bspw. 7.4 gibt es nun noch ein paar Libraries, die wir zusätzlich kompilieren, um hier auf neuere Versionen zurückzugreifen als diese normalerweise vorhanden sind. Dies betrifft unter anderem die libssl, auf die der Contao Manager bzw. die PHP Cli Binary hier bei der Bestimmung/Prüfung der Pfade jedoch zugreifen muss.

Der Pfad zu diesen zusätzlichen Libraries ist aktuell jedoch nicht für die Webseiten Prozesse freigegeben, da diese aus dem PHP-FPM Kontext normalerweise nicht benötigt werden"

sie haben vor, den Pfad ins Standardsetup aufzunehmen. LG