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

プログラミング言語PHP

PHP/apache実行ユーザapache

 状態:以前の環境  閲覧数:4,030  投稿日:2014-04-21  更新日:2019-08-30

chown


・apache実行ユーザapacheには、chownコマンドを実行する権限を付与していない
・そのため、PHPでの「chownメソッド」も、PHPでの「execコマンド からの chown」も使用不可
・セキュリティの観点から今後も付与する予定はない
※「chown」はそれだけコマンドヒエラルキーが高い。パーミッション辺りのコマンドと同列に考えてはいけない

mkdir


親ディレクトリがw権限を保持している場合に限り、実行可
・w権限を付与するためには、所有権変更するコマンドchmodを利用
・しかし、変更を実行できるのは、そのファイルの所有者または管理者のみ
・apache実行ユーザapacheは、apacheが作成したファイル/ディレクトリのパミッションしか変更できない

・デフォルト(パーミッション未指定)で作成されるディレクトリは、755

選択肢


案A.Apache実行ユーザ変更
セキュリティを考慮すると、変更しない方が良い

案B.ディレクトリアクセスユーザに権限付与
・セカンダリグループ利用
・最も一般的な対応方法

案C.既存ディレクトリ(ファイル)に権限付与
・a.コマンド利用
・b.FTP利用
・c.PHP経由でコマンド利用
・d.PHP経由でFTP利用

案D.新規ディレクトリ(ファイル)に権限付与
umask利用

案A.Apache実行ユーザ変更

 閲覧数:1,369 投稿日:2014-04-06 更新日:2019-08-30 

Apache実行ユーザ変更


「Apache 設定ファイル httpd.conf」 を変更すれば異なるユーザーで実行させることが可能
・但し、apache 実行ユーザーを/var/www/htmlに書込権限のあるユーザーへ変更すると危険性は増す(脆弱性を突かれた場合)
・Apache実行ユーザ用ーとして、純粋にapacheだけを起動するユーザを作成することが推奨されている
※デフォルトでは apache というユーザーで実行される

Apache実行ユーザーを、各種実行権限があるユーザーへ変更すると危険性が増す
apache サーバーは、ユーザー apache で動作しているので、
apache が、「脆弱性」を突かれて乗っ取られた場合、
apache ユーザーで悪さをされてしまう
ディレクトリ/var/www/htmlに apache ユーザーの書き込み権限があると、
変なモノを放り込まれる可能性がある
Apacheの実行ユーザが「通常logon出来ないユーザであるべき」と言われるのは、
Apacheに何らかの脆弱性がみつかってプロセスが乗っ取られた際に、
クラッカーに不正なシェル操作を簡単にはさせないため
実ユーザーで、apache を動かすのは、止めた方が良い
apache は、apache ユーザーで動かす

対策
・サーバーが不正にアクセスされた場合でも被害を最小限に抑えるため、サーバーを実行するユーザーに権限を与えない
・権限が少ない Apache 専用ユーザーを作成してそのユーザーがサーバーのリクエストに応答するように設定
・コンテンツ作成ユーザとapacheのユーザは分けた方が良い

変更手順


Apache実行ユーザの変更手順
※今回未実施

1.httpd.conf の編集
httpd.conf の中から Apache を実行するユーザを指定する "User" と グループを指定する "Group" を見つけて、それぞれ Apache を起動したいユーザ名とグループ名を指定

2.実行ユーザ設定確認
・実行ユーザの設定を確認するため、Apache を起動
・Apache が起動したら、「ps aux | grep httpd」と入力して Apache を実行しているプロセスを表示

案B.ファイルアクセスユーザに権限付与

 閲覧数:473 投稿日:2014-04-06 更新日:2019-08-30 

アカウント


画像アップロード実行ユーザ
・Apache実行ユーザはapache
・つまり、実際に画像をアップロードするユーザapacheへ対する対応

ユーザアカウント一覧
ユーザ ログイン 所有権 プライマリグループ セカンダリグループ
apache 不可 - apache webdevgroup
mainuser /var/www/★★ maingroup wheel,webdevgroup
webdevuser 不可 - webdevgroup -


2案


画像アップロードディレクトリ
・imgae/
・パミッション
・案1.757
・案2.775

一覧表
パーミッション 所有者 所有グループ 備考
1 757 mainuser maingroup その他ユーザ権限7による対応。対象ディレトリの所有者/所有グループは任意
-
2 775 mainuserもしくはwebuser maingroup 所有グループ権限7による対応。所有グループwebdevgroupは必須。所有者は任意


案1.757





案2.775



案1



・書き込みたいところだけ、グループ権限で書き込み可能にしておいて、書き込めるグループにapache ユーザーをセカンダリグループとして追加


hogeuser



1回目
ファイルやディレクトリの所有者(オーナー / グループ)を再帰的に変更
sudo chown -R hogeuser:hogegroup /var/www/★★/numerical-specification-trimming

・確認
ls -la

・Webは動作するが、FTP操作出来ない

・hogeuserユーザのセカンダリグループとして、wheelグループを指定
sudo usermod -G wheel hogeuser
$ sudo groups hogeuser
hogeuser : hogegroup wheel



webdevuser



2回目
ディレクトリ所有者事前確認
ls -la
合計 52
drwxr-xrwx  5 webdevuser webdevgroup 4096  4月 26 14:26 2014 .
drwxrwxr-x 31 ★★ ★★  4096  4月 26 12:22 2014 ..
-rw-rw-r--  1 webdevuser webdevgroup   27  4月 26 12:22 2014 .htaccess
drwxrwxr-x  4 webdevuser webdevgroup 4096  4月 26 12:22 2014 ImageMagick_chap3_sample
-rw-rw-r--  1 ★★ ★★  5284  4月 26 14:26 2014 crop.php
drwxrwxr-x  2 webdevuser webdevgroup 4096  4月 26 14:01 2014 image
-rw-rw-r--  1 webdevuser webdevgroup 5673  4月 26 12:22 2014 index.php
-rw-rw-r--  1 webdevuser webdevgroup 4203  4月 26 12:22 2014 resize.php
drwxrwxr-x  2 webdevuser webdevgroup 4096  4月 26 12:22 2014 test
-rw-rw-r--  1 webdevuser webdevgroup  220  4月 26 12:22 2014 test.php


権限付与
sudo chown -R webdevuser:webdevgroup /var/www/★★/numerical-specification-trimming

ディレクトリ所有者再度確認
ls -la
・「../」は一つ上の階層に存在するものなので、そのディレクトリー下を対象とした処理のすべては「../」には関係ない
合計 52
drwxr-xrwx  5 webdevuser webdevgroup 4096  4月 26 14:26 2014 .
drwxrwxr-x 31 ★★ ★★  4096  4月 26 12:22 2014 ..
-rw-rw-r--  1 webdevuser webdevgroup   27  4月 26 12:22 2014 .htaccess
drwxrwxr-x  4 webdevuser webdevgroup 4096  4月 26 12:22 2014 ImageMagick_chap3_sample
-rw-rw-r--  1 webdevuser webdevgroup 5284  4月 26 14:26 2014 crop.php
drwxrwxr-x  2 webdevuser webdevgroup 4096  4月 26 14:01 2014 image
-rw-rw-r--  1 webdevuser webdevgroup 5673  4月 26 12:22 2014 index.php
-rw-rw-r--  1 webdevuser webdevgroup 4203  4月 26 12:22 2014 resize.php
drwxrwxr-x  2 webdevuser webdevgroup 4096  4月 26 12:22 2014 test
-rw-rw-r--  1 webdevuser webdevgroup  220  4月 26 12:22 2014 test.php


問題発生
・ファイルした後、FTP

実行ユーザに権限を与える
apacheユーザの実行権限設定はどうすれば良い?
【 chgrp 】 ファイルやディレクトリのグループを変更する


A.権限のあるユーザになる
B.実行ユーザに権限を与える
・所有者をchmodのユーザーにする
・chmodのユーザーでファイルまたはディレクトリを作成する

C.既存ディレクトリ(ファイル)の権限変更

 閲覧数:367 投稿日:2014-04-22 更新日:2014-04-26 

パーミッション設定


一般的なディレクトリのパーミッション
・その他のユーザー、5と設定

プログラムからファイルをアップロードするディレクトリ
・書き込み権限も与え、7と設定


対症療法


あくまでも対症療法
・「ファイル所有者」と「ファイルアクセスユーザ」との関係が根本的に改善されたわけではないため、PHPファイル上でのchmodは利用不可(ファイルアップロード、mkdirは対応可)

D.新規ファイル(ディレクトリ)に権限付与

 閲覧数:480 投稿日:2014-04-22 更新日:2018-04-19 

umask


・新規にファイルや、ディレクトリを作成したとき、いつも同じアクセス権になる
・これは、umaskという仕組みでデフォルトのアクセス権が設定されているため

現在のumask値を確認
$ umask
・コマンド入力すると現在のumask値が表示される
$ umask
0002


・ユーザー毎に環境変数でumaskを設定することは可能

umaskとは?
・ファイル作成時に特定の権限を『与えないようにする』」もの
・umask 000 で権限 777で作成しようとしたものを、 umask 044 で 755 にすることは可能
・umask 000 で権限 755で作成しようとしたものを、 777 にすることは不可能

Apacheユーザのumask値を変更する
umask値の変更 
デフォルトのアクセス権 - umask


Apache実行ユーザ設定
$ sudo mkdir /var/www/testdir
$ ls -la
drwxr-xr-x    2 root       root        4096  4月 21 19:50 2014 testdir


$ sudo chmod 2775 /var/www/testdir
$ ls -la
drwxrwsr-x    2 root       root        4096  4月 21 19:50 2014 testdir


$ sudo chgrp ★★ /var/www/testdir/
$ ls -la
drwxrwsr-x    2 root       ★★  4096  4月 21 19:50 2014 testdir

drwxrwsr-x    2 root       ★★  4096  4月 21 19:50 2014 testdir

Apacheユーザのumask値を変更する


$ sudo usermod -a -G ★★ apache
$ id
uid=500(★★) gid=500(★★) 所属グループ=500(★★),10(wheel)


$ cat /etc/group
★★:x:500:apache
apache:x:48:


$ sudo chgrp -R ★★ /var/www/testdir/
$ ls -la
drwxr-xr-x    2 root       ★★  4096  4月 21 20:30 2014 testdir


$ sudo chmod -R g+w /var/www/testdir/
$ ls -la
drwxrwxr-x   2 root ★★  4096  4月 21 20:30 2014 .

drwxr-xr-x 173 root root       12288  4月 21 20:30 2014 ..


$ sudo chmod 2775 /var/www/testdir/


最終的な設定

 閲覧数:120 投稿日:2019-08-16 更新日:2019-08-16 
apache … Apache実行ユーザ
・mainuser
・webdevuser


グループ


・apache
・maingroup
・webdevgroup


一覧表

ユーザ ログイン 所有権 プライマリグループ セカンダリグループ
apache 不可 - apache webdevgroup
mainuser /var/www/★★ maingroup wheel,webdevgroup
webdevuser 不可 - webdevgroup -



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

PHPファイルでchmodエラー



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