Rafitra rakitra virtoaly amin'ny Linux: nahoana izy ireo no ilaina ary ahoana no fiasan'izy ireo? Fizarana 2

Salama daholo, zarainay aminareo ny ampahany faharoa amin'ny famoahana hoe "System fisie virtoaly amin'ny Linux: nahoana izy ireo no ilaina ary ahoana no fiasan'izy ireo?" Azonao atao ny mamaky ny ampahany voalohany eto. MamelΓ  anay hampahatsiahy anao fa ity andian-dahatsoratra ity dia nifanandrify tamin'ny fandefasana stream vaovao amin'ny fampianarana. "Linux Administrator", izay manomboka tsy ho ela.

Ahoana ny fanaraha-maso ny VFS mampiasa fitaovana eBPF sy bcc

Ny fomba tsotra indrindra hahafantarana ny fomba fiasan'ny kernel amin'ny rakitra sysfs dia ny mijery izany amin'ny fampiharana, ary ny fomba mora indrindra hijerena ny ARM64 dia ny fampiasana eBPF. eBPF (fanafohezana ny Berkeley Packet Filter) dia misy milina virtoaly mandeha fototra, izay azon'ireo mpampiasa manana tombontsoa mangataka (query) avy amin'ny andalana baiko. Ny loharano kernel dia milaza amin'ny mpamaky izay azon'ny kernel atao; Ny fampandehanana ny fitaovana eBPF amin'ny rafitra feno dia mampiseho ny tena ataon'ny kernel.

Rafitra rakitra virtoaly amin'ny Linux: nahoana izy ireo no ilaina ary ahoana no fiasan'izy ireo? Fizarana 2

Soa ihany fa mora ny manomboka mampiasa eBPF miaraka amin'ny fanampian'ny fitaovana mpametraka, izay azo alaina ho fonosana avy amin'ny fizarana ankapobeny Linux ary voarakitra an-tsipiriany Bernard Gregg. Tools bcc dia script Python misy fampidirana kely amin'ny kaody C, izay midika fa afaka manova azy ireo mora foana ny olona zatra amin'ireo fiteny roa ireo. IN bcc/tools Misy script Python 80, izay midika fa ny mpandrindra na ny mpitantana ny rafitra dia afaka misafidy zavatra mety amin'ny famahana ny olana.
Mba hahazoana hevitra ambony kely momba ny asa ataon'ny VFS amin'ny rafitra mihazakazaka, andramo vfscount na vfsstat. Izany dia hampiseho, andao atao hoe antso am-polony vfs_open() ary ny β€œsakaizany” dia mitranga ara-bakiteny isaky ny segondra.

Rafitra rakitra virtoaly amin'ny Linux: nahoana izy ireo no ilaina ary ahoana no fiasan'izy ireo? Fizarana 2

vfsstat.py dia script Python miaraka amin'ny fampidirana kaody C izay manisa fotsiny ny antso VFS.

Andeha isika hanome ohatra tsy dia misy dikany ary hojerentsika izay mitranga rehefa mampiditra USB flash drive amin'ny solosaina ary hitan'ny rafitra izany.

Rafitra rakitra virtoaly amin'ny Linux: nahoana izy ireo no ilaina ary ahoana no fiasan'izy ireo? Fizarana 2

Mampiasa eBPF ianao dia afaka mahita ny zava-mitranga ao /sysrehefa ampidirina ny USB flash drive. Ohatra tsotra sy sarotra no aseho eto.

Ao amin'ny ohatra aseho etsy ambony, bcc fitaovana trace.py manonta hafatra rehefa mandeha ny baiko sysfs_create_files(). Hitantsika izany sysfs_create_files() dia natomboka tamin'ny fampiasana kworker stream ho setrin'ny hoe nampidirina ny flash drive, fa inona no rakitra noforonina? Ny ohatra faharoa dia mampiseho ny herin'ny eBPF. Eto trace.py Manonta ny kernel backtrace (-K safidy) sy ny anaran'ny rakitra noforonina sysfs_create_files(). Ny fampidirana fanambarana tokana dia kaody C izay ahitana tady endrika mora fantatra omen'ny script Python izay mandeha LLVM mpanangona ara-potoana fotsiny. Manangona an'io tsipika io izy ary manatanteraka izany amin'ny milina virtoaly ao anaty kernel. sonia asa feno sysfs_create_files () dia tsy maintsy averina amin'ny baiko faharoa mba ahafahan'ny tady endrika manondro ny iray amin'ireo masontsivana. Ny hadisoana amin'ity kaody C ity dia miteraka fahadisoana azo fantarina avy amin'ny C compiler. Ohatra, raha nesorina ny parameter -l, dia ho hitanao ny "Tsy nahavita nanangona lahatsoratra BPF." Ireo mpamorona izay mahafantatra ny C sy Python dia hahita ny fitaovana bcc mora mivelatra sy miova.

Rehefa ampidirina ny USB drive, ny kernel backtrace dia hampiseho fa ny PID 7711 dia kofehy kworkerizay namorona ny rakitra Β«eventsΒ» Π² sysfs. Araka izany, ny antso avy amin'ny sysfs_remove_files() dia hampiseho fa ny fanesorana ny kapila dia nahatonga ny rakitra voafafa events, izay mifanitsy amin'ny hevitra ankapoben'ny fanisana reference. Amin'izay fotoana izay, mijery sysfs_create_link () miaraka amin'ny eBPF raha ampidirina ny kapila USB dia hampiseho fa rohy an'ohatra 48 farafahakeliny no noforonina.

Ka inona no ilana ny rakitra hetsika? Fampiasana cscope Ho fitadiavana __device_add_disk(), mampiseho ny anton'izany disk_add_events (), ary na "media_change", na "eject_request" azo raketina ao anaty rakitra hetsika. Eto ny sosona sakana kernel dia mampahafantatra ny espace mpampiasa fa nisy "disk" niseho sy navoaka. Mariho ny fomba fampahafantarana ity fomba fikarohana ity amin'ny fampidirana USB drive, raha ampitahaina amin'ny fiezahana hamantatra ny fomba fiasan'ny zavatra avy amin'ny loharano.

Ny rafitra fisie fakany vakiana ihany no ahafahan'ny fitaovana tafiditra

Mazava ho azy fa tsy misy mamono ny mpizara na ny solosainy amin'ny fisintonana ny plug avy amin'ny socket. Fa nahoana? Izany dia satria ny rafitra fichier napetraka amin'ny fitaovana fitehirizana ara-batana dia mety ho lany ny fanoratana, ary ny rafitra angon-drakitra izay mirakitra ny toerany dia mety tsy mifanaraka amin'ny fanoratana amin'ny fitahirizana. Rehefa mitranga izany, ny tompon'ny rafitra dia tsy maintsy miandry mandra-pahatongan'ny baotin'ny manaraka hanombohana ny fitaovana. fsck filesystem-recovery ary, amin'ny tranga ratsy indrindra, very data.

Na izany aza, fantatsika rehetra fa maro ny fitaovana IoT, ary koa ny router, thermostats ary fiara, mandeha amin'ny Linux. Maro amin'ireo fitaovana ireo no manana interface kely na tsy misy mpampiasa, ary tsy misy fomba hamonoana azy ireo "madio". Alaivo sary an-tsaina ny manomboka fiara miaraka amin'ny bateria maty rehefa mandeha ny herinaratra mankany amin'ny vondrona mpanara-maso Linux mitsambikina tsy tapaka. Ahoana no hoe ny rafitra baoty tsy ela fsckoviana no manomboka mandeha ny motera? Ary tsotra ny valiny. Miantehitra amin'ny rafitra fichier root ny fitaovana mipetaka ho vakiana ihany (nohafohezina ro-rootfs (vakiana fotsiny ny root filesystem)).

ro-rootfs manolotra tombontsoa maro izay tsy dia mibaribary loatra noho ny maha-azo itokiana azy. Ny tombony iray dia ny tsy ahafahan'ny malware manoratra /usr na /lib, raha tsy misy dingana Linux afaka manoratra ao. Ny iray hafa dia ny rafitra fichier tsy azo ovaina dia tena zava-dehibe amin'ny fanohanan'ny eny an-tsaha ny fitaovana lavitra, satria ny mpiasa mpanohana dia miankina amin'ny rafitra eo an-toerana izay mitovy anarana amin'ny rafitra an-tsaha. Angamba ny tombony lehibe indrindra (fa koa ny tena mamitaka) dia ny faneren'ny ro-rootfs ny mpamorona hanapa-kevitra hoe inona ny zavatra rafitra tsy azo ovaina amin'ny dingana famolavolana ny rafitra. Ny miasa miaraka amin'ny ro-rootfs dia mety ho saro-takarina sy maharary, satria matetika ny const variables dia amin'ny fiteny fandaharana, fa ny tombony azony dia manamarina mora foana ny vola fanampiny.

zavaboary rootfs Ny famakiana-ihany dia mitaky ezaka fanampiny ho an'ny mpamorona tafiditra, ary eto no idiran'ny VFS amin'ny sary. Ny Linux dia mitaky ny hampidirana rakitra /var azo soratana, ary ho fanampin'izany, maro ny rindranasa malaza izay mampandeha ny rafitra tafiditra no hanandrana hamorona tefy dot-files Π² $HOME. Vahaolana iray ho an'ny rakitra fanamafisana ao amin'ny lahatahiry an-trano dia matetika ny famoronana mialoha sy ny fananganana azy ireo rootfs. for /var Ny fomba iray azo atao dia ny fametrahana azy amin'ny fizarazarana azo soratana misaraka, raha / voapetaka vakiana fotsiny. Safidy iray hafa malaza dia ny fampiasana fehezam-boninkazo na overlay.

Fametrahana azo ampifandraisina sy azo stackable, fampiasa amin'ny kaontenera

Manatanteraka baiko man mount no fomba tsara indrindra hianarana momba ny mounts azo amboarina sy azo overlay, izay manome fahafahana ny mpamorona sy ny mpitantana ny rafitra hamorona rafitra fichier amin'ny lalana iray ary avy eo mampibaribary izany amin'ny fampiharana amin'ny hafa. Ho an'ny rafitra embedded, midika izany ny fahafahana mitahiry rakitra ao /var amin'ny kapila tselatra vakina fotsiny, fa lalana mipetaka na azo ampifandraisina avy tmpfs Π² /var rehefa mampiditra azy dia ahafahan'ny fampiharana manoratra naoty ao (scrawl). Amin'ny manaraka velominao ny fanovana /var ho very. Ny mount overlay dia mamorona firaisana eo amin'ny tmpfs ary ny rafitra fichier fototra ary mamela anao hanao fanovana miseho amin'ny rakitra efa misy ao ro-tootf fa ny tendrombohitra azo afatotra dia afaka manafoana ny vaovao tmpfs lahatahiry hita ho azo soratana ao ro-rootfs fomba. raha overlayfs ity no marina (proper) karazana rafitra fichier, mountable azo apetraka ao VFS namespace.

Miorina amin'ny famaritana ny overlay sy ny tendrombohitra azo ampifandraisina, tsy misy mahagaga izany Linux containers izy ireo dia ampiasaina mavitrika. Andeha hojerentsika izay mitranga rehefa mampiasa isika systemd-nspawn hampandeha ny fitoeran-javatra mampiasa ny fitaovana mountsnoop ΠΎΡ‚ bcc.

antso system-nspawn manomboka ny kaontenera rehefa mihazakazaka mountsnoop.py.

Andeha hojerentsika izay nitranga:

fandefasana mountsnoop raha "booting" ny kaontenera dia mampiseho fa ny fotoana fampandehanan'ny kaontenera dia miankina be amin'ny tendrombohitra ampifandraisina (ny fiandohan'ny vokatra lava ihany no aseho).

izany systemd-nspawn manome rakitra voafantina ao procfs ΠΈ sysfs mampiantrano fitoerana ho lalana mankany aminy rootfs... afa-tsy MS_BIND saina izay mametraka ny tendrombohitra mifamatotra, ny saina hafa eo amin'ny tendrombohitra dia mamaritra ny fifandraisana misy eo amin'ny fiovan'ny anaran'ny mpampiantrano sy ny fitoeran-javatra. Ohatra, ny tendrombohitra mifandray dia afaka mitsambikina fiovana amin'ny /proc ΠΈ /sys ao anaty fitoeran-javatra, na afeno izy ireo arakaraka ny antso.

famaranana

Ny fahatakarana ny fiasan'ny Linux anatiny dia mety ho toy ny asa tsy azo atao, satria ny kernel mihitsy dia misy kaody be dia be, ka mamela ny fampiharana habaka mpampiasa Linux sy ny fifandraisana amin'ny antso an-tariby ao amin'ny tranomboky C toy ny glibc. Ny fomba iray ahafahana mandroso dia ny mamaky ny kaody loharanon'ny subsystem kernel iray, miaraka amin'ny fanantitranterana ny fahatakarana ny antson'ny rafitra sy ny lohatenin'ny habaka mpampiasa, ary koa ny fifandraisan'ny kernel anatiny, toy ny latabatra. file_operations. Ny fampandehanana rakitra dia manome ny foto-kevitry ny "rakitra ny zava-drehetra", ka mahatonga azy ireo hahafinaritra indrindra ny mitantana. C rakitra loharano kernel ao amin'ny lahatahiry ambony indrindra fs/ manolotra fampiharana rafitra virtoaly rakitra, izay sosona wrapper izay manome malalaka sy somary tsotra fifanarahana eo amin'ny rafitra rakitra malaza sy ny fitahirizana fitaovana. Ny fampifandraisana sy ny fametrahana overlay amin'ny alΓ lan'ny namespaces Linux dia ny majika amin'ny VFS izay ahafahana mamorona fitoeran-javatra vakiana sy rafi-drakitra faka. Miaraka amin'ny fandinihana ny kaody loharano, ny fitaovana fototra eBPF ary ny interface bcc
manamora kokoa ny fikarohana fototra.

Ry namana, manorata, nahasoa anao ve ity lahatsoratra ity? Angamba manana hevitra na fanamarihana ianao? Ary izay liana amin'ny taranja Linux Administrator dia asaina Andro misokatra, izay hotanterahina ny 18 aprily izao.

Fizarana voalohany.

Source: www.habr.com

Add a comment