公開中のサイトをパーミッション(ディレクトリー:705、ファイル:604)で動作させるよう設定を変更した。
具体的には Apache の実行ユーザー(www-data)と php の実行ユーザー(hoge)を分けて、ファイルやディレクトリーの所有者を hoge にする。
これで、 ftp アカウントも hoge でログインするから以前のこんなことで悩まなくても良くなった。
次のサイトで懇切丁寧に説明されているので一読されることをお勧めする。
DebianでPHPをユーザ権限で実行する
PHPをユーザ権限で実行できるようにするまでです。意外とめんどくさかったので備忘録を兼ねて。
1 FastCGI Process Manager のインストール
sudo apt install php-fpm
PHP: FastCGI Process Manager (FPM) - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.
2 www.conf、php.ini の編集
www.conf はとりあえず user と group だけ変更。
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = hoge
group = hoge
php.ini は /etc/php/7.2/fpm/php.ini を使うことになるから、それまで使っていた php.ini の設定を変更していたら適宜、修正すること。
3 CGI版PHPの有効化
sudo a2enconf php7.2-fpm
sudo a2enmod proxy_fcgi
1行目でFPM(FastCGI Process Manager)が有効になる。設定ファイル php7.2-fpm.conf の中身はこんなので、ファイルの拡張子を見て php-fpm にリダイレクトする。
2行目は mod_proxy_fcgi.so を有効化するもの。
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
<FilesMatch ".+\.ph(ar|p|tml)$">
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(ar|p|ps|tml)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule>
4 モジュール版PHPの無効化
Apache の php モジュール版を無効化する( CGI 版との同居は不可)。
sudo a2dismod php7.2
5 リスタート
sudo service apache2 restart
6 確認
<?php phpinfo(); ?>
Server API が FPM/FastCGI になっていればOK。
その他細かなチューニングは必要だけど、とりあえずこれで目的は達成できた。
コメント