- 2008年12月14日 15:44
- Apache | Vine Linux
Vine 4.2 環境でsuPHPを使うお話。
Apache 2.2 はパッケージでインストールされている。
PHP 5.2.x はパッケージでインストールされている。
そんな環境です。
「httpdが無い」というエラーになるようなのでシンボリックリンクを作成。
# cd /usr/sbin
# ln -s apache2 httpd
suPHP 0.6.3 インストール。
最新版は以下のURLで確認して下さい。
インストール先に移動。
# cd /usr/local/src
suPHPをダウンロード。
# http://www.suphp.org/download/suphp-0.6.3.tar.gz
解凍。
# tar zxvf suphp-0.6.3.tar.gz
configure。
# ./configure \
--prefix=/usr \
--with-apxs=/usr/sbin/apxs \
--with-min-uid=500 \
--with-min-gid=500 \
--with-apache-user=apache \
--with-logfile=/var/log/apache2/suphp.log \
--with-php=/usr/bin/php5-cgi \
--sysconfdir=/etc \
--with-apr=/usr/bin/apr-1-config \
--with-setid-mode=owner
私はここで apxs が見つからないというようなエラーになったので以下のようにして導入しました。
apxs が含まれるパッケージを検索。
# apt-cache search apxs
この結果、どうやら apache2-devel に含まれているようなのでインストールされているか確認。
# rpm -qa | grep apache2
私の環境ではインストールされていなかったので apache2-devel をインストール。
# apt-get install apache2-devel
再びconfigure。
生成されたMakefileのapacheとなっている部分を全部apache2に書き換える。
# vi src/apache2/Makefile
apacheとなっている部分を検索して書き換えていくと早い。
以下のようにして Nキー か nキー で検索しましょう。
(挿入モードで無い状態で行う)
?apache
ApacheのモジュールとしてsuPHPを使うので mod_suphp.c を編集する。
# vi src/apache2/mod_suphp.c
-AP_INIT_ITERATE(”suPHP_AddHandler”, suphp_handle_cmd_add_handler, NULL, ACCESS_CONF, “Tells mod_suphp to handle these MIME-types”), +AP_INIT_ITERATE(”suPHP_AddHandler”, suphp_handle_cmd_add_handler, NULL, RSRC_CONF | ACCESS_CONF, “Tells mod_suphp to handle these MIME-types”),
make&install。
# make
# make install
Apacheモジュールディレクトリへ mod_suphp.so を移動。
# mv /usr/lib/apache2/mod_suphp.so modules/
suPHPの設定ファイル編集。
この時、新規ファイル作成になったので以下を貼り付けた。
# vi /etc/suphp.conf
[global] ;Path to logfile logfile=/var/log/apache2/suphp.log ;Loglevel loglevel=info ;User Apache is running as webserver_user=apache ;Path all scripts have to be in docroot=/home/ ;Path to chroot() to before executing script ;chroot=/mychroot ; Security options allow_file_group_writeable=false allow_file_others_writeable=false allow_directory_group_writeable=false allow_directory_others_writeable=false ;Check wheter script is within DOCUMENT_ROOT check_vhost_docroot=false ;Send minor error messages to browser errors_to_browser=true ;PATH environment variable env_path=/usr/bin:/usr/local/bin:/usr/sbin:/usr/local/sbin ;Umask to set, specify in octal notation umask=0022 ; Minimum UID min_uid=500 ; Minimum GID min_gid=500 [handlers] ;Handler for php-scripts x-httpd-php=php:/usr/bin/php5-cgi ;Handler for CGI-scripts x-suphp-cgi=execute:!self
ApacheにsuPHPの設定をする。
このままではモジュール版PHPと干渉するのでモジュール版PHPを無効にしてsuPHPを有効にする。
# vi /etc/apache2/conf.d/php5.conf
#<IfModule !php4_module> #LoadModule php5_module modules/libphp5.so #AddType application/x-httpd-php .php .phtml #AddType application/x-httpd-php-source .phps #DirectoryIndex index.php index.phtml #</IfModule>
# vi /etc/apache2/conf.d/suphp.conf
LoadModule suphp_module modules/mod_suphp.so suPHP_Engine on AddHandler x-httpd-php .php suPHP_AddHandler x-httpd-php
Apacheを再起動して設定を反映。
# /etc/rc.d/init.d/apache2 restart
これまでPHPをApacheのモジュール版として動かしている環境だった場合、PHPで作成されたファイルは所有者とグループが apache となっているはずです。
(厳密にはApacheで設定している User Group になっている)
それを取り敢えずそのアカウントの所有者とグループに戻す方が好ましいでしょう。
apache:apacheなファイルの所有者とグループを変更。
アカウント分繰り返す。
アカウントが多い場合はbashスクリプトを作って実行させるといいでしょう。
# chown -R --from=apache:apache アカウント:アカウント /home/アカウント
他の注意点として .htaccess で php_flag や php_value を指定していると500エラーになります。
以下のようにして囲まれている場合は問題なさそうです。
<IfModule mod_php5.c> ~中略~ </IfModule>
ユーザーディレクトリでのPHP制御方法は .htaccess ではなく php.ini に変わります。
suPHPのデフォルト設定ではパーミッションが 777 や 666 といった場合に処理を強制終了するそうです。
おそらく 707 や 606 といった場合でも処理が強制終了すると思われます。
セキュリティを考慮して処理を止めていると思いますがsuPHPの設定で解除は可能です。
私は折角のセキュリティなのでこの仕様のまま使用しています。
- Newer: iPhone お申し込みから到着 使用感など
- Older: ユーザーディレクトリへデータベースを保存
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- https://www.fya.jp/cgi-bin/mt/mt-tb.cgi/70
- Listed below are links to weblogs that reference
- Apache 2.2 PHP suPHP 環境構築 from Minase's Blog - FYA