Aktuellt läge: PHP2Shell. Två kritiska PHP-sårbarheter (CVSS 9,2) tillåter skadlig kod utan inloggning. Patchar sedan den 21 oktober 2026.Vad som bör göras nu →

PHP-grunder för administratörer

Vad administratörer behöver veta om PHP: vilka binärer som körs, hur konfigurationen verkar, hur FPM-pooler arbetar och vilka kommandon som hjälper vid uppdateringar som den för PHP2Shell.

Aktualitet 5 min läsningPHP-kunskap

Kort sagt: För administratörer utan utvecklarbakgrund räcker fem grunder för att driva PHP säkert: PHP består av flera program (kommandorad, PHP-FPM, Apache-modul) med var sin version; inställningar verkar i nivåer från php.ini till applikationen; PHP-FPM fördelar förfrågningar på workers i pooler; en uppdatering verkar först efter omstart av alla processer; och loggar är den viktigaste ledtråden när något inte stämmer. Den som kan de här punkterna kan stänga luckor som PHP2Shell snabbt och påvisbart.

Vad PHP består av på en server

PHP är inte ett enskilt program. På en typisk Linux-server finns flera varianter som var och en är kopplad via ett servergränssnitt (SAPI):

Variant Typiskt namn Till vad
Kommandorad (CLI) php, php8.3 cronjobs, Composer, underhållsskript
PHP-FPM php-fpm, php-fpm8.3 webbförfrågningar bakom Nginx eller Apache
Apache-modul mod_php, libphp webbförfrågningar direkt i Apache-processen
CGI php-cgi äldre uppbyggnader

Varje variant kan ha en annan version och en annan php.ini. På många servrar körs dessutom flera PHP-versioner parallellt, till exempel 8.2 och 8.4. Vid en uppdatering måste var och en betraktas för sig. Hur gränssnitten fungerar förklarar PHP-FPM förklarat.

Vilken variant som faktiskt betjänar era webbplatser tar ni reda på via de körande processerna och webbserverkonfigurationen:

ps -eo pid,user,lstart,cmd | grep -E "php|httpd|apache2" | grep -v grep
apachectl -M 2>/dev/null | grep -i php     # laddar Apache en PHP-modul?
ls /run/php/ 2>/dev/null                    # FPM-sockets, ofta per version och pool

Kolumnen med starttiden är senare viktig vid omstarten: Alla PHP-processer måste ha startats efter uppdateringens tidpunkt. Körs processer under olika användare tyder det på separata pooler, vilket är bra. Dyker en PHP-modul upp i Apache fast alla webbplatser ska köras via FPM är det ett tecken på en arvedel som bör tas bort. För hostingpaneler som Plesk eller cPanel gäller samma princip, bara att panelen visar versioner och hanterare per webbplats; avgörande förblir dock vad som faktiskt körs som process.

De viktigaste kommandona för administratörer

php -v                    # kommandoradens version
php --ini                 # laddad php.ini och ytterligare lästa kataloger
php --ini=diff            # från PHP 8.5: avvikelser från standard
php -m                    # inkompilerade och laddade moduler
php --ri session          # inställningar för ett tillägg
php -l datei.php          # syntaxkontroll utan körning
php-fpm8.3 -v             # FPM-binärens version (namn beroende på distribution)
php-fpm8.3 -t             # testa FPM-konfigurationen utan att starta om
systemctl status php8.3-fpm

Två anmärkningar från manualen: php -l hittar syntaxfel men inte fel som först uppstår vid körning. Och php -i anropar phpinfo(); utskriften hör inte hemma i offentliga filer i webbkatalogen.

Hur PHP-inställningar verkar

En inställning kan sättas på flera ställen. Vem som får ändra vad regleras av varje direktivs ändringsläge:

  1. php.ini och conf.d: grundkonfiguration per variant, läses vid start.
  2. FPM-pool: php_value och php_admin_value per pool. Värden som sätts med php_admin_value kan applikationen enligt manualen inte skriva över med ini_set().
  3. Katalognivå: .user.ini vid FPM eller .htaccess vid mod_php, bara för direktiv i läget INI_PERDIR eller INI_ALL.
  4. Applikation: ini_set() vid körning, bara för direktiv i läget INI_ALL.

Ett exempel: memory_limit har läget INI_ALL, kan alltså ändras av applikationen. post_max_size har INI_PERDIR och går inte att ändra med ini_set(). Därför kräver php.net vid PHP2Shell-åtgärderna att värden sätts så att applikationer inte kan skriva över dem. Detaljer om nivåerna förklarar php.ini förklarad.

PHP-FPM-pooler i korthet

En pool är en grupp workers med egen användare, egen socket och egna inställningar. De viktigaste direktiven enligt manualen:

[shop]
user = shop
group = shop
listen = /run/php/shop.sock
pm = dynamic                 ; static, dynamic eller ondemand
pm.max_children = 20         ; högst 20 samtidiga förfrågningar
pm.max_requests = 500        ; förnya workern efter 500 förfrågningar
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/shop-slow.log
php_admin_value[error_log] = /var/log/php-fpm/shop-error.log
php_admin_flag[log_errors] = on

En egen pool per webbplats med egen användare skiljer webbplatser åt. security.limit_extensions står som standard på .php .phar och förhindrar att FPM kör andra filändelser än PHP. clear_env är som standard påslaget och håller miljövariabler borta från workern.

Loggar: var administratörer bör titta

PHP skriver fel till målet som anges med error_log, PHP-FPM dessutom till sin egen logg och vid långsamma förfrågningar till slowlog med backtrace. Dessutom finns webbserverns åtkomst- och felloggar. Se till att display_errors är avstängt i produktion och log_errors påslaget: Fel hör hemma i loggen, inte på webbsidan. Loggar bör dessutom roteras och sparas under en fastställd tid, så att de finns kvar när det gäller. Efter PHP2Shell rekommenderar fackpressen att spara serverloggar från och med den 20 oktober 2026. En stark varningssignal är en PHP-FPM- eller webbserverprocess som startar ett skal; hur ni känner igen det står under Varningssignal: webbservern startar ett skal.

Checklista för administratörer efter PHP2Shell

  1. Lista alla PHP-varianter och versioner på servern, även de som inte används.
  2. Kontrollera paketläget; vid backports från distributionen, sök igenom changelogen efter CVE-2026-109618 och CVE-2026-109619.
  3. Uppdatera till 8.5.12, 8.4.27, 8.3.36 eller 8.2.35 respektive den bekräftade backporten.
  4. Starta om PHP-FPM, Apache och LiteSpeed och kontrollera processernas starttider.
  5. Motkontroll med php -r 'var_dump(ini_get("memory_hard_limit_percent"));'; bool(false) betyder enligt manualen en drabbad version.
  6. Säkra loggar och granska dem efter avvikelser.

Hur ni kan belägga version och patchläge tillförlitligt beskriver Kontrollera PHP-version och patchläge rätt.

Hur hjälper PHP SOS konkret?

Inom säkerhetsunderhållsavtalet tar vi över PHP-grundskötseln tillsammans med ert team:

  • Inventarium: alla PHP-varianter, versioner, pooler och konfigurationsplatser per server.
  • Konfiguration: säkerhetsrelevanta värden satta med php_admin_value, pooler åtskilda per webbplats.
  • Uppdateringar: installation, omstart, kontroll och dokumentation vid varje säkerhetsrelease.
  • Föra kunskapen vidare: Vi förklarar för era administratörer vad vi har ändrat och varför.

Vanliga frågor

Varför visar php -v en annan version än webbplatsen?

Kommandorad, PHP-FPM och Apache-modul är skilda program med egen version och egen php.ini. php -v visar bara kommandoraden. För webbplatsen räknas versionen av den binär som faktiskt hanterar förfrågningar.

Vilken php.ini gäller på min server?

Det visar php --ini för kommandoraden. För PHP-FPM finns oftast en egen php.ini och ytterligare pool-filer. Sedan PHP 8.5 visar php --ini=diff vilka värden som avviker från standard.

Vad är skillnaden mellan php_value och php_admin_value?

Båda sätter inställningar i en FPM-pool. Värden som sätts med php_admin_value kan applikationen enligt manualen inte skriva över med ini_set(). För säkerhetsrelevanta inställningar är php_admin_value därför rätt val.

Räcker en uppdatering utan omstart?

Nej. Körande PHP-processer behåller den gamla koden i minnet. Efter en uppdatering måste PHP-FPM, Apache med mod_php eller LiteSpeed startas om, annars fortsätter den sårbara versionen att köra.

Källor

Direktkontakt

Varje timme räknas. Skriv till oss nu.

Beskriv kort system, PHP-version och observation. Vi hör av oss, klarlägger läget och arbetar på distans tills incidenten är avslutad och dokumenterad.

Direkthjälp