私は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
このカスタムタイプを使用するファイル
それを解決するより良い方法があれば、それもうまくいきます。
ありがとう
もっと調べた後、私がやりたいことの適切な用語は、新しいtypes
を作成することだと思います https://docs.fedoraproject.org/en-US/Fedora/13 /html/SELinux_FAQ/index.html#id3036916
基本的に言う、実行
sepolgen /path/to/binary
そして、ppファイルにコンパイルして読み込むことができるテンプレートを取得することができましたが、それでもいくつかのエラーが発生しますが、自分がやりたいことに近いように見えます。
動作するようになったら、この投稿を更新します
ランニングの出発点
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)
1行目は新しいタイプを宣言し、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タイプに、コンテキストapp_var_t
でディレクトリの書き込み/検索/ etcを許可し、コンテキスト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
ファイルにはもっと多くのエントリがありますが、この質問の範囲外です。)
この解決策を得るのに役立つ追加の読み物:
盲目的にaudit2allow -M mydomainを実行する前に考えてください
SELinux FOR Red Hat DEVELOPERS (長いPDF)