php 腳本無法訪問 /tmp 文件夾
我沒有 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
(以避免在更新後覆蓋您的更改)並設置PrivateTmp
為false
.您還可以設置兩個或多個服務共享相同的 /tmp 使用
JoinsNamespaceOf
.欲了解更多資訊 >
man systemd.exec