Halo a h-uile duine, tha sinn a’ roinn riut an dàrna pàirt den fhoillseachadh “Virtual file Systems in Linux: carson a tha feum orra agus ciamar a tha iad ag obair?” Faodaidh tu a’ chiad phàirt a leughadh
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 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 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.py
na 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
/sys
nuair 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 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 kworker
a 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 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 a’ ruith Linux. Tha glè bheag de eadar-aghaidh cleachdaiche aig mòran de na h-innealan sin, agus chan eil dòigh ann an tionndadh "gu glan." Smaoinich air càr a thòiseachadh le bataraidh marbh nuair a tha an cumhachd don aonad smachd fsck
cuin 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 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-urrainn do phròiseas Linux sgrìobhadh an sin. Is e fear eile gu bheil siostam faidhle a tha gu ìre mhòr so-ruigsinneach deatamach airson taic làraich do dh’ innealan iomallach, leis gu bheil luchd-taic an urra ri siostaman ionadail a tha co-chosmhail ri siostaman achaidh. Is dòcha gur e am buannachd as cudromaiche (ach cuideachd as brùideil) gu bheil ro-rootfs a’ toirt air luchd-leasachaidh co-dhùnadh dè na stuthan siostam a bhios neo-sheasmhach aig ìre dealbhaidh an t-siostaim. Faodaidh a bhith ag obair le ro-rootfs a bhith neònach agus goirt, leis gu bheil caochladairean const gu tric ann an cànanan prògramaidh, ach tha na buannachdan aca gu furasta a’ fìreanachadh na cosgais a bharrachd.
cruthachadh rootfs
Feumaidh leughadh a-mhàin beagan oidhirp a bharrachd airson luchd-leasachaidh freumhaichte, agus seo far a bheil VFS a ’tighinn a-steach don dealbh. Tha Linux ag iarraidh gum bi na faidhlichean a-staigh /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 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
Faodaidh a bhith a’ tuigsinn obrachadh a-staigh Linux a bhith coltach ri obair do-dhèanta, leis gu bheil tòrr còd anns an kernel fhèin, a’ fàgail iarrtasan àite luchd-cleachdaidh Linux agus eadar-aghaidh gairm siostam ann an leabharlannan C leithid an dàrna taobh. 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/
taisbeanadh buileachadh de shiostaman faidhle brìgheil, a tha nan còmhdach fillte a bheir seachad co-chòrdalachd farsaing agus gu ìre mhath sìmplidh eadar siostaman faidhle mòr-chòrdte agus innealan stòraidh. Is e a bhith a’ ceangal agus a’ còmhdach thairis air àiteachan ainmean Linux draoidheachd VFS a tha ga dhèanamh comasach soithichean leughaidh a-mhàin agus siostaman faidhle freumh a chruthachadh. Còmhla ri sgrùdadh air a’ chòd stòr, prìomh inneal eBPF agus an eadar-aghaidh aige bcc
a’ dèanamh rannsachadh bunaiteach nas fhasa na bha e a-riamh.
A charaidean, sgrìobh, an robh an artaigil seo feumail dhut? Is dòcha gu bheil beachdan no beachdan agad? Agus thathas a’ toirt cuireadh dhaibhsan aig a bheil ùidh sa chùrsa Rianaire Linux
Source: www.habr.com