> To není 100% pravda. Například web-server na běžném OS pořebuje privilegium poslouchat na portu 80 (tedy menším než 1024). Takže musí nejdřív začít poslouchat a potom změnit uživatele. Pokud ovšem za něj začne poslouchat správce služeb, tak se najednou musí správce služeb postarat, aby ta socketa měla nastavené vše co ten webserver potřebuje a musí rozumět síťovému stacku*. Spousta dalších služeb také potřebuje privilegovaný přístup k nějakým dalším prostředkům, ale jinak běžet neprivilegovaně. To se nejlépe řeší tím, že se jim poskytne API/ABI. Zvenčí to chce jen zajistit aby ta služba neměla přístup k věcem ke kterým mít přístup nemá. Na to mi v tradičním systému stačí code-review kódu před vzdáním se rootovských práv.
Proc to delat dobre, kdyz to jde delat uplne blbe, ze :)
Navic to neni absolutne pravda, existuje mnohem lepsi reseni (a dokonce nekolik) - pridat procesu capability (napr. poslouchat na privilegovanem portu), pak zadne prava roota nepotrebuje a muze bezete rovnou pod neprivilegovanym uzivatelem.
Doporucuji dostudovat POSIX Capabilities, je to docela uzitecne :)
Druhou moznosti je socket activation, ale to je trochu na neco jineho.
> * tohle autoři systemd řeší pomocí socket-activation. Pak ale nastavím socket-activation službu a nevím, že je služba rozbitá, dokud se doopravdy něco nepokusí přistoupit na tu socketu. V produkčním prostředí děkuji, ale nechci.
Socket activation totiz neni primarne urceny na reseni poslouchani na portu < 1024, ale pro sluzby, ktere nemaji bezet porad, ale jen tehdy, kdyz jsou potreba :) A samozrejme to ma dusledek ten, ze se ... sluzba spustti az tehdy, az je potreba.
Pro permanentne bezici sluzby je to nevhodne.
Btw, nemas na produkci healthcheck a monitoring? Spolehat na to,ze sluzba funguje, kdyz bezi proces - diky, ale to bych nechtel :)