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
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 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.
Nasiib wanaag, bilawga isticmaalka eBPF waa wax sahlan iyadoo la kaashanayo qalabka 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.
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.
Isticmaalka eBPF waxaad ku arki kartaa waxa ka dhacaya gudaha
/sys
marka USB flash drive la geliyo. Tusaale fudud oo adag ayaa halkan lagu muujiyey.
Tusaalaha kor ku xusan, bcc
qalab 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. kworker
kaas 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 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 fsck
goorma ugu dambeyntii matoorku bilaabaa inuu shaqeeyo? Jawaabtuna waa sahlan tahay. Aaladaha ku dhexjira waxay ku tiirsan yihiin nidaamka faylka xididka 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 (proper
Nooca nidaamka faylka, Buurta la isku xidhi karo ayaa lagu hirgeliyay
Iyada oo ku saleysan sharraxaadda dulsaarka iyo buurta la isku xiri karo, qofna lama yaabin taas 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
Source: www.habr.com