我希望nginx
从PHP
. 然而,我担心安全。PHP 在用户/组下运行php:php
,nginx 配置文件归root:root
.
为了使 PHP 能够打开和写入 nginx 配置文件,该文件需要归用户和组所有php:php
。
做这个的最好方式是什么?我想,我可以有一个使用另一种语言或 PHP 的辅助进程来实际读取和写入配置文件,而 PHP 只是与辅助进程对话。
这真的取决于什么样的 PHP 文件生成 nginx。如果这是一个小的独立脚本,那么以 root 身份运行它不会有任何问题。现在我假设它是一个需要生成和编写这个 nginx 文件的 php 网站。
如果实际创建和写入文件的部分仍然相当独立和简单,我会将其设置为独立的可执行文件(在 php 或其他东西中),从 PHP 网站获取一些命令行参数,然后setuid
这个可执行文件(虽然它归根用户所有)。但是请注意,此可执行文件应该是安全的:http ://en.wikipedia.org/wiki/Setuid#Security 。
另一种方法是让 php 写入 nginx.conf (直接,通过使文件全局可写,使其组可写并给它一个 php 用户所在的组,或者通过一个单独的进程来复制文件来自一些 php 编写的文件)。不过这很可怕,因为我确信您的 nginx.conf 文件可以包含被执行的命令(例如,用于身份验证或作为 cgi),并且它们可能会以 root 身份执行(如果相同的配置文件如此命令) . 因此,通过这种方式,您基本上为 php 用户打开了以 root 身份运行任意命令的大门....
另一件可能有效的事情(我不确定是否可行):您可能只想调整配置文件中的一两个参数。看看是否可以从其他位置(即 php 可写)读取这一个或两个参数。