カスタムSELinuxラベルを作成する方法


11

私は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ファイルにコンパイルして読み込むことができるテンプレートを取得することができましたが、それでもいくつかのエラーが発生しますが、やりたいことに近いように見えます。

機能するようになったら、この投稿を更新します

回答:


11

ランニングの出発点

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でファイルを作成/開く/削除/削除できるようにします

パズルの最後の部分は、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行目は次のことを意味します。

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

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

これで機能するポリシーができました。カスタムポリシーを使用してアプリをデプロイすると、すべて機能します。(私のポリシーでは、.teファイルに多くのエントリがありますが、この質問の範囲外です。)

この解決策を得るのに役立つ追加の読み物:

sepolgenで物事を簡単にする

やみくもにaudit2allow -M mydomainする前に考えてください

RED HAT開発者向けのSELinux(長いPDF)

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

サンプルポリシー(特にpostgresql)

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


またはCILを
Jakuje

sepolgen /path/to/binary私のために構文エラーを吐き出します。RHEL 7.6を使用しています。sepolgen --application /path/to/binaryあなたの目標が特定のアプリケーションのポリシーを書くことなら、私は正しい構文だと思いますか?
jayhendren 2018

あなたの.teモジュールをコンパイルするときに、ファイルにも私のために構文エラーがスローされますapp.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5:。そして、私が追加した場合requireのセクションを、私が手に:ERROR 'syntax error' at token 'files_type' on line 13:
jayhendren

申し訳ありませんが、Fedoraマシンにアクセスしてテストすることはできませんが、バージョン24以降、構文が変更された可能性があります。
fmpwizard 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.