2012年8月13日月曜日

apache2のuserdirとsuEXEC/suPHP

常時起動のサーバでPT2(DVB)でepgrecを使ってTVの録画をしている。
他にもrep2を動かしている。

置き場所は~/public_html
この中でwww-dataユーザのファイルがあるのは簡単に編集できないし、
録画データの扱いも面倒なので、ユーザ権限で動かしたい。

以前やったことがあるものとして、ユーザ権限でCGIを動かすことができる
suEXECを入れたことがある。
これだけだと、rubyとかperlとかのスクリプトはユーザ権限で動くようになるが、
phpはwebサーバ権限のまま。
phpにとってのsuEXECのようなものとしてsuPHPと言うのがある。
これらを、userdir上で動かそうとすると、ちょっと作業が必要だった。

設定とかはまったく覚えてないけど、一応関係ありそうなことをメモしておく。

新しく買ったパソコンに入れるついでに作業メモを残しておく。

入れるもの

apache2-suexec-custom
libapache2-mod-suphp
userdirは勝手に入った様な気がする。


userdir

まず、suexec/suphpとちょっと関係ある感じのuserdirを設定する。

a2enmod userdir

public_htmlのなかでcgiが動くように&シンボリックリンクしたものを有効に。

/etc/apache2/mods-enabled/userdir.conf
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                #AllowOverride FileInfo AuthConfig Limit Indexes
                AllowOverride All
                #Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI FollowSymLinks
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

suphp


とりあえずこれでuserdirで動くようになった。
でもこれでsuphpで動かそうとすると何か動かない。

a2enmod suphp
a2enmod suexec

[Mon Aug 13 02:36:12 2012] [notice] Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.2
 with Suhosin-Patch configured -- resuming normal operations
[Mon Aug 13 02:36:27 2012] [error] [client 127.0.0.1] SoftException in Applicati
on.cpp:221: File "/home/ttfugapiyo/public_html/rep2/index.php" is not in document r
oot of Vhost "/var/www", referer: http://localhost/~ttfugapiyo/
[Mon Aug 13 02:36:27 2012] [error] [client 127.0.0.1] Premature end of script he
aders: index.php, referer: http://localhost/~ttfugapiyo/
phpがdocument rootにないそうで。。。
でも色々入れたいし、直置きしたくないので、suphpの設定で回避する。

/etc/suphp/suphp.conf
;Check wheter script is within DOCUMENT_ROOT
;check_vhost_docroot=true
check_vhost_docroot=false

.htaccessで、
Options +ExecCGI
<FilesMatch "\.ph(p3?|tml)$">
        SetHandler application/x-httpd-suphp
</FilesMatch>

 apache2再起動
service apache2 stop
service apache2 start

あれ、動かない。

[Mon Aug 13 02:51:06 2012] [error] [client 127.0.0.1] SoftException in Applicati
on.cpp:564: Directory "/home/ttfugapiyo/public_html" is writeable by group, referer
: http://localhost/~ttfugapiyo/
[Mon Aug 13 02:51:06 2012] [error] [client 127.0.0.1] Premature end of script he
aders: index.php, referer: http://localhost/~ttfugapiyo/

グループ書き込み権限はダメみたいだな。

chmod -R g-w public_html

動いた。

suexec

suexecも似たようなもんで、cgi-binでしか動かさない設定になっているけど、
自宅サーバでは色々試したい。
なので、以下のようにする。
/etc/apache2/suexec/www-data

#public_html/cgi-bin
public_html
.htaccessで以下の設定。
Options +ExecCGI
AddHandler cgi-script .cgi .rb

で、apache2再起動して試す。

[Mon Aug 13 03:15:38 2012] [error] [client 127.0.0.1] suexec policy violation: see
suexec log for more details, referer: http://localhost/~ttfugapiyo/rt/
[Mon Aug 13 03:15:38 2012] [error] [client 127.0.0.1] Premature end of script heade
rs: test.cgi, referer: http://localhost/~ttfugapiyo/rt/
あれ、また動かない。おかしいな。前は動いてた様な。。。
suexec.logには以下のようなエラー。

[2012-08-13 03:15:38]: userdir suffix disabled in /etc/apache2/suexec/www-data
よく見たら、/etc/apache2/suexec/www-dataに何か注意書きが。

# The first two lines contain the suexec document root and the suexec userdir
# suffix. If one of them is disabled by prepending a # character, suexec will
# refuse the corresponding type of request.
思いっきり引っかかってた。
コメントを止めて、apache2再起動。無事動作確認完了。
関係ないけどInsertキー押そうとしてprint screen押して、シャッター音が鳴ってびびった。
深夜作業中には恐ろしい機能だ。

0 件のコメント:

コメントを投稿