phpスクリプトは/ tmpフォルダーにアクセスできません


16

open_basedirはありません。phpは/ etc / usr / proc / homeなどにアクセスできますが、/ tmpにはアクセスできません。

tmpfsは/ tmp(/ tmpタイプtmpfs(rw))にマウントされます。これも/ tmpフォルダーを使用する理由です。

私のファイルはhttp(nginxとphpのユーザー)が所有し、誰でも読み取り可能です。

sudo -u http cat /tmp/file 動作していますが、phpスクリプト内のすべては動作しません(file_exist()やfile()など)。

編集:ログに表示されるエラー:

PHP Warning:  file(/tmp/ydlw/pid): failed to open stream: No such file or directory in /srv/http/ydlw/status.php on line 267

edit2:問題を別の方法でテストしました。作った

touch("/tmp/boo");
file_exist("/tmp/boo");

file_existはtrueを返すため、ファイルが作成されます。次に、/ tmp内を監視しましたが、「boo」ファイルは見つかりませんでした。それは私が恐れていたことであり、PHPはマウントポイントを「見る」ことはありません。なぜですか、どうすれば修正できますか?


これらのPHP関数によって返されるエラーは何ですか?PHPエラーログには何が表示されますか?
テロキルカネン14

エラーログを追加しました
eephyne 14

このファイルは/tmp/ydlw/pid存在し/tmpますか?そうでない場合、それがエラーメッセージの理由です。
テロキルカネン14

-rw-r--r-- 1 http http 343 23 juil。10:12 / tmp / ydlw / pid
eephyne 14

LinuxディストリビューションとPHPのバージョンは何ですか?また、どこからPHPを入手しましたか?
マイケルハンプトン

回答:


31

なぜ、誰かが私にグローバルなヒントを与えてくれた理由を見つけました。

それはphpやtmpfsのせいではありません。犯人はシステム化され、彼のセキュリティシステムがありましたPrivateTmp

私がやったのと同じ問題に遭遇した人のために、サービスphp(およびおそらく他のいくつか)にはsystemdスクリプト()のPrivateTmpオプションがあります。true/usr/lib/systemd/system

その場合、新しいもの/tmpが作成され、他のものから分離されます。サービスが停止すると、内部に保存されているすべてのデータが削除されます。

/tmp多くの機密情報を含めることができ、PHPスクリプトは常に安全ではないため、これはセキュリティ対策です。

これを無効にするには、スクリプトを内部にコピーし/etc/systemd/system(更新後の変更の上書きを避けるため)、に設定PrivateTmpfalseます。

を使用して、同じ/ tmpを共有するように2つ以上のサービスを設定することもできますJoinsNamespaceOf

詳細については> man systemd.exec


4
有難うございます!私はそれを理解しようとして一日中過ごしました。私の脳は、それを理解しようと懸命に努力しているため、鼻から溶けています。
マルセロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.