Tetikasa hampidirana ny mekanika mitoka-monina amin'ny Linux

Ny mpanoratra ny tranomboky C standard Cosmopolitan sy ny sehatra Redbean dia nanambara ny fampiharana ny rafitra mitokana () ho an'ny Linux. Ny Pledge dia novolavolain'ny tetikasa OpenBSD tany am-boalohany ary mamela anao handrara ny fampiharana tsy hiditra amin'ny antso an-tariby tsy ampiasaina (karazana lisitra fotsy misy ny antso an-tariby novolavolaina ho an'ny fampiharana, ary voarara ny antso hafa). Tsy toy ny rafitra famerana antso an-tariby misy amin'ny Linux, toy ny seccom, ny mekanika fanomezan-toky dia natao ho tsotra araka izay azo atao tany am-boalohany.

Ny hetsika tsy nahomby tamin'ny fanokanana ny rindranasa ao amin'ny tontolon'ny OpenBSD amin'ny fampiasana ny mekanika systrace dia nampiseho fa sarotra loatra ny fitokana-monina amin'ny haavon'ny antson'ny rafitra tsirairay ary mandany fotoana. Ho solon'izay, natolotra ny fanomezan-toky, izay nahafahana namorona fitsipika mitoka-monina nefa tsy miditra amin'ny antsipiriany sy manodinkodina ireo kilasy fidirana efa vonona. Ohatra, ny kilasy atolotra dia stdio (input/output), rpath (rakitra vakiana fotsiny), wpath (manoratra rakitra), cpath (mamorona rakitra), tmppath (miasa amin'ny rakitra vonjimaika), inet (fantsona tambajotra), unix ( unix sockets), dns (DNS resolution), getpw (vakio ny fidirana amin'ny angon-drakitra mpampiasa), ioctl (ioctl call), proc (fitantanana ny fizotrany), exec (famoahana ny dingana) ary id (fitantanana ny zon'ny fidirana).

Ny fitsipika momba ny fiasana amin'ny antson'ny rafitra dia voafaritra amin'ny endriky ny fanamarihana, ao anatin'izany ny lisitr'ireo kilasy azo atao amin'ny antson'ny rafitra sy ny lalan'ny rakitra azo alaina. Aorian'ny fananganana sy fandefasana ny rindranasa novaina, ny kernel dia mandray ny asa fanaraha-maso ny fanarahana ny fitsipika voafaritra.

Fampiharana mitokana ho an'ny FreeBSD no amboarina ho an'ny FreeBSD, izay miavaka amin'ny fahafahana manasaraka ny rindranasa tsy misy fanovana ny kaody, raha ao amin'ny OpenBSD kosa ny fiantsoana fanomezan-toky dia mikendry ny fampidirana mafy amin'ny tontolo fototra ary manampy fanamarihana amin'ny kaody tsirairay. fampiharana.

Ny mpamorona ny seranan-tsambo ho an'ny Linux dia naka ny ohatra momba ny FreeBSD ary, raha tokony hanova ny kaody, dia nanomana utility pledge.com fanampiny izay ahafahanao mampihatra fameperana tsy manova ny fehezan-dalΓ na fampiharana. Ohatra, mba hampandehanana ny fitaovana curl tsy misy afa-tsy ny stdio, rpath, inet ary threadstdio rafitra antso kilasy, mandehana fotsiny "./pledge.com -p 'stdio rpath inet thread' curl http://example.com".

Ny fampitaovana fanomezan-toky dia miasa amin'ny fizarana Linux rehetra manomboka amin'ny RHEL6 ary tsy mitaky fidirana amin'ny faka. Fanampin'izany, mifototra amin'ny tranomboky cosmopolitan, misy API omena amin'ny fitantanana ny famerana amin'ny fehezan-dalΓ na amin'ny teny C, izay mamela, ankoatra ny zavatra hafa, hamorona enclaves ho faneriterena an-tsoratra ny fidirana mifandraika amin'ny fiasa fampiharana sasany.

Ny fampiharana dia tsy mitaky fanovana amin'ny kernel - ny famerana ny fanomezan-toky dia adika amin'ny fitsipika SECCOMP BPF ary amboarina amin'ny alΓ lan'ny rafitra mitokana antsoina hoe rafitra Linux. Ohatra, ny fiantsoana fiantsoana ("stdio rpath", 0) dia hovana ho BPF filter static const struct sock_filter kFilter[] = { /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall, 0, 14 - 1 ), / * L1*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[0])), /* L2*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 4 - 3, 0), /* L3* / BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, 10, 0, 13 - 4), /* L4*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[1])), /* L5*/ BPF_ALU | BPF_AND | BPF_K, ~0x80800), /* L6*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 1, 8 - 7, 0), /* L7*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 0, 13 - , /* L8*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[8])), /* L2*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 9, 0 - 12, 10), /*L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 10, 6 - 12, 11), /*L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 11, 17, 0 - 13), /*L11*/ BPF_KPF |(BPF_KPF_ST SECCOMP_RET_ALLOW), /*L12*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L13*/ /* sivana manaraka */ };

Source: opennet.ru

Add a comment