Hlavní navigace

Názor k článku Web server Nginx bez práv roota s pomocí systemd od Filip Jirsák - Mně na tom vadí to, že se začne...

  • Článek je starý, nové názory již nelze přidávat.
  • 18. 6. 2020 10:16

    Filip Jirsák

    Mně na tom vadí to, že se začne tím, že část procesu běžící pod rootem jenom spawnuje workery, na tom přece není co zkazit. No, dobře. Jenže pak si někdo vzpomene, že se pod rootem také načítají privátní klíče. Přes OpenSSL, které nemá dobrou pověst co se týče kvality kódu a kvality vývoje. Jasně, v poslední době se to výrazně zlepšilo, když vybublalo na povrch, jaký průšvih to je. Certifikace FIPS řeší kryptografii – ale řeší i bezpečnost kódu? Pokud je privátní klíč někde na tokenu, tak v OpenSSL může být třeba chyba umožňující spuštění kódu, a z hlediska kryptografie je to celé v pořádku, privátní klíč je v bezpečí – ale ta knihovna rozhodně bezpečná není. No a pak se vrátím k tomu hlavnímu procesu, který tedy má načtený ten privátní klíč, jenže TLS pak dělá worker. Takže buď hlavní proces předá privátní klíč workeru (běžícímu pod neprivilegovaným uživatelem – jenže to se ten privátní klíč dostane do spárů toho neprivilegovaného uživatele). A nebo nebo, pokud má privátní klíč zůstat opravdu jen v moci roota, musí ten hlavní proces řešit i navázání spojení a TLS až do okamžiku, kdy už není privátní klíč potřeba. Takže se z jednoduchého masteru, který „jenom spawnuje workery“ (a také např. parsuje konfiguraci, to tu nezaznělo) najednou stává docela komplikovaný proces, který má docela dost vstupů. A tohle všechno běží pod rootem.

    Pro mne je tohle stopka, nechci, aby všechno tohle běželo pod rootem. Ochrana privátního klíče serveru mi za tohle nestojí, dokážu ho ochránit jinak. Navíc k privátnímu klíči nemá přístup jenom webserver, ale také ten, kdo řeší obnovu certifikátu. CSR musí být privátním klíčem podepsána. Budu také CSR podepisovat pod rootem? Navíc spousta běžných aplikací vytváří nový CSR při každé obnově certifikátu a dělají vše pod jedním uživetelem, včetně komunikace ACME protokolem. To všechno také budu spouštět pod rootem? Zkrátka ten přístup „k privátnímu klíči může jen root“má také spoustu negativ, a oprávnění roota jsou strašně silná a zbytečná pro práci s privátním klíčem – vždyť jde jen o přečtení souboru a nějaké kryptografické operace. K tomu nejsou potřeba žádná administrátorská oprávnění.

    Takže budu mnohem radši řešit to, aby web server nikdy žádná práva roota neměl, a vedle toho budu řešit to, aby uživatel, který má přístup k privátnímu klíči, nespouštěl žádný „uživatelský“ kód ve smyslu CGI, PHP nebo jiných server-side webových aplikací. Připadá mi takový přístup mnohem bezpečnější.