カスタムSELinuxタグを作成する方法

カスタムSELinuxタグを作成する方法

Fedora 24で実行しようとしているサービス/シングルバイナリアプリケーションを作成しました。これはsystemdを使用して実行され、バイナリは次にデプロイされます。/srv/bot

私が書いたこのサービス/アプリケーションは、そのディレクトリからファイルを作成/開く/読み取り、名前を変更する必要があります。

私は最初、次のことに基づいて新しいポリシーを作成し始めました。SELinux:プロセスがディレクトリにすべてのファイルを生成できるようにする

しかし、私のアプリケーションの名前を変更する必要がある場合は、出力に次の警告が表示されます。

#!!!! WARNING: 'var_t' is a base type.
allow init_t var_t:file rename;

インターネット検索では、基本型よりも具体的なSELinuxタグを使用する必要があることがわかりましたが、すべてのオンライン例にはhttpd / nginx / etcの既存のタグが表示されます。

私のアプリケーションのカスタムラベルを作成する方法はありますか?

私の考えは、次を使用してmyapp_var_tのようなものを作成することでした。

semanage fcontext -a -t my_app_var_t '/srv/bot(/.*)?'
restorecon -R -v /srv/bot

この.ppカスタムタイプを使用するカスタムファイル

より良い解決策があればそれも可能です。

ありがとう

修正する

もう少し検索した後、私がしたいことが新しいものを作成するという正しい用語を見つけましたtypeshttps://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916

デフォルトでは、これは実行を意味します。

sepolgen /path/to/binary

ppファイルにコンパイルしてロードできるテンプレートを取得できましたが、まだエラーが発生しましたが、私が望む作業に近づいているようです。

うまくいけば、この投稿を更新します。

ベストアンサー1

ランニングの出発点

sepolgen /path/to/binary

これは以下を提供します。

app.fc
app.sh
app.if
app.spec
app.te

SELinux file contextプログラム/デーモンが変更するファイルがある親ディレクトリに新しいアプリを作成するには、app.teファイルを編集して次を追加します。

type app_var_t;
files_type(app_var_t)

最初の行は新しい型を宣言し、2番目の行は魔法をかけてファイル型にするマクロを呼び出します(ファイルまたはディレクトリではプロセスコンテキストの行であるapp_exec_tが利用できないことがわかりました)。「SELinux型の見直し」さまざまなタイプに関する追加情報

型を宣言したら、アプリケーションがその型を使用できることをSELinuxに通知する必要があります。私の場合は、以下を追加しました。

allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };

これらの2行は、デフォルトで、私のアプリケーションドメインであるapp_t型がコンテキストを使用して/ etcディレクトリを書くか検索できるようにし、app_var_tコンテキストapp_var_tを使用して/ etcファイルを作成/開く/削除できるようにすることを意味します。

パズルの最後の部分は、どういうわけかSELinuxに、どのフォルダとファイルが各タイプをインポートする必要があるかを知らせることです。ファイルを編集するだけですapp.fc(fc =>ファイルコンテキスト)。

私の場合、このファイルには2行しかありません。

/srv/bot/app        --  gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)?          gen_context(system_u:object_r:app_var_t,s0)

最初の行は私のサーバーにデプロイされたバイナリを直接指しているため、この行はapp_exec_tコンテキストを取得します。

2行目は次のことを意味します。

/srv/bot ディレクトリと /srv/bot ディレクトリのすべてのファイルに app_var_t を適用します。

--パスと最初の行呼び出しの関係に注意してくださいgen_context--つまり、ファイルにのみ適用されます。 2番目のケースには何もありません(空白のみ)。これは、一致するすべてのディレクトリとファイルに適用されることを意味します。これが私が望むものです。他のオプションは、-dディレクトリのみを適用する必要があることです。

これで、作業中のポリシーがあり、カスタムポリシーを使用してアプリケーションをデプロイできるようになり、すべてがうまく機能します。 (私のポリシーにはファイルにはより多くの項目がありますが、.teこの質問の範囲外です。)

このソリューションを見つけるのに役立つ追加の資料は次のとおりです。

sepolgenで仕事を簡単にしましょう

行動する前に盲目的に考えてください audit2allow -M mydomain

Red Hat 開発者向け SELinux(長いPDF)

SElinuxモジュール(1):タイプとルール

サンプル戦略(特にpostgresql)

ファイルコンテキストファイルについて

おすすめ記事