Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
dguelden opened this issue Oct 14, 2024 · 8 comments

Comments

@dguelden
Copy link

Affected version(s):

<= 1.8.9

Description:

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

  • Komplett frisch installiertes System Ubuntu 24.04 LTS mit LXD
  • Verwendung / Installation innerhalb von LXD Instanzen
  • Thema ist unabhängig vom verwendeten Webserver (Apache, Nginx, etc.)
  • PHP in Version 8.3.6

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
Copy link
Member

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
Copy link
Author

dguelden commented Oct 17, 2024

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
Copy link
Author

dguelden commented Oct 23, 2024

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
Copy link
Member

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
Copy link
Author

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

  • config: Array value found, but an object is required.

bei Verwendung von Composer 2.7.7.

Bug via PHP-CLI

@dguelden
Copy link
Author

dguelden commented Nov 20, 2024

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
Copy link

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
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants