Проект OpenNet MAN capabilities() (FreeBSD и Linux)
След ядрото 2.2, Linux предоставя (макар и не напълно) многофункциив системата, разделяйки привилегиите, традиционно свързани със суперпотребителя, в един блок, който може да бъде независимо активиран или деактивиран.
Списък с функции
Възможности на процеса
В текущата реализация всички валидни и разрешени възможности се дават на процес (обектите за операцията на възможностите са описани по-долу), когато се изпълнява програма с set-UID-root или ако процес с валиден UID от 0 изпълнява нова програма.
Процес, създаден чрезfork(2), копира всички набори от функции на своя родител към себе си.
Използвайкиcapset(2), даден процес може да контролира своите собствени набори от възможности или, ако има възможносттаCAP_SETPCAP, възможностите на други процеси.
Възможност за граница
Само процесътinitможе да задава битове в границата на набора от възможности; всеки, различен от суперпотребителя, може да изчисти само битовете в този набор.
В нормална система границата на набор от възможности винаги е маскирана срещу възможносттаCAP_SETPCAP. За да премахнете това ограничение, променете дефинициятаCAP_INIT_EFF_SETвinclude/linux/capability.hи изградете отново ядрото.
Настоящи и бъдещи реализации
Ако разгледаме Linux 2.4.20, тогава в него са изпълнени само първите две изисквания.
В крайна сметка можете да свържете тези три комплекта възможности с изпълним файл, който, във връзка с наборите от възможности на процеса, ще определи възможностите на процеса следexec:изпълнение изп.Принудително: Възможностите се разрешават автоматично към процес, независимо от наследените способности на процеса.Ефективно: Тези възможности в новия разрешен набор също ще бъдат зададени към новия ефективен набор. (F(effective) ще се състои от всички нули или единици.)
В същото време, тъй като настоящите реализации не поддържат набори от функции на файлове, по време на изпълнение: 1. И трите набора от функции на файлове се считат за изчистени. 2. Ако програмата set-UID-root работи или ако действителният потребителски идентификатор на процеса е 0 (root), тогава файлът е разрешен и принуден към всички 1s в набора (т.е. пълния набор от възможности). 3. Ако се изпълни програмата set-UID-root, тогава ефективният набор на файла се задава на всички единици.
По време на изпълнението на exec, ядрото изчислява новите възможности на процеса, използвайки следния алгоритъм: където: P обозначава набора от възможности на процеса преди изпълнението P' обозначава стойността на набора от възможности след изпълнението F обозначава набора от възможности на файла cap_bset е стойността на границата на набора от възможности.