Ist Ubuntus PHP-Paket veraltet und unsicher?

Oder genauer gesagt, ist das offiziell von Ubuntu ausgelieferte PHP-Paket unsicher, weil es veraltet ist? Schließlich liefert Ubuntu 20.04 mit PHP 7.4.3 eine Version vom 20. Februar 2020 aus.

Nein.

Ubuntus PHP-Paket ist sicher. Aber es ist auch stabil und damit zwangsläufig veraltet.

Irreführender PHP Versionstext

Aber wie kommt man überhaupt dazu, diese Frage zu stellen?

Ganz einfach: Wenn Sie 2021 auf einem mit allen Updates bestückten Ubuntu 20.04 LTS (Focal Fossa) den Befehl php -v eingeben, dann werden Sie in etwa folgendes zu Gesicht bekommen:

PHP 7.4.3 (cli) (built: Jul  5 2021 15:13:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Die installierte PHP-Version ist demnach 7.4.3, die laut PHP Change Log am 20. Februar 2020 veröffentlicht wurde. Ende 2021 ist diese Version also über eineinhalb Jahre alt.

Dieser Umstand irritiert viele Anwender und lässt sie fragen, ob ihr Server mit einer unsicheren PHP-Version läuft. Die Gründe dafür sind einerseits der in diesem Fall unglückliche Output von php -v (nur das Build-Datum gibt einen kleinen Hinweis) und andererseits viele Anwender, die nicht wissen, dass Ubuntu über die Support-Zeit einer Version (fünf Jahre für LTS-Versionen wie Ubuntu 20.04) sicherstellt, dass offiziell von Ubuntu gewartete Pakete1 stabil und sicher bleiben.

Wie Ubuntu PHP stabil und sicher hält

Ein Hauptziel von Ubuntu ist Stabilität. Benutzer sollen sich auf das Betriebssystem verlassen können. Sogenannte Long Term Support (LTS) Versionen, die Ubuntu alle zwei Jahre veröffentlicht, garantieren dem Anwender, dass die mitgelieferten Software-Pakete über fünf Jahre genau so funktionieren, wie sie der Anwender zu Beginn vorgefunden hat. Die Funktionalität der Software-Pakete, sei es PHP, MySQL oder ein Desktop-Programm wie Gimp, ist sprichwörtlich eingefroren.

Zusätzlich aber sorgt Ubuntu – und Canonical als Unternehmen dahinter – dafür, dass die ausgelieferte Software über diese fünf Jahre sicher bleibt.

Was heißt das nun im Falle von PHP?

Im Zuge des immer wiederkehrenden Ubuntu Release-Prozesses findet irgendwann ein sogenannter Feature-Freeze statt. Nach dem Feature-Freeze werden keine neuen Releases der jeweiligen Software mehr akzeptiert. Im Falle von Ubuntu 20.04 war zum Zeitpunkt des Feature-Freeze PHP 7.4.3 die aktuellste Version. Selbst wenn PHP irgendwann noch vor dem offiziellen Ubuntu 20.04 Release weitere Releases wie 7.4.4 oder 7.4.5 herausgebracht hat, fanden diese folglich nicht mehr Einzug in Ubuntu 20.04.

Über die Laufzeit der offiziellen Wartungsperiode sorgt Ubuntu allerdings dafür, dass High-impact Bugs2 in den Paketen behoben werden. Meistens sind dies freilich Sicherheitslücken. Werden Sicherheitslücken bekannt, werden sie behoben und im Zuge von sogenannten Stable Release Updates, kurz SRUs, zur Verfügung gestellt.

Der Change Log des php7.4 Pakets veranschaulicht diesen Prozess sehr schön. Der Inhalt zeigt, dass es immer wieder Updates des Pakets gibt und auch, dass alle für Linux relevanten Sicherheitslücken behoben wurden. Beispielsweise schloss Ubuntu in Version 7.4.3-4ubuntu2.5 fünf Sicherheitslücken und stellte sie am 5. Juli 2021 Anwendern bereit.

Genaue PHP-Version auf Ubuntu prüfen

Um zu prüfen, welche Version des offiziellen PHP-Pakets tatsächlich installiert ist, reicht php -v nicht aus. Stattdessen empfiehlt sich der Befehl apt policy php7.4. Dieser gibt beispielhaft folgendes aus:

$ apt policy php7.4
php7.4:
  Installed: 7.4.3-4ubuntu2.5
  Candidate: 7.4.3-4ubuntu2.6
  Version table:
    ...

Wie man hier sehen kann, ist Version 7.4.3-4ubuntu2.5 installiert und es stünde das neuere Update 7.4.3-4ubuntu2.6 bereits zur Verfügung.

Soll man das offizielle PHP-Paket verwenden?

Der oben beschriebene Prozess und dass ein schneller Blick auf php -v keineswegs bedeutet, eine unsichere PHP-Version zu verwenden, ist wie eingangs angesprochen leider wenig bekannt. Deswegen findet man vielerorts den Ratschlag PHP über das Ondrej PPA zu installieren.

Es stimmt zwar, dass der Betreiber des PPAs immer die neuesten Minor-Releases (z.B. 7.4.23) zur Verfügung stellt, aber dieser Weg hat zwei Haken.

Erstens können neuere PHP-Versionen die Stabilität des Systems beeinträchtigen, denn schließlich ist noch jeder Bug der Welt mit irgendeinem Release eingeführt worden. Außerdem können sich mit Minor-Releases Abhängigkeiten ändern, sodass PHP plötzlich von einer höheren Version einer verwendeten Bibliothek (z.B. libcurl) abhängt.

Zweitens erhält die verwendete PHP-Hauptversion irgendwann keine Sicherheitsupdates mehr. Bei PHP 7.4 wird das ab dem 28. November 2022 so sein. Hingegen wird das Ubuntu Security-Team auch über das offizielle PHP 7.4 Support-Ende hinaus – und zwar bis zum Ende des Ubuntu 20.04 Wartungsfensters im April 2025 – Sicherheitslücken im offiziellen Ubuntu PHP-Paket schließen. Dass dies auch wirklich passiert, lässt sich wunderbar im Ubuntu CVE tracker nachvollziehen und steht so auch in der Tracking-Policy des Ubuntu Security-Teams.

Wann trotzdem auf ein PPA umsteigen?

Selbstverständlich kann es Gründe geben vom offiziellen Ubuntu PHP-Paket abzuweichen, denn Stabilität bedingt folgendes: Diverseste Bugfixes die nicht sicherheitsrelevant oder sonst irgendwie als "High-impact Bugs" wahrgenommen werden, werden nie den Weg in Ubuntus PHP-Paket finden.

Man kann also Glück haben, und ist nicht von diesen Bugs betroffen. Oder man ist es, aber in der Lage die Bugs im Code zu umschiffen. Trifft beides nicht zu, ist der Umstieg auf ein Paket aus einem PPA überlegenswert.

Was ist mit neueren Hauptversionen wie PHP 8?

Möchte man überhaupt eine neuere PHP-Hauptversion – zum Beispiel PHP 8.0 statt 7.4 – verwenden, ist der Umstieg auf ein PPA-Paket ebenfalls eine Option. Ist man jedoch weniger risikofreudig, lohnt es sich vielleicht auf die offizielle Unterstützung durch Ubuntu zu warten.

Wann PHP 8 in Ubuntu landet

Ganz konkret wird Ubuntu 21.10 Impish, das im Oktober 2021 veröffentlicht werden wird, das erste Mal ein PHP 8.0 Paket ausliefern. Im Vergleich dazu wurde PHP 8.0.0 bereits am 26.11.2020 veröffentlicht, also fast ein Jahr davor. Außerdem ist anzumerken, dass Ubuntu 21.10 keine LTS-Version ist, weshalb es sich nicht für den Produktiveinsatz eignet. Die ein halbes Jahr darauf folgende Version 22.04 ist übrigens wieder ein LTS-Release.

Um ein offiziell von Ubuntu gewartetes PHP 8.0 in einer Ubuntu LTS-Version benutzen zu können, müsste man demgemäß rund eineinhalb Jahre warten.

Zusammenfassung

Baut man auf das offiziell von Ubuntu mitgelieferte PHP-Paket und befindet sich die jeweilige Ubuntu-Version noch im Wartungsfenster, ist man mit einem sicheren und stabilen PHP unterwegs.

Selbst wenn Versionstexte eine sehr alte Minor-Version anzeigen, merzt Ubuntu Sicherheitslücken und andere schwerwiegende Fehler in der "eingefrorenen" Minor-Version konsequent aus – auch noch dann, wenn das PHP-Team den jeweiligen Hauptversionsstrang schon längst nicht mehr wartet.

Fußnoten

1 Offiziell von Ubuntu / Canonical gewartete Pakete sind dem main-Repository zugeordnet. Siehe dazu What are repositories?.

2 Es gibt eine offizielle Richtlinie welche Fehler Ubuntu als High-impact Bugs ansieht.