Halò a h-uile duine, tha sinn aâ roinn an dĂ rna pĂ irt den fhoillseachadh âSiostaman faidhle brĂŹgheil ann an LinuxCarson a tha feum orra agus ciamar a tha iad ag obair? Faodar aâ chiad phĂ irt a leughadh . Cuimhnichidh sinn gu bheil an t-sreath fhoillseachaidhean seo ann an Ă m aig an aon Ă m ri cur air bhog sruthan Ăšr air aâ chĂšrsa , a thòisicheas gu math luath.
Mar a chumas tu sĂšil air VFS aâ cleachdadh innealan eBPF agus bcc
An dòigh as fhasa air tuigsinn mar a tha an kernel ag obrachadh air faidhlichean sysfs is e sin fhaicinn ann an cleachdadh, agus is e an dòigh as fhasa air ARM64 fhaicinn eBPF a chleachdadh. Tha eBPF (goirid airson Berkeley Packet Filter) air a dhèanamh suas de inneal brĂŹgheil a âruith a-steach , a dh'fhaodas luchd-cleachdaidh sochair iarraidh (query) bhon loidhne-Ă ithne. Tha na stòran kernel ag innse don leughadair dè as urrainn don kernel a dhèanamh; tha ruith na h-innealan eBPF air siostam luchdaichte aâ sealltainn na tha an kernel aâ dèanamh.

Gu fortanach, tha e gu math furasta tòiseachadh aâ cleachdadh eBPF le cuideachadh bho innealan , a tha rim faighinn mar phasgan bhon sgaoileadh coitcheann agus air a chlĂ radh gu mionaideach . Innealan bcc nan sgriobtaichean Python le cuir a-steach beaga de chòd C, a tha aâ ciallachadh gum faod neach sam bith a tha eòlach air an dĂ chĂ nan an atharrachadh gu furasta. ANNS bcc/tools Tha 80 sgriobt Python ann, a tha aâ ciallachadh gum bi e comasach do leasaiche no rianadair siostam rudeigin a thaghadh a tha iomchaidh airson fuasgladh fhaighinn air an duilgheadas.
Gus co-dhiĂš beachd uachdarach fhaighinn air dè an obair a bhios VFSs aâ dèanamh air siostam ruith, feuch vfscount no vfsstat. Seallaidh seo, canaidh sinn, gu bheil dusanan de ghlaodhan vfs_open() agus bidh âa charaideanâ aâ tachairt gu litireil a h-uile diog.

vfsstat.pyna sgriobt Python le cuir a-steach còd C a tha dĂŹreach aâ cunntadh gairmean gnĂŹomh VFS.
Bheir sinn seachad eisimpleir nas lugha agus chÏ sinn dè thachras nuair a chuireas sinn draibhear USB flash a-steach do choimpiutair agus an siostam ga lorg.

Le bhith aâ cleachdadh eBPF chĂŹ thu na tha aâ tachairt ann
/sysnuair a thèid draibhear USB flash a chuir a-steach. Tha eisimpleir sÏmplidh agus iom-fhillte air a shealltainn an seo.
Anns an eisimpleir gu h-Ă rd, bcc ionnstramaid clò-bhuail teachdaireachd nuair a thèid an Ă ithne a ruith sysfs_create_files(). ChĂŹ sinn sin sysfs_create_files() air a chuir air bhog aâ cleachdadh kworker sruth mar fhreagairt gun deach an draibhear flash a chuir a-steach, ach dè am faidhle a chaidh a chruthachadh? Tha an dĂ rna eisimpleir aâ sealltainn cumhachd eBPF. Seo trace.py Clò-bhuail kernel backtrace (-K roghainn) agus ainm an fhaidhle a chaidh a chruthachadh sysfs_create_files(). Is e cuir a-steach aithris singilte còd C a tha aâ toirt a-steach sreang cruth a tha furasta aithneachadh air a thoirt seachad leis an sgriobt Python a tha aâ ruith LLVM neach-cruinneachaidh dĂŹreach ann an Ăšine. Bidh e a 'cur ri chèile an loidhne seo agus ga chur an gnĂŹomh ann an inneal mas-fhĂŹor taobh a-staigh an kernel. Ainm-sgrĂŹobhte lĂ n-ghnĂŹomh sysfs_create_files () feumar ath-riochdachadh san dĂ rna Ă ithne gus an urrainn don sreang cruth iomradh a thoirt air aon de na paramadairean. Bidh mearachdan sa phĂŹos seo de chòd C aâ ciallachadh gu bheil mearachdan aithnichte bhon cho-chruinneachadh C. Mar eisimpleir, ma thèid am paramadair -l fhĂ gail air falbh, chĂŹ thu âDhâ fhĂ illig teacsa BPF a chuir ri chèile. â Lorgaidh luchd-leasachaidh a tha eòlach air C agus Python na h-innealan bcc furasta a leudachadh agus atharrachadh.
Nuair a thèid an draibhear USB a chuir a-steach, seallaidh an cĂšl-raon kernel gur e snĂ ithlean a thâ ann am PID 7711 kworkera chruthaich am faidhle ÂŤeventsÂť в sysfs. A rèir sin, a 'ghairm bho sysfs_remove_files() seallaidh e gun deach toirt air falbh an draibh gun deach am faidhle a sguabadh Ă s events, a tha a rèir bun-bheachd coitcheann cunntais iomraidh. Aig an aon Ă m, a 'coimhead sysfs_create_link () le eBPF fhad âs a chuireas tu a-steach an draibhear USB aâ sealltainn gun deach co-dhiĂš 48 ceanglaichean samhlachail a chruthachadh.
Mar sin dè aâ phuing a thâ aig faidhle nan tachartasan? Cleachdadh Airson lorg , a 'sealltainn dè tha e ag adhbhrachadh disk_add_events (), agus an dĂ rna cuid "media_change", no "eject_request" faodar a chlĂ radh ann am faidhle tachartais. An seo tha an còmhdach bloc kernel ag innse don luchd-cleachdaidh gu bheil âdiosgâ air nochdadh agus air a chuir a-mach. Thoir an aire cho fiosrachail sa tha an dòigh sgrĂšdaidh seo le bhith aâ cuir a-steach draibhear USB, an taca ri bhith aâ feuchainn ri faighinn a-mach mar a tha cĂšisean ag obair dĂŹreach bhon stòr.
Tha siostaman faidhle freumha leugh-a-mhĂ in aâ comasachadh innealan freumhaichte
Gu dearbh, chan eil duine a 'tionndadh an fhrithealaiche no an coimpiutair aca le bhith a' tarraing a 'phlug bhon t-socaid. Ach carson? Tha seo air sgà th 's gum faodadh gu bheil siostaman faidhle air an cur suas air innealan stòraidh corporra air a dhol sÏos air sgrÏobhadh, agus is dòcha nach bi na structaran dà ta a tha a' clà radh an staid aca air an co-shioncronachadh le sgrÏobhaidhean chun an stòraidh. Nuair a thachras seo, feumaidh luchd-seilbh an t-siostaim feitheamh gus an ath bhot gus an goireas a chuir air bhog. fsck filesystem-recovery agus, anns a 'chÚis as miosa, a' call dà ta.
Ach, tha fios againn uile gu bheil mòran innealan IoT, a bharrachd air routers, teirmeastait agus cĂ raichean, a-nis ag obair air LinuxChan eil eadar-aghaidh cleachdaiche idir aig mòran de na h-innealan seo, agus chan eil dòigh ann an dĂšnadh sĂŹos gu glan. Smaoinich air cĂ r a thòiseachadh le bataraidh marbh nuair a thèid an cumhachd chun inneal smachd a ghearradh dheth. daonnan a 'leum suas is sĂŹos. Ciamar a tha an siostam a 'brògan gun a bhith fada fsckcuin a thòisicheas an einnsean mu dheireadh aâ ruith? Agus tha am freagairt sĂŹmplidh. Tha innealan freumhaichte an urra ris an t-siostam faidhle freumh (giorraichte ro-rootfs (siostam faidhle freumh leughaidh a-mhĂ in)).
ro-rootfs aâ tabhann mòran bhuannachdan nach eil cho follaiseach na dearbhachd. Is e aon bhuannachd nach urrainn do malware sgrĂŹobhadh thuige /usr no /lib, mura h-eil pròiseas ann Linux chan urrainn dhomh sgrĂŹobhadh thuige. Is e fear eile gu bheil siostam faidhle nach gabh atharrachadh gu ĂŹre mhòr deatamach airson taic lĂ raich airson innealan iomallach, leis gu bheil luchd-taic aâ cleachdadh siostaman ionadail a tha gu ĂŹre mhòr co-ionann ris na siostaman air an lĂ rach. Is dòcha gur e am buannachd as cudromaiche (ach cuideachd as seòlta) gu bheil ro-rootfs aâ toirt air luchd-leasachaidh co-dhĂšnadh dè na nithean siostaim a bhios neo-atharraichte trĂ th ann an dealbhadh an t-siostaim. Faodaidh a bhith ag obair le ro-rootfs a bhith mĂŹ-chofhurtail agus pianail, mar a thachras gu tric le caochladairean const ann an cĂ nanan prògramaidh, ach tha na buannachdan aige gu math nas motha na an cosgais a bharrachd.
cruthachadh rootfs Feumaidh comas-gnĂŹomh leughaidh a-mhĂ in beagan oidhirp a bharrachd bho luchd-leasachaidh freumhaichte, agus is ann an seo a thig VFS a-steach don gheama. Linux ag iarraidh gum bi faidhlichean ann /var Chaidh an sgrĂŹobhadh, agus a bharrachd air an sin, feuchaidh mòran thagraidhean mòr-chòrdte a bhios aâ ruith siostaman freumhaichte ri rèiteachadh a chruthachadh dot-files в $HOME. Is e aon fhuasgladh airson faidhlichean rèiteachaidh san eòlaire dachaigh mar as trice a bhith gan gineadh agus gan togail a-steach rootfs. airson /var Is e aon dòigh-obrach a dhâ fhaodadh a bhith ga chuir suas air sgaradh sgrĂŹobhte fa leth, fhad âs a tha / air a chuir suas ri leughadh a-mhĂ in. Is e roghainn eile a tha aâ còrdadh ri mòran a bhith aâ cleachdadh còmhdach ceangail no ath-chòmhdach.
Sròin a ghabhas ceangal agus cruachadh, an cleachdadh le soithichean
Cur an gnĂŹomh Ă ithne man mount an dòigh as fheĂ rr air ionnsachadh mu shreap ceangail agus ath-chòmhdach, a bheir comas do luchd-leasachaidh agus luchd-rianachd shiostaman siostam faidhle a chruthachadh ann an aon shlighe agus an uairsin a nochdadh do thagraidhean ann an slighe eile. Airson siostaman freumhaichte, tha seo aâ ciallachadh comas faidhlichean a stòradh a-steach /var air draibheadh ââââflash a tha furasta a leughadh a-mhĂ in, ach slighe sreap ath-chòmhdach no ceangail bho tmpfs в /var nuair a thèid a luchdachadh, leigidh e le tagraidhean notaichean a sgrĂŹobhadh an sin (sgrĂŹobadh). An ath thuras a chuireas tu na h-atharrachaidhean air /var bhi air chall. Bidh sliabh ath-chòmhdach aâ cruthachadh aonadh eadar tmpfs agus an siostam fhaidhlichean bunaiteach agus leigidh e leat atharraichean os-cionn a dhèanamh air na faidhlichean a tha ann mu thrĂ th ro-tootf ach faodaidh beinn ceangail feadhainn Ăšra a dhèanamh falamh tmpfs pasganan rim faicinn mar a ghabhas sgrĂŹobhadh a-steach ro-rootfs dòighean. Fhad 's a tha overlayfs is e seo am fear ceart (proper) seòrsa siostam faidhle, tha inneal ceangail air a chuir an gnĂŹomh a-steach .
Stèidhichte air an tuairisgeul air an ath-chòmhdach agus an t-sliabh a ghabhas ceangal, chan eil e na iongnadh do dhuine sam bith tha iad air an cleachdadh gu gnĂŹomhach. ChĂŹ sinn dè thachras nuair a chleachdas sinn gus an soitheach a ruith aâ cleachdadh an inneil mountsnoop ĐžŃ bcc.
DĂšbhlan system-nspawn tòisichidh an soitheach fhad âs a tha e aâ ruith mountsnoop.py.
ChÏ sinn dè thachair:
ĐапŃŃĐş mountsnoop fhad âs a tha an soitheachâ booting âaâ sealltainn gu bheil Ăšine ruith an t-soithich gu mòr an urra ris an t-sreap a tha ceangailte (Chan eil ach toiseach an toraidh fhada air a shealltainn).
tha e systemd-nspawn aâ toirt seachad faidhlichean taghte ann an procfs и sysfs aoigheachd gu soitheach mar shlighean thuige rootfs. Ach a-mhĂ in MS_BIND bratach a shuidhicheas an t-sliabh ceangail, tha cuid de bhrataichean eile air an t-sliabh aâ mĂŹneachadh aâ cheangail eadar atharrachaidhean air ainmean-Ă ite an òstair agus an soitheach. Mar eisimpleir, faodaidh sliabh ceangailte atharrachaidhean a sheachnadh /proc и /sys a-steach don ghobhar, no cuir am falach iad a rèir aâ ghairm.
co-dhĂšnadh
Aâ tuigsinn an structair a-staigh Linux dhâ fhaodadh e a bhith coltach ri obair do-dhèanta, leis gu bheil tòrr còd anns an eithne fhèin, aâ fĂ gail aplacaidean Ă ite-cleachdaidh an dĂ rna taobh Linux agus eadar-aghaidhean gairm siostaim ann an leabharlannan C leithid glibc. Is e aon dhòigh air adhartas a dhèanamh a bhith aâ leughadh còd stòr aon fho-shiostam kernel, le cuideam air a bhith aâ tuigsinn fiosan siostam agus bannan-cinn Ă ite-cleachdaidh, a bharrachd air na prĂŹomh eadar-aghaidh kernel a-staigh, leithid clĂ r file_operations. Tha gnĂŹomhachd faidhle a 'toirt seachad a' phrionnsapail "tha a h-uile dad na fhaidhle", gan dèanamh gu sònraichte tlachdmhor a bhith gan riaghladh. C faidhlichean stòr kernel anns an eòlaire Ă rd-ĂŹre fs/ aâ riochdachadh buileachadh de shiostaman faidhle brĂŹgheil, a tha nan sreath-pasgadh a bheir seachad co-chòrdalachd farsaing agus an ĂŹre mhath sĂŹmplidh eadar siostaman faidhle mòr-chòrdte agus innealan stòraidh. Aâ cur suas le ceangal agus aâ cur thairis air tro Ă iteachan-ainm. Linux â is e draoidheachd VFS a tha ga dhèanamh comasach soithichean agus siostaman faidhle freumha leughaidh a-mhĂ in a chruthachadh. Còmhla ri sgrĂšdadh air aâ chòd tĂšsail, inneal eithne eBPF agus an eadar-aghaidh aige bcc
aâ dèanamh rannsachadh bunaiteach nas fhasa na bha e a-riamh.
A chĂ irdean, leigibh fios dhomh an robh an t-artaigil seo feumail dhuibh. 'S dòcha gu bheil beachdan no molaidhean sam bith agaibh? Agus dhaibhsan aig a bheil Ăšidh anns a' chĂšrsa "Rianadair", Linux", tha sinn aâ toirt cuireadh dhut , a thèid a chumail air 18 Giblean.
Source: www.habr.com
