Pse paralajmërimi i vpnc për pastrimin e rrugëve shfaqet në një kontejner
Pastrimi i cache-it të rrugëve është mbetje e një kernel-i që nuk e mban më atë cache; gabimi vetëm-lexim vjen nga montimi i kontejnerit, jo nga tuneli.
Regjistrat e rinj të kontejnerit shpesh përfundojnë me një ankesë Read-only file system për /proc/sys/net/ipv4/route/flush, dhe ajo linjë fajësohet për një tunel që mund të jetë plotësisht i shëndetshëm. Shkrimi pas saj synon një hyrje të kernel-it që nuk bën më asgjë të dobishme pasi cache-i i rrugëve IPv4 ka humbur. Brenda një kontejneri /proc/sys montohet vetëm-lexim, kështu që ridrejtimi refuzohet para se të arrijë ndonjë vlerë dhe shell-i printon atë refuzim. Një tunel që funksionon mund ta printojë këtë paralajmërim për sa kohë linja e vjetër mbetet në skript, dhe --privileged nuk e bën kurrë shkrimin kuptimplotë.
Çfarë po përpiqej të pastronte skripti
Skriptet e vjetra të lidhjes përfundonin me një pastrim cache-i: shkruanin një vlerë në një skedar kontrolli të kernel-it dhe i kërkonin stack-ut IPv4 të hidhte cache-in e rrugëtimit, që një rrugë e re tuneli të zgjidhej pa pritur skadimin e hyrjeve të vjetruara. Skedari adresohej nën /proc/sys/net/ipv4/, gjë që e bënte veprimin një ridrejtim shell-i dhe jo një komandë rrugëtimi. Kernel-i 3.6 e hoqi atë cache, dhe bashkë me të arsyen e ekzistencës së pastrimit. Asgjë në rrugën aktuale të të dhënave nuk varet nga ai shkrim.
Vetë hyrja mbijetoi si një skedar i vjetër vetëm-shkrim, kështu që një skript që ende shkruan në të arrin një shteg të vërtetë dhe një kontroll të vërtetë lejesh. Në një host shkrimi kthen sukses dhe nuk ndryshon asgjë. Në një kontejner i njëjti ridrejtim përplaset me /proc/sys vetëm-lexim dhe dështon me EROFS, të cilin shell-i e printon si mesazhin e sistemit të skedarëve vetëm-lexim. Në kernel-e ku shtegu vërtet mungon, formulimi bëhet No such file or directory, dhe përfundimi nuk ndryshon.
Dy gabimet thonë gjëra të ndryshme, dhe ndryshimi ia vlen të mbahet i qartë. Read-only file system do të thotë që kernel-i arriti një hyrje dhe e refuzoi shkrimin; No such file or directory do të thotë që hyrja ka ikur. Asnjë mesazh nuk raporton për pajisjen e tunelit, rrugët ose zgjidhjen e emrave, kështu që asnjëri nuk mund të justifikojë më shumë privilegje.
Është radha ajo që e bën mesazhin të duket shkakësor. Një skript lidhjeje instalon rrugë, ndryshon gjendjen e ndërfaqes dhe rishkruan zgjidhjen e emrave para se të arrijë pastrimin në fund, kështu që linja e fundit e printuar është ajo që njerëzit citojnë edhe kur çdo hap i rëndësishëm ktheu sukses. Një tunel që vendoset dhe mbart trafik ndërsa printon këtë paralajmërim përputhet saktësisht me mekanizmin më sipër.
Kontrolloni montimin dhe rrugën përpara se të shtoni privilegj
Tre lexime ndajnë një paralajmërim kozmetik nga një dështim i vërtetë: nëse skripti i instaluar ende e mban linjën, si montohet /proc/sys dhe ku shkon në të vërtetë trafiku i aplikacionit. Ekzekutojini në të njëjtin hapësirë emrash të kontejnerit ose në hostin ku u shfaq paralajmërimi, sepse një kontroll në një makinë të palidhur përgjigjet një pyetjeje tjetër.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10Përgjigja e grep është më e dobët nga sa duket, sepse një gjetje provon që linja ekziston, jo që ekzekutohet pa mbrojtje; një skript i mirëmbajtur mund ta mbajë shkrimin brenda një mbrojtjeje që e anashkalon. findmnt -no OPTIONS /proc/sys e zgjidh montimin drejtpërdrejt, dhe ro në atë dalje do të thotë që çdo shkrim nën atë pikë refuzohet, çfarëdo që bën skripti. Pastaj kërkimi i rrugës tregon nëse destinacioni që i nevojitet aplikacionit zgjidhet përmes ndërfaqes së tunelit apo përmes gateway-t të parazgjedhur të kontejnerit. Një kërkim që zgjedh gateway-t e parazgjedhur do të thotë që tuneli u ngrit dhe asgjë nuk rrugëtohet në të, që është problem rrugëtimi dhe jo privilegji.
Nga vjen në të vërtetë rregullimi
Rregullimi i mirëmbajtur jeton në skript dhe jo në flamujt e kontejnerit. vpnc-script upstream ka ndryshuar mënyrën se si e trajton këtë veprim, prandaj krahasoni kopjen brenda imazhit me upstream-in aktual dhe përditësoni përmes paketës ose ndërtimit të imazhit që e furnizon. Një skedar i redaktuar me dorë brenda një kontejneri në punë nuk mund të rishikohet dhe nuk do të mbijetojë ndërtimin e ardhshëm.
--privileged është dokumentuar si dhurues i të gjitha aftësive plus akses të gjerë në pajisje, një lëshim i madh për një mesazh që nuk ndryshon asgjë, prandaj emërtoni aftësinë që mungon nëse vërtet mungon një. Pas përditësimit, përsëritni kërkimin e rrugës dhe lini një aplikacion të përdorë tunelin, sepse një regjistër i qetë dhe një lidhje që funksionon janë rezultate të ndara.