SELinux (CentOS 7) で dspam を動作させようとしています。問題なく以下を追加しました:
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
これは最終的な問題 (SELinux 強制モードで dspam が動作しない) を解決するものではありませんが、私が尋ねた実際の質問 (検索権限を付与する方法) には答えているので、これを投稿します。
このモジュールのブロックsearch
に不足していたことが判明しました。不足していたのは次のものです:require
require {
[...]
class dir getattr;
}
@harrymc のコメントのリンクを閲覧しているときに、次のものが必要だったことがわかりました。
require {
[...]
class dir { write getattr add_name search };
}
この後、モジュールはコンパイルされ、正しくロードされます。