2016年8月6日土曜日

apache2のuserdirとsuEXEC


Ubuntu 16.04 LTSを新たに入れたところsuphpはすでに無くなっていたようだ。興味がなくなったのでやめるっぽい。(勘弁してくれ)
ずっとアップグレードで運用していたのでわからなかった。
以前やっていた方法ではダメなのでepgrec再構築を兼ねてメモを残す。

userdir上でphpをユーザ権限で動かそうとして色々やってみたがどうにもならん。意味不明すぎる。
仕方ないのでvirtualhostで動かした。

方針

1. virtualhostを新たに定義、使いたいユーザだけSuexecUserGroupで実行ユーザを決める。
2. ユーザ用のcgi-binを用意、phpのラッパーを置く
3. phpをそのラッパーで開く

インストール


apache2
apache2-suexec-custom


(libapache2-mod-suphpはお亡くなりになったらしい)
mysql-server
php
php-cgi
php-mbstring
phpmyadmin

virtualhost

/etc/apache2/sites-available/001-user.confを作る

# conf-enabled/serve-cgi-bin.confがベース -------- ①
<IfModule mod_alias.c>
    <IfModule mod_cgi.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfModule mod_cgid.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>




    <IfDefine ENABLE_USR_LIB_CGI_BIN>
        # ユーザごとのcgi-binをつくる
        ScriptAliasMatch ^/~(.*)/cgi-bin/(.*) "/home/$1/cgi-bin/$2"
        <Directory "/home/*/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +FollowSymlinks
            Require all granted
        </Directory>
    </IfDefine>

</IfModule>

<VirtualHost *:80>
    # 000-default.confとuserdir.confがベース
    DocumentRoot /var/www/html
    ServerName hogehoge # サーバ名
    SuexecUserGroup user1 user1 # suexecで動かすユーザ
    UserDir public_html
    UserDir disabled root

    # 000-default.confとuserdir.confがベース
    <Directory /home/user1/public_html>
        AllowOverride All
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI FollowSymLinks
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>
</VirtualHost>



※/etc/hostsにサーバ名を書いて、それでアクセスする


userdir.confを編集

virtualhostの設定と重複するので、userdir.confの方のuserdirを無効にする。

/etc/apache2/mods-enabled/userdir.conf を編集
<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root user1 #ユーザを無効にする。


suexec


suexecを有効にする。
a2enmod suexec
 suexecでphpを実行する。ユーザディレクトリごとにphpをおいてそれを実行することで、phpをユーザ権限で動作させる。
/etc/apache2/suexec/www-dataを以下のように設定

/home
public_html
①で設定したcgi-binにphpのラッパーを置く
・実行権限をつける
・他ユーザからの書き込みアクセスはNG: chmod g-w

cat php
#!/usr/bin/php-cgi

.htaccess

AddHandler cgi-script .cgi
AddHandler php-script .php
Action php-script /~user1/cgi-bin/php


a2ensite 001-user
a2enmod userdir
a2enmod actions
a2enmod auth_digest


いろいろ試行錯誤しすぎて漏れがあるかもしれない

1 件のコメント:

  1. Iron Blade 3 - Titanium Sports Training System for Sport
    Iron Blade properties of titanium 3 allows you babylisspro nano titanium spring curling iron to develop and 2020 ford ecosport titanium maintain your training on the Iron Blade 3. The iron blades are black titanium fallout 76 a type of core used ford transit connect titanium by Iron

    返信削除