[[ノート>ノート/ノート]]~
訪問者 &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にするらしい。