SELinux で「検索」権限を付与する方法

SELinux で「検索」権限を付与する方法

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 };
}

この後、モジュールはコンパイルされ、正しくロードされます。

関連情報