web-dev-qa-db-ja.com

シンボリックリンクでルートの外側からパスにアクセスする

Apache構成に外部パスを追加する必要があります。 (httpd)

したがって、httpdルートフォルダーにこのパスへのシンボリックリンクを作成しました。パスは/ var/log/httpd /です(プロジェクトに直接ログを表示したい)。

そして、ブラウザに次のように入力することで、すべてのパスにアクセスできます。 http://127.0.0.1/httpd/

しかし、phpファイルからアクセスしようとすると、phpがエラーをスローします。

コード:

function logInfo() {

$log_path = $_SERVER['DOCUMENT_ROOT'] . "/httpd/local.cmp-error_log";
$php_log = file_get_contents($log_path);

print_r ($php_log);

}

エラー:

[Sun Jul 17 23:45:19.960292 2016] [:error] [pid 19451] [client 127.0.0.1:34718] PHP Warning:  file_get_contents(/home/txx/http/www/httpd/local.cmp-error_log): failed to open stream: Operation not permitted in /home/txx/http/www/base_home/config/sys.php on line 8

ここでエラーはどこですか?

4
linearSpin

基本的な考え方は、ドキュメントルート外のファイルにはアクセスできないということです。それがドキュメントルートのポイントです。 Apacheがルート外のシンボリックリンクをたどらないようにするいくつかの保護があります。リンクを含むディレクトリで enable FollowSymlinks する必要がありますが、ファイルを参照できる場合、これはすでに行われていることを意味します。

また、PHPがドキュメントルートに制限されていないことを確認する必要もあります。 このスタックオーバーフローの質問 を参照してください:php.iniopen_basedir設定が含まれていないことを確認してください。もう1つの潜在的な制限はSELinuxです。マシンが強化されている場合、PHPは事前定義されたディレクトリに制限され、特にホームディレクトリへのアクセスが禁止される可能性があります。 ドキュメントルート外のファイルへのアクセス も参照してください。

Webルートの外部にアクセスできない場合、またはシステムのセキュリティをあまり弱めたくない場合は、ApacheとPHPを作成する代わりに、ファイルをWebルートの下に置くことができます。他の場所を見てください。 A バインドマウント/var/log/httpdから/var/www/dangerous/logsへのマウントは、マウント/var/log/httpd/var/www/dangerous/logsディレクトリのビューを作成します。おそらくビューを読み取り専用にする必要があります。