Вы имеете дело с neverallow
нарушениями: у вас есть правило, которое говорит: «Никогда не позволяйте типу x
делать action
для какого-либо другого типа / класса y:c
», а затем другое правило, которое говорит: «Этот подтипx
разрешено делать action
на y:c
". Компилятор SE Linux отклонит эти противоречивые правила. Эту проблему можно решить, изменив правило neverallow
, чтобы сделать исключение для определенного подтипа, который вы хотите разрешить.
Точнее, если у вас есть правила вида:
neverallow x y:c action;
type z, x;
(имеется в виду z
- особый случай x
) allow z y:c action;
Изменить первое правило на neverallow {x -z} y:class action;
сделать исключение для подтипа z
.
Пример:
Ссылка : neverallow { domain ... -installd} staging_data_file:dir *;
говорит объекты типа domain
нельзя разрешать доступ к объектам типа staging_data_file
и класса dir
. Однако это делает исключение для типа installd
.
Ссылка : type installd, domain;
определяет installd
как особый случай domain
.
Ссылка : allow installd staging_data_file:dir { open ... };
позволяет installd
выполнять действие open
над объектами типа staging_data_file
и класса dir
.