OpenSSL i Nginx se snaží, aby tam nebyly bezpečnostní problémy
Ano, snaží. Přesto je snaha omezit běh aplikací pod rootem na minimum. Nejdřív se do webového serveru implementovalo to, že se připojí na port a pak se vzdá rootovských oprávnění. Pak se implementovaly capabilities, aby se aplikace vůbec nemusel spouštět pod rootem, když jenom potřebuje naslouchat na nízkém portu. Pak se přidal SElinux.
Všichni se smaží, to nikomu neupírám, ale pořád nejjednodušší a nejspolehlivější řešení je vůbec procesu roota nedávat.
Proti tomu stavíte řešení, které naruší standardy (či zvyklosti) v jiných ohledech.
Stejné narušení zvyklostí bylo to, že se Apache zbavil rootovských oprávnění po startu. Před tím standardně běžel pořád pod rootem.
klíče mimo keystore
Nevím, čemu říkáte keystore – nginx načítá klíče ze souboru na disku.
speciální oprávnění
K tomu přece oprávnění slouží. SElinux je daleko větší specialita, než normální oprávnění na souboru. Navíc běžný nginx běží pod speciálním uživatelem, servíruje statické soubory a pak přes síť komunikuje s jinými aplikacemi, které poskytují dynamické stránky. Tyhle aplikace často běží i na jiném zařízení. Takže jediné, co se po správci chce, je to, aby nebyl líný, a vytvořil třeba pro php-fpm jiného uživatele, než pod jakým běží nginx. Což je v každém případě dobrý nápad. Co je na tom speciálního? Navíc by to měla řešit rovnou distribuce.
Tímto řešením se to bude od ideálu zase vzdalovat.
Ne, řešení, kdy se server vůbec nespouští s právy roota, když je nepotřebuje, je přiblížení se k ideálu.
Řešením je, jak psal pan Keršláger, využít SElinux.
Nakonfigurovat správně SElinux je podstatně složitější, než nakonfigurovat v systemd capabilities a vytvořit pro nginx speciálního uživatele. Navíc je trochu na hlavu dát nginxu úplně zbytečně roota a pak ho všemi možnými způsoby omezovat, když mu toho roota vůbec nemusím dávat.
První navrhované je však správně i systematicky, druhé už je custom.
Systematicky správně je nespouštět server pod rootem, když nepotřebuje rootovská oprávnění. Webový server potřebuje rootovská oprávnění jenom pro naslouchání na nízkém portu, a k tomu stačí použít capability.