Kaabo gbogbo eniyan, a n pin pẹlu rẹ apakan keji ti ikede “Awọn ọna ṣiṣe faili foju ni Linux: kilode ti wọn nilo ati bawo ni wọn ṣe n ṣiṣẹ?” O le ka apakan akọkọ
Bii o ṣe le ṣe atẹle VFS nipa lilo awọn irinṣẹ eBPF ati bcc
Ọna to rọọrun lati ni oye bi ekuro ṣe n ṣiṣẹ lori awọn faili sysfs
ni lati rii ni iṣe, ati pe ọna ti o rọrun julọ lati wo ARM64 ni lati lo eBPF. eBPF (kukuru fun Berkeley Packet Filter) ni ẹrọ foju kan ti n ṣiṣẹ ninu query
) lati laini aṣẹ. Awọn orisun kernel sọ fun oluka ohun ti ekuro le ṣe; nṣiṣẹ awọn irinṣẹ eBPF lori eto ti kojọpọ fihan ohun ti ekuro n ṣe ni otitọ.
Ni Oriire, bibẹrẹ lilo eBPF jẹ ohun rọrun pẹlu iranlọwọ ti awọn irinṣẹ bcc
jẹ awọn iwe afọwọkọ Python pẹlu awọn ifibọ kekere ti koodu C, eyiti o tumọ si pe ẹnikẹni ti o faramọ awọn ede mejeeji le yipada ni irọrun. IN bcc/tools
Awọn iwe afọwọkọ Python 80 wa, eyiti o tumọ si pe o ṣeeṣe julọ ti olupilẹṣẹ tabi oluṣakoso eto yoo ni anfani lati yan nkan ti o dara fun yiyan iṣoro naa.
Lati ni o kere ju imọran lasan ti kini iṣẹ VFS ṣe lori eto ṣiṣe, gbiyanju vfscount
tabi vfsstat
. Eyi yoo fihan, jẹ ki a sọ, pe dosinni ti awọn ipe vfs_open()
ati "awọn ọrẹ rẹ" ṣẹlẹ gangan ni gbogbo iṣẹju.
vfsstat.py
jẹ iwe afọwọkọ Python pẹlu awọn ifibọ koodu C ti o rọrun ka awọn ipe iṣẹ VFS.
Jẹ ki a fun apẹẹrẹ bintin diẹ sii ki o wo ohun ti o ṣẹlẹ nigbati a ba fi kọnputa filasi USB sinu kọnputa kan ati pe eto naa rii.
Lilo eBPF o le wo ohun ti n ṣẹlẹ ninu
/sys
nigbati okun USB ti wa ni fi sii. Apeere ti o rọrun ati eka ti han nibi.
Ninu apẹẹrẹ ti o han loke, bcc
irinṣẹ sysfs_create_files()
. A ri pe sysfs_create_files()
ti ṣe ifilọlẹ nipa lilo kworker
ṣiṣan ni idahun si otitọ pe a ti fi kọnputa filasi sii, ṣugbọn kini faili ti o ṣẹda? Apẹẹrẹ keji fihan agbara eBPF. Nibi trace.py
Ṣe atẹjade kernel backtrace (aṣayan-K) ati orukọ faili ti o ṣẹda sysfs_create_files()
. Fi sii gbólóhùn ẹyọkan jẹ koodu C ti o pẹlu okun ọna kika ti o ni irọrun ti a pese nipasẹ iwe afọwọkọ Python ti o nṣiṣẹ LLVM o kan-ni-akoko alakojo. O ṣe akopọ laini yii o si ṣiṣẹ ni ẹrọ foju kan inu ekuro naa. Ibuwọlu iṣẹ ni kikun sysfs_create_files ()
gbọdọ tun ṣe ni aṣẹ keji ki okun ọna kika le tọka si ọkan ninu awọn paramita. Awọn aṣiṣe ninu nkan ti koodu C yii ni abajade ni awọn aṣiṣe ti o ṣe idanimọ lati inu akojọpọ C. Fun apẹẹrẹ, ti paramita -l ba ti yọkuro, iwọ yoo rii “Kuna lati ṣajọ ọrọ BPF.” Awọn olupilẹṣẹ ti o faramọ pẹlu C ati Python yoo wa awọn irinṣẹ bcc
rọrun lati faagun ati yipada.
Nigbati a ba fi kọnputa USB sii, kernel backtrace yoo fihan pe PID 7711 jẹ okun. kworker
ti o ṣẹda faili naa «events»
в sysfs
. Accordingly, ipe lati sysfs_remove_files()
yoo fihan pe yiyọ awakọ naa yọrisi pe faili ti paarẹ events
, eyiti o ni ibamu si imọran gbogbogbo ti kika itọkasi. Ni akoko kanna, wiwo sysfs_create_link ()
pẹlu eBPF lakoko fifi sii kọnputa USB yoo fihan pe o kere ju awọn ọna asopọ aami 48 ti ṣẹda.
Nitorinaa kini aaye ti faili iṣẹlẹ naa? Lilo disk_add_events ()
, ati boya "media_change"
, tabi "eject_request"
le ṣe igbasilẹ ni faili iṣẹlẹ kan. Nibi Layer block kernel sọfun aaye olumulo pe “disk” kan ti han ati jade. Ṣe akiyesi bawo ni ọna iwadii yii ṣe jẹ alaye nipa fifi kọnputa USB sii, ni akawe si igbiyanju lati ro ero bi awọn nkan ṣe n ṣiṣẹ lasan lati orisun.
Awọn ọna faili gbongbo kika-nikan jẹ ki awọn ẹrọ ti a fi sii
Nitoribẹẹ, ko si ẹnikan ti o pa olupin tabi kọnputa wọn nipa fifaa pulọọgi lati iho. Ṣugbọn kilode? Eyi jẹ nitori awọn ọna ṣiṣe faili ti a gbe sori awọn ẹrọ ibi ipamọ ti ara le ti kọ silẹ, ati awọn ẹya data ti o ṣe igbasilẹ ipinlẹ wọn le ma ṣe muuṣiṣẹpọ pẹlu kikọ si ibi ipamọ naa. Nigbati eyi ba ṣẹlẹ, awọn oniwun eto ni lati duro titi bata atẹle lati ṣe ifilọlẹ ohun elo naa. fsck filesystem-recovery
ati, ninu awọn buru nla, nu data.
Sibẹsibẹ, gbogbo wa mọ pe ọpọlọpọ awọn ẹrọ IoT, ati awọn onimọ-ọna, awọn iwọn otutu ati awọn ọkọ ayọkẹlẹ, ni bayi nṣiṣẹ Linux. Pupọ ninu awọn ẹrọ wọnyi ni diẹ si ko si ni wiwo olumulo, ati pe ko si ọna lati pa wọn “ni mimọ.” Fojuinu ti o bẹrẹ ọkọ ayọkẹlẹ kan pẹlu batiri ti o ku nigbati agbara si ẹrọ iṣakoso jẹ fsck
nigbawo ni engine nipari bẹrẹ ṣiṣe? Ati awọn idahun ni o rọrun. Awọn ẹrọ ifibọ gbarale eto faili gbongbo ro-rootfs
(ka-nikan root fileystem)).
ro-rootfs
pese ọpọlọpọ awọn anfani ti o kere ju ti otitọ lọ. Ọkan anfani ni wipe malware ko le kọ si /usr
tabi /lib
, ti ko ba si ilana Linux le kọ nibẹ. Omiiran ni pe eto faili ti ko le yipada jẹ pataki fun atilẹyin aaye ti awọn ẹrọ latọna jijin, nitori pe oṣiṣẹ atilẹyin gbarale awọn eto agbegbe ti o jẹ aami aami si awọn eto aaye. Boya anfani ti o ṣe pataki julọ (ṣugbọn paapaa aibikita) anfani ni pe ro-rootfs fi agbara mu awọn olupilẹṣẹ lati pinnu iru awọn ohun elo eto yoo jẹ ailagbara ni ipele apẹrẹ ti eto naa. Nṣiṣẹ pẹlu ro-rootfs le jẹ airọrun ati irora, bi awọn oniyipada const nigbagbogbo wa ni awọn ede siseto, ṣugbọn awọn anfani wọn ni irọrun ṣe idalare afikun afikun.
Ṣẹda rootfs
Ka-nikan nilo diẹ ninu igbiyanju afikun fun awọn olupilẹṣẹ ifibọ, ati eyi ni ibiti VFS wa sinu aworan naa. Lainos nilo pe awọn faili wa ninu /var
jẹ kikọ, ati ni afikun, ọpọlọpọ awọn ohun elo olokiki ti o ṣiṣẹ awọn eto ifibọ yoo gbiyanju lati ṣẹda iṣeto ni dot-files
в $HOME
. Ojutu kan fun awọn faili iṣeto ni ilana ile jẹ igbagbogbo lati ṣe ipilẹṣẹ ati kọ wọn sinu rootfs
. Fun /var
Ọkan ṣee ṣe ona ni lati gbe o lori lọtọ writable ipin, nigba ti /
agesin kika-nikan. Omiiran olokiki miiran ni lati lo dipọ tabi awọn agbekọja.
Linkable ati stackable gbeko, wọn lilo nipasẹ awọn apoti
Ṣiṣe pipaṣẹ kan man mount
jẹ ọna ti o dara julọ lati kọ ẹkọ nipa bindable ati awọn agbeko agbekọja, eyiti o fun awọn olupilẹṣẹ ati awọn oludari eto ni agbara lati ṣẹda eto faili ni ọna kan ati lẹhinna fi han si awọn ohun elo ni omiiran. Fun awọn eto ifibọ, eyi tumọ si agbara lati fipamọ awọn faili sinu /var
on a kika-nikan filasi drive, ṣugbọn ohun agbekọja tabi linkable òke ona lati tmpfs
в /var
nigba ikojọpọ, yoo gba awọn ohun elo laaye lati kọ awọn akọsilẹ nibẹ (scrawl). Nigbamii ti o ba tan awọn ayipada si /var
yoo sọnu. Ohun agbekọja òke ṣẹda a Euroopu laarin tmpfs
ati eto faili ti o wa labẹ ati gba ọ laaye lati ṣe awọn ayipada ostensible si awọn faili to wa ninu ro-tootf
nígbà tí òke tí a lè so pọ̀ lè sọ àwọn tuntun di òfo tmpfs
awọn folda han bi a kọ sinu ro-rootfs
awọn ọna. Lakoko overlayfs
eyi ni ẹtọ (proper
) iru eto faili, oke bindable ti wa ni imuse ni
Da lori apejuwe ti agbekọja ati ọna asopọ, ko si ọkan ti o yà pe mountsnoop
lati bcc
.
Pe system-nspawn
bẹrẹ awọn eiyan nigba ti nṣiṣẹ mountsnoop.py
.
Jẹ ká wo ohun to sele:
Запуск mountsnoop
nigba ti eiyan ti wa ni "booting" fihan wipe awọn eiyan ká asiko isise jẹ gíga ti o gbẹkẹle lori awọn òke ti wa ni ti sopọ (Nikan ni ibere ti awọn gun o wu ti han).
o ti wa ni systemd-nspawn
pese awọn faili ti o yan ni procfs
и sysfs
gbalejo to eiyan bi ona si o rootfs
... ayafi MS_BIND
Flag ti o ṣeto soke abuda òke, diẹ ninu awọn miiran awọn asia lori òke setumo awọn ibasepọ laarin awọn ayipada si ogun ati eiyan namespaces. Fun apẹẹrẹ, oke ti a ti sopọ le boya foju awọn ayipada si /proc
и /sys
sinu apoti, tabi tọju wọn da lori ipe.
ipari
Loye awọn iṣẹ inu ti Lainos le dabi ẹnipe iṣẹ ti ko ṣeeṣe, nitori ekuro funrararẹ ni iye pupọ ti koodu, nlọ kuro ni apakan awọn ohun elo aaye olumulo Linux ati awọn atọkun ipe eto ni awọn ile-ikawe C gẹgẹbi glibc
. Ọnà kan lati ni ilọsiwaju ni lati ka koodu orisun ti eto abẹlẹ ekuro kan, pẹlu tcnu lori agbọye awọn ipe eto ati awọn akọle aaye olumulo, ati awọn atọkun ekuro inu akọkọ, gẹgẹbi tabili. file_operations
. Awọn iṣẹ ṣiṣe faili pese ipilẹ “ohun gbogbo jẹ faili kan”, ṣiṣe wọn ni igbadun ni pataki lati ṣakoso. Awọn faili orisun kernel C ninu itọsọna ipele-oke fs/
ṣafihan imuse ti awọn ọna ṣiṣe faili foju, eyiti o jẹ Layer ipari ti o pese ibaramu gbooro ati irọrun ti o rọrun laarin awọn eto faili olokiki ati awọn ẹrọ ibi ipamọ. Sisopọ ati iṣagbesori agbekọja nipasẹ awọn aaye orukọ Linux jẹ idan ti VFS ti o jẹ ki o ṣee ṣe lati ṣẹda awọn apoti kika-nikan ati awọn eto faili gbongbo. Ni idapọ pẹlu idanwo koodu orisun, ohun elo eBPF mojuto ati wiwo rẹ bcc
ṣiṣe awọn mojuto iwakiri rọrun ju lailai.
Awọn ọrẹ, kọ, ṣe nkan yii wulo fun ọ? Boya o ni eyikeyi awọn asọye tabi awọn asọye? Ati pe awọn ti o nifẹ si ilana Alakoso Linux ni a pe si
orisun: www.habr.com