PHPが/ tmpファイルを見ることができないのはなぜですか?

PHPが/ tmpファイルを見ることができないのはなぜですか?

簡単なtest.phpページがあります。

<pre><?php system("ls -la /tmp"); ?></pre>

常に:...フォルダのみが表示され、ブラウザに他のコンテンツは表示されません。

コマンドラインから:

1) ls -la /tmp
2) sudo -u http ls -la /tmp
3) php test.php
4) sudo -u http php test.php

これらのコマンドはすべて、ディレクトリファイル/サブディレクトリの完全なリストを返します。

なぜですか? ? ?

問題は "/tmp"フォルダに関連しており、正常にls -lah /usr動作します。

私はこれを4つのコンポーネントでテストしました(そのうちの1つはphp 5.0.6を使用しているdebianです。 )。

修正する:

sudoersファイルにhttpを追加して「sudo ls / tmp」を実行しても、PHPバージョン> 7では問題は同じままです。

ただし、 'system("echo aaa > /tmp/aaa.txt; ls -la /tmp") を実行すると...およびaaa.txthttp:http が所有するファイルが表示されます。これは新しいPHPの制限であり、/ tmpファイルにのみ干渉する方法ですか?

アップデート2:

しかし、aaa.txtは/ tmpにはなく、を実行してみるとfind /tmp -name aaa.txtそこにあることがわかります/tmp/systemd-private-2cf1853410ad4ade980ec17e883771c3-httpd.service-lZ22gS/tmp/aaa.txt

だから結局は「システム化/tmp分離「…私​​は学びが必要だ。

内部trueに変更::false/etc/systemd/system/multi-user.target.wants/httpd.service

[Service]
PrivateTmp=false
...

私は問題を解決しましたが、サービスファイルを変更せずにこの問題を回避できるかどうか疑問に思います。

ベストアンサー1

Ubuntu 18.04を実行しており、/usr/lib/systemdにhttpまたはapache2サービスが含まれていません。しかし、次のコマンドを実行しました。

sudo find / -mount -type f -exec grep -e "PrivateTmp" '{}' ';' -print

そして発見された/lib/systemd/apache2.serviceこれPrivateTmp=true。変化本物到着間違ったそして実行

systemctl daemon-restart
systemctl restart apache2

問題を解決しました。

おすすめ記事