どうも、ディーネットの山田です。
8月は、夏休みってことで投稿してませんでしたw(単に忙しくて時間を割けませんでした。)
目次
概要
Apache上で稼動しているPHPからファイルを出力するとapacheユーザになってしまい、
FTPユーザからではファイルの操作ができない課題に対処するべくmod_ruid2という
Apacheのモジュールを組み込んでみます。
※FTPユーザとapacheが動作しているユーザは違うため、どうしてもFTPから触れない
だとかPHPから触れない問題が発生します。
簡単に解決しようとするならば、単にPHPの実行をApacheのモジュールではなくCGIとして
実行すればいいだけなのだがmod_phpのよさ(.htaccessでPHPのパラメータを制御できること)
を生かしたり、CGIでの動作は構築が面倒ということもあり比較的簡単に実装する方法となります。
検証環境情報
OS
CentOS Linux release 7.5.1804 (Core)
Apache
httpd-2.4.6-80.el7.centos.1.x86_64
今回Apacheに組み込むモジュールについて紹介
mod_ruid2.x86_64
mod_ruid2とは
リクエストを処理する際に、予め指定したユーザやグループで動作してくれるというもの
作業内容
epelをインストールする
# yum install epel-release.noarch
mod_ruid2をインストールする
# yum install --enablerepo=epel mod_ruid2.x86_64
設定内容
特定のフォルダ配下のみmod_ruid2を有効化しておく
<VirtualHost *:80> ServerName localhost ServerAlias root@localhost DocumentRoot /var/www/vhosts/localhost/WWW CustomLog /var/www/vhosts/localhost/LOG/access_log combined ErrorLog /var/www/vhosts/localhost/LOG/error_log </VirtualHost> <Directory "/var/www/vhosts/localhost/WWW/on"> <IfModule mod_ruid2.c> RMode config RUidGid ftpuser ftpuser </IfModule> </Directory>
- "/var/www/vhosts/localhost/WWW/on/"配下ではmod_ruid2を有効にする
- "RMode"と"RUidGid"というパラメータ値がありますが、"RMode"は"config"のままにして下さい。
- "RUidGid"に関しては、実際のFTPユーザなどに置き換えて下さい。
検証内容
以下のようなPHPスクリプトを設置して動作検証を行なう
"/var/www/vhosts/localhost/WWW/on/"と
"/var/www/vhosts/localhost/WWW/off/"配下に
それぞれ "create.php"という名前で設置する。<?php $putfile = __DIR__ . "/temp/output.txt"; $uid = posix_getpwuid(posix_geteuid()); $gid = posix_getgrgid(posix_getegid()); echo "実行ユーザは、" . $uid["name"] . "<br>\n"; echo "実行グループは、" . $gid["name"] . "<br>\n"; if ( ( file_put_contents($putfile, "HOGEHOGEHOGE") ) !== false ) { echo "ファイルの書き込みが出来ました<br>\n"; } else { echo "ファイルの書き込みが出来ませんでした<br>\n"; }
動作確認
ブラウザから確認
- http://{検証機のIP}/off/create.php
実行ユーザは、apache 実行グループは、apache ファイルの書き込みが出来ました
と表示されました。
- http://{検証機のIP}/on/create.php
実行ユーザは、ftpuser 実行グループは、ftpuser ファイルの書き込みが出来ました
と表示されました。
想定通り、"/on/"配下はftpuserで動作していることが確認できましたね。作成されたファイルの確認
# ls -la /var/www/vhosts/localhost/WWW/*/temp/output.txt -rw-r--r-- 1 apache apache 12 9月 4 19:59 /var/www/vhosts/localhost/WWW/off/temp/output.txt -rw-r--r-- 1 ftpuser ftpuser 12 9月 4 20:00 /var/www/vhosts/localhost/WWW/on/temp/output.txt
こちらも想定通り、"/on/"配下はftpuserで動作していることが確認できましたね。
使い道
- WordPressの管理画面から更新したファイルであっても、FTPユーザから触りたい。
- FTPユーザで設置したファイルをPHPのプログラムから編集したい。
このような煩わしさを感じている方が居れば、ぜひ導入を検討してみてはいかがでしょうか。備考
標準で用意されているPHPのセッションフォルダは、apacheユーザでなければ保存出来ないように
なっているので、所有者変更やパーミッションの調整が必要になってきます。