私はアプリケーションとブラウザシェルを持っており、実行可能ファイルのリストを取得するためにこのコマンドを実行しています($ 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にはありません。そのようなコマンドは存在しますか?デフォルトでは、次のパスがあります。
/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
SELinuxに付属の基本ポリシーは、各アプリケーションの一般的なシステムアクセスを可能にするように設計されています。通常のログインシェルとは異なり「ネットワークシェル」Webサーバーコンテキストで実行(httpd_t)Webサーバーの制限が適用される場合。あなたのウェブサーバーも以下で実行されています。許可ドメインつまり、ポリシールールは適用されず、履歴のみが実行されるため、実際にアプリケーションに権限拒否エラーが表示されないことを意味します。
このメッセージを削除する最も簡単な方法は、使用に関する推奨事項に従うことですaudit2allow
。httpd_t強制モードに戻ります。audit2allow
拒否メッセージが生成される特定のアクセスを許可する新しいルールを作成します。httpd_t文脈は許可するプロパティのインポートファイルとしてl2tpd_exec_tコンテキスト。
Webサーバーでシェルを引き続き使用する場合は、SELinux権限エラーがさらに表示されることがあります(httpd_tコンテキスト)。
理想的には、実行中のシェルの(より多くの)許可ドメインへの明確な変換パスを含むカスタムポリシーを作成する必要があります。これにより、Webサーバーにあまりにも多くのアクセス権を付与することなく、無制限のシェルを実行できます。有用な場合は、Webサーバーでシェルを起動する方法(スクリプトなど)の詳細によって異なります。
決めたら維持するhttpd_t許可モードでそれにもかかわらず、ログメッセージが必要ない場合は、Webサーバーが無制限のコンテキストで実行されるように構成できます。いずれにせよ、Webサーバーの場合、これは実行するのと実質的に同じです。SELinuxが無効になっています。。