我在哪里可以findApache的configtest声明?

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

  1. 打开:

      /etc/apache2/conf.d/security 
  2. 编辑:

      ServerTokens Prod
    服务器签名closures 
  3. 刷新/重新启动:

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

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

  ServerTokens采取一个参数,确定令牌显示在服务器:标题 - 最小(imal),操作系统或全部
行动“configtest”失败。 
  ServerSignature只有一个参数,En / disable服务器签名(on | off | email)
行动“configtest”失败。 

我在哪里可以findApache的configtest声明,所以我可以告诉它接受Prod和Off?

问题scheme:

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

所以不要这样做:

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

相反,这样做:

  #在12/20/2012添加了这个:
 ServerTokens Prod 

但是,这些错误信息使我感到困惑,因为它们只有三个选项(Min,OS和Full),全都是小写(在| off | email),而在configuration文件中有更多的选项和ucfirst。

这看起来像你使用的是Debian / Ubuntu或类似的系统。 你可以运行一个configtest

 apache2ctl configtest 

你不能改变它的声明接受Prod(它已经),你不应该需要。

错误信息是非常清楚的ServerTokens takes one argument ...我只能得到这个错误消息,如果我提供了多个参数的ServerTokens指令

  ServerTokens Prod 1 

失败的方式与你观察到的一样。 你需要弄清楚为什么你的ServerTokens和ServerSignature指令有多个参数。 我会尝试的第一件事是将文件加载到vim中并使用:set invlist ,它将显示文件中的任何隐藏字符。

不明白你的意思。 apache2 configtest (在一个红帽子框)运行apachectl。 如果你看apachectl这是由Apache提供的脚本,它基本上运行httpd -t。

所以httpd本身是什么testingconfiguration当你运行一个configtest。

解决这个问题的一个方法就是把一些否定的ifdefine放在合适的configuration节中

例如:在你的configuration文件中:

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

然后运行

 httpd -t -DDONTRUNMYBADCONFIG 

testing你的configuration。 我相信其他东西都会得到正常的testing,但只要-DDONTRUNMYBADCONFIG位于apache命令行中,这两个指令就会被忽略。

如果需要的-DDONTRUNMYBADCONFIG ,可以在“confgitest”部分添加-DDONTRUNMYBADCONFIG/etc/init.d/apache2脚本,所以仍然可以正常运行service httpd configtest