PHPパーミッションエラー対応

プログラミング言語PHP

対応は2通り

 状態:-  閲覧数:2,361  投稿日:2014-04-06  更新日:2014-05-07
A.ディレクトリパーミッション変更
└a.コマンドで変更
└b.PHPで変更

B.ディレクトリユーザ権限変更
※セキュリティを考慮すると、この対応がベスト


現状対応


A-a
・パーミッション変更が必要なディレクトリには、個別対応
$ sudo chmod -R 757 /var/www/php-demo.e1blue.co/public_html/demo/imagemagick/numerical-specification-trimming/image


・以下、この件に関して調査した内容

PHPファイルのパーミッション … 大前提

 閲覧数:467 投稿日:2014-04-06 更新日:2018-04-19 

前提


ユーザアクセスの仕組み
・ブラウザ閲覧したユーザは、ApacheというWebサーバソフトウェアを通して、WEBサーバー上に設置されているファイルへアクセスしている
・WEBサーバー上に設置されているファイルへ、ユーザが直接アクセスしているわけではない
・ファイルへ直接アクセスしているのは、あくまでもApacheというWebサーバソフトウェア
・Apacheはブラウザから指定されたファイルを読み込み、その内容をブラウザへ渡している

PHPファイルの場合
・Apacheがリクエストを受けてPHPファイルへアクセスする場合、このファイルアクセスはapacheユーザ権限で実行される
・何故なら、デフォルトでPHPの実行エンジンは、ApacheモジュールとしてApacheに登録されているから
※Apache機能のひとつとしてPHPの実行エンジンが存在している状態

PHPコード実行
・PHPコード実行する際、実際にはApacheプロセスがapacheユーザ権限で、目的のファイルへアクセスしている
・つまり、Apache から PHP を実行する場合、実行ユーザは apache となる
※apacheユーザーがアクセス(read)できるファイルでなければ、そのファイル内容を取得不可

実行権限エラー
・「chmod() 対象のファイルまたはディレクトリ」に apache ユーザーが操作できる権限がついていない場合、エラーが表示される


現状確認


現在のユーザー情報表示
・apacheユーザは誰なの?
・PHPファイルの実行ユーザを確認すれば良い
・オプションを何も指定せずに実行すると、実行したユーザーの「ユーザーID、グループID、所属する全てのグループ」を表示する
<?php 
header("Content-Type: text/plain");
system("id");

uid=48(apache) gid=48(apache) groups=48(apache)

ディレクトリ内にある「ディレクトリやファイルの属性」をリスト表示
・ファイルのモード / リンクの数 / 所有者名 / グループ名
<?php 
header("Content-Type: text/plain");
system("ls -la");

total 28
drwxrwxr-x  3 ★★ ★★ 4096 Apr  6 18:38 .
drwxrwxr-x 29 ★★ ★★ 4096 Apr  4 23:05 ..
-rw-rw-r--  1 ★★ ★★   27 Apr  6 06:03 .htaccess
drw-r--r--  2 ★★ ★★ 4096 Apr  6 06:36 image
-rwxrwxrwx  1 ★★ ★★ 5655 Apr  6 07:14 index.php
-rw-rw-r--  1 ★★ ★★   62 Apr  6 18:55 test.php


グループ


・メイングループ/サブグループに分かれている
・ユーザは、1つのメイングループと複数のサブグループへ、所属可能

A.ディレクトリパーミッション変更で、問題となる処理

 閲覧数:515 投稿日:2014-04-06 更新日:2018-04-19 

一覧


α.ファイルアップロード
β.mkdir
γ.chmod

パーミッション変更対応
ファイルアップロード 画像格納ディレクトリ757
mkdir 親ディレクトリ757
※実行ファイルパーミッションは664でOK


α.ファイルアップロード


エラーメッセージ
Warning: move_uploaded_file(image/org_1398432541.51802_275.jpg): failed to open stream: Permission denied in

Warning: chmod(): Operation not permitted in


・画像格納ディレクトリ757でOK
sudo chmod -R 757 /var/www/php-demo.e1blue.co/public_html/demo/imagemagick/numerical-specification-trimming/image


・Rオプションは不要
sudo chmod 757 /var/www/php-demo.e1blue.co/public_html/demo/imagemagick/numerical-specification-trimming/image


※実行ファイルパーミッションは664でOK


β.mkdir


エラーメッセージ
Warning: mkdir(): No such file or directory in

・実行ファイルを777へ変更してもエラーメッセージは消えない(親ディレクトリパーミッション775)
・つまり、mkdirエラーと実行ファイルパーミッションは関係がない

親ディレクトリパーミッション757でmkdir成功
sudo chmod 757 /var/www/php-demo.e1blue.co/public_html/demo/imagemagick/numerical-specification-trimming


・mkdir記載例
  mkdir("path2", 0700);

  mkdir("path2/", 0700);

※最後の/は合ってもなくてもOK

・下記入れ子構造にするためには、第3引数にtrue指定が必要
  mkdir("path3/to/my/dir/", 0700, true);


※mkdir引数パーミッション指定は、umask値の影響を受ける


γ.chmod


エラーメッセージ
・親ディレクトリ775、実行ファイル664
Warning: chmod(): Operation not permitted in

・その後、親ディレクトリ777、実行ファイル777、-Rオプションでディレクトリ内を再帰的に777へ変更するも、エラー消えず
・chmodエラーは、ディレクトリパーミッション変更では対応できないことが判明
chown


Fatal error: Class 'DOMDocument' not found

PHP実行ユーザ設定 / CentOS6 / Apache



週間人気ページランキング / 9-18 → 9-24
順位 ページタイトル抜粋 アクセス数
1 Nginx設定。エラーログレベル | Nginx(Webサーバ) 17
2 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 14
3 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 12
4 PHPのmb_send_mail関数でメール送信できない | メール処理システム 10
5 ImageMagick と imagick の違い | ImageMagick(ソフトウェアスイート) 9
6 さくらVPS0 8
6 tar: これは tar アーカイブではないようです 8
7 manページ日本語表示 | CentOS 7 (CentOS) 7
7 Reached target Shutdown メッセージが表示されたあと、シャットダウンまたは再起動プロセスがハングアップする | CentOS 7 (CentOS) 7
8 ABRT により 問題が検出されました | CentOS 7 (CentOS) 6
8 PHPファイルでchmodエラー | PHP(プログラミング言語) 6
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 6
8 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 6
9 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 5
9 echo と cat の違い 5
10 phpMyAdmin 4.4.3(phpMyAdmin) カテゴリー 4
10 6回目-10.Nginxでバーチャルホスト設定確認 | CentOS 7 2週間無料のお試し期間 6回目(さくらVPS) 4
10 「さくらVPS」で、「CentOS6」を「CentOS7」へ変更するためには? | CentOS 7 2週間無料のお試し期間 Link(さくらVPS) 4
10 cronで定期実行しているphpファイルを、コマンドライン経由で即時実行する | cron(Linuxコマンド) 4
10 MySQL 5.5 から 5.6 へのアップグレード | MySQL(データベース) 4
2021/9/25 1:01 更新