Php

php 腳本無法訪問 /tmp 文件夾

  • February 17, 2016

我沒有 open_basedir,php 可以訪問 /etc /usr /proc /home 等……但不能訪問 /tmp。

tmpfs 掛載在 /tmp (/tmp type 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 或 tmpfs 的錯。罪魁禍首是 systemd 和他的安全系統PrivateTmp

對於那些遇到與我相同的問題的人,服務 php(可能還有其他一些)可以PrivateTmp選擇true在 systemd 腳本(/usr/lib/systemd/system)中。

在這種情況下,將創建一個新/tmp的並與另一個隔離。一旦服務停止,所有保存在裡面的數據都會被刪除。

這是一種安全措施,因為它/tmp可能包含很多敏感資訊,而 php 腳本並不總是安全的。

要禁用此功能,只需將腳本複製到內部/etc/systemd/system(以避免在更新後覆蓋您的更改)並設置PrivateTmpfalse.

您還可以設置兩個或多個服務共享相同的 /tmp 使用JoinsNamespaceOf.

欲了解更多資訊 >man systemd.exec

引用自:https://serverfault.com/questions/614781