0

我为 LDAPS 身份验证设置了 Nagvis 和 Nagios。我在 Nagvis 中有一个监控点(链接),它将我带到 Nagios Core 中的服务信息。当我单击 Nagvis 中的链接以访问 Nagios 时,我收到以下错误:/var/log/httpd24/error_log:

[cgi:error] [pid 25523] [client 155.157.39.194:23160] Premature end of script headers: status.cgi, referer: https://[EM Server FQDN]/nagios/cgi-bin/status.cgi?host=all

当我进入下一页时,我遇到了一个内部服务器错误页面,它只是告诉我查阅错误日志。点击浏览器上的 F5 或后退导航按钮可解决此问题。当我将 LDAPS 身份验证替换为基本身份验证时,不会出现任何问题。

我的 CGI 文件具有适当的权限。在 LDAP 身份验证的过程中一定会丢失一些东西吗?

任何帮助表示赞赏!附上我的nagios.conf ...

   ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

   <Directory "/usr/local/nagios/sbin">
  SSLRequireSSL
  Options ExecCGI
  AllowOverride AuthConfig
  Order deny,allow
  Deny from all

  # Limit HTTP methods
  <LimitExcept GET POST OPTIONS>
       Require all denied
  </LimitExcept>

 Allow from <IP subnet of allowed hosts>
 Session on
 SessionCookieName httpd_nagsess path=/
 SessionMaxAge 1800
 SessionCryptoPassphrase <obscured>
 ErrorDocument 401 /auth/login.html

 AuthFormProvider ldap
 AuthType form
 AuthLDAPGroupAttributeIsDN on
 AuthName "Nagios Login via Active Directory (LDAPS)"
 AuthLDAPURL "ldaps://<domain controller #1 FQDN>:3269 <domain controller #2 FQDN>:3269/DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>?sAMAccountName?sub?(objectClass=*)" NONE
 AuthLDAPBindDN "CN=AD-Binder,OU=Service Accounts,OU=Users and Groups,OU=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>"
   AuthLDAPBindPassword <obscured>
   require ldap-group CN=em_admin,OU=Groups,OU=Users and Groups,OU=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>

</Directory>
4

1 回答 1

0

问题出在我的登录表单上。根据关于“Inline Login with Body Preservation”的 apache 文档(https://httpd.apache.org/docs/2.4/mod/mod_auth_form.html),我的表单中需要以下三行:

<input type="hidden" name="httpd_method" value="POST" />
<input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" />
<input type="hidden" name="httpd_body" value="<?php echo $_SERVER['REDIRECT_QUERY_STRING'];?>" />

提供给 httpd_body 的 PHP 内容是我实际保留原始请求所需的内容。我发现有一些提到内联表单登录不能开箱即用,但没有可靠的解决方案。我的解决方案对我有用。注意 login.html 必须变成 login.php。请参阅下面的登录表单:

登录.php

最后是我的 nagios.conf(我不包括相同的 nagios/share 目录): nagios.conf

仅供参考,在 login.php 的登录表单部分之外执行此操作,以确定此信息的保存位置:

<?php
$info = phpinfo();
echo "<html><h2>$info</h2>";
?>
于 2021-12-09T14:33:02.513 回答