如何使用 PHP Web 应用程序在文档根目录之外编写启动持久文件?

问题描述 投票:0回答:1

systemd
服务的
PrivateTmp
php-fpm
选项会影响对文档根目录之外的文件的写访问。

例如红帽企业 Linux 9 和 PHP 8.2.13

例如,如果

var/tmp/myApp
(例如)用于需要在重新启动后继续存在的临时文件,则如果为 true,则将阻止写入访问,否则将允许写入访问。
systemd
手册描述了如何使用和安装特定于进程的子树,而不是普通的
/tmp
。 它还指的是
var/tmp
,但我还没有看到任何证据表明这种情况发生。 如果确实如此,这不是矛盾吗 - 因为
/tmp
在启动时被清除?

因为出于安全原因我希望文档根目录中的所有文件都是只读的,所以应该如何配置

php.ini
php-fpm
服务以允许对其他路径进行写访问,例如
/var/tmp/myApp
PrivateTmp
=真的吗?

php file boot
1个回答
0
投票

在重新启动后仍然存在的临时文件

这是矛盾的。如果您需要文件在重新启动后仍然存在,那么根据定义,它们不是临时的

解决此问题的一般机制是将文档根目录设置为项目根目录下一级,然后在项目根目录中使用特定于项目的“临时”目录。例如,考虑这个项目的目录布局:

.
├── log
│   └── 20240904.log
├── public
│   ├── images
│   │   └── logo.png
│   ├── index.php
│   └── js
│       └── app.js
├── src
│   ├── Model
│   │   └── User.php
│   └── Service
│       └── Foo.php
└── var
    └── cache
        └── abcde

如果您现在将文档根目录指向

public
子目录,那么 Web 服务器进程将只能访问该点以下的文件,这些文件将直接提供给客户端。其他所有内容,包括 PHP 源代码,都位于文档根目录之外,并且 Web 服务器甚至不知道它的存在。

但是 php-fpm 进程(至少应该)作为与 Web 服务器进程不同的用户运行,因此您现在可以单独控制访问。例如,Web 服务器用户仅具有对

public
的读取访问权限,而 php-fpm 用户将对
var/cache
具有写入访问权限。这将允许您的 PHP 代码任意读取/写入
var/cache
中的文件,这些文件将在重新启动后继续存在,但 Web 客户端将永远无法通过某些 url(如
http://yoursite.com/var/cache/abcde
)直接请求这些文件。

© www.soinside.com 2019 - 2024. All rights reserved.