Te kaupapa ki te kawe i te tikanga wehe oati ki Linux

Ko te kaituhi o te whare pukapuka paerewa C Cosmopolitan me te papanga Redbean kua panuitia te whakatinanatanga o te taurangi() tikanga wehe mo Linux. I whakawhanakehia tuatahitia e te kaupapa OpenBSD a Pledge ka taea e koe te aukati i nga tono kia uru atu ki nga waea punaha kaore i whakamahia (he momo rarangi ma o nga waea punaha ka hangaia mo te tono, ka aukati etahi atu waea). Kaore i rite ki nga tikanga aukati waea e waatea ana i Linux, penei i te seccomp, i hangaia te tikanga oati kia ngawari noa.

Ko te kaupapa i rahua ki te wehe i nga tono i roto i te taiao turanga OpenBSD ma te whakamahi i te punaha systrace i whakaatu ko te wehe i te taumata o nga waea punaha takitahi he tino uaua me te whakapau wa. Hei rereke, i tukuna he oati, i taea ai te hanga ture wehe me te kore e uru ki nga korero me te raweke i nga karaehe uru kua oti te hanga. Hei tauira, ko nga karaehe e tukuna ana ko te stdio (whakauru/putanga), rpath (nga konae panui-anake), wpath (tuhia nga konae), cpath (hanga konae), tmppath (mahi me nga konae rangitahi), inet (tupapa whatunga), unix ( unix sockets), dns (DNS resolution), getpw (panuihia te uru ki te paataka kaiwhakamahi), ioctl (ioctl waea), proc (whakahaere tukanga), exec (whakarewa tukanga) me te id (whakahaere motika uru).

Ko nga ture mo te mahi me nga waea punaha kua tohua i roto i te ahua o nga korero, tae atu ki te rarangi o nga karaehe e whakaaetia ana o nga waea punaha me te huinga o nga ara konae e whakaaetia ana te uru. Whai muri i te hanga me te whakarewatanga o te tono kua whakarereketia, ka whakahaeretia e te kernel nga mahi mo te aro turuki i nga ture kua tohua.

Kei te whakawhanakehia he whakatinanatanga motuhake mo te FreeBSD, he mea tohu na te kaha ki te wehe i nga tono me te kore e whakarereke i o raatau waehere, i roto i te OpenBSD ko te piiraa oati e whai ana ki te whakauru piri ki te taiao turanga me te taapiri i nga korero ki te waehere o ia. tono.

Ko nga kaihanga o te tauranga taunaha mo Linux i tango i te tauira o FreeBSD, a, hei utu mo te whakarereke i te waehere, i whakaritea he taputapu taapiri pledge.com ka taea e koe te tono here me te kore e whakarereke i te waehere tono. Hei tauira, ki te whakahaere i te whaipainga curl me te uru anake ki nga akomanga waea stdio, rpath, inet me te threadstdio, whakahaere noa "./pledge.com -p 'stdio rpath inet thread' curl http://example.com".

Ka mahi te whaipainga oati i runga i nga tohatoha Linux katoa ka tiimata me te RHEL6 kaore e hiahiatia he uru pakiaka. I tua atu, i runga i te whare pukapuka cosmopolitan, ka tukuna he API mo te whakahaere here i roto i te waehere hotaka i roto i te reo C, e taea ai, i roto i era atu mea, ki te hanga i nga kohinga mo te kowhiria te aukati i te uru e pa ana ki etahi mahi tono.

Ko te whakatinanatanga karekau he huringa ki te pata - kua whakamaoritia nga here oati ki nga ture SECCOMP BPF me te tukatuka ma te whakamahi i te punaha waea Linux taketake. Hei tauira, ka huri te taurangi waea("stdio rpath", 0) ki te tātari BPF 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_STMT(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_RETT(BPF_RETT) | SECCOMP_RET_ALLOW), /*L12*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L13*/ /* tātari whai muri */ };

Source: opennet.ru

Tāpiri i te kōrero