🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

Q&A

解決済

1回答

744閲覧

CakePHPのシステムを切り戻したがパーミッションエラーが発生している

kiri_se

総合スコア1

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

0グッド

0クリップ

投稿2023/05/26 02:11

編集2023/05/26 04:47

【質問の背景】
私はPHP初心者であり、社内システムの改修を担当することになりました。
改修のために検証環境に本番環境の資材を適用しようとしました。
改修前は問題なくシステムにログインできていましたが、本番環境のソースを検証環境のファイルに上書きしたところ、
システムのログイン画面にwarningが表示されるようになりました(どのディレクトリを上書きしたのかは後述します)。
そこで、以前の状態に戻すためにバックアップとして保存していたファイルに切り戻しました。
しかし、切り戻したソースでログイン画面にアクセスしたところ、パーミッションのエラーが表示されてしまいました。
パーミッションを確認したところ、パーミッションは正しく付与されていいました。

社内に詳しい人がいないため、
切り戻し後に発生したエラーの解消方法または調査方法を教えていただきたいです。

前提:
Linux接続ユーザ: root権限
システムの固有名詞に関わる名称は「****」で表記します

<環境情報>
クライアント端末はWindows 10
OS:CentOS release 6.9 (Final)
Apatch:Apache/2.2.15 (CentOS) ※起動確認済み
PHPバージョン:5.6.28
Cakeバージョン:3.2.8

そのほか
config: /var/www/html/****(システム名)/config/
「検証環境」と「本番環境」とは:ソースが乗っているサーバーとDBの接続先が異なる
構成はそれぞれ同じ

Nginx+PHP-FPMの構成か否か:Nginx+PHP-FPMの構成ではない
補足

ps aux | grep nginx

上記を実行し、nginxプロセスは見つかりませんでした。

【切り戻しまでの操作手順】
バックアップの取得:
WinSCPを使用して、検証環境の既存のフォルダ(/var/www/html/****)をコピーし、
社内ネットワーク上のファイルサーバーに貼り付けてバックアップを作成しました。

本番環境のソースを上書き:
検証環境上のファイルに本番環境のソースを上書きしましたが、warningが表示されたため、
誤った方法であると判断し、切り戻しを実行しました。

【切り戻し方法】

WinSCP上で、上書きしてしまったフォルダ(/var/www/html/****)を「****_bk」として退避しました。
ファイルサーバーに退避していた元のフォルダ(****)をコピーし、WinSCP上の「/var/www/html/」配下に貼り付けました。
結果として、システムのログイン画面(http://<IPアドレス>/****/users/login)にアクセスしたところ、
複数箇所でwarning(パーミッションのエラー)が表示され、正常にログイン画面が表示されません。

画面に表示されるエラーメッセージ

Warning (512): /var/www/html/****/tmp/cache/persistent/ is not writable [CORE/src/Cache/Engine/FileEngine.php, line 429] Warning: file_put_contents(/var/www/html/****/logs/error.log) [function.file-put-contents]: failed to open stream: Permission denied in /var/www/html/****/vendor/cakephp/cakephp/src/Log/Engine/FileLog.php on line 134 Warning (512): /var/www/html/****/tmp/cache/models/ is not writable [CORE/src/Cache/Engine/FileEngine.php, line 429] Cache engine Cake\Cache\Engine\FileEngine is not properly configured. RuntimeException Documentation API If you want to customize this error message, create src/Template/Error/error500.ctp toggle vendor stack frames Warning (2): file_put_contents(/var/www/html/****/logs/error.log) [function.file-put-contents]: failed to open stream: Permission denied [CORE/src/Log/Engine/FileLog.php, line 134] Warning: file_put_contents(/var/www/html/****/logs/error.log) [function.file-put-contents]: failed to open stream: Permission denied in /var/www/html/****/vendor/cakephp/cakephp/src/Log/Engine/FileLog.php on line 134

試したこと

ChatGPT(バージョン3.0)を使用して、エラーの意味、原因、解決方法についての質問応答を繰り返しました。
その結果、パーミッションのエラーだということを理解し、以下の内容を試しました。

① エラーメッセージに表示されているディレクトリとファイルのパーミッションを確認しました。
確認方法はWinSCPのプロパティ設定です。
結果として、権限は正しく付与されていました。

② Teratermを使用して、コマンドでパーミッションを更新しました。
なお、「error.log」は元々「644」のパーミッションでしたが、今回「755」に変更しました。
他の2つのディレクトリは元々755のパーミッションでした。

chmod -R 755 /var/www/html/****/tmp/cache/persistent/ chmod -R 755 /var/www/html/****/logs/error.log chmod -R 755 /var/www/html/****/tmp/cache/models/

<パーミッション更新後の結果>
再度システムのログイン画面にアクセスしましたが、エラーの内容は変わりませんでした。

③ ログの確認を行いました。

/var/www/html/****/logs/error.log:今回の問題に関する記録はありませんでした
(最後の記録は私がアクセスする前の無関係なログでした)。
また、該当システムのフォルダではないログの確認:/var/log以下のログを確認しましたが、エラーログは見つかりませんでした。
④ その他、試したり確認したりしたこと

・ACLの設定を確認しました(getfaclコマンドの実行)が、問題はありませんでした。
・実行ユーザーを確認しました(root)。
・Teratermを使用して、フォルダの構成に問題はないか確認しました。

【補足情報】
使用ツール
・WinSCP
・Teraterm
クライアント:Windows 10

以上です。ここまで読んでくださりありがとうございます。
よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2023/05/26 02:21 編集

「検証環境とは」「本番環境とは」「検証環境と本番環境の違い」に関しての記載をもう少し追記した方がいいと思います。Linuxなのかな? PHPフレームワークはCakePHPかな? ということくらいまで分かりますが、逆に言うとそれくらいしか分からない感じで、第三者からすると雲の中のお話みたいです。OSは何かとか? Apacheが動いているのか?Nginx+PHP-FPMの構成なのか? それらのバージョンは?などが、もしかすると解決の手がかりになる可能性があります。
kiri_se

2023/05/26 04:49

AbeTakashi様 コメントを下さりありがとうございます。 当方では質問にあたりどのような情報が必要かわからなかったため、アドバイスいただけて幸いでございます。 いただいた内容をもとに、追記いたしました。
AbeTakashi

2023/05/26 06:44

かなり情報が出てきたので、もしかすると分かる人が出てくるかもしれません。 私が気になったのがCentOS6.9とうことなので、強制アクセス制御系、とくにSELinuxの設定が影響してる可能性があるのではないか?ということくらいです。Apacheなどではわりと影響しやすいです(パーミッションエラーが出たりする)。本番環境と検証環境で設定に差異がある可能性もありますので、そこもしっかりチェックされるといいかと思います。もしこちらも問題ないようであれば質問文にその旨を追記されるといいかと思います。 参考) https://trans-it.net/selinux-disabled/ https://qiita.com/sato4557/items/8098ec290a8767e3808d
deka

2023/05/26 07:57

apacheの起動ユーザがrootじゃないからPermission deniedになっているのでは?
kiri_se

2023/05/30 00:47

AbeTakashi様 早速のアドバイスをありがとうございました。 制御がかかっているとのお話、大変勉強になりました! おかげさまで解決いたしましたことを報告いたします!
kiri_se

2023/05/30 00:48

deka様 コメントありがとうございます! おっしゃる通り、ユーザが本番環境ではapatchでしたが 検証環境はrootという差異が発生しておりました。 無事解決いたしましたことをご報告いたします。
guest

回答1

0

ベストアンサー

chmod -R 755 /var/www/html/****/tmp/cache/persistent/

このコマンドを使うと、指定したディレクトリを所有者だけが書き込みできるようにします。
ただし、ファイルをコピーする時などに、所有者情報がコピー操作を行ったユーザーに変わることがあります。

通常、PHPはApache(CentOSでは'httpd'という名前が多い)を通じてファイルに書き込みを行います。
ですので、ファイルに書き込みを行う場合、所有者がApacheになっている必要があります。

ls -ld /var/www/html/****/tmp/cache/persistent

上記のコマンドを使ってディレクトリの所有者を確認してみてください。
それに基づいて、所有者を変更する、パーミッションを757に変更するなどの対策を考えることが必要です。

投稿2023/05/26 09:00

Eggpan

総合スコア3203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiri_se

2023/05/30 00:51 編集

Eggpan様 ご回答ありがとうございます。 おっしゃる通り、所有者が本番環境(コピー元)ではApache、検証環境(コピー先)ではroot とユーザーに差異がありました。 権限を修正したところ、無事エラーを解消し開くことができました。 書き込み方法などを全くわかっていなかったため手動のコピペをしてしまいましたが コマンドの実行でファイルをコピーするなど 正しい方法を習得していきたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問