PHPプログラムから、テキストや画像ファイルを出力するような仕組みをもったWebアプリケーションを作っています。
この時出力されるファイルの所有者について、ご質問させていただきたく思います。
環境は以下です。
- VPS(さくらVPS)
- CentOS7
- Apache 2.4.6
- PHP 7.0.3
※PHPはモジュールモードで動作
※SELinuxはオフにしています。
####【やりたいこと】
Webアクセス時のドキュメントルート以下にあるファイルは、全てhogeユーザーが所有者ということにしたい。
hogeユーザーは、FTPでドキュメントルート以下にアクセスし、ファイル書き込み操作を行うことがあるため、所有者がすべてhogeの方が都合が良い。
ディレクトリ構成 /var /www /html ← ownerはhoge index.php ← ownerはhoge generated.txt ← PHPで出力されるファイル。ownerをhogeにしたい
各種設定
Apacheの設定
apache
1# httpd.conf のユーザー設定 2User apache 3Group apache 4# ドキュメントルート 5DocumentRoot "/var/www/html" 6
FTPの設定
FTP
1#vsftpd.conf 2#アップロードファイルのパーミッションが664になるように設定 3local_umask=002
■ユーザーについて
id hoge
uid=1000(hoge) gid=1000(hoge) groups=1000(hoge),10(wheel)
id apache
uid=48(apache) gid=48(apache) groups=48(apache),1000(hoge)
上記のようにapacheにはhogeのグループを追加しています。
これで、hogeユーザーがFTPアップロードしたファイルを、PHP(apache実行ユーザー)が書き込み操作出来るというところまでは出来ました。
###問題点
この状態ですと、PHPが新規のファイルやディレクトリを生成したときの所有者はapacheになります。
ディレクトリ構成 /var /www /html ← ownerはhoge index.php ← ownerはhoge /gdir ← PHPがmkdirしたディレクトリ。ownerはapache。パーミッションは755 generated.txt ← ownerはapache。パーミッション644で書き込み不可!
この時のgenerated.txtをhogeが消したりすることもあるため、書き込み権限が無いファイルが出来てしまうので困ります。
できれば、PHPが生成するファイルの所有者は、PHPスクリプトと同じに揃えたいと思います。
####解決策の方向性について
お作法を含め、こういった時はどうするのが良いのか、アドバイスをいただけると幸いです。
①Apacheの実行ユーザーを変える
ApacheのUserをhogeにしてしまうというやり方ですが、調べてみるとあまりいい方法ではないような記事が多いです。
実際のところどうなのでしょうか。
②PHPスクリプトもすべて所有者をapacheにしてしまう
hogeユーザーによるファイル編集は諦め、逆にapacheユーザーで揃えてしまうようにする。それはそれでキレイなのかもしれませんが、ちょっと運用上面倒そうです。
③PHPがファイル生成時に所有者を書き換える
環境はこのまま、スクリプトの方で、ディレクトリ作成やファイル書き込みをした直後にsystem関数とsudoコマンドで所有者を無理やり書き換えていく方法です。出来なくはなさそうですがとても面倒くさそうですし、お作法としてどうなのか気になります。
■その他
suEXECという方法があるようですが、ちょっと難易度が高そう・制約がありそうだったので、まずはそれ以外で実現出来ないかを検討したく、ご質問させていただきました。
そもそも一般的には、apacheユーザーとドキュメントルート以下のユーザーについてはどうされるものなのか等、ご意見いただけますと幸いです。

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/19 05:18
2016/02/19 06:25