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
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 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.
Ka lehlohonolo, ho qala ho sebelisa eBPF ho bonolo haholo ka thuso ea 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.
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.
U sebelisa eBPF u ka bona se etsahalang ho
/sys
ha USB flash drive e kentsoe. Mohlala o bonolo le o rarahaneng o bontšoa mona.
Mohlala o bontšitsoeng ka holimo, bcc
sesebelisoa 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. kworker
e 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 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 fsck
qetellong enjene e qala ho sebetsa neng? 'Me karabo e bonolo. Lisebelisoa tse kentsoeng li itšetlehile ka sistimi ea faele ea motso 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
Ho ipapisitsoe le tlhaloso ea sekoaelo le thaba e hokahaneng, ha ho motho ea makatsang hore ebe 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
Source: www.habr.com