我在哪里可以找到 Apache 的 configtest 声明?

我在哪里可以找到 Apache 的 configtest 声明?

我想提高我的 Apache 网络服务器的安全性。

  1. 打开:

    /etc/apache2/conf.d/安全
  2. 编辑:

    服务器代币产品
    服务器签名关闭
  3. 重新加载/重启:

    /etc/init.d/apache2 重新加载
    /etc/init.d/apache2 重新启动

Prod 和 Off 的值应该没问题,但是我收到这些错误:

ServerTokens 接受一个参数,确定服务器中显示的令牌:标头 - Min(imal)、OS 或 Full
操作“configtest”失败。
ServerSignature 接受一个参数,启用/禁用服务器签名 (on|off|email)
操作“configtest”失败。

我在哪里可以找到 Apache 的 configtest 声明,以便我可以告诉它接受 Prod 和 Off?

问题方案:

我的配置文件中有内联注释,这是不允许的。

所以不要这样做:

ServerTokens Prod # 于 2012 年 10 月 20 日添加

可以这样做:

# 2012 年 10 月 20 日添加:
服务器代币产品

但是,错误消息让我感到困惑,因为它们只有三个选项(Min、OS 和 Full)并且都是小写(on|off|email),而在配置文件中有更多选项和 ucfirst。

答案1

看起来你正在使用 Debian/Ubuntu 或类似系统。你可以使用以下命令运行配置测试

apache2ctl configtest

您不能更改它的声明以接受 Prod(它已经这样做了)并且您不需要这样做。

错误消息非常清楚, ServerTokens takes one argument ... 只有当我为 ServerTokens 指令提供多个参数时,我才能收到此错误消息,因此

 ServerTokens Prod 1

失败的方式与您观察到的相同。您需要弄清楚为什么您的 ServerTokens 和 ServerSignature 指令有多个参数。我首先要尝试的是将文件加载到 vim 中,然后使用:set invlist它来显示文件中的任何隐藏字符。

答案2

不确定你的意思。 apache2 configtest(在 redhat 机器上)运行 apachectl。如果你查看 apachectl(apache 提供的脚本),它基本上运行的是 httpd -t。

因此,当您运行 configtest 时,httpd 本身正在测试配置。

解决这个问题的一种方法是ifdefine在有问题的配置节周围放置一些否定的 s

例如:在您的配置文件中:

<ifdefine ! DONTRUNMYBADCONFIG >
ServerTokens Prod
ServerSignature Off
</ifdefine>

然后运行

httpd -t -DDONTRUNMYBADCONFIG

测试您的配置。我相信其他一切都会正常测试,但只要这两个指令-DDONTRUNMYBADCONFIG在 apache 命令行中,就会被忽略。

如果您愿意,您可以将其添加-DDONTRUNMYBADCONFIG/etc/init.d/apache2“confgitest”部分的脚本中,这样您仍然可以service httpd configtest正常运行。

相关内容