Nagios:为经过身份验证的用户创建自定义菜单

时间:2014-03-03 11:25:19

标签: nagios

有没有' easy'为Nagios认证用户创建自定义web gui(例如,菜单,默认主页等)的方法?我为客户创建了一个用户,该用户只能访问某些主机组。但登录后,用户显然可以看到默认菜单,该菜单是为内部使用而定制的。我怎么能阻止这个?

2 个答案:

答案 0 :(得分:2)

有多种方法可以限制用户在标准gui中看到的内容,请查看manual pages。基本上,用户只会看到那些包含该用户的联系人列表的主机和服务。您可以在etc / cgiauth.cfg文件中为特殊情况进行更多配置。

如果要将用户限制为非常少的预定义页面,可以使用Web服务器配置中的一些技巧来完成此操作。您应该对apache配置文件如何为此工作有所了解,这假设您可以使用其IP地址区分您的客户与公司员工。如果你不能,你可以使用组和AuthGroupFiles,但这样会有点困难。

基本理念是:

  • 允许每个人访问静态页面,图像,CSS等内容。
  • 仅允许从贵公司使用的IP访问CGI
  • 为客户创建特殊网址"隐藏"真正的CGI

这需要mod_authz,mod_rewrite和mod_proxy以及mod_proy_http才能工作。

您的Web服务器目录中应该有一个nagios.conf;它的确切位置和内容取决于分布以及您是否自己使用RPM或编译的nagios,因此您的目录路径可能会有所不同。

在CGI脚本的配置中,我们放了

<Directory /usr/local/nagios/sbin>
    Order deny, allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 1.2.3.4           # <-- this should be the address of the webserver
    Allow from 192.168.1.0/24    # <-- this should be the addresses your company use
    require valid-user
</Directory>

这拒绝向除了你以外的所有人访问CGI。

然后,我们定义了一些可以重写为CGI脚本的网页:

<Location />
    RewriteEngine On
    RewriteRule customer.html$  http://127.0.0.1/nagios/cgi-bin/status.cgi?host=customerhost [P]
</Location>

因此,当有人访问customer.html时,服务器将使用其内部代理获取http://127.0.0.1/nagios/cgi-bin/status.cgi?host=customerhost;这将创建一个新的CGI请求,似乎来自127.0.0.1,因此匹配&#34;允许来自127.0.0.1&#34;规则。

Mod_proxy仍然需要配置:

ProxyRequests On
<Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Deny from all
    Allow from 1.2.3.4                 # <--- again, use your server IP
    Allow from 127.0.0.1
</Proxy>

将代理限制为内部apache使用,并阻止其他人使用您的代理进行其他操作。

当然,它仍然是执行的原始CGI,但您的客户无法直接使用它们,他只能访问您已提供的CGI在你的RewriteRules中。链接和动作下拉仍将存在,但访问它们将导致错误消息。

如果你还想要更多,请使用你选择的编程语言(我用perl完成了这个,但php,phyton,ruby,......应该也能正常工作),解析objects.cache和status.dat文件,并创建自己的UI。一旦你编写了一些库函数来解析这些文件(这些文件不应该太难,它们的语法很简单),创建自己的GUI就像编写任何其他类似的文件一样困难或简单Web UI。

答案 1 :(得分:0)

经过一番研究,我找到了解决问题的方法。解决方案在于,默认情况下Nagios使用单个密码文件(对于http auth)来处理两个不同的方向:

  • $NAGIOS_HOME/sbin(存储cgi文件的位置)和
  • $NAGIOS_HOME/share(存储HTML和PHP文件)

这意味着,作为用户进行身份验证的任何人都可以自动访问文件夹和子文件夹。这可以通过为上面的文件夹使用单独的密码文件来防止。

以下是来自自定义nagios.conf文件的片段,其中包含两个不同的密码文件:

 ## BEGIN APACHE CONFIG SNIPPET - NAGIOS.CONF

 ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
 <Directory "/usr/local/nagios/sbin">
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Digest
    AuthName "Nagios Access"
    AuthDigestFile /usr/local/nagios/etc/.digest_pw1>        
    Require valid-user
 </Directory>

 Alias /nagios "/usr/local/nagios/share"

 <Directory "/usr/local/nagios/share">    
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Digest
    AuthName "Nagios Access"
    AuthDigestFile /usr/local/nagios/etc/.digest_pw2
    Require valid-user
 </Directory>

## END APACHE CONFIG SNIPPETS

现在举个例子,让我们在/ var / www / html / customer1下为customer1创建一个自定义目录,然后从Nagios ../share目录中复制所有的html和php文件,并自定义它们并在Apache中添加一个别名。 / p>

Alias /customer1 "/var/www/html/customer1"

 <Directory "/var/www/html/customer1">    
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Digest
    AuthName "Nagios Access"
    AuthDigestFile /usr/local/nagios/etc/.digest_pw3
    Require user customer1
 </Directory>

现在可以在密码文件1和3中为customer1添加相同的用户/密码,以便他们可以访问自定义web gui和cgi脚本。当然,事先必须在Nagios中设置适当的联系人组,以便在认证之后,客户只能看到他/她是联系人的组。默认的Nagios share目录使用nagios-admin(或其他)用户/密码进行保护,该用户/密码位于密码文件2中,当然还有1个。