Ubuntu 10.04 LTSとは異なる設定が必要な個所について説明します。
EPELに含まれるfcgi-develパッケージが必要になるので、http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/5/i386/epel-release-5-4.noarch.rpm をダウンロードし、導入しておきます。
$ sudo rpm -ivh epel-release-5-4.noarch.rpm $ sudo yum update $ sudo yum install fcgi-devel
http://en.ispdoc.com/index.php/Installing_mod_fcgid_in_CentOS_Linuxを参考にして、httpd.apache.orgからmod_fcgidを入手してビルドしました。
$ wget http://ftp.jaist.ac.jp/pub/apache/httpd/mod_fcgid/mod_fcgid-2.3.6.tar.bz2 $ sudo yum install httpd-devel $ tar xvjf mod_fcgid-2.3.6.tar.bz2 $ cd mod_fcgid-2.3.6 $ env PATH=/usr/sbin:$PATH ./configure.apxs $ make $ sudo make install
設定ファイルはまとめて、/etc/httpd/conf.d/fcgid.conf にまとめています。
<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi FcgidConnectTimeout 20 FcgidProcessTableFile /tmp/fcgid_shm FcgidIPCDir /tmp/fcgidsock </IfModule> Alias /postal/ "/app/contents/postal/" <Directory "/app/contents/postal"> Options +ExecCGI Order deny,allow Deny from all Allow from all </Directory>
SELinuxを使う場合にはマニュアルで導入したモジュールや、自前で配置したファイルについては適切な権限を付与する必要があります。 一時的にはchconコマンドで必要なコンテキストを変更する事ができますが、恒久的にはsemanageコマンドでファイルシステムを変更する事になります。
この他には情報を参照する'Z'オプションを覚えておけば、ps auxZやls -laZといったコマンドで、SELinux周りは一通りチェックできると思います。
以下ではファイルシステム上のコンテキストを変更しつつ、カスタムポリシーを作成する手順を載せてみました。
$ sudo chcon -u system_u /usr/lib/httpd/modules/mod_fcgid.so $ sudo chcon -t httpd_sys_content_t -R /app $ cd $ sudo cat /var/log/audit/audit.log | audit2allow -m local > local.te $ cat > Makefile all: local.te checkmodule -M -m -o local.mod local.te semodule_package -o local.pp -m local.mod semodule -i local.pp $ sudo make $ sudo /etc/init.d/httpd restart $ curl http://localhost/postal/main.fcgi
audit2allowコマンドを使っていますが、実際には繰り返して何回も実行する必要があると思います。 参考までに最終的な local.te ファイルを載せておきます。
module local 1.0; require { type httpd_tmp_t; type httpd_log_t; type httpd_sys_script_t; type usr_t; type httpd_t; type default_t; type port_t; class sock_file { write create unlink setattr }; class tcp_socket name_connect; class dir { search getattr }; class file { write execute read unlink getattr }; } #============= httpd_sys_script_t ============== allow httpd_sys_script_t default_t:file { read getattr execute }; allow httpd_sys_script_t port_t:tcp_socket name_connect; allow httpd_sys_script_t usr_t:file execute; #============= httpd_t ============== allow httpd_t default_t:dir { search getattr }; allow httpd_t httpd_log_t:file { write unlink }; allow httpd_t httpd_tmp_t:sock_file { write create unlink setattr }; allow httpd_t usr_t:file execute;
FastCGIとSELinuxを使った組み合せでは、問答無用にdisabledに変更する例が多いので、手抜きも多いですが、あえてenforcingのままで動かす例を載せました。
Created: 2010-12-04, Last modified: 2011-04-03