web-dev-qa-db-ja.com

Selinux'var_t '基本型警告

私は現在、CentOSSelinuxフォレストで「失われています」。

私のセットアップでは、nginxがUWSGIプロセスとの通信に使用する_/var/www/demo/out_にWSGIソケットをセットアップします。ブラウザでページをリクエストするたびに、nginxエラーが発生します。

なぜこのSelinuxが関連しているのですか?

  • _setenforce 0_でSelinuxを無効にすると修正されます。
  • /var/log/audit/audit.logおよびaudit2なぜdeniedおよびmissing type enforcement (TE) allow ruleを表示するのか

_httpd_sys_content_t_ラベルをソケットに追加しようとしたので、nginxはソケットファイルの読み取りと書き込みを許可され、新しいラベルを追加した後にrestoreconを実行しました。

_audit2allow_を介して違反を実行すると、次のポリシーが返されます。

_module nginx 1.0;

require {
        type httpd_t;
        type var_t;
        type httpd_sys_content_t;
        class sock_file write;
}

#============= httpd_t ==============
allow httpd_t httpd_sys_content_t:sock_file write;

#!!!! WARNING: 'var_t' is a base type.
allow httpd_t var_t:sock_file write;
_

私が理解している最初のルールですが、2番目のルールは何を伝えていますか? nginxプロセスが_var_t_を含むtcontextを要求しているので、この新しいコンテキストを含む新しいselinuxポリシーが必要ですか?

では、なぜこの警告がここにあるのでしょうか。 varのようなディレクトリをポリシーに追加するのが一般的すぎる/具体的ではないという不満はありますか?この場合、このポリシーを_var_www_t_のようなものに絞り込むことはできませんか?また、これが当てはまる場合、root以外のユーザーの下で実行されているuwsgiプロセスがソケットへの書き込みを許可されるのはなぜですか?

2

SELinuxがすでに期待している場所にソケットを配置することを検討してください。

# semanage fcontext -l | grep httpd_var_run_t | grep wsgi
/var/run/wsgi.*                                    socket             system_u:object_r:httpd_var_run_t:s0 

したがって、/run/wsgi.anythingを作成し、それをソケットとして使用すると、完全に機能します。これは起動のたびにクリアされる一時ディレクトリであるため、通常は tmpfiles.d構成 を使用して、起動時に自分でソケットを作成する必要があることに注意してください。例えば:

p+ /run/wsgi.anything 0660 user group - -
3
Michael Hampton

あなたがあまりにも多くを与えているかもしれないので、警告はそこにあります。 httpdが/ var内の任意のソケットに書き込むことを許可しますが、これは希望どおりではない可能性があります。

Httpd_unifiedブール値を有効にしていない限り、httpd_sys_content_tコンテキストはファイルへの読み取りアクセスのみを許可します。ソケットをhttpdで書き込み可能にする場合は、ソケットをhttpd_sys_rw_content_tに設定する必要があります。

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/demo/out"
restorecon -Rv /var/www/demo/out

マイケルハンプトンはすぐに私を修正するために一緒にいると確信しています

2
user9517

Selinux基本型はジェネリック型であり、許可されると、基盤となるシステムの非常に重要な部分へのアクセスを許可します。 var_tに対してselinuxアクセスを有効にすることは、プロセスを制限なしで実行することとほぼ同等です。

から selinux開発者の1人のブログ:

私たちが本当に止めたいのは、BASE型に書き込むドメインです。制限されたドメインがetc_tやusr_tなどのBASEタイプに書き込むことを許可すると、他のほとんどすべてのドメインがetc_tまたはusr_tのコンテンツを読み取る必要があるため、ハッキングされたシステムが他のドメインを攻撃する可能性があります。

/var/www/の下のファイルにはすでにhttpd_sys_content_tのラベルが付いています。同じラベルでラベルを付け直すことで、何も変更しません。私が覚えていることから、httpd_sys_content_tはソケットではなく静的HTMLファイルに使用する必要があります。ソケットのラベルを次のように変更してみてください。

semanage fcontext -a -t httpd_var_run_t </your/socket/path>
restorecon -RF </your/socket/path>

同様の問題については ここ を読むことができます。

1
shodanshok