Nga punaha konae mariko i Linux: he aha te take me pehea te mahi? Wāhanga 2

Tena koutou katoa, kei te tohatoha atu matou ki a koe i te waahanga tuarua o te whakaputanga "Nga punaha konae mariko i Linux: he aha te take me pehea te mahi?" Ka taea e koe te panui i te waahanga tuatahi konei. Me whakamaumahara ki a koe ko tenei raupapa o nga whakaputanga kua rite ki te wa ki te whakarewatanga o tetahi awa hou i runga i te akoranga. "Kaiwhakahaere Linux", ka timata tata nei.

Me pehea te aro turuki i te VFS ma te whakamahi i nga taputapu eBPF me te bcc

Ko te huarahi ngawari ki te mohio me pehea te mahi a te kernel i runga i nga konae sysfs ko te kite i te mahi, ko te huarahi ngawari ki te maataki i te ARM64 ko te whakamahi eBPF. eBPF (poto mo Berkeley Packet Filter) kei roto he miihini mariko e rere ana matua, ka taea e nga kaiwhakamahi whai mana te tono (query) mai i te raina whakahau. Ko nga puna kernel e korero ana ki te kaipānui he aha te mahi a te kernel; Ko te whakahaere i nga taputapu eBPF i runga i te punaha utaina e whakaatu ana he aha te mahi a te kernel.

Nga punaha konae mariko i Linux: he aha te take me pehea te mahi? Wāhanga 2

Waimarie, he ngawari te tiimata ki te whakamahi i te eBPF me te awhina o nga taputapu Ph, e waatea ana hei kete mai i te tohatoha whanui Linux me te tuhi taipitopito Bernard Kereki. Utauta bcc Ko nga tuhinga a Python me nga whakaurunga iti o te waehere C, ko te tikanga ko te tangata mohio ki nga reo e rua ka ngawari ki te whakarereke. IN bcc/tools E 80 nga tuhinga Python, ko te tikanga ka taea e tetahi kaiwhakawhanake, kaiwhakahaere punaha ranei te whiriwhiri i tetahi mea e tika ana mo te whakaoti rapanga.
Ki te whai whakaaro iti rawa mo nga mahi a nga VFS i runga i te punaha whakahaere, whakamatau vfscount ranei vfsstat. Ma tenei e whakaatu, me kii, he maha nga waea vfs_open() e “to ’na mau hoa” e tupu mau i te mau tetoni atoa.

Nga punaha konae mariko i Linux: he aha te take me pehea te mahi? Wāhanga 2

vfsstat.py he tuhinga Python me nga whakaurunga waehere C e tatau noa ana i nga waea mahi VFS.

Ka hoatu e tatou he tauira iti ake ka kite he aha te tupu ina whakaurua he puku kohiko USB ki roto i te rorohiko ka kitea e te punaha.

Nga punaha konae mariko i Linux: he aha te take me pehea te mahi? Wāhanga 2

Ma te whakamahi i te eBPF ka taea e koe te kite i nga mea kei roto /sysina whakauruhia he puku kohiko USB. He tauira ngawari me te uaua ka whakaatuhia i konei.

I roto i te tauira i whakaaturia i runga ake nei, bcc taputapu trace.py ka tā i te karere ina whakahaeretia te whakahau sysfs_create_files(). Ka kite tatou i tera sysfs_create_files() i whakarewahia ma te whakamahi kworker awa i roto i te whakautu ki te meka i whakaurua te puku kohiko, engari he aha te kōnae i hanga? Ko te tauira tuarua e whakaatu ana i te kaha o te eBPF. I konei trace.py Ka tā i te whakamuri kernel (kowhiringa-K) me te ingoa o te konae i hangaia sysfs_create_files(). Ko te whakaurunga tauākī kotahi ko te waehere C kei roto he aho whakatakotoranga ngawari te mohio e whakaratohia ana e te tuhinga Python e whakahaere ana i te LLVM te whakahiato tika-i-wa. Ka whakahiatohia tenei raina ka mahia i roto i te miihini mariko kei roto i te kakano. Waitohu mahi katoa sysfs_create_files () me whakaputa ano ki te whakahau tuarua kia taea ai e te aho whakatakotoranga te tohu ki tetahi o nga tawhā. Ko nga hapa i roto i tenei waahanga o te waehere C ka puta mai nga hapa e mohiotia ana mai i te kaitoha C. Hei tauira, ki te waihohia te -l tawhā, ka kite koe "I rahua te whakahiato kupu BPF." Ka kitea e nga kaihanga e mohio ana ki a C me Python nga taputapu bcc ngawari ki te whakawhānui me te whakarereke.

Ina whakauruhia te puku USB, ka whakaatuhia e te kernel backtrace he miro te PID 7711 kworkernana i hanga te konae «events» в sysfs. No reira, ko te karanga mai sysfs_remove_files() ka whakaatu ko te tango i te puku ka mutu te whakakore i te konae events, e hāngai ana ki te ariā whānui o te tatau tohutoro. I te wa ano, te tirohanga sysfs_create_link () me te eBPF i te wa e whakauru ana i te puku USB ka whakaatu he 48 nga hononga tohu kua hangaia.

Na he aha te take o te konae takahanga? Whakamahinga cscope Mo te rapu __pūrere_tāpiri_kōpae(), e whakaatu ana he aha te take disk_add_events (), me tetahi ranei "media_change", ranei "eject_request" ka taea te tuhi ki te konae takahanga. I konei ka whakamohiotia e te paparanga paraka te mokowākaiwhakamahi kua puta mai he "kopae" ka puta. Kia mahara he pehea te mohio o tenei tikanga rangahau ma te whakauru i te puku USB, ka whakatauritea ki te ngana ki te whakaaro me pehea te mahi mai i te puna.

Ka taea e nga punaha konae pakiaka panui-anake nga taputapu whakauru

Ko te tikanga, kaore tetahi e whakaweto i te tūmau, i tana rorohiko ranei ma te tango i te mono mai i te turanga. Engari he aha? Na te mea ko nga punaha konae kua whakauruhia ki runga i nga taputapu rokiroki tinana kua roa te tuhi, a ko nga hanganga raraunga e tuhi ana i to raatau ahuatanga kaore pea i te tukutahi me te tuhi ki te rokiroki. Ka pa ana tenei, me tatari nga rangatira o te punaha kia tae ra ano ki te waa o muri mai ki te whakarewa i te taputapu. fsck filesystem-recovery a, i roto i te take kino rawa, ngaro raraunga.

Heoi, e mohio ana tatou he maha nga taputapu IoT, tae atu ki nga pouara, thermostats me nga motuka, kei te whakahaere i a Linux inaianei. Ko te nuinga o enei taputapu he iti noa te atanga kaiwhakamahi, a kaore he huarahi hei whakaweto "ma." Whakaarohia te tiimata i te motuka me te pākahiko mate i te wa e kaha ana te hiko ki te wae whakahaere Linux pekepeke tonu ki runga, ki raro. Me pehea te putu o te punaha kaore he roa fsckahea te mutunga ka tiimata te miihini? A he ngawari te whakautu. Ko nga taputapu whakauru ka whakawhirinaki ki te punaha konae pakiaka mo te panui anake (whakapoto ro-rootfs (panui-anake te punaha pakiaka)).

ro-rootfs he maha nga painga kaore e kitea i te pono. Ko tetahi painga ko te kore e taea e te malware te tuhi ki /usr ranei /lib, mena kaore he mahinga Linux e taea te tuhi ki reira. Ko tetahi atu he mea nui te punaha konae kore e taea te whakarereke mo te tautoko mara o nga taputapu mamao, na te mea ka whakawhirinaki nga kaimahi tautoko ki nga punaha a-rohe e rite ana ki nga punaha mara. Ko te painga nui rawa atu (engari ko te tino hianga) ko te ro-rootfs ka akiaki i nga kaiwhakawhanake ki te whakatau ko wai nga mea punaha ka kore e rereke i te waahanga hoahoa o te punaha. Ko te mahi tahi me nga ro-rootfs he tino raruraru, he mamae hoki, na te mea kei roto nga taurangi const i roto i nga reo hootaka, engari ko o raatau painga he ngawari ki te whakatika i nga taapiri taapiri.

hanga rootfs Ko te panui-anake me whakapau kaha mo nga kaiwhakawhanake kua whakauruhia, a koinei te waahi ka uru mai a VFS ki te pikitia. Kei te hiahia a Linux kia uru nga konae /var ka taea te tuhi, hei taapiri, he maha nga tono rongonui e whakahaere ana i nga punaha whakauru ka ngana ki te hanga whirihoranga dot-files в $HOME. Ko tetahi otinga mo nga konae whirihoranga i roto i te raarangi kaainga ko te mahi i mua i te hanga me te hanga ki roto rootfs. Hoki /var Ko tetahi huarahi ka taea ko te whakairi ki runga i tetahi waahanga tuhi motuhake, i te wa / panui-anake kua whakairihia. Ko tetahi atu mea rongonui ko te whakamahi i nga herenga whakakikorua ranei.

Ka taea te hono me te taapiri, te whakamahi ma nga ipu

Te whakahaere whakahau man mount Ko te huarahi pai rawa atu ki te ako mo nga maunga ka taea te here me te whakakikorua, ka taea e nga kaiwhakawhanake me nga kaiwhakahaere punaha te hanga i tetahi punaha konae ki tetahi ara katahi ka whakaatu ki nga tono i tetahi atu. Mo nga punaha whakauru, ko te tikanga tenei ko te kaha ki te penapena i nga konae ki roto /var i runga i te puku kohiko panui-anake, engari he whakakikorua, he ara maunga hono mai i tmpfs в /var ka utaina, ka taea e nga tono te tuhi tuhipoka ki reira (scrawl). Ko te wa e whai ake nei ka huri koe i nga huringa ki /var ka ngaro. Ko te maunga whakakikorua ka hangaia he hononga ki waenga tmpfs me te punaha konae kei raro ka taea e koe te whakarereke i nga ahuatanga o nga konae kei roto ro-tootf ka taea e te maunga herea nga mea hou kia noho kau tmpfs ko nga kōpaki ka kitea hei tuhi ki roto ro-rootfs huarahi. Ahakoa overlayfs koinei te mea tika (proper) momo punaha konae, ka whakauruhia te Maunga herea ki roto Mokowāingoa VFS.

I runga i te whakaahuatanga o te whakakikorua me te hononga hono, kaore tetahi e miharo Nga ipu Linux he kaha te whakamahi. Kia kite tatou he aha te mahi ina whakamahi tatou systemd-nspawn ki te whakahaere i te ipu ma te whakamahi i te taputapu mountsnoop i bcc.

Te Challenge system-nspawn ka timata te ipu i te wa e rere ana mountsnoop.py.

Kia kite tatou i te mea i tupu:

Te whakatairanga mountsnoop i te wa e "booting" ana te ipu e whakaatu ana ko te wa whakahaere o te ipu e tino ti'aturi ana ki te maunga e honoa ana (Ko te timatanga anake o te putanga roa ka whakaatuhia).

ko te reira systemd-nspawn whakarato i nga konae kua tohua ki roto procfs и sysfs te manaaki ki te ipu hei huarahi ki reira rootfs. Haunga MS_BIND Ko te haki e whakatu ana i te maunga here, ko etahi o nga haki kei runga i te maunga e tohu ana i te hononga i waenga i nga huringa ki te kaihautu me nga waahi ingoa ipu. Hei tauira, ka taea e te hononga hono te peke i nga huringa ki /proc и /sys ki roto i te ipu, huna ranei i runga i te waea.

mutunga

Ko te mohio ki nga mahi o roto o Linux ka rite ki te mahi kaore e taea, na te mea kei roto i te kernel te nui o te waehere, ka waiho ki te taha o nga tono mokowā kaiwhakamahi Linux me nga hononga waea waea i roto i nga whare pukapuka C penei i te glibc. Ko tetahi huarahi ki te ahu whakamua ko te panui i te waehere puna o tetahi puunaha iti kernel, me te aro nui ki te mohio ki nga waea punaha me nga pane mokowhiti-kaiwhakamahi, tae atu ki nga hononga matua o roto, penei i te ripanga. file_operations. Ko nga mahinga o nga konae e whakarato ana i te maapono "he konae nga mea katoa", ka tino pai ki te whakahaere. Ko nga konae puna kernel C kei te raarangi taumata-runga fs/ whakaatu he whakatinanatanga o nga punaha konae mariko, he paparanga takai e whakarato ana i te hototahi whanui me te ngawari noa i waenga i nga punaha konae rongonui me nga taputapu rokiroki. Ko te hono me te whakakikorua i nga mokowāingoa Linux ko te makutu o VFS e taea ai te hanga ipu panui-anake me nga punaha konae pakiaka. Ka honoa me te tirotiro i te waehere puna, te taputapu matua eBPF me tona atanga bcc
kia ngawari ake te tuhura matua.

E hoa ma, tuhia mai, i whai hua tenei tuhinga ki a koe? Tena pea kei a koe etahi korero, korero ranei? A ko te hunga e hiahia ana ki te akoranga Kaiwhakahaere Linux ka tonohia Ra Tuwhera, ka tu hei te 18 o Aperira.

Te wahanga tuatahi.

Source: will.com

Tāpiri i te kōrero