[[ノート>ノート/ノート]]~
訪問者 &counter();  最終更新 &lastmod();~

***SELinux (Security Enhanced Linux) でsecurity変更 (2009-05-04) [#ya7762e5]

oregano (Fedora 10, SELinux) で、PHPからexecやsystemで別ファイルを実行させると、
実行できないエラー。httpdのエラーログには、permission denied. のメッセージ。

確認のため、もっとも単純なHalloWorldのプログラムをPHPのexecから実行させてみる。
PHPのソースは
 <HTML><BODY>
 <?php
   $output = exec("/home/yamanouc/src/halloworld");
   print("<pre>$output</pre>\n");
 ?>
 </BODY>
 </HTML>
やはりエラー。
 sh: /home/yamanouc/src/halloworld: Permission denied

いろいろチェックしたが、特に他の(SELinuxでない)サーバーでは動くことを確認。
そういえば前にmoodleを導入したときにもsendmailとのリンクでアクセス権限で
トラブルを起こした記憶がある。これもその可能性あり。

SELinuxについて少し調べてみる。SELinuxがオンになっているか?
 getenforce
でEnforcing と出た。オンになっている。オフにするのも1つの手だが、
せっかくなので何とかセキュリティを保ったまま実行させたい。(この実行自体が
かなりセキュリティ的にはヤバイが)。

解決策

参考>>たとえばhttp://www.stackasterisk.jp/tech/systemConstruction/seLinux04_01.jsp(但しFedora5以降で変更があるので注意)

トラブル直後に、
 audit2allow -a -l -M myPHPexec
これは、auditdが動いている環境でauditログファイルから(-aオプション)
エラーを見つけ、それを修正するためのallowコマンド列を
吐き出すためのコマンドである。

追加すべきコマンド列は
 #============= httpd_t ==============
 allow httpd_t user_home_t:file { read execute execute_no_trans };
 allow httpd_t user_tmp_t:file { read execute execute_no_trans };
だったが、それをモジュール(Fedora5以降は、ソースからコンパイルする方式をやめ、
ユーザが追加モジュールとして追加する方法になった)に作る。(-Mオプション)。
作成されたのは、モジュールファイル myPHPexec.pp(=バイナリ)である。

なお、同時にソースファイル(myPHPexec.te)も作成・出力されている。
 %less myPHPexec.te
 
 module myPHPexec 1.0;
 
 require {
         type user_tmp_t;
         type httpd_t;
         type user_home_t;
         class file { read execute };
 }
 
 #============= httpd_t ==============
 allow httpd_t user_home_t:file { read execute execute_no_trans };
 allow httpd_t user_tmp_t:file { read execute execute_no_trans };


audit2allowの結果の出力メッセージは
 ******************** IMPORTANT ***********************
 To make this policy package active, execute:
 
 semodule -i myPHPexec.pp
であったので、このsemodule -i コマンドを実行する。
 semodule -i myPHPexec.pp
大分時間がかかったが、完了。

(すべての)モジュールをリストするコマンド
 semodule -l
で、インストールされたかどうか確認できる。

***おまけ (2010-08-18) [#nd57e89c]
後から追加したファイルが、セキュリティのプロパティ(タグ?)が付いていない為に、
SeLinuxにはねられる場合、コマンド rescorecon <ファイル名> が効くことがある。~
SeLinuxにはねられる場合、コマンド restorecon <ファイル名> が効くことがある。~
このコマンドは、プロパティをstraightにするらしい。
[[ノート>ノート/ノート]]~
訪問者 &counter();  最終更新 &lastmod();~

***SElinuxの要領のよい解説 (2013-07-01) [#f663cb82]
[[第5回 タイプを変更してトラブルに対処する:http://itpro.nikkeibp.co.jp/article/COLUMN/20070828/280518/]]

***SELinux (Security Enhanced Linux) でsecurity変更 (2009-05-04) [#ya7762e5]

oregano (Fedora 10, SELinux) で、PHPからexecやsystemで別ファイルを実行させると、
実行できないエラー。httpdのエラーログには、permission denied. のメッセージ。

確認のため、もっとも単純なHalloWorldのプログラムをPHPのexecから実行させてみる。
PHPのソースは
 <HTML><BODY>
 <?php
   $output = exec("/home/yamanouc/src/halloworld");
   print("<pre>$output</pre>\n");
 ?>
 </BODY>
 </HTML>
やはりエラー。
 sh: /home/yamanouc/src/halloworld: Permission denied

いろいろチェックしたが、特に他の(SELinuxでない)サーバーでは動くことを確認。
そういえば前にmoodleを導入したときにもsendmailとのリンクでアクセス権限で
トラブルを起こした記憶がある。これもその可能性あり。

SELinuxについて少し調べてみる。SELinuxがオンになっているか?
 getenforce
でEnforcing と出た。オンになっている。オフにするのも1つの手だが、
せっかくなので何とかセキュリティを保ったまま実行させたい。(この実行自体が
かなりセキュリティ的にはヤバイが)。

解決策

参考>>たとえばhttp://www.stackasterisk.jp/tech/systemConstruction/seLinux04_01.jsp(但しFedora5以降で変更があるので注意)

トラブル直後に、
 audit2allow -a -l -M myPHPexec
これは、auditdが動いている環境でauditログファイルから(-aオプション)
エラーを見つけ、それを修正するためのallowコマンド列を
吐き出すためのコマンドである。

追加すべきコマンド列は
 #============= httpd_t ==============
 allow httpd_t user_home_t:file { read execute execute_no_trans };
 allow httpd_t user_tmp_t:file { read execute execute_no_trans };
だったが、それをモジュール(Fedora5以降は、ソースからコンパイルする方式をやめ、
ユーザが追加モジュールとして追加する方法になった)に作る。(-Mオプション)。
作成されたのは、モジュールファイル myPHPexec.pp(=バイナリ)である。

なお、同時にソースファイル(myPHPexec.te)も作成・出力されている。
 %less myPHPexec.te
 
 module myPHPexec 1.0;
 
 require {
         type user_tmp_t;
         type httpd_t;
         type user_home_t;
         class file { read execute };
 }
 
 #============= httpd_t ==============
 allow httpd_t user_home_t:file { read execute execute_no_trans };
 allow httpd_t user_tmp_t:file { read execute execute_no_trans };


audit2allowの結果の出力メッセージは
 ******************** IMPORTANT ***********************
 To make this policy package active, execute:
 
 semodule -i myPHPexec.pp
であったので、このsemodule -i コマンドを実行する。
 semodule -i myPHPexec.pp
大分時間がかかったが、完了。

(すべての)モジュールをリストするコマンド
 semodule -l
で、インストールされたかどうか確認できる。

***おまけ (2010-08-18) [#nd57e89c]
後から追加したファイルが、セキュリティのプロパティ(タグ?)が付いていない為に、
SeLinuxにはねられる場合、コマンド restorecon <ファイル名> が効くことがある。~
このコマンドは、プロパティをstraightにするらしい。
[[ノート>ノート/ノート]]~
訪問者 &counter();  最終更新 &lastmod();~

***SElinuxの要領のよい解説 (2013-07-01) [#f663cb82]
[[第5回 タイプを変更してトラブルに対処する:http://itpro.nikkeibp.co.jp/article/COLUMN/20070828/280518/]]
⇒  [[第5回 タイプを変更してトラブルに対処する:http://itpro.nikkeibp.co.jp/article/COLUMN/20070828/280518/]]

***SELinux (Security Enhanced Linux) でsecurity変更 (2009-05-04) [#ya7762e5]

oregano (Fedora 10, SELinux) で、PHPからexecやsystemで別ファイルを実行させると、
実行できないエラー。httpdのエラーログには、permission denied. のメッセージ。

確認のため、もっとも単純なHalloWorldのプログラムをPHPのexecから実行させてみる。
PHPのソースは
 <HTML><BODY>
 <?php
   $output = exec("/home/yamanouc/src/halloworld");
   print("<pre>$output</pre>\n");
 ?>
 </BODY>
 </HTML>
やはりエラー。
 sh: /home/yamanouc/src/halloworld: Permission denied

いろいろチェックしたが、特に他の(SELinuxでない)サーバーでは動くことを確認。
そういえば前にmoodleを導入したときにもsendmailとのリンクでアクセス権限で
トラブルを起こした記憶がある。これもその可能性あり。

SELinuxについて少し調べてみる。SELinuxがオンになっているか?
 getenforce
でEnforcing と出た。オンになっている。オフにするのも1つの手だが、
せっかくなので何とかセキュリティを保ったまま実行させたい。(この実行自体が
かなりセキュリティ的にはヤバイが)。

解決策

参考>>たとえばhttp://www.stackasterisk.jp/tech/systemConstruction/seLinux04_01.jsp(但しFedora5以降で変更があるので注意)

トラブル直後に、
 audit2allow -a -l -M myPHPexec
これは、auditdが動いている環境でauditログファイルから(-aオプション)
エラーを見つけ、それを修正するためのallowコマンド列を
吐き出すためのコマンドである。

追加すべきコマンド列は
 #============= httpd_t ==============
 allow httpd_t user_home_t:file { read execute execute_no_trans };
 allow httpd_t user_tmp_t:file { read execute execute_no_trans };
だったが、それをモジュール(Fedora5以降は、ソースからコンパイルする方式をやめ、
ユーザが追加モジュールとして追加する方法になった)に作る。(-Mオプション)。
作成されたのは、モジュールファイル myPHPexec.pp(=バイナリ)である。

なお、同時にソースファイル(myPHPexec.te)も作成・出力されている。
 %less myPHPexec.te
 
 module myPHPexec 1.0;
 
 require {
         type user_tmp_t;
         type httpd_t;
         type user_home_t;
         class file { read execute };
 }
 
 #============= httpd_t ==============
 allow httpd_t user_home_t:file { read execute execute_no_trans };
 allow httpd_t user_tmp_t:file { read execute execute_no_trans };


audit2allowの結果の出力メッセージは
 ******************** IMPORTANT ***********************
 To make this policy package active, execute:
 
 semodule -i myPHPexec.pp
であったので、このsemodule -i コマンドを実行する。
 semodule -i myPHPexec.pp
大分時間がかかったが、完了。

(すべての)モジュールをリストするコマンド
 semodule -l
で、インストールされたかどうか確認できる。

***おまけ (2010-08-18) [#nd57e89c]
後から追加したファイルが、セキュリティのプロパティ(タグ?)が付いていない為に、
SeLinuxにはねられる場合、コマンド restorecon <ファイル名> が効くことがある。~
このコマンドは、プロパティをstraightにするらしい。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS