如果网络服务器将 CGI 与 bash 一起使用,那么每次有关于 CGI 的请求时它是否都会调用 bash,或者在启动网络服务器时是否缓存(bash 和相关库)?
问:那么,针对 shell shock bug,升级 bash 包后是否需要重新启动网络服务器?
更新:
https://access.redhat.com/articles/1200223
"Services that create such environment variables will need to be restarted to work with the new version of Bash. This behavior is not used by any of the packages provided in any version of Red Hat Enterprise Linux."
但后来他们写道:
Do I need to reboot or restart services after installing this update?
No, a reboot of your system or any of your services is not required.
答案1
是的,如果您通过网络服务器使用 Bash 脚本作为 CGI,则每次执行 CGI 时都会分叉一个新进程。 Perl 和 Python 脚本的情况通常也是如此。
您通常会看到属于网络服务器一部分的其他技术(我在这里专门谈论 Apache),它们将调用“解释器”的单个实例,然后将各种脚本通过管道传输到正在运行的“解释器”中,或者它们“将 CGI 编译为可运行的对象,该对象将保留在内存中,直到服务器重新启动,或者指示持久层从内存中删除这些对象。
因此,如果它们是 Bash 变体,则不需要重新启动,特别是如果 CGI 脚本的#!/bin/bash
顶部带有 表示 shebang 的情况。