Как на практике работает MultiLevel Security?
В SELinux есть такой механизм доступа, как MultiLevel Security. Согласно описанию, это работает так: "no write down, no read up". Однако не совсем понятно, как это работает на деле. Как бы, SELinux берет под свой контроль вообще всю систему, а в ней есть не только обычные файлы и директории. Я представляю, как подобное может работать с файлами, директориями, сокетами, трубами (pipe). Но как это правило работает, например, с процессами, самим ядром или ещё чем-либо? Не говоря уже о том, что даже с тем же файлом возможны операции не только чтения/записи. Как на практике работает MLS?
Даже приведу что-то типа задачи в качестве уточнения своего вопроса:
У нас есть 3 файла:
/opt/confidential_exec
,/opt/secret_exec
,/opt/topsecret_exec
. Эти файлы имеют следующие права доступа: владелец root, группа root, права владельца: чтение, запись и исполнение, права членов группы root: никакие, права других: никакие. Запущен процесс bash с контекстомu:r:bash_exec:s0:c0
. Файлы/opt/confidential_exec
,/opt/secret_exec
и/opt/topsecret_exec
имеют соответственно контекстыu:r:secret_exec:s0:c0
,u:r:secret_exec:s1:c0
,u:r:secret_exec:s2:c0
. Имеем также следующие SELinux правила в формате .te:
allow bash_exec secret_exec:file { getattr relabelto unlink ioctl execute append read setattr swapon write lock create rename mounton quotaon relabelfrom link }
allow bash_exec secret_exec:process { sigchld sigkill sigstop signull signal ptrace getsched setsched getsession getpgid setpgid getcap setcap getattr setrlimit }
neverallow bash_exec secret_exec:process transition
Что процесс с контекстом bash_exec сможет сделать с каждым из трех исполняемых файлов в
/opt
и с каждым процессом данных файлов, если он сможет их запустить?