Litsamaiso tsa faele tsa Virtual ho Linux: hobaneng li hlokahala, 'me li sebetsa joang? Karolo ea 2

Lumelang bohle, re arolelana le lona karolo ea bobeli ea khatiso "Virtual file system in Linux: hobaneng li hlokahala, 'me li sebetsa joang?" U ka bala karolo ea pele mona. A re u hopotse hore letoto lena la likhatiso ke la nako hore le tsamaisane le ho thakholoa ha molapo o mocha thupelong. "Linux Administrator", e qalang kapele haholo.

Mokhoa oa ho beha VFS leihlo u sebelisa lisebelisoa tsa eBPF le bcc

Mokhoa o bonolo oa ho utloisisa hore na kernel e sebetsa joang lifaeleng sysfs ke ho e bona ha e ntse e sebetsa, 'me tsela e bonolo ea ho shebella ARM64 ke ho sebelisa eBPF. eBPF (e khuts'oane bakeng sa Filter ea Berkeley Packet) e na le mochini o sebetsang o kenang mantlha, eo basebelisi ba nang le menyetla ba ka e kopang (query) ho tsoa molaong oa taelo. Mehloli ea kernel e bolella 'mali seo kernel e ka se etsang; ho tsamaisa lisebelisoa tsa eBPF tsamaisong e tletseng ho bontša seo kernel e hlileng e se etsang.

Litsamaiso tsa faele tsa Virtual ho Linux: hobaneng li hlokahala, 'me li sebetsa joang? Karolo ea 2

Ka lehlohonolo, ho qala ho sebelisa eBPF ho bonolo haholo ka thuso ea lisebelisoa bcc, tse fumanehang e le liphutheloana tse tsoang kabong e akaretsang Linux 'me e ngotsoe ka botlalo Bernard Gregg. Lisebelisoa bcc ke lingoloa tsa Python tse kentsoeng tse nyane tsa khoutu ea C, ho bolelang hore mang kapa mang ea tsebang lipuo tseo ka bobeli a ka li fetola habonolo. IN bcc/tools Ho na le mangolo a 80 a Python, ho bolelang hore mohlomong moqapi kapa motsamaisi oa sistimi o tla khona ho khetha ntho e loketseng ho rarolla bothata.
Ho fumana bonyane mohopolo o ka holimo oa hore na li-VFS li etsa mosebetsi ofe tsamaisong e sebetsang, leka vfscount kapa vfsstat. Sena se tla bontša, ha re re, mehala e mengata vfs_open() ’me “metsoalle ea hae” e etsahala ka tsela ea sebele motsotsoana o mong le o mong.

Litsamaiso tsa faele tsa Virtual ho Linux: hobaneng li hlokahala, 'me li sebetsa joang? Karolo ea 2

vfsstat.py ke sengoloa sa Python se kentsoeng khoutu ea C se balang feela mehala ea tšebetso ea VFS.

A re faneng ka mohlala o sa reng letho 'me re bone hore na ho etsahala'ng ha re kenya USB flash drive khomphuteng ea hau 'me tsamaiso ea e lemoha.

Litsamaiso tsa faele tsa Virtual ho Linux: hobaneng li hlokahala, 'me li sebetsa joang? Karolo ea 2

U sebelisa eBPF u ka bona se etsahalang ho /sysha USB flash drive e kentsoe. Mohlala o bonolo le o rarahaneng o bontšoa mona.

Mohlala o bontšitsoeng ka holimo, bcc sesebelisoa trace.py e hatisa molaetsa ha taelo e sebetsa sysfs_create_files(). Re bona seo sysfs_create_files() e ile ea qala ho sebelisoa kworker stream ho arabela taba ea hore flash drive e kentsoe, empa ke faele efe e entsoeng? Mohlala oa bobeli o bontša matla a eBPF. Mona trace.py E hatisa kernel backtrace (-K kgetho) le lebitso la faele e entsoeng sysfs_create_files(). Kenyelletso ea polelo e le 'ngoe ke khoutu ea C e kenyelletsang khoele e bonoang habonolo e fanoeng ke mongolo oa Python o tsamaisang LLVM. mokopanyi wa nako feela. E kopanya mohala ona ebe e o etsa ka mochini o ka hare ho kernel. Saeno ea ts'ebetso e felletseng sysfs_create_files () e tlameha ho hlahisoa hape ka taelo ea bobeli e le hore khoele ea sebopeho e ka lebisa ho e 'ngoe ea li-parameter. Liphoso karolong ena ea khoutu ea C li baka liphoso tse hlokomelehang ho tsoa ho mokopanyi oa C. Mohlala, haeba -l parameter e siiloe, u tla bona "E hlolehile ho bokella mongolo oa BPF." Bahlahisi ba tloaelaneng le C le Python ba tla fumana lisebelisoa bcc bonolo ho atolosa le ho fetola.

Ha USB drive e kenngoa, mokokotlo oa kernel o tla bontša hore PID 7711 ke khoele. kworkere entseng faele «events» в sysfs. Ka hona, mohala o tsoang ho sysfs_remove_files() e tla bontša hore ho tlosa drive ho entse hore faele e hlakoloe events, e tsamaellanang le mohopolo o akaretsang oa ho bala litšupiso. Ka nako e ts'oanang, ho shebella sysfs_create_link () ka eBPF ha o kenya USB drive e tla bontša hore bonyane lihokelo tsa tšoantšetso tse 48 li entsoe.

Joale ntlha ea faele ea liketsahalo ke efe? Tšebeliso cscope Bakeng sa ho batla __sesebelisoa_eketsa_disk(), e bontša seo e se bakang disk_add_events (), le kapa "media_change", kapa "eject_request" e ka tlalehoa faeleng ea ketsahalo. Mona kernel block layer e tsebisa sebaka sa basebelisi hore "disk" e hlahile mme e ntšitsoe. Hlokomela hore na mokhoa ona oa ho etsa lipatlisiso o ruta hakae ka ho kenya USB drive, ha e bapisoa le ho leka ho fumana hore na lintho li sebetsa joang ho tsoa mohloling feela.

Sistimi ea ho bala feela ea metso e thusa lisebelisoa tse kentsoeng

Ehlile, ha ho motho ea timang seva kapa komporo ea bona ka ho hula polaka ho tloha soketeng. Empa hobaneng? Lebaka ke hobane litsamaiso tsa faele tse kentsoeng lisebelisoa tsa polokelo ea 'mele li kanna tsa ba le mengolo e salletseng morao, mme meaho ea data e rekotang boemo ba eona e kanna ea se ke ea hokahanngoa le ho ngolla polokelong. Ha sena se etsahala, beng ba sistimi ba tlameha ho ema ho fihlela boot bo latelang ho qala ts'ebeliso. fsck filesystem-recovery 'me, boemong bo bobe ka ho fetisisa, ho lahleheloa ke data.

Leha ho le joalo, bohle rea tseba hore lisebelisoa tse ngata tsa IoT, hammoho le li-routers, li-thermostats le likoloi, joale li tsamaisa Linux. Tse ngata tsa lisebelisoa tsena ha li na sebopeho sa mosebedisi, 'me ha ho na mokhoa oa ho li tima "ka mokhoa o hloekileng." Ak'u inahanele ho qala koloi e nang le betere e shoeleng ha matla a taolo a le teng Linux ho qhomela hodimo le fatshe kamehla. Ho tla joang hore ebe tsamaiso e qala ntle le nako e telele fsckqetellong enjene e qala ho sebetsa neng? 'Me karabo e bonolo. Lisebelisoa tse kentsoeng li itšetlehile ka sistimi ea faele ea motso bakeng sa ho bala feela (qotsitsoe ro-rootfs (bala-feela motso fileystem)).

ro-rootfs fana ka melemo e mengata e sa totobalang ho feta bonnete. Molemo o mong ke hore malware ha e khone ho ngolla /usr kapa /lib, haeba ho se na mokhoa oa Linux o ka ngolang moo. E 'ngoe ke hore sistimi ea faele e ke keng ea fetoha e bohlokoa haholo bakeng sa ts'ehetso ea masimong ea lisebelisoa tse hole, kaha basebetsi ba ts'ehetso ba its'epahalla lits'ebetsong tsa lehae tse ts'oanang le lits'ebetso tsa masimong. Mohlomong molemo oa bohlokoa ka ho fetisisa (empa hape o le bolotsana) ke hore ro-rootfs e qobella bahlahisi ho etsa qeto ea hore na ke lintho life tsa tsamaiso tse ke keng tsa fetoha sethaleng sa moralo oa tsamaiso. Ho sebetsa le ro-rootfs ho ka ba ntho e sa thabiseng le ho utloisa bohloko, kaha const variables hangata e le lipuong tsa lenaneo, empa melemo ea bona e fana ka mabaka a mangata a eketsehileng.

pōpo rootfs Ho bala feela ho hloka boikitlaetso bo eketsehileng bakeng sa bahlahisi ba kentsoeng, 'me ke hona moo VFS e kenang setšoantšong. Linux e hloka hore lifaele li kene /var li ne li ngoloa, 'me ho feta moo, lits'ebetso tse ngata tse tsebahalang tse tsamaisang litsamaiso tse kentsoeng li tla leka ho theha tlhophiso dot-files в $HOME. Tharollo e le 'ngoe bakeng sa lifaele tsa tlhophiso bukeng ea lapeng hangata ke ho li etsa esale pele le ho li haha rootfs. bakeng sa /var Mokhoa o mong o ka khonehang ke oa ho e beha karolong e arohaneng e ngoloang, athe / e kentsoeng ka ho baloa feela. Mokhoa o mong o tsebahalang ke ho sebelisa li-bind kapa overlay mounts.

Lithaba tse hokahantsoeng le tse tsitsitseng, ts'ebeliso ea tsona ke lijana

Ho phethahatsa taelo man mount ke tsela e molemohali ea ho ithuta ka li-mounts tse tlamehang le tse ka holimo, tse fang baetsi le batsamaisi ba sistimi bokhoni ba ho theha sistimi ea faele ka tsela e 'ngoe ebe ba e pepesetsa lits'ebetso ho e' ngoe. Bakeng sa litsamaiso tse kentsoeng, sena se bolela bokhoni ba ho boloka lifaele ho /var ho flash drive e baloang feela, empa tsela e koaheletsoeng kapa e hokahaneng e tsoang ho tmpfs в /var ha e kenya, e tla lumella lits'ebetso ho ngola lintlha moo (scrawl). Nakong e tlang ha o bulela liphetoho ho /var e tla lahleha. Thaba ea overlay e theha kopano pakeng tsa tmpfs le sistimi e ka tlase ea faele mme e o lumella ho etsa liphetoho tse hlakileng ho lifaele tse teng ho ro-tootf athe thaba e tlamehang e ka etsa hore tse ncha li se na letho tmpfs liphutheloana tse hlahang ka mokhoa o ngoloang ro-rootfs litsela. Leha ho le joalo overlayfs ena ke eona e nepahetseng (proper) mofuta oa sistimi ea faele, thaba e tlamang e kengoa ts'ebetsong Sebaka sa mabitso sa VFS.

Ho ipapisitsoe le tlhaloso ea sekoaelo le thaba e hokahaneng, ha ho motho ea makatsang hore ebe Lisebelisoa tsa Linux li sebelisoa ka mafolofolo. Ha re bone se etsahalang ha re sebelisa systemd-spawn ho tsamaisa setshelo ka ho sebedisa sesebedisoa mountsnoop от bcc.

Bothata system-nspawn e qala setshelo ha e ntse e matha mountsnoop.py.

Ha re bone se etsahetseng:

Qalisa mountsnoop ha setshelo se "booting" se bontša hore nako ea ho sebetsa ea setshelo e itšetlehile haholo ka thaba e hoketsoeng (Ke qalo feela ea tlhahiso e telele e bonts'itsoeng).

ke systemd-nspawn e fana ka lifaele tse khethiloeng ho procfs и sysfs amohela setshelo joalo ka litsela tse eang ho eona rootfs... Ntle le moo MS_BIND folakha e behang thaba e tlamang, lifolakha tse ling tse holim'a thaba li hlalosa kamano pakeng tsa liphetoho ho sebaka sa mabitso sa moamoheli le setshelo. Ka mohlala, thaba e hokahantsoeng e ka tlola liphetoho ho /proc и /sys ka setshelong, kapa o di pate ho latela pitso.

fihlela qeto e

Ho utloisisa ts'ebetso ea ka hare ea Linux ho ka bonahala e le mosebetsi o ke keng oa khoneha, kaha kernel ka boeona e na le khoutu e ngata, e siea ka thōko lisebelisoa tsa sebaka sa basebelisi ba Linux le li-interfaces tsa mohala oa tsamaiso lilaebraring tsa C tse kang. glibc. Mokhoa o mong oa ho hatela pele ke ho bala khoutu ea mohloli oa kernel subsystem e le 'ngoe, ka ho hatisa mehala ea tsamaiso ea kutloisiso le lihlooho tsa sebaka sa basebelisi, hammoho le li-interfaces tse ka hare tsa kernel, joalo ka tafole. file_operations. Ts'ebetso ea faele e fana ka molao-motheo oa "ntho e 'ngoe le e' ngoe ke faele", e etsang hore li natefeloe haholo ho li laola. Lifaele tsa mohloli oa C kernel bukeng ea boemo bo holimo fs/ hlahisa ts'ebetsong ea litsamaiso tsa faele tsa sebele, e leng lesela la wrapper le fanang ka tšebelisano e pharaletseng le e batlang e le bonolo pakeng tsa litsamaiso tse tsebahalang tsa faele le lisebelisoa tsa polokelo. Ho hokahanya le ho beha holim'a marang-rang ka libaka tsa mabitso tsa Linux ke boloi ba VFS bo etsang hore ho khonehe ho theha lijana tse baloang feela le litsamaiso tsa lifaele tsa metso. E kopantsoe le tlhahlobo ea khoutu ea mohloli, sesebelisoa sa mantlha sa eBPF le sebopeho sa eona bcc
ho etsa hore lipatlisiso tsa mantlha li be bonolo ho feta pele.

Metsoalle, ngola, na sengoloa see se na le thuso ho uena? Mohlomong u na le maikutlo kapa maikutlo? Mme ba nang le thahasello thupelong ea Linux Administrator ba memeloa ho Letsatsi la Open, e tla tšoaroa ka la 18 April.

Karolo ea pele.

Source: www.habr.com

Eketsa ka tlhaloso