ノート
訪問者 1935  最終更新 2013-07-01 (月) 13:09:53

SElinuxの要領のよい解説 (2013-07-01)

⇒  第5回 タイプを変更してトラブルに対処する

SELinux (Security Enhanced Linux) でsecurity変更 (2009-05-04)

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)

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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-07-01 (月) 13:09:53 (1603d)