Portál AbcLinuxu, 15. května 2025 11:40
Stav vydání jádra. Citát týdne: Tom Herbert. Rozřešení otázky síťových filtrů řídících skupin.
Současné vývojové jádro je 4.10-rc8, vydané 12. února. Linus se rozhodl před finálním vydáním 4.10 počkat ještě jeden týden. „Rozhodl jsem se, že není žádný naléhavý důvod, abych tak učinil (jiný než dostat se zpět na klasický režim sedmi kandidátů na vydání, což by bylo hezké) a vzhledem k plánovanému cestování jsem se rozhodl, že ještě nebylo třeba otevřít začleňovací okno. Už jsem začleňovací okno na cestách dělal, ale radši se tomu vyhnu.“
Stabilní aktualizace: 4.9.9 a 4.4.48 byly vydány 9. února a 15. února je následovala vydání 4.9.10 a 4.4.49.
Problém s obcházením jádra není jen v tom, že se tím obchází dobře napsaný a otestovaný kód, ale že se tím také obchází celý ten proces.
Začleňovací okno 4.10 přidalo možnost připojit k řídící skupině program BPF. Tento program pak mohl filtrovat síťové pakety všech procesů z příslušné skupiny. V lednu byly vyjádřeny obavy ohledně několika aspektů API této funkce. S blížícím se vydáním 4.10 to vypadá, že se na poslední chvíli podařilo dosáhnout řešení alespoň jedné z vyjádřených obav.
Jedna z nejvážnějších obav, které se v lednu objevily, se týkala vzájemné interakce filtrujících programů na různých úrovních hierarchie řídících skupin. Vezměme si jednoduchou hierarchii (jako na obrázku): skupina A je na nejvyšší úrovni, skupiny B a C jsou obsaženy v ní. Co se stane s procesem ze skupiny B, pokud jsou filtrovací programy použity na úrovních A i B? V původní implementaci by byl spuštěn pouze program na nižší úrovni (B). V důsledky by kterýkoli proces schopný připojit program k B byl schopen přepsat jakákoli omezení zavedená výše v hierarchii skupin. Za určitých okolností může jít o žádoucí efekt, leč v jiných může jít o bezpečnostní hrozbu.
Jedná se o důležitý detail, který je třeba vyřešit správně hned na samém počátku. Pokud budou programy spoléhat na chování popsané výše, v budoucnu může být nemožné ho změnit bez rozbití běžících systémů. Takže vývojáři strávili nějaký čas dohadováním se o tom, zda se jedná o problematické chování, či nikoli a nakolik naléhavě je třeba ho změnit. Potom se diskuze na chvíli utišila a vypadalo to, že dojde k vydání 4.10 s popsaným chováním. To by se možná také stalo, kdyby k vydání verze 4.10 došlo 12. února, jak mnozí očekávali.
Několik dnů předtím Alexej Starovoitov zveřejnil patch zaměřený na řešení námitek k chování BPF pro vydání 4.10. Modifikuje systémové volání bpf(), které se používá k připojování filtrovacího programu k řídící skupině, přidáním nového příznaku nazvaného BPF_F_ALLOW_OVERRIDE. Pokud je příznak přítomen v okamžiku instalace filtrovacího programu, bude proces z nižší řídící skupiny schopen přepsat tento program připojením nového programu na nižší úrovni. Takže pokud je filtrovací program připojen ke skupině A (z příkladu výše) s tímto příznakem, bude možné příslušný program ve skupinách B a C přepsat tím, že se k nim připojí nové filtrovací programy. Pokud příznak chybí, nebude možné připojit programy k nižším skupinám.
V reakci na původní patch navrhl Andy Lutomirski, jenž vznesl nejvíce námitek k původnímu rozhraní, jednu změnu: pokud filtrovací program instalovaný ve skupině A nastaví příznak BPF_F_ALLOW_OVERRIDE, měly by libovolné programy instalované níže v hierarchii tento příznak obsahovat také. Tímto omezením se vyhneme případnému zmatení, bude-li v budoucnu přidána možnost používat programy BPF na více úrovních (tak, že poběží filtry na všech úrovních a nikoli pouze na té nejnižší). Starovoitov souhlasil a vzápětí zveřejnil novou verzi s tímto omezením.
Nyní se zdá, že všichni zúčastnění jsou s patchem spokojeni a panuje všeobecná shoda, že by měl být začleněn před vydáním verze 4.10. K tomu v době psaní tohoto článku ještě nedošlo, ale v cestě nestála žádná zásadní překážka, která by tomu měla zabránit. Takže se zdá, že tento příběh, obsahující poměrně vášnivou diskuzi, dospěl k celkem šťastnému konci.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.