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
いろいろ試行錯誤しすぎて漏れがあるかもしれない