- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Apacheの実行権限について)
Apacheの実行権限について
このQ&Aのポイント
- Apacheがユーザーディレクトリにディレクトリを作成できない問題について
- apacheユーザーが書き込み権限を持つにも関わらず、ディレクトリの作成やファイルの作成ができない理由について
- Apacheの実行権限の設定やディレクトリの所有者の設定に問題がある可能性がある
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- anmochi
- ベストアンサー率65% (1332/2045)
回答No.3
- anmochi
- ベストアンサー率65% (1332/2045)
回答No.2
- bigfatrat999
- ベストアンサー率0% (0/1)
回答No.1
お礼
回答ありがとうございました。
補足
詳細に本当にありがとうございます。 問題の件ですが、原因が判明しました。 まず、いくつか情報が不足していた点についてお詫び申し上げます。 anmochi様が最初に懸念していた通り、WordPressの実装による影響でした。 WordPressのバージョンは4.0.1です。 このアップロードは通常のメディアアップローダーではなく、WP_Filesystem APIというWordPressの実装により行っており、その中に原因がありました。これはWordPressの仕様でセキュリティを考慮されているためだと思われます。 WP_Filesystem APIは、WordPress上でファイルを操作するためのAPIですが、このAPIはファイルを操作するにあたり、システムが「安全」に操作を行える方法を direct, ssh2, ftpext, ftpsockets の順に検証し、いずれかでファイルを操作します。 今回、この検証の中でdirect(直接の書き込み)ができないと判定されていました。 この理由はおそらく、セキュリティ上の理由(仕様)で現在実行しているスクリプト(今回だとカスタム分類の編集ファイルなので/wordpress/wp-admin/edit-tags.php)のファイル所有者と、その内部で/wordpress/wp-content以下に生成される一時ファイル(判定を行うためにWordPressが生成する一時ファイル。apacheが生成するのでファイル所有者はapache)のファイル所有者との比較が行われ、これに相違がある場合はWP_Filesystem APIでは直接書き込めない仕様になっていました。 つまりアプリケーション及びWordPressの実装上、パーミッションだけでなく実行スクリプトとapacheの生成するファイルの所有者が一致している必要があったということです。実際に/wordpress/wp-admin/edit-tags.phpのファイルの所有者をapacheにすると書き込み・削除を行えるようになりました。 上記の仕様はあくまでWordPress 4.0.1での場合で、 所有者の比較は以下のようになっています。 if ( getmyuid() == @fileowner($temp_file_name) ) { $method = 'direct'; } 現行のWordPress 4.1.1では、 比較対象が__FILE__となっていてfile.phpと比較されるようになっています。 if ( function_exists('fileowner') ) { $wp_file_owner = @fileowner( __FILE__ ); $temp_file_owner = @fileowner( $temp_file_name ); } if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) { // WordPress is creating files as the same owner as the WordPress files, // this means it's safe to modify & create new files via PHP. $method = 'direct'; $GLOBALS['_wp_filesystem_direct_method'] = 'file_owner'; } else if ( $allow_relaxed_file_ownership ) { // The $context directory is writable, and $allow_relaxed_file_ownership is set, this means we can modify files // safely in this directory. This mode doesn't create new files, only alter existing ones. $method = 'direct'; $GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership'; } これらのWP_Filesystem APIがファイル操作にあたり行う検証は、/wordpress/wp-admin/includes/file.phpのget_filesystem_method()に実装があります。 ひとまずこの問題については、すべてのディレクトリとファイルの所有者をapache、グループをyamadaとすることで両者が操作を行えるようにして解決しました。 この設定が適切かについてはこれから勉強したいと思います。 長くなりましたが、最後までお付き合いいただき本当にありがとうございました。 最後に、以上のような結論についてanmochi様より何か一言ありましたらお願いします。 特になければ、その後ベストアンサーとして質問を締め切らせていただきたいと思います。 本当にありがとうございました。