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