質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

PHPが出力するファイルの所有者について

snic518
snic518

総合スコア39

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

5回答

4評価

1クリップ

18170閲覧

投稿2016/02/18 11:30

編集2016/02/19 07:28

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

# httpd.conf のユーザー設定 User apache Group apache # ドキュメントルート DocumentRoot "/var/www/html"

FTPの設定

FTP

#vsftpd.conf #アップロードファイルのパーミッションが664になるように設定 local_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ユーザーとドキュメントルート以下のユーザーについてはどうされるものなのか等、ご意見いただけますと幸いです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。