Nagios Core and Active Directory SSO troubles regarding cgi

Support forum for Nagios Core, Nagios Plugins, NCPA, NRPE, NSCA, NDOUtils and more. Engage with the community of users including those using the open source solutions.
Locked
CoreJT
Posts: 2
Joined: Wed Aug 28, 2019 7:25 am

Nagios Core and Active Directory SSO troubles regarding cgi

Post by CoreJT »

Hello all!

I hope someone can help me with this and help other by getting an working config!

The situation/background: in the beginning of my Nagions journey I've used basic authentication to login into Nagios. After a while I've implemented authentication through LDAP (basic authentication). This worked without problems.

Now I'd like te implement Single Sign On via Active Directory to give the users the best experience possible (who wants to type login and passwords ;) ). It seems I've got it working. I van access te Nagios Core landingspage, but when I'm trying to access for example the submenu items Hosts or Services i het the following error:
It appears as though you do not have permission to view information for any of the hosts you requested...

If you believe this is an error, check the HTTP server authentication requirements for accessing this CGI
and check the authorization options in your CGI configuration file.
The config file cgi.cfg contains for example

Code: Select all

authorized_for_all_services=ad_username01,ad_username02
authorized_for_all_hosts=ad_username01,ad_username0
I tried changing the usernames to: ad_username01@active_directory_realm but this doesn't seem to fix it... It looks to me that Nagios doesn't recognize the username of the person that is accessing the site? Is there a detailed log or debug possibility on this part of Nagios? The httpd log is not displaying anything on this part.

Setting use_authentication=1 to use_authentication=0 in cgi.cfg allows to show all hosts/services/etc. But that is not a desired situation (I'd like to give some admin users the rights to see everything and to change a status of a service)

Documentation online for this exact situation looks sparse.Something I found: https://github.com/dmyerscough/Linux-HO ... ication.md (fairly outdated)


Hereby the configuration:

- Apache/2.4.6 (Red Hat Enterprise Linux)
- Nagios® Core™ Version 4.3.4


nagios.conf:

Code: Select all

##
<VirtualHost *:80>
 RewriteEngine on
 RewriteCond %{SERVER_PORT} !^443$
 RewriteRule ^/(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
</VirtualHost>
##
<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName servername.domain.com
    DocumentRoot /usr/share/nagios/html
##
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/host.cert
    SSLCertificateKeyFile /etc/pki/tls/private/host.key
    SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
##
ScriptAlias /nagios/cgi-bin "/usr/lib64/nagios/cgi-bin"

<Directory "/usr/lib64/nagios/cgi-bin">
   Options ExecCGI
   AllowOverride None
   Require all granted

   AuthType Kerberos
   AuthName "Kerberos Login"
   KrbAuthRealms REALM
   KrbServiceName "HTTP"
   Krb5Keytab /etc/krb5.keytab
   KrbMethodNegotiate On
   KrbMethodK5Passwd Off

   <RequireAny>
     Require ldap-group CN=group1,OU=OU1,DC=domain,DC=com
     Require ldap-group CN=group2,OU=OU2,DC=domain,DC=com
     Require ldap-group CN=group3,OU=OU3,DC=domain,DC=com
   </RequireAny>

</Directory>

Alias /nagios "/usr/share/nagios/html"
<Directory "/usr/share/nagios/html">
   Options None
   AllowOverride None
   Require all granted

   AuthType Kerberos
   AuthName "Kerberos Authentication"
   KrbAuthRealms REALM
   KrbServiceName "HTTP"
   Krb5Keytab /etc/krb5.keytab
   KrbMethodNegotiate On
   KrbMethodK5Passwd Off

   <RequireAny>
     Require ldap-group CN=group1,OU=OU1,DC=domain,DC=com
     Require ldap-group CN=group2,OU=OU2,DC=domain,DC=com
     Require ldap-group CN=group3,OU=OU3,DC=domain,DC=com
   </RequireAny>
</Directory>

</VirtualHost>
cgi.cfg:

Code: Select all

#################################################################
#
# CGI.CFG - Sample CGI Configuration File for Nagios 4.3.4
#
#
#################################################################


# MAIN CONFIGURATION FILE
# This tells the CGIs where to find your main configuration file.
# The CGIs will read the main and host config files for any other
# data they might need.

main_config_file=/etc/nagios/nagios.cfg



# PHYSICAL HTML PATH
# This is the path where the HTML files for Nagios reside.  This
# value is used to locate the logo images needed by the statusmap
# and statuswrl CGIs.

physical_html_path=/usr/share/nagios/html



# URL HTML PATH
# This is the path portion of the URL that corresponds to the
# physical location of the Nagios HTML files (as defined above).
# This value is used by the CGIs to locate the online documentation
# and graphics.  If you access the Nagios pages with an URL like
# http://www.myhost.com/nagios, this value should be '/nagios'
# (without the quotes).

url_html_path=/nagios



# CONTEXT-SENSITIVE HELP
# This option determines whether or not a context-sensitive
# help icon will be displayed for most of the CGIs.
# Values: 0 = disables context-sensitive help
#         1 = enables context-sensitive help

show_context_help=0



# PENDING STATES OPTION
# This option determines what states should be displayed in the web
# interface for hosts/services that have not yet been checked.
# Values: 0 = leave hosts/services that have not been check yet in their original state
#         1 = mark hosts/services that have not been checked yet as PENDING

use_pending_states=1



# AUTHENTICATION USAGE
# This option controls whether or not the CGIs will use any
# authentication when displaying host and service information, as
# well as committing commands to Nagios for processing.
#
# Read the HTML documentation to learn how the authorization works!
#
# NOTE: It is a really *bad* idea to disable authorization, unless
# you plan on removing the command CGI (cmd.cgi)!  Failure to do
# so will leave you wide open to kiddies messing with Nagios and
# possibly hitting you with a denial of service attack by filling up
# your drive by continuously writing to your command file!
#
# Setting this value to 0 will cause the CGIs to *not* use
# authentication (bad idea), while any other value will make them
# use the authentication functions (the default).

use_authentication=1



# x509 CERT AUTHENTICATION
# When enabled, this option allows you to use x509 cert (SSL)
# authentication in the CGIs.  This is an advanced option and should
# not be enabled unless you know what you're doing.

use_ssl_authentication=0



# DEFAULT USER
# Setting this variable will define a default user name that can
# access pages without authentication.  This allows people within a
# secure domain (i.e., behind a firewall) to see the current status
# without authenticating.  You may want to use this to avoid basic
# authentication if you are not using a secure server since basic
# authentication transmits passwords in the clear.
#
# Important:  Do not define a default username unless you are
# running a secure web server and are sure that everyone who has
# access to the CGIs has been authenticated in some manner!  If you
# define this variable, anyone who has not authenticated to the web
# server will inherit all rights you assign to this user!

#default_user_name=guest



# SYSTEM/PROCESS INFORMATION ACCESS
# This option is a comma-delimited list of all usernames that
# have access to viewing the Nagios process information as
# provided by the Extended Information CGI (extinfo.cgi).  By
# default, *no one* has access to this unless you choose to
# not use authorization.  You may use an asterisk (*) to
# authorize any user who has authenticated to the web server.

authorized_for_system_information=*



# CONFIGURATION INFORMATION ACCESS
# This option is a comma-delimited list of all usernames that
# can view ALL configuration information (hosts, commands, etc).
# By default, users can only view configuration information
# for the hosts and services they are contacts for. You may use
# an asterisk (*) to authorize any user who has authenticated
# to the web server.

authorized_for_configuration_information=*



# SYSTEM/PROCESS COMMAND ACCESS
# This option is a comma-delimited list of all usernames that
# can issue shutdown and restart commands to Nagios via the
# command CGI (cmd.cgi).  Users in this list can also change
# the program mode to active or standby. By default, *no one*
# has access to this unless you choose to not use authorization.
# You may use an asterisk (*) to authorize any user who has
# authenticated to the web server.

authorized_for_system_commands=user01,user02



# GLOBAL HOST/SERVICE VIEW ACCESS
# These two options are comma-delimited lists of all usernames that
# can view information for all hosts and services that are being
# monitored.  By default, users can only view information
# for hosts or services that they are contacts for (unless you
# you choose to not use authorization). You may use an asterisk (*)
# to authorize any user who has authenticated to the web server.

authorized_for_all_services=user01,user02
authorized_for_all_hosts=user01,user02



# GLOBAL HOST/SERVICE COMMAND ACCESS
# These two options are comma-delimited lists of all usernames that
# can issue host or service related commands via the command
# CGI (cmd.cgi) for all hosts and services that are being monitored.
# By default, users can only issue commands for hosts or services
# that they are contacts for (unless you you choose to not use
# authorization).  You may use an asterisk (*) to authorize any
# user who has authenticated to the web server.

authorized_for_all_service_commands=user01,user02
authorized_for_all_host_commands=user01,user02


# READ-ONLY USERS
# A comma-delimited list of usernames that have read-only rights in
# the CGIs.  This will block any service or host commands normally shown
# on the extinfo CGI pages.  It will also block comments from being shown
# to read-only users.

#authorized_for_read_only=user1,user2



# STATUSMAP BACKGROUND IMAGE
# This option allows you to specify an image to be used as a
# background in the statusmap CGI.  It is assumed that the image
# resides in the HTML images path (i.e. /usr/local/nagios/share/images).
# This path is automatically determined by appending "/images"
# to the path specified by the 'physical_html_path' directive.
# Note:  The image file may be in GIF, PNG, JPEG, or GD2 format.
# However, I recommend that you convert your image to GD2 format
# (uncompressed) but ONLY IF YOU WILL USE THE LEGACY MAP EXCLUSIVELY,
# as this will cause less CPU load when the CGI generates the image.

#statusmap_background_image=smbackground.gd2



# STATUSMAP TRANSPARENCY INDEX COLOR
# These options set the r,g,b values of the background color used the statusmap CGI,
# so normal browsers that can't show real png transparency set the desired color as
# a background color instead (to make it look pretty).
# Defaults to white: (R,G,B) = (255,255,255).

#color_transparency_index_r=255
#color_transparency_index_g=255
#color_transparency_index_b=255



# DEFAULT STATUSMAP LAYOUT METHOD
# This option allows you to specify the default layout method
# the statusmap CGI should use for drawing hosts.  If you do
# not use this option, the default for the legacy map is to use
# user-defined coordinates and the default for the new map is "6"
# (Circular Balloon).
# Valid options for the legacy map are as follows:
#       0 = User-defined coordinates
#       1 = Depth layers
#       2 = Collapsed tree
#       3 = Balanced tree
#       4 = Circular
#       5 = Circular (Marked Up)
# Valid options for the new map are as follows:
#       0 = User-defined coordinates
#       1 = Depth Layers (Horizontal)
#       2 = Collapsed tree (Horizontal)
#       3 = Balanced tree (Horizontal)
#       4 = DON'T USE
#       5 = Circular Markup
#       6 = Circular Balloon
#       7 = Balanced tree (Vertical)
#       8 = Collapsed tree (Vertical)
#       9 = Depth Layers (Vertical)
#       10 = Force Map

#default_statusmap_layout=6



# DEFAULT STATUSWRL LAYOUT METHOD
# This option allows you to specify the default layout method
# the statuswrl (VRML) CGI should use for drawing hosts.  If you
# do not use this option, the default is to use user-defined
# coordinates.  Valid options are as follows:
#       0 = User-defined coordinates
#       2 = Collapsed tree
#       3 = Balanced tree
#       4 = Circular

default_statuswrl_layout=4



# STATUSWRL INCLUDE
# This option allows you to include your own objects in the
# generated VRML world.  It is assumed that the file
# resides in the HTML path (i.e. /usr/local/nagios/share).

#statuswrl_include=myworld.wrl



# PING SYNTAX
# This option determines what syntax should be used when
# attempting to ping a host from the WAP interface (using
# the statuswml CGI.  You must include the full path to
# the ping binary, along with all required options.  The
# $HOSTADDRESS$ macro is substituted with the address of
# the host before the command is executed.
# Please note that the syntax for the ping binary is
# notorious for being different on virtually ever *NIX
# OS and distribution, so you may have to tweak this to
# work on your system.

ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$



# REFRESH RATE
# This option allows you to specify the refresh rate in seconds
# of various CGIs (status, statusmap, extinfo, and outages).

refresh_rate=90



# DEFAULT PAGE LIMIT
# This option allows you to specify the default number of results
# displayed on the status.cgi.  This number can be adjusted from
# within the UI after the initial page load. Setting this to 0
# will show all results.

result_limit=100



# ESCAPE HTML TAGS
# This option determines whether HTML tags in host and service
# status output is escaped in the web interface.  If enabled,
# your plugin output will not be able to contain clickable links.

escape_html_tags=1



# SOUND OPTIONS
# These options allow you to specify an optional audio file
# that should be played in your browser window when there are
# problems on the network.  The audio files are used only in
# the status CGI.  Only the sound for the most critical problem
# will be played.  Order of importance (higher to lower) is as
# follows: unreachable hosts, down hosts, critical services,
# warning services, and unknown services. If there are no
# visible problems, the sound file optionally specified by
# 'normal_sound' variable will be played.
#
#
# <varname>=<sound_file>
#
# Note: All audio files must be placed in the /media subdirectory
# under the HTML path (i.e. /usr/local/nagios/share/media/).

#host_unreachable_sound=hostdown.wav
#host_down_sound=hostdown.wav
#service_critical_sound=critical.wav
#service_warning_sound=warning.wav
#service_unknown_sound=warning.wav
#normal_sound=noproblem.wav



# URL TARGET FRAMES
# These options determine the target frames in which notes and
# action URLs will open.

action_url_target=_blank
notes_url_target=_blank



# LOCK AUTHOR NAMES OPTION
# This option determines whether users can change the author name
# when submitting comments, scheduling downtime.  If disabled, the
# author names will be locked into their contact name, as defined in Nagios.
# Values: 0 = allow editing author names
#         1 = lock author names (disallow editing)

lock_author_names=1



# SPLUNK INTEGRATION OPTIONS
# These options allow you to enable integration with Splunk
# in the web interface.  If enabled, you'll be presented with
# "Splunk It" links in various places in the CGIs (log file,
# alert history, host/service detail, etc).  Useful if you're
# trying to research why a particular problem occurred.
# For more information on Splunk, visit http://www.splunk.com/

# This option determines whether the Splunk integration is enabled
# Values: 0 = disable Splunk integration
#         1 = enable Splunk integration

#enable_splunk_integration=1

# This option should be the URL used to access your instance of Splunk
#splunk_url=http://127.0.0.1:8000/



# NAVIGATION BAR SEARCH OPTIONS
# The following options allow to configure the navbar search. Default
# is to search for hostnames. With enabled navbar_search_for_addresses,
# the navbar search queries IP addresses as well. It's also possible
# to enable search for aliases by setting navbar_search_for_aliases=1.

navbar_search_for_addresses=1
navbar_search_for_aliases=1



# DEFAULTS FOR CHECKBOXES FOR ACKNOWLEDGEMENTS
# Enabling ack_no_sticky will default the "Sticky Acknowledgement" to
# be unchecked.
# Enabling ack_no_send will default the "Send Notification" to
# be unchecked.

#ack_no_sticky=0
#ack_no_send=0



# SHOW ONLY HARD STATES IS TACTICAL OVERVIEW
# This option controls whether only HARD states are counted on the
# Tactical Overview, or if both HARD and SOFT states are counted.
# Set to 1 to show only HARD states. Defaults to 0 (HARD+SOFT).

#tac_cgi_hard_only=0
User avatar
cdienger
Support Tech
Posts: 5045
Joined: Tue Feb 07, 2017 11:26 am

Re: Nagios Core and Active Directory SSO troubles regarding

Post by cdienger »

Do you see usernames in the http access logs? You may need to add the "require valid-user" line to the naigos.conf file to make the username available and then define the user as user01@REALM in the cgi.cfg file.
As of May 25th, 2018, all communications with Nagios Enterprises and its employees are covered under our new Privacy Policy.
CoreJT
Posts: 2
Joined: Wed Aug 28, 2019 7:25 am

Re: Nagios Core and Active Directory SSO troubles regarding

Post by CoreJT »

cdienger wrote:Do you see usernames in the http access logs? You may need to add the "require valid-user" line to the naigos.conf file to make the username available and then define the user as user01@REALM in the cgi.cfg file.
Hello cdienger,

Thanks for the reply!

Your note regarding the usernames in access logs pointed me in the right way. The sessions was registered but there were no usernames present.

After some troubleshooting it seems that the Require all granted setting overrides the <RequireAny></RequireAny> part of nagios.conf. After removing Require all granted the access logs register usernames. I also added KrbLocalUserMapping On which strips the realm after the username. So you don't need to put @REALM in the cgi.cfg after the username.

So the final working version of nagios.conf will be:

Code: Select all

##
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
</VirtualHost>
##
<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName servername.domain.com
    DocumentRoot /usr/share/nagios/html
##
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/host.cert
    SSLCertificateKeyFile /etc/pki/tls/private/host.key
    SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
##

ScriptAlias /nagios/cgi-bin "/usr/lib64/nagios/cgi-bin"

<Directory "/usr/lib64/nagios/cgi-bin">
   Options ExecCGI
   AllowOverride None

   SSLRequireSSL
   AuthType Kerberos
   AuthName "Kerberos Authentication"
   KrbAuthRealms REALM
   KrbServiceName "HTTP"
   Krb5Keytab /etc/krb5.keytab
   KrbMethodNegotiate On
   KrbMethodK5Passwd Off
   KrbLocalUserMapping On

   <RequireAny>
     Require ldap-group CN=group1,OU=OU1,DC=domain,DC=com
     Require ldap-group CN=group2,OU=OU2,DC=domain,DC=com
     Require ldap-group CN=group3,OU=OU3,DC=domain,DC=com
   </RequireAny>

</Directory>

Alias /nagios "/usr/share/nagios/html"

<Directory "/usr/share/nagios/html">
   Options None
   AllowOverride None

   SSLRequireSSL
   AuthType Kerberos
   AuthName "Kerberos Authentication"
   KrbAuthRealms REALM
   KrbServiceName "HTTP"
   Krb5Keytab /etc/krb5.keytab
   KrbMethodNegotiate On
   KrbMethodK5Passwd Off
   KrbLocalUserMapping On

   <RequireAny>
     Require ldap-group CN=group1,OU=OU1,DC=domain,DC=com
     Require ldap-group CN=group2,OU=OU2,DC=domain,DC=com
     Require ldap-group CN=group3,OU=OU3,DC=domain,DC=com
   </RequireAny>
</Directory>

</VirtualHost>
scottwilkerson
DevOps Engineer
Posts: 19396
Joined: Tue Nov 15, 2011 3:11 pm
Location: Nagios Enterprises
Contact:

Re: Nagios Core and Active Directory SSO troubles regarding

Post by scottwilkerson »

Great, Thanks for sharing your result!

Locking thread
Former Nagios employee
Creator:
Human Design Website
Get Your Human Design Chart
Locked