Я пытаюсь заставить dspam работать под SELinux (CentOS 7). Я добавил следующее без проблем:
allow dspam_t dspam_rw_content_t:dir getattr;
allow dspam_t dspam_rw_content_t:file { append getattr lock open write };
Однако dspam по-прежнему не работает через procmail:
/bin/sh: /usr/bin/dspam: Permission denied
procmail: Program failure (126) of "/usr/bin/dspam"
Когда я устанавливаю SELinux в режим permissive, все работает нормально. Я попытался использовать, audit2allow
чтобы определить, чего не хватает:
[root@opus ~]# audit2allow -i /var/log/audit/audit.log
#============= dspam_t ==============
allow dspam_t dspam_rw_content_t:dir search;
Но добавление этого к моей политике приводит checkmodule
к ошибке:
checkmodule: loading policy configuration from OPUS.te
OPUS.te:19:ERROR 'permission search is not defined for class dir' at token ';' on line 19:
allow dspam_t dspam_rw_content_t:dir getattr;
allow dspam_t dspam_rw_content_t:dir search;
checkmodule: error(s) encountered while parsing configuration
Я немного поискал, но не могу найти решение. Как мне добавить или определить разрешение, search
как указано?
решение1
Хотя это не решает для меня конечную проблему (dspam не работает в принудительном режиме SELinux), я публикую это, потому что это дает ответ на фактический вопрос, который я задал (как предоставить разрешение на поиск).
Оказывается, я пропустил search
блок require
для этого модуля. У меня было:
require {
[...]
class dir getattr;
}
Когда, как я обнаружил, просматривая ссылку в комментарии @harrymc, мне было нужно:
require {
[...]
class dir { write getattr add_name search };
}
После этого модуль корректно компилируется и загружается.