2

RHEL5 インストールの Apache サーバーで実行される php スクリプトがあります。このスクリプトは、「rpm -q --info packagename」で exec を実行します。

問題は、パーミッシブ モードの selinux では適切に動作しますが、完全に有効にすると動作しません。したがって、それはselinuxの問題だと思います。

見つけた拒否されたエントリに基づいてルールを作成するために audit2allow から始めましたが、監査ログには拒否されなくなりましたが、selinux が有効になっているとまだ実行されません。

私の世界では、システムの実行が許可されるかどうかをシステムに問い合わせているようで、selinux が「これを試したら停止します」と言うと、したがって、システムは exec を実行しません。もしそうなら、私は新しいselinuxルールを作成できるという「拒否」を受け取ると思います。selinux が許可されているため、拒否されることはありませんが、動作します..

そのため、これを難しい方法で処理し、selinux のカスタム ルールを作成する必要があるようです。言ったし、私はそれを作った:

module php_rpm 1.0;

require {
    type httpd_t;
    type bin_t;
    type rpm_exec_t;
    type rpm_var_lib_t;
    class file { execute execute_no_trans getattr read execmod };
    class dir { getattr search };
}

#============= httpd_t ==============
allow httpd_t rpm_exec_t:file { execute execute_no_trans getattr read execmod };
allow httpd_t rpm_var_lib_t:dir { getattr search };

残念ながら、これは私の問題には何もしませんでしたが、おそらく私のselinuxルールを少し台無しにしました:P

selinux を有効にして php から rpm を実行しようとした人はいますか?

4

1 に答える 1

1

私はそれを解決する方法を見つけました。おそらく最善の方法ではありませんが、少し途中です。

私のaudit2allowが機能しなかった理由は、すべてのメッセージが監査ログに表示されなかったためです。これを読んだら、すべてのログを表示するようにアクティブ化しました:http: //docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3028826

ログに拒否されたメッセージがさらに表示されると、それを機能させるために何をすべきかを理解できました。

最終的なteファイルは次のようになります。

module php_rpm 1.0;

require {
    type selinux_config_t;
    type httpd_script_exec_t;
    type security_t;
    type httpd_t;
    type rpm_exec_t;
    type rpm_var_lib_t;
    class dir { search getattr };
    class file { getattr read execute_no_trans execute lock };
}

#============= httpd_t ==============
allow httpd_t httpd_script_exec_t:file { read getattr execute_no_trans };
allow httpd_t rpm_exec_t:file { read getattr execute_no_trans execute };
allow httpd_t rpm_var_lib_t:dir { getattr search };
allow httpd_t rpm_var_lib_t:file { read getattr lock };
allow httpd_t security_t:dir search;
allow httpd_t security_t:file read;
allow httpd_t selinux_config_t:dir search;
allow httpd_t selinux_config_t:file { read getattr };

ここは少しドアが開いているような気がするので、これからも少し締めてみます。しかし、ここではSELINUXルールは私の主な関心事ではありませんでしたが、二次的なものになります。

誰かがより良い提案、おそらくこれについてのより具体的なルールを持っているなら、それを自由に共有してください!

于 2012-09-13T07:51:50.087 に答える