了解是否可以禁用 Apache 模块以禁止网站使用

了解是否可以禁用 Apache 模块以禁止网站使用

我可以使用以下命令查看 apache 加载的核心和其他模块的列表:

$ apache2ctl -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)

为了优化服务器的性能(Apache本质上节省每个线程的内存),我想禁用未使用的模块。Apache文档提供了有关此模块的信息,网址为下一页

大多数情况下,每个模块提供的信息足以确定我是否应该禁用模块。例如,我知道我不使用LDAP身份验证,因此我可以安全地禁用authnz_ldap_module

然而对于某些模块来说,这一点不太明显。例如mime_magic模块被用作以下情况的“第二道防线”mod_mime无法解决,理论上无法确定,因为这取决于 Apache 将提供哪些文件。

Apache问:有没有办法将有效处理请求的模块列表记录到文件中?

如果我可以记录这样的信息,我会让 Web 服务器运行一段时间,然后获取用于处理在此期间收到的所有请求的模块列表,并禁用那些未出现在该列表中的模块。

答案1

我不相信存在通用的解决方案,但仍有一些选择。一些模块(例如mod_rewrite)有自己的日志记录功能,但您必须阅读每个模块的文档才能找到。任何列为的模块static都是编译在 Apache 中的,除非您重新编译 Apache,否则无法禁用。对于其余的,您可以尝试三件事:搜索指令前缀、启用调试日志记录或有选择地逐个模块禁用并重新启动。

对于大多数模块,指令共享一个通用前缀。对于 HTTP 身份验证模块basicdigest,您可以通过使用过滤配置文件来判断是否正在使用它们grep。如果您正在使用虚拟主机,您可能可以执行以下操作:

cd /etc/apache2/sites-enabled
grep Auth *

如果您看到类似AuthType basic或 的内容AuthType digest,则说明您需要其中一个或两个模块。否则,禁用它们应该是安全的。其他模块也类似:仅在某处发出指令mime_magic时才启用。MimeMagicFile

如果在此之后你仍然不确定某些模块,你可以尝试启用LogLevel debug并检查日志。如果你看到模块的一些输出,那么你就可以知道该模块正在使用中。你甚至可以为特定模块设置 LogLevel debug。但这与您询问的内容略有不同,因为如果您没有看到任何输出,则并不一定意味着模块未被使用。(也许它只是没有产生调试输出。)

最后,在很多情况下,你可以尝试禁用模块并运行 apache2ctl configtest。如果由于模块未加载而无法识别指令,则会导致错误。

相关内容