deb.funil.de

Signiertes APT-Repository mit selbst gebauten Paketen für Ubuntu-Versionen, die keine Updates mehr bekommen.

Inhalt

Derzeit sind das PHP-Pakete mit dem Fix gegen PHP2Shell (CVE-2026-109618, CVE-2026-109619), gebaut aus den Quellpaketen von Ondřej Surý. Der Telemetrie-Patch aus diesen Quellen ist nicht angewandt.

DistributionCodenameQuellpaketVersionPakete
wird geladen …

Die Tabelle wird aus den Indizes unter /build/dists/ gelesen.

Einbinden

1. Nur auf Ubuntu 16.04 xenial: https-Unterstützung für apt

Ab Ubuntu 18.04 kann apt https von Haus aus.

apt-get update
apt-get install apt-transport-https ca-certificates curl

2. Schlüssel holen und prüfen

curl -fsSL https://deb.funil.de/build/funil-build.gpg \
  -o /usr/share/keyrings/funil-build.gpg
gpg --no-default-keyring --fingerprint \
  --keyring /usr/share/keyrings/funil-build.gpg

Der Fingerabdruck muss lauten:

3539 4E39 BC06 2089 1EA7 A350 3ED6 7E7C CE5B 5FBE

RSA 4096, „Funil Build Repository“. Derselbe Schlüssel als Text: funil-build.asc.

3. Quelle eintragen

. /etc/os-release
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/funil-build.gpg]" \
  "https://deb.funil.de/build $VERSION_CODENAME main" \
  > /etc/apt/sources.list.d/funil-build.list
apt-get update

Das Repository führt nur die Codenames aus der Tabelle oben. Auf anderen Versionen meldet apt-get update einen Fehler für diese Quelle. Es gibt nur Pakete für amd64. arch=amd64 verhindert auf Systemen mit zusätzlicher i386-Architektur den Hinweis „doesn't support architecture 'i386'“.

4. Vorrang vor Ubuntu Pro (ESM)

printf '%s\n' 'Package: *' 'Pin: release o=funil-build' 'Pin-Priority: 520' \
  > /etc/apt/preferences.d/funil-build

Ubuntu Pro hebt seine ESM-Quellen auf Priorität 510, alle anderen Quellen haben 500. apt wählt zuerst nach Priorität und erst dann nach Version. Ohne diesen Eintrag bleibt deshalb die ESM-Version installiert, obwohl die Version von hier höher ist. Auf Systemen ohne Ubuntu Pro ändert der Eintrag nichts. Er betrifft nur Pakete aus diesem Repository und löst nie ein Downgrade aus.

5. Vorhandene Pakete aktualisieren

V=7.0   # die PHP-Version auf diesem System
apt-cache policy php$V-common
apt-get install --only-upgrade $(dpkg-query -W -f='${Package}\n' \
  "php$V*" "libapache2-mod-php$V" "libphp$V-embed" 2>/dev/null)

apt-cache policy zeigt die neue Version mit https://deb.funil.de/build als Quelle. Der zweite Befehl aktualisiert nur die Pakete dieser PHP-Version, die schon installiert sind.

6. Fix prüfen

strings gehört zum Paket binutils, das auf Servern oft fehlt:

apt-get install binutils
P='_array_init_singleton|zend_new_array_singleton'
for f in /usr/bin/php[0-9]* /usr/bin/php-cgi* /usr/sbin/php-fpm* \
         /usr/lib/apache2/modules/libphp*.so; do
  [ -f "$f" ] || continue
  if strings "$f" | grep -q -x -E "$P"; then
    echo "OK     $f"
  else
    echo "FEHLT  $f"
  fi
done

Gesucht wird eine Funktion, die erst mit dem Fix gegen PHP2Shell dazukommt: _array_init_singleton im Backport für PHP 5.6 und 7.0, zend_new_array_singleton ab PHP 8.4.27. Bei mod_php wirkt der Fix erst nach einem Neustart von Apache, bei FPM nach einem Neustart von php*-fpm. Die Prüfung gilt für die Pakete aus diesem Repository. Andere Builds, etwa von Ubuntu ESM, können den Fix anders umsetzen. Dort heißt „FEHLT“ nicht zwingend „verwundbar“.

Gedacht für bestehende Installationen. Die Pakete ersetzen PHP-Pakete, die schon installiert sind. Für eine Neuinstallation von PHP 5.6 oder 8.4 fehlen Abhängigkeiten, die nicht von hier kommen: php-common in der Version von Ondřej Surý und für PHP 5.6 zusätzlich libssl1.1.

Wieder entfernen

rm /etc/apt/sources.list.d/funil-build.list \
   /etc/apt/preferences.d/funil-build \
   /usr/share/keyrings/funil-build.gpg
apt-get update

Bereits installierte Pakete bleiben dabei unverändert.