eep*_*yne 21 php tmp tmpfs file-permissions centos7
我没有 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
Run Code Online (Sandbox Code Playgroud)
编辑2:我以另一种方式测试了这个问题。我做了
touch("/tmp/boo");
file_exist("/tmp/boo");
Run Code Online (Sandbox Code Playgroud)
和 file_exist 返回 true 以便创建文件。然后我在 /tmp 里面看了看,在那里找不到“boo”文件。这就是我所害怕的,php 看不到挂载点。为什么会这样,我该如何解决?
eep*_*yne 37
我找到了为什么有人给了我全局提示。
这既不是 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
| 归档时间: |
|
| 查看次数: |
25683 次 |
| 最近记录: |