Zdravím všechny,
chtěl jsem Vás poprosit o radu/názor ohledně nastavení user/group u
php-fpm z hlediska bezpečnosti. Používám php-fpm v kombinaci s nginxem a
největší obavu mám z napadení php aplikace. Chtěl jsem proto nastavit
souborová práva takovým způsobem, aby se v případě napadaní aplikace
minimalizovala možnost jejího zneužití k šíření malware.
Samozřejmě jsem přečetl různé návody na netu a pro každou php aplikaci
si vytvářím vlastního uživatele, pod kterým běží php-fpm pool (user
"project", group "project"). Uživatel www-data (nginx) pak je součástí
skupiny "project", aby měl přístup k souborům. Na všechny složky jsem
nastavil právo jen pro čtení (440), pouze u "tmp" složek, kde si php
aplikace vytváří dočasné soubory, jsem nastavil právo 640. V nginxu jsem
pak nastavil, že se ze složky "tmp" nesmí nic servírovat ven (php
aplikace tam ukládá jen soubory pro svoji vnitřní potřebu, není potřeba
k nim přistupovat zvenčí).
Celé mi to přišlo jako ohromné řešení, dokud mi nedošlo, že owner
souborů může provést chmod. Tzn. běžící php-fpm pool si může na složkách
či souborech nastavit právo pro zápis, "kompromitovat" soubory a
servírovat je návštěvníkům.
Udělal jsem tedy co nejstriktnější omezení u ngnixu - tzn. přesně jsem
vyjmenoval z jakých složek se můžou servírovat jaké soubory (např. z
"/assets" pouze .js, .css., .jpg, z "/" jen index.php, z
"/tmp" složky
vůbec nic). Pořád mi ale vrtá hlavou nastavení přístupu k souborům.
Jediné řešení, které mě napadlo je, že bych musel pro daný projekt
vytvořit uživatele dva a jednu skupinu. Php-fpm pool by pak běžel pod
"project-pool":"project", všechny soubory by ale vlastnil
"project":"project". Skupina by měla přístup jen pro čtení a php-fpm
pool by to nemohl změnit. Skupina by měla práva zápisu jen do složky
"/tmp", aby si mohla aplikace vytvářet dočasné soubory.
Jenže jsem na takové nastavení práv nikde nenarazil a tak nevím, jestli
jsem to moc "nepřekombinoval" :-D
Předem díky za reakce,
Honza