我想提高我的 Apache 网络服务器的安全性。
打开:
/etc/apache2/conf.d/安全
编辑:
服务器代币产品 服务器签名关闭
重新加载/重启:
/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
正常运行。