Nidaamyada faylka Virtual ee Linux: maxaa loogu baahan yahay iyo sidee bay u shaqeeyaan? Qaybta 2

Salaan qof walba, waxaanu kula wadaagaynaa qaybta labaad ee daabacaadda "Nidaamka faylka Virtual ee Linux: maxaa loogu baahan yahay iyo sidee bay u shaqeeyaan?" Waxaad akhrin kartaa qaybta koowaad halkan. Aan ku xasuusinno in qoraalladan taxanaha ah lagu soo beegay xilliga la bilaabayo qulqulka cusub ee koorsada. "Maamulaha Linux", kaas oo bilaabanaya dhawaan.

Sida loola socdo VFS iyadoo la isticmaalayo eBPF iyo qalabka bcc

Habka ugu fudud ee lagu fahmi karo sida kernel-ku ugu shaqeeyo faylasha sysfs waa in si ficil ah loo arko, iyo sida ugu fudud ee loo daawado ARM64 waa in la isticmaalo eBPF. eBPF (oo u soo gaabiyo Berkeley Packet Filter) wuxuu ka kooban yahay mashiinka farsamada gacanta xudunta u ah, kuwaas oo isticmaalayaasha mudnaanta leh ay codsan karaan (query) laga bilaabo khadka taliska. Ilaha kernelku waxay u sheegaan akhristaha waxa kernelku samayn karo; Ku socodsiinta qalabka eBPF ee nidaamka raran wuxuu muujinayaa waxa kernelku dhab ahaantii qabanayo.

Nidaamyada faylka Virtual ee Linux: maxaa loogu baahan yahay iyo sidee bay u shaqeeyaan? Qaybta 2

Nasiib wanaag, bilawga isticmaalka eBPF waa wax sahlan iyadoo la kaashanayo qalabka bc, kuwaas oo loo heli karo sida baakado laga soo bilaabo qaybinta guud Linux oo si faahfaahsan loo diiwaangeliyey Bernard Gregg. Qalab bcc waa qoraallada Python oo leh gelinta yar ee C code, taas oo macnaheedu yahay in qof kasta oo yaqaana labada luqadood uu si fudud u beddeli karo. IN bcc/tools Waxaa jira 80 qoraal oo Python ah, taas oo macnaheedu yahay in ay u badan tahay horumariye ama maamulaha nidaamka uu awoodi doono inuu doorto wax ku habboon xallinta dhibaatada.
Si aad u hesho ugu yaraan fikrad sare oo ah waxa ay VFSs ka qabtaan nidaamka socodsiinta, isku day vfscount ama vfsstat. Tani waxay tusi doontaa, aynu nidhaahno, in daraasiin wicitaano ah vfs_open() iyo "saaxiibadiis" waxay dhacaan macno ahaan ilbiriqsi kasta.

Nidaamyada faylka Virtual ee Linux: maxaa loogu baahan yahay iyo sidee bay u shaqeeyaan? Qaybta 2

vfsstat.py waa qoraal Python ah oo leh koodka C-ga oo si fudud u tiriya wicitaannada shaqada ee VFS.

Aan siino tusaale yar oo kale oo aan aragno waxa dhaca marka aan galno USB-ga kumbuyuutarka oo nidaamku ogaado.

Nidaamyada faylka Virtual ee Linux: maxaa loogu baahan yahay iyo sidee bay u shaqeeyaan? Qaybta 2

Isticmaalka eBPF waxaad ku arki kartaa waxa ka dhacaya gudaha /sysmarka USB flash drive la geliyo. Tusaale fudud oo adag ayaa halkan lagu muujiyey.

Tusaalaha kor ku xusan, bcc qalab raad.py daabacaa fariin marka amarka la ordo sysfs_create_files(). Waxaan aragnaa taas sysfs_create_files() ayaa la bilaabay iyadoo la isticmaalayo kworker durdur ka jawaabaya xaqiiqda ah in flash drive la geliyey, laakiin waa maxay file la abuuray? Tusaalaha labaad waxa uu tusinayaa awooda eBPF. Halkan trace.py Daabacaa kernel backtrace (-K option) iyo magaca faylka la sameeyay sysfs_create_files(). Gelida qoraal keli ah waa C code oo ay ku jiraan xarfo si fudud loo aqoonsan karo oo ay bixiso farta Python ee wadda LLVM isku-dubarid-waqti-yar-yar. Waxay uruurisaa xariiqan oo ay ku fulisaa mashiinka farsamada ee gudaha kernel-ka. Saxeexa shaqada oo buuxa sysfs_create_files () waa in lagu soo saaro amarka labaad si xarrunta qaabku u tixraacdo mid ka mid ah halbeegyada. Khaladaadka qaybtan C code-gu waxay ka dhashaan khaladaad la aqoonsan karo oo ka yimid isku-duwaha C. Tusaale ahaan, haddii halbeegga -l laga saaro, waxaad arki doontaa "Ku guuldareystay in la ururiyo qoraalka BPF." Soo-saareyaasha aqoonta u leh C iyo Python waxay heli doonaan qalabka bcc fududahay in la ballaariyo oo la beddelo.

Marka USB-ga la geliyo, kernel backtrace wuxuu muujin doonaa in PID 7711 uu yahay dun. kworkerkaas oo abuuray faylka Β«eventsΒ» Π² sysfs. Sidaa awgeed, baaqa ka soo baxay sysfs_remove_files() waxay tusi doontaa in ka saarista wadista ay keentay in faylka la tirtiro events, taas oo u dhiganta fikradda guud ee tirinta tixraaca. Isla markaana, daawashada sysfs_create_link () oo leh eBPF marka la gelinayo darawalka USB waxay tusi doontaa in ugu yaraan 48 xiriiriye calaamad ah la sameeyay.

Haddaba waa maxay macnaha faylka dhacdooyinka? Isticmaalka sscope Raadinta __qalabka_ku-dar_disk(), waxay muujinaysaa waxa uu keeno disk_add_events (), iyo midkood "media_change", ama "eject_request" waxaa lagu duubi karaa faylka dhacdada. Halkan lakabka xannibaadda kernel-ka ayaa ku wargelinaya goobta isticmaalaha in "disk" uu soo muuqday oo la saaray. U fiirso sida habkan cilmi-baadhistu u yahay wargelin adiga oo gelinaya USB drive, marka la barbar dhigo isku dayga in la ogaado sida arrimuhu u shaqeeyaan oo keliya isha.

Nidaamyada faylalka xididka-akhri-kaliya waxay awood u siinayaan aaladaha ku dhex jira

Dabcan, qofna ma damiyo server-ka ama kombuyuutarkooda isagoo ka soo jiidaya furka godka. Laakiin waa maxay sababtu? Tani waa sababta oo ah nidaamyada faylalka ee ku rakiban aaladaha kaydinta jireed waxaa laga yaabaa inay qoraallo daahmeen, iyo qaab-dhismeedka xogta ee diiwaangeliya gobolkooda waxaa laga yaabaa inaan lala mid dhigin qoraallada kaydinta. Marka tani dhacdo, milkiilayaasha nidaamka waa inay sugaan ilaa bootka xiga si ay u bilaabaan utility. fsck filesystem-recovery iyo, xaaladda ugu xun, luminta xogta.

Si kastaba ha ahaatee, dhammaanteen waan ognahay in qalabyo badan oo IoT ah, iyo sidoo kale router, heerkulbeegyo iyo baabuur, ay hadda shaqeeyaan Linux. Qaar badan oo ka mid ah qalabyadani waxay leeyihiin wax yar oo aan lahayn is-dhexgal isticmaale, mana jirto qaab loo damiyo "nadiif ah." Bal qiyaas in aad ku bilawday baabuurka batari dhintay marka ay korantada qaybta koontaroolku jirto Linux si joogto ah kor iyo hoos u boodaya. Sidee bay u tahay kabaha nidaamka oo aan dheerayn fsckgoorma ugu dambeyntii matoorku bilaabaa inuu shaqeeyo? Jawaabtuna waa sahlan tahay. Aaladaha ku dhexjira waxay ku tiirsan yihiin nidaamka faylka xididka akhrin kaliya (oo la soo gaabiyo ro-rootfs (akhri-kaliya root fileystem)).

ro-rootfs bixi faa'iidooyin badan oo ka cad cad xaqiiqada. Mid ka mid ah faa'iidooyinka ayaa ah in malware uusan wax u qori karin /usr ama /lib, haddii aanu nidaamka Linux halkaas ku qori karaa. Mid kale ayaa ah in nidaamka faylalka aan la beddeli karin uu muhiim u yahay taageerada goobta ee aaladaha fogfog, maadaama shaqaalaha taageerada ay ku tiirsan yihiin nidaamyada maxalliga ah ee magac ahaan la mid ah nidaamyada goobta. Waxaa laga yaabaa in faa'iidada ugu muhiimsan (laakiin sidoo kale ugu khiyaanayn) faa'iidada ay tahay in ro-rootfs ay ku khasbaan horumariyeyaasha inay go'aan ka gaaraan walxaha nidaamka ay noqon doonaan kuwo aan beddeli karin marxaladda naqshadeynta nidaamka. La shaqaynta ro-rootfs waxay noqon kartaa mid dhib badan oo xanuun badan, maadaama doorsoomayaasha const ay inta badan ku jiraan luqadaha barnaamijka, laakiin faa'iidooyinkoodu waxay si fudud u caddeeyaan dulsaarka dheeraadka ah.

abuuridda rootfs Akhri-kaliya waxay u baahan tahay dadaal dheeri ah oo loogu talagalay horumariyayaasha ku dhex milmay, waana halka ay VFS soo gasho sawirka. Linux waxay u baahan tahay in faylalka la soo geliyo /var waxay ahaayeen kuwo la qori karo, oo waxaa dheer, codsiyo badan oo caan ah oo ku shaqeeya nidaamyada ku-xidhan waxay isku dayi doonaan inay abuuraan qaabeynta dot-files Π² $HOME. Hal xal oo loogu talagalay faylalka qaabeynta ee hagaha guriga ayaa badanaa ah in horay loo soo saaro oo lagu dhiso rootfs. Waayo /var Mid ka mid ah habka suurtagalka ah waa in lagu dhejiyo qayb gaar ah oo la qori karo, halka / ku rakiban akhris-kaliya. Beddelka kale ee caanka ah waa in la isticmaalo dhejisyada xirmooyinka ama dusha sare.

Buuraha la isku xidhi karo iyo kuwa la isku dhejin karo, isticmaalkooda weelasha

Fulinta amarka man mount waa habka ugu wanaagsan ee lagu baran karo wax ku saabsan xirmooyinka la isku xiri karo iyo kuwa la dul saari karo, kuwaas oo siinaya horumariyeyaasha iyo maamulayaasha nidaamka awood ay ku abuuraan nidaamka faylalka hal waddo ka dibna u bandhigaan codsiyada kale. Nidaamyada ku-xidhan, tani waxay ka dhigan tahay awoodda lagu kaydiyo faylasha /var ku socda flash-ka-akhri-kaliya, laakiin dulsaar ama dariiqa buurta la isku xidhi karo oo ka yimid tmpfs Π² /var marka la soo shubayo, waxay u ogolaanaysaa codsiyada inay qoraalo ku qoraan halkaas Marka xigta ee aad shido isbeddellada /var waa la waayi doonaa. Dusha sare waxay abuurtaa midow ka dhexeeya tmpfs iyo nidaamka faylalka hoose oo kuu ogolaanaya inaad ku samayso isbeddello macquul ah faylasha jira ro-tootf halka buur la isku xidhi karo ay kuwa cusub ka dhigi karto faaruq tmpfs galka loo arki karo sida lagu qori karo ro-rootfs siyaabo. Halka overlayfs tani waa tan saxda ah (properNooca nidaamka faylka, Buurta la isku xidhi karo ayaa lagu hirgeliyay Goobta magaca VFS.

Iyada oo ku saleysan sharraxaadda dulsaarka iyo buurta la isku xiri karo, qofna lama yaabin taas weelasha Linux si firfircoon ayaa loo isticmaalaa. Aan aragno waxa dhaca markaan isticmaalno systemd-nspawn si aad u socodsiiso weelka adigoo isticmaalaya qalabka mountsnoop ka bcc.

Wac system-nspawn wuxuu bilaabayaa weelka isagoo ordaya mountsnoop.py.

Aan aragno waxa dhacay:

Buuxi mountsnoop halka weelka uu yahay "booting" waxay muujinaysaa in wakhtiga weelku uu aad ugu xidhan yahay buurta lagu xidhayo (Kaliya bilawga wax soo saarka dheer ayaa la muujiyay).

waa systemd-nspawn waxay ku siinaysaa faylal la doortay procfs ΠΈ sysfs martigeliso weelka sida waddooyinka loo maro rootfs... Ka sokow MS_BIND calanka dejiya buurta xidhitaanka, calammo kale oo buurta ku dul yaal ayaa qeexaya xidhiidhka ka dhexeeya isbeddelada martida iyo meelaha magacyada weelka. Tusaale ahaan, buur ku xidhan ama waxay u boodi kartaa isbedelada /proc ΠΈ /sys geli weelka, ama ku qari iyada oo ku xidhan wicitaanka.

gunaanad

Fahamka shaqada gudaha ee Linux waxay u ekaan kartaa hawl aan macquul ahayn, maadaama kernel laftiisa uu ka kooban yahay tiro aad u badan oo kood ah, isaga oo iska dhaafa codsiyada booska isticmaale Linux iyo isku xirka nidaamka wicitaanka ee maktabadaha C sida. glibc. Hal dariiqo oo horumar lagu sameeyo waa in la akhriyo koodhka isha ee hal nidaam-hoosaadka kernel, iyada oo xoogga la saarayo fahamka wicitaannada nidaamka iyo madax-meel-isticmaalka, iyo sidoo kale is-dhexgalka ugu weyn ee kernel-ka, sida miiska file_operations. Hawlaha faylka ayaa bixiya mabda'a "wax walba waa fayl", taasoo ka dhigaysa inay si gaar ah ugu raaxaystaan ​​in la maareeyo. Faylasha isha kernel ee ku jira hagaha heerka sare fs/ soo bandhig hirgelinta nidaamyada faylalka farsamada, kuwaas oo ah lakabka duuban oo bixiya iswaafajinta ballaaran oo fudud oo u dhexeeya nidaamyada faylasha caanka ah iyo qalabka kaydinta. Isku xirka iyo dulsaar ku-kordhinta iyada oo loo marayo meelaha magacyada Linux waa sixirka VFS ee ka dhigaya abuurista weelasha akhrinta-kaliya iyo nidaamyada faylalka xididka. Marka lagu daro baaritaanka koodhka isha, eBPF aaladda xudunta u ah iyo is dhexgalka bcc
samaynta sahaminta xudunta u ah mid ka fudud waligeed.

Sxb, qor, maqaalkani faa'iido ma idiin lahaa? Waxaa laga yaabaa inaad hayso faallooyin ama faallooyin? Kuwa xiiseeya koorsada Maamulaha Linux waa lagu casuumay Maalinta Furan, taasoo dhici doonta 18-ka Abriil.

Qaybta koowaad.

Source: www.habr.com

Add a comment