web-dev-qa-db-ja.com

compgenとSELinux

私はアプリ、ブラウザーシェルを持っており、このコマンドを実行して実行可能ファイルのリストを取得しています( $ PATHからすべてのバイナリを一覧表示

compgen -A function -abck | sort | uniq

このコマンドを呼び出すと実行可能ファイルが返されますが、SELinuxから次のようなエラーがたくさん発生します。

SELinux is preventing bash from getattr access on the file /usr/sbin/chronyd.

allow this access for now by executing:
# ausearch -c 'bash' --raw | audit2allow -M my-bash
# semodule -X 300 -i my-bash.pp

そのエラーを防ぐ方法はありますか?箱から出してすぐにエラーが発生することなく、アプリをSELinuxでも動作させたいです。

PATHを変更するか、コマンドを実行して、パスをPATH変数に含めることができるかどうかを確認できます。おそらく、/ usr/sbinをPATHに含めることはできません。そのようなコマンドは存在しますか?私はデフォルトでこのPATHを持っています:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/games

これはSudo ausearch -c 'bash' --rawの結果です

type=AVC msg=audit(1506851274.781:2921): avc:  denied  { getattr } for  pid=12298 comm="bash" path="/usr/sbin/xl2tpd" dev="sda1" ino=2239132 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:l2tpd_exec_t:s0 tclass=file permissive=1

| audit2why

type=AVC msg=audit(1506851274.781:2921): avc:  denied  { getattr } for  pid=12298 comm="bash" path="/usr/sbin/xl2tpd" dev="sda1" ino=2239132 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:l2tpd_exec_t:s0 tclass=file permissive=1

    Was caused by:
        Missing type enforcement (TE) allow rule.

        You can use audit2allow to generate a loadable module to allow this access.

audit2allowなしでコードを機能させることは可能ですか?

1
jcubic

SELinuxに同梱されているデフォルトのポリシーは、各アプリケーションの一般的なシステムアクセスを許可するように設計されています。通常のログインシェルとは異なり、 "Webシェル"はWebサーバーコンテキスト(httpd_t)で実行されており、Webの制限があります。サーバーが適用されます。 Webサーバーも許可ドメインで実行されています。つまり、ポリシールールは適用されず、ログに記録されるだけなので、アプリケーションでアクセス許可拒否エラーは実際には表示されません。

メッセージを取り除く最も簡単な方法は、audit2allowを使用するという提案に従うことです。その後、httpd_tを強制モードに戻すことができます。 audit2allowは、拒否メッセージが生成された特定のアクセスを許可する新しいルールを作成します。httpd_tコンテキストのルール getattrl2tpd_exec_tコンテキストを持つファイルへ。

Webサーバーからシェルを使い続けることを計画している場合、デフォルトのポリシーで許可されていないことを行うと、SELinuxパーミッションエラーがさらに発生する可能性があります(httpd_tコンテキストで) 。

理想的には、シェルが実行される(より)許容されるドメインへの明確な移行パスを使用してカスタムポリシーを作成する必要があります。これにより、Webサーバーに過度に許可されたアクセスを許可せずに、制限のないシェルを実行できます。それが有用であるかどうかは、シェルがWebサーバーからどのように起動されるか(スクリプトなど)の詳細に完全に依存します。

とにかくhttpd_tを許容モードに保つことにし、ログメッセージが必要ない場合は、制限のないコンテキストで実行するようにWebサーバーを構成できます。いずれにせよ、Webサーバーの場合、これは実質的にSElinuxが無効を実行するのと同じです。

2
sebasth