ืืืืจ ืกืคืจืืืช Cosmopolitan standard C ืืคืืืคืืจืืช Redbean ืืืจืืื ืขื ืืืืขืช ืื ืื ืื ืืืืืื pledge() ืขืืืจ ืืื ืืงืก. Pledge ืคืืชื ืืืงืืจ ืขื ืืื ืคืจืืืงื OpenBSD ืืืืคืฉืจ ืื ืืืกืืจ ืืืืคื ืกืืงืืืื ืขื ืืืฉืืืื ืืืฉืช ืืฉืืืืช ืืขืจืืช ืฉืืื ื ืืฉืืืืฉ (ื ืืฆืจืช ืืขืื ืจืฉืืื ืืื ื ืฉื ืงืจืืืืช ืืขืจืืช ืืืคืืืงืฆืื, ืืฉืืืืช ืืืจืืช ืืกืืจืืช). ืื ืืืื ืืื ืื ืื ื ืืืืืช ืฉืืืืช ืืืขืจืืช ืืืืื ืื ืืืื ืืงืก, ืืืื seccomp, ืื ืื ืื ืืืืืื ืชืืื ื ืืืงืืจ ืืืืืช ืคืฉืื ืืื ืืืคืฉืจ.
ืืืืืื ืืืืฉืืช ืืืืื ืืืฉืืืื ืืกืืืืช ืืืกืืก ืฉื OpenBSD ืืืืฆืขืืช ืื ืื ืื ื-systrace ืืจืืชื ืฉืืืืื ืืจืืช ืงืจืืืืช ืืขืจืืช ืืืืืืช ืืื ืืืจืื ืืื ืืืืื ืืื. ืืืืืคื ืืืฆืขื ืืชืืืืืืช ืฉืืืคืฉืจื ืืืฆืืจ ืืืื ืืืืื ืืืื ืืืืื ืก ืืคืจืืื ืืืชืืจื ืฉืืขืืจื ืืืฉื ืืืื ืื. ืืืืืื, ืืืืืงืืช ืืืืฆืขืืช ืื stdio (ืงืื/ืคืื), rpath (ืงืืฆืื ืืงืจืืื ืืืื), wpath (ืืชืืืช ืงืืฆืื), cpath (ืืฆืืจืช ืงืืฆืื), tmppath (ืขืืืื ืขื ืงืืฆืื ืืื ืืื), inet (ืฉืงืขื ืจืฉืช), unix ( unix sockets), dns (ืจืืืืืฆืืืช DNS), getpw (ืืืฉืช ืงืจืืื ืืืกื ืื ืชืื ืื ืฉื ืืืฉืชืืฉ), ioctl (ืงืจืืื ื-ioctl), proc (ื ืืืื ืชืืืืืื), exec (ืืฉืงืช ืชืืืื) ื-id (ื ืืืื ืืืืืืช ืืืฉื).
ืืืืื ืืขืืืื ืขื ืงืจืืืืช ืืขืจืืช ืืฆืืื ืื ืืฆืืจื ืฉื ืืขืจืืช, ืืืื ืจืฉืืื ืฉื ืืืืงืืช ืืืชืจืืช ืฉื ืงืจืืืืช ืืขืจืืช ืืืขืจื ืฉื ื ืชืืื ืงืืฆืื ืฉืืื ืืืืฉื ืืืชืจืช. ืืืืจ ืื ืืื ืืืฉืงื ืฉื ืืืคืืืงืฆืื ืฉืฉืื ืชื, ืืืืื ืืฉืชืืืช ืขื ืขืืืืช ืืคืืงืื ืขื ืขืืืื ืืืืืื ืฉืฆืืื ื.
ืคืืชื ืืืฉืื ื ืคืจื ืฉื pledge ื-FreeBSD, ืืฉืจ ืืชืืคืืื ืืืืืืช ืืืืื ืืืฉืืืื ืืืื ืืืฆืข ืฉืื ืืืื ืืงืื ืฉืืื, ืืขืื ื-OpenBSD ืงืจืืืช ื-pledge ืืืืื ืช ืืืื ืืืจืฆืื ืืืืงื ืขื ืกืืืืช ืืืกืืก ืืืืกืคืช ืืขืจืืช ืืงืื ืฉื ืื ืืื ืืื. ืืืฉืื.
ืืืคืชืืื ืฉื ืืฆืืืช ืืืืืื ืืืื ืืงืก ืืงืื ืืช ืืืืืื ืฉื FreeBSD ืืืืงืื ืืืฆืข ืฉืื ืืืื ืืงืื, ืืืื ื ืชืืื ืืช ืชืืกืฃ pledge.com ืืืืคืฉืจืช ืืืืื ืืืืืืช ืืืื ืืฉื ืืช ืืช ืงืื ืืืคืืืงืฆืื. ืืืืืื, ืืื ืืืคืขืื ืืช ืืื ืืฉืืจืืช curl ืขื ืืืฉื ืจืง ืืืืืงืืช ืืงืจืืื ืฉื ืืขืจืืช stdio, rpath, inet ื-threadstdio, ืคืฉืื ืืคืขื ืืช "./pledge.com -p 'stdio rpath inet thread' curl http://example.com".
ืืื ืืฉืืจืืช ื-pledge ืคืืขื ืขื ืื ืืืคืฆืืช ืฉื ืืื ืืงืก ืืื ื-RHEL6 ืืืื ื ืืืจืฉ ืืืฉืช ืฉืืจืฉ. ืื ืืกืฃ, ืืืชืืกืก ืขื ืืกืคืจืืื ืืงืืกืืืคืืืืืืช, ืืกืืคืง API ืื ืืืื ืืืืืืช ืืงืื ืืชืืื ืืช ืืฉืคืช C, ืืืืคืฉืจ, ืืื ืืืชืจ, ืืืฆืืจ ืืืืืขืืช ืืืืืืช ืืืฉื ืกืืงืืืืืช ืืืืก ืืคืื ืงืฆืืืช ืืกืืืืืช ืฉื ืืคืืืงืฆืื.
ืืืืืขื ืืื ื ืืฆืจืืื ืฉืื ืืืื ืืงืจื ื - ืืืืืืช ืืืืืื ืืชืืจืืืืช ืืืืื SECCOMP BPF ืืืขืืืืืช ืืืืฆืขืืช ืื ืื ืื ืืืืื ืืฉืืืืช ืืืงืืจื ืฉื ืืขืจืืช ืืื ืืงืก. ืืืืืื, ื-call pledge("stdio rpath", 0) ืืืืจ ื-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_STMT(BPF_ANDALU | | 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_KREMT(BPF_ST,T | SECCOMP_RET_ALLOW), /*L12*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L13*/ /* ืืืกื ื ืืื */ };
ืืงืืจ: OpenNet.ru