我正在开发一个 PHP Web 应用程序,除其他功能外,它需要允许用户添加、编辑和删除 Apache 虚拟主机条目。(我在 Apache2.conf 中包含了一个可在 Web 上写入的配置文件)。让 Apache 重新启动或识别 vhost 文件中的这些更改的最佳方法是什么?我看到的唯一方法是以某种方式将 PHP 升级到 root 权限并在文件更新时调用“apachectl graceful”,有没有更好的方法?我希望更改立即生效,而不是等待 crontab 执行……
答案1
从安全角度来看,很难想象还有比这更糟糕的想法。人们会不遗余力地使用 chroot 和其他机制,试图从 Web 服务器进程/有效用户中删除权限。无论您是否授予 Web 用户升级权限,您都授予了 Web 进程定义哪些目录中哪些类型的脚本可执行文件的能力,方法是允许它重写配置文件。太糟糕了,太糟糕了。
我建议创建一组非常有限的操作,Web 服务器可以执行这些操作,例如将所需虚拟主机的名称和主目录写入 Web 根目录中的文本文件。然后,具有所需权限的其他进程可以检查语法并将其转换为所需的更改。或者直接通过 TCP 连接将命令发送到同一台机器上的端口,如下所述。
为了将权限提升限制为仅采取这一项操作,您可以编写一个 TCP 服务器,该服务器监听一个特殊端口,Web 服务可以向该端口发送重启消息;我已经编写了这种专用的 TCP 服务器(仅几百行 C 代码,其中大部分可用作模板),以允许 chroot 隔离的 Web 服务器进程访问其他一些服务,而这些服务通常在没有授予其对文件系统和二进制文件的全权访问权限的情况下不可用。
答案2
如果你真的想这样做,并且想用 Apache 来实现,请阅读mod_vhost_alias- httpd.conf 中没有变化,不需要重启