加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php脚本无法访问/ tmp文件夹

发布时间:2020-12-13 14:01:47 所属栏目:PHP教程 来源:网络整理
导读:我没有open_basedir,php可以访问/ etc /usr/proc / home等…但不是/ tmp. tmpfs挂载在/ tmp上(/ tmp类型为tmpfs(rw)) 这也是我想使用/ tmp文件夹的原因. 我的文件由http(nginx和php的用户)拥有,并且每个人都可读. sudo -u http cat / tmp / file正在运行但是
我没有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或tmpfs的错.罪魁祸首是systemd和他的安全系统PrivateTmp.

对于那些遇到同样问题的人来说,服务php(可能还有其他一些)在systemd脚本(/usr/lib / systemd / system)中将PrivateTmp选项设置为true.

在这种情况下,创建一个新的/ tmp并与另一个隔离.一旦服务停止,将删除保存在内的所有数据.

这是一个安全措施,因为/ tmp可以包含很多敏感信息,并且php脚本并不总是安全的.

要停用此功能,只需将脚本复制到/ etc / systemd / system中(以避免在更新后覆盖您的更改)并将PrivateTmp设置为false.

您还可以使用JoinsNamespaceOf设置两个或多个服务以共享相同的/ tmp.

有关更多信息,请访问: man systemd.exec

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读