web-dev-qa-db-ja.com

SELinux:新しいファイルタイプを作成する方法

RHEL/CentOS 7では、私が書いている新しいサービスをサポートするために、ファイルの新しいSELinuxセキュリティコンテキストを作成しようとしています。

新しいサービスのタイプ適用ファイルを作成しましたが、システムがファイルタイプとして認識する新しいタイプを作成できません。

私はこれに基づいて作業しています CentOS 5「Building a local policy module」ドキュメント 、これはTEファイルを作成し、checkmoduleおよび_semodule_package_を使用してコンパイルするように指示します。

TEファイルに書き込むだけの場合:

_type myservice_spool_t;
_

その後、TEは正常にコンパイルされますが、_semanage fcontext_を試行すると、次のようになります。

_$ Sudo semanage fcontext -a -t myservice_spool_t "/var/spool/myservice(/.*)?" 
ValueError: Type myservice_spool_t is invalid, must be a file or device type
_

私はさまざまなチュートリアルを読みましたが、機能する例を見つけることができませんでした。

  • 古い-例これは RHEL 4 SELinuxドキュメントページ は_type myservice_spool_t, file_type;_を使用する必要があることを示していますが、checkmoduleは_ERROR 'attribute file_type is not declared'_を示しています
  • 不完全-例 この答えfile_type()マクロを使用するようになりますが、checkmoduleは次のように言います:_ERROR 'This block has no require section.' at token 'files_type'_
  • または完全に欠落している-例RHEL 7の新しいSELinuxガイドには、_audit2allow_の使用を除いて、新しいポリシーの作成方法に関する情報がありません。

SELinuxプロジェクト Webサイトは、1つの動作する例を見つけることができなかったため、まったく役に立たない

_semanage fcontext_が承認する新しいタイプを導入するTEファイルの簡単な記述例をいただければ幸いです。

[更新]

私はこれを見つけました ポリシーファイルを作成するためのGentooのドキュメント 、これはいくつかの有用な説明と例です。

7
Guss

私が抱えていた問題は、モジュールを正しくコンパイルしなかったことが原因であることがわかりました。その結果、マクロはおそらく「実行」されず、checkmoduleポリシーコンパイラのエラーメッセージは実際にはそれを理解するのに役立ちませんでした。

これらのマクロをすべて適切に展開するには、SELinuxによって提供されるMakefileを使用してポリシーをコンパイルする必要があります。myservice_spool.teというTEファイルを使用して、次のコマンドを実行する必要があります。

make -f /usr/share/selinux/devel/Makefile myservice_spool.pp

これにより、すべてのマクロが展開された一時TEファイルが作成され、関連するコンパイラを呼び出してmyservice_spool.ppを作成します。

OPにリンクされているGentooのドキュメントには少し詳しい情報がありますが、CentOSシステムのファイルパスは正しくありません。

生成されたTEテンプレートをtmpディレクトリで確認すると(SELinux makefileが役に立ちます)、「属性」がタイプをファイルとして指定することを処理する正しい方法であることがわかりますが、 requireそれらを機能させるには-SELinux TEファイルが機能するように見える方法は、構成ファイルに魔法のようにインポートされたシンボルを取得しないことです-使用するものはすべてrequireする必要があります。

したがって、マクロ以外の方法で新しいファイルタイプを設定する正しい方法は、次のようなものです(TEで生成されたテンプレートからコピー)。

type myservice_spool_t;
require {
    attribute spoolfile;
    attribute file_type, non_security_file_type, non_auth_file_type;
} # end require
typeattribute myservice_spool_t file_type, non_security_file_type, non_auth_file_type, spoolfile;
2
Guss

ラベル変更特権を持つように、files属性のメンバーを宣言する必要があります。

試す

type myservice_spool_t;
files_type(myservice_spool_t)

または、あなたの場合はもっと良い。

type myservice_spool_t;
files_spool_file(myservice_spool_t)

実際にスプールファイルを作成しているとします。これにより、他のマクロがそのポリシーで「スプールの管理」権限を持っている場合に、そのスプールを操作できるようになります。

完全なポリシーモジュールの例を次に示します。

policy_module(`myservice', 1.0.0)

type myservice_spool_t;
files_spool_file(myservice_spool_t)

これは機能しますが、型とそれだけを宣言するだけです。価値のあることを行うには、いくつかの許可ルールが必要です。

1
Matthew Ife