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

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

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

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

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

Q&A

解決済

2回答

1971閲覧

index.phpの所有者がnginxだった場合、セキュリティ的な問題あるか

tajix_japan

総合スコア132

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

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

0グッド

0クリップ

投稿2019/03/21 08:40

編集2019/03/21 08:45

webサーバーとデータベースサーバーでサイトを作っています。

環境はcentOS7 php7.1 nginx1.12 です。

データベースサーバーが落ちたら、kinkyu.phpファイルがindex.phpファイルと自動的に切り替わるphpを組みました。

コピーして差し替える部分は下記のとおりです。

php

1 2<?php 3//コピーできるようにするためにindex.phpを書き込み可能にする 4chmod("index.php", 0666); 5 6if (copy('kinkyu.php', 'index.php')) { 7 8 // コピーが成功した場合に表示 9 echo 'コピーしました。<BR><BR>'; 10chmod("index.php", 0644); 11 echo '<BR><BR>コピー後パーミッションを644に変更<BR><BR>'; 12} else { 13 14 // コピーが失敗した場合に表示 15 echo 'コピーできません!<BR><BR>'; 16chmod("index.php", 0644); 17 echo '<BR><BR>コピーできなかっけどパーミッションを644に変更<BR><BR>'; 18 19} 20?> 21

このPHPを作動させるためには、chmodを使う都合上、index.phpの所有者をユーザー名ではなくnginxにする必要があります。

質問です。

index.phpの所有者がnginxだった場合、セキュリティ的に問題は生じますか?

apacheを使用するときには
var/www/
の中のファイルはapacheであるため、特に問題ないとは思うのですが、念のため確認する次第です。

また、このindex.phpファイル以外はすべてユーザー所有ファイルです。
この場合に問題が生じることがあるようであればご教示いただきたくお願いいたします。
(テストではリンクなどに問題は生じておりません)

よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/03/21 09:10

WebサーバーとDBサーバーは別サーバーということですか?
tajix_japan

2019/03/21 09:41

はい、物理的に別サーバーです。よく落ちます。 ping監視によるリブートを掛けておりますので5分ほどで復活するのですが、その間にindexファイルを緊急用に交換、5分後、リブートでDBサーバーが復活したら元のファイルに戻すプログラムを組んでおります。
m.ts10806

2019/03/21 09:54

「落ちた」の判断はどこで行ってますか?
tajix_japan

2019/03/21 11:43

$path82index = 'http://xxxx.com/index.php'; $array82index = get_headers($path82index); if((strpos($array82index[0],'200'))) という形で、headerが200を返さなかったら落ちたと判断しています。
tajix_japan

2019/03/21 11:58

すみません。 言葉足らずでした。 はい、下記のようにcronで死活結果を判断するスクリプト【kanshi.hphp】 が先にありこれをcronで1分ごとに叩きます。 【kanshi.hphp】 <?php $path82index = 'http://xxxx.com/index.php;' $array82index = get_headers($path82index); if((strpos($array82index[0],'200'))) { } else // 死んでいたら { $html80_die = file_get_contents('update.php'); echo $html80_die; } ?> これで200が返ってこなかったら、【kanshi.hphp】は ifの次の段階 (死んでいたら)にいき、質問で提示したphp(update.php)を叩くこと によってindex.phpを差し替えます。 kanshi.php も update.php も一般ユーザーの目に触れない場所にあります。 あくまで、index.phpは普通のファイルであり、このファイルにスクリプトを 記載しているわけではありません。ただユーザーがnginxというだけです。
guest

回答2

0

ベストアンサー

回答
PHPはCLIでも実行可能なので、書き換え権限を持った専用のユーザーを作ってcronなりなんなりで死活監視の結果を受け取って書き換えスクリプトを実行しましょう。


index.phpの所有者がnginxだった場合、セキュリティ的に問題は生じますか?

apacheを使用するときには
var/www/
の中のファイルはapacheであるため、特に問題ないとは思うのですが、念のため確認する次第です。

アプリケーション側にファイルを書き換えることの出来るような脆弱性があった場合、
即サイト改竄を受けることになるのでアウトです。

投稿2019/03/21 11:35

tanat

総合スコア18713

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

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

tajix_japan

2019/03/21 11:58

すみません。 言葉足らずでした。 はい、下記のようにcronで死活結果を判断するスクリプト【kanshi.hphp】 が先にありこれをcronで1分ごとに叩きます。 【kanshi.hphp】 <?php $path82index = 'http://xxxx.com/index.php;' $array82index = get_headers($path82index); if((strpos($array82index[0],'200'))) { } else // 死んでいたら { $html80_die = file_get_contents('update.php'); echo $html80_die; } ?> これで200が返ってこなかったら、【kanshi.hphp】は ifの次の段階 (死んでいたら)にいき、質問で提示したphp(update.php)を叩くこと によってindex.phpを差し替えます。 kanshi.php も update.php も一般ユーザーの目に触れない場所にあります。 あくまで、index.phpは普通のファイルであり、このファイルにスクリプトを 記載しているわけではありません。ただユーザーがnginxというだけです。
tanat

2019/03/21 12:20

状況がよくわかりません。 例えば(実際にはrootで実行するのはナシですが) rootのcrontabで動かせば > このPHPを作動させるためには、chmodを使う都合上、index.phpの所有者をユーザー名ではなくnginxにする必要があります。 という状況は発生しない訳ですが。。。 どう実装してもいいのですが、ポイントとしては 明示的にwebサーバが書き換える必要があるファイル・ディレクトリ以外はwebサーバのユーザが書き換えられない様にするのが良い。 です。 ディレクトリとファイルのユーザとグループとパーミッションを整理して上記の状態に持って行かないと、セキュリティ的にはよろしくない状態になります。
tajix_japan

2019/03/21 12:40

ありがとうございます。 多くの方からセキュリティ的に問題であることをご指摘いただきました。 > このPHPを作動させるためには、chmodを使う都合上、index.phpの所有者をユーザー名ではなくnginxにする必要があります。 現状、nginxにしないと動かないのですが、もう一度詳細調査し、 セキュリティ的に問題ないようにしていきたいと思います。 ありがとうございました。 皆さんにベストアンサーをあげたいのですが、おひとりということなので tanatさんをベストアンサーとしたいと思います。
guest

0

詳細を聞く気にはなりませんが、

chmodを使う都合上、index.phpの所有者をユーザー名ではなくnginxにする必要があります。

というのは、発想がおかしいです。
やるなら group に書き込み権限渡して、web サーバを group に所属させるとかかなぁ。。。

一般論として、Web サーバからファイル操作ができると、その権限の分だけ気をつけなければならない箇所は増えます。
また、index.php を差し替えるということは、一時的な障害を恒久的(?)なものにできるので、DoS を仕掛けるのであれば容易になります。

投稿2019/03/21 09:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tajix_japan

2019/03/21 09:26

>chmodを使う都合上、index.phpの所有者をユーザー名ではなくnginxにする必要があります。 >というのは、発想がおかしいです。 >やるなら group に書き込み権限渡して、web サーバを group に所属させるとかかなぁ。。。 ありがとうございます。 ユーザーに権限を渡しても稼働せず、indexファイルのユーザーをnginxにしたら稼働したので、 chmodはユーザーがnginxでないと動かないと理解しこの質問をしております。 (どこかのページにも同様なことが書いてありました(apacheでしたが)) nginxをGroupに所属させる方法は早速試してみましたが、indexファイルをユーザー名 にした場合はやはり動きませんでした。 >一般論として、Web サーバからファイル操作ができると、その権限の分だけ気をつけなければならない>箇所は増えます。 >また、index.php を差し替えるということは、一時的な障害を恒久的(?)なものにできるので、DoS を>仕掛けるのであれば容易になります。 セキュリティのご教示、ありがとうございます。 他の方法も検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問