强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第2章:安装与部署

第2章:安装与部署

本章详细介绍 Nagios Core 的多种安装方式,包括源码编译安装、包管理器安装,以及初始配置、用户权限设置和 SELinux 配置等关键步骤。


一、系统要求

1.1 硬件要求

环境类型CPU内存磁盘网络
测试环境1 核512 MB10 GB1 网卡
小型生产2 核2 GB50 GB1 网卡
中型生产4 核4 GB100 GB2 网卡(冗余)
大型生产8 核+8 GB+200 GB+2 网卡(冗余)

1.2 软件要求

操作系统版本支持状态
CentOS7 / 8 / Stream✅ 推荐
Rocky Linux8 / 9✅ 推荐
Ubuntu18.04 / 20.04 / 22.04✅ 推荐
Debian10 / 11 / 12✅ 支持
RHEL7 / 8 / 9✅ 推荐
openSUSE15.x⚠️ 社区支持

1.3 依赖组件

组件用途是否必需
GCCC 编译器编译安装必需
glibcC 标准库必需
gd / gd-devel图形库图表功能必需
openssl-develSSL 支持HTTPS 检查必需
Apache / NginxWeb 服务器Web 界面必需
PHP脚本支持CGI 脚本必需

二、编译安装(推荐)

编译安装可以获得最新版本,并完全控制安装过程。

2.1 CentOS / Rocky Linux 安装

2.1.1 安装依赖

# 更新系统
sudo yum update -y

# 安装编译工具和依赖
sudo yum install -y \
    gcc \
    glibc \
    glibc-common \
    gd \
    gd-devel \
    make \
    openssl-devel \
    wget \
    unzip \
    httpd \
    php \
    php-cli \
    net-snmp \
    net-snmp-utils

# 创建 nagios 用户和组
sudo useradd -m -s /bin/bash nagios
sudo groupadd nagcmd
sudo usermod -a -G nagcmd nagios
sudo usermod -a -G nagcmd apache

2.1.2 下载并编译 Nagios Core

# 进入临时目录
cd /tmp

# 下载 Nagios Core(以 4.5.0 为例)
wget https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.5.0/nagios-4.5.0.tar.gz

# 解压
tar xzf nagios-4.5.0.tar.gz
cd nagios-4.5.0

# 配置编译选项
./configure \
    --with-command-group=nagcmd \
    --with-httpd-conf=/etc/httpd/conf.d \
    --with-nagios-user=nagios \
    --with-nagios-group=nagios \
    --with-mail=/usr/sbin/sendmail \
    --enable-event-broker

# 编译
make all

# 安装各组件
sudo make install              # 安装主程序
sudo make install-init         # 安装启动脚本
sudo make install-config       # 安装配置文件
sudo make install-commandmode  # 设置命令目录权限
sudo make install-webconf      # 安装 Apache 配置
sudo make install-exfoliation  # 安装主题资源

2.1.3 安装 Nagios 插件

# 下载插件
cd /tmp
wget https://github.com/nagios-plugins/nagios-plugins/releases/download/release-2.4.5/nagios-plugins-2.4.5.tar.gz

# 解压编译
tar xzf nagios-plugins-2.4.5.tar.gz
cd nagios-plugins-2.4.5

./configure \
    --with-nagios-user=nagios \
    --with-nagios-group=nagios \
    --prefix=/usr/local/nagios

make
sudo make install

2.1.4 设置 Web 界面认证

# 创建 Web 界面管理员账号
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

# 输入密码(建议使用强密码)
# New password: ********
# Re-type new password: ********
# Adding password for user nagiosadmin

2.1.5 启动服务

# 验证配置
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

# 启动 Apache
sudo systemctl start httpd
sudo systemctl enable httpd

# 启动 Nagios
sudo systemctl start nagios
sudo systemctl enable nagios

# 检查服务状态
sudo systemctl status nagios

# 访问 Web 界面
# http://your-server-ip/nagios/

2.2 Ubuntu / Debian 安装

2.2.1 安装依赖

# 更新系统
sudo apt-get update
sudo apt-get upgrade -y

# 安装编译工具和依赖
sudo apt-get install -y \
    build-essential \
    libgd-dev \
    libssl-dev \
    libmcrypt-dev \
    libperl-dev \
    apache2 \
    php \
    libapache2-mod-php \
    libapache2-mod-php \
    libnet-snmp-perl \
    gettext \
    wget

# 创建 nagios 用户和组
sudo useradd -m -s /bin/bash nagios
sudo groupadd nagcmd
sudo usermod -a -G nagcmd nagios
sudo usermod -a -G nagcmd www-data

2.2.2 下载并编译

cd /tmp

# 下载 Nagios Core
wget https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.5.0/nagios-4.5.0.tar.gz

# 解压编译
tar xzf nagios-4.5.0.tar.gz
cd nagios-4.5.0

./configure \
    --with-command-group=nagcmd \
    --with-httpd-conf=/etc/apache2/sites-available \
    --with-nagios-user=nagios \
    --with-nagios-group=nagios

make all
sudo make install
sudo make install-init
sudo make install-config
sudo make install-commandmode
sudo make install-webconf
sudo make install-exfoliation

2.2.3 安装插件

cd /tmp
wget https://github.com/nagios-plugins/nagios-plugins/releases/download/release-2.4.5/nagios-plugins-2.4.5.tar.gz

tar xzf nagios-plugins-2.4.5.tar.gz
cd nagios-plugins-2.4.5

./configure \
    --with-nagios-user=nagios \
    --with-nagios-group=nagios

make
sudo make install

2.2.4 配置 Apache

# 启用必要模块
sudo a2enmod rewrite
sudo a2enmod cgi

# 创建认证文件
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

# 启用 Nagios 站点配置
sudo ln -s /etc/apache2/sites-available/nagios.conf /etc/apache2/sites-enabled/

# 重启 Apache
sudo systemctl restart apache2
sudo systemctl enable apache2

# 启动 Nagios
sudo systemctl start nagios
sudo systemctl enable nagios

三、包管理器安装

包管理器安装简单快捷,适合快速测试或非关键环境。

3.1 CentOS / RHEL 安装

# 安装 EPEL 源
sudo yum install -y epel-release

# 安装 Nagios
sudo yum install -y nagios

# 安装插件
sudo yum install -y nagios-plugins-all

# 启动服务
sudo systemctl start httpd
sudo systemctl start nagios
sudo systemctl enable httpd
sudo systemctl enable nagios

# 设置 Web 界面密码
sudo htpasswd -c /etc/nagios/passwd nagiosadmin

3.2 Ubuntu / Debian 安装

# 更新软件源
sudo apt-get update

# 安装 Nagios
sudo apt-get install -y nagios4

# 安装过程中会提示设置 Web 管理员密码

# 安装插件
sudo apt-get install -y nagios-plugins

# 启动服务
sudo systemctl start apache2
sudo systemctl start nagios4
sudo systemctl enable apache2
sudo systemctl enable nagios4

3.3 安装路径对比

项目编译安装路径包管理器安装路径
主程序/usr/local/nagios/bin//usr/sbin/
配置文件/usr/local/nagios/etc//etc/nagios/
插件目录/usr/local/nagios/libexec//usr/lib64/nagios/plugins/
日志文件/usr/local/nagios/var//var/log/nagios/
状态文件/usr/local/nagios/var//var/log/nagios/
Web 根目录/usr/local/nagios/share//usr/share/nagios/

四、初始配置

4.1 主配置文件概览

主配置文件 nagios.cfg 控制 Nagios 的全局行为:

# /usr/local/nagios/etc/nagios.cfg(编译安装)
# /etc/nagios/nagios.cfg(包管理器安装)

########################################
# 日志文件路径
########################################
log_file=/usr/local/nagios/var/nagios.log

########################################
# 对象配置文件引入
########################################
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

# cfg_dir 可以引入整个目录的配置
cfg_dir=/usr/local/nagios/etc/conf.d

########################################
# 状态文件
########################################
status_file=/usr/local/nagios/var/status.dat
object_cache_file=/usr/local/nagios/var/objects.cache

########################################
# 时间间隔设置
########################################
check_external_commands=1
command_check_interval=-1
command_file=/usr/local/nagios/var/rw/nagios.cmd

########################################
# 保留状态数据
########################################
retain_state_information=1
state_retention_file=/usr/local/nagios/var/retention.dat
retention_update_interval=60

########################################
# 日志设置
########################################
log_initial_states=1
log_current_states=1
log_passive_checks=1
log_external_commands=1

########################################
# 通知设置
########################################
enable_notifications=1
execute_service_checks=1
accept_passive_service_checks=1
execute_host_checks=1
accept_passive_host_checks=1

4.2 配置文件结构

/etc/nagios/
├── nagios.cfg                 # 主配置文件
├── cgi.cfg                    # CGI 界面配置
├── resource.cfg               # 资源宏定义($USER1$ 等)
├── htpasswd.users             # Web 界面认证文件
└── objects/                   # 对象定义目录
    ├── commands.cfg           # 命令定义
    ├── contacts.cfg           # 联系人定义
    ├── localhost.cfg          # 本机监控配置
    ├── switch.cfg             # 交换机配置示例
    ├── printer.cfg            # 打印机配置示例
    ├── templates.cfg          # 模板定义
    ├── timeperiods.cfg        # 时间段定义
    └── windows.cfg            # Windows 主机配置示例

4.3 资源文件配置

资源文件 resource.cfg 定义用户级宏变量:

# /usr/local/nagios/etc/resource.cfg

# $USER1$ 通常指向插件目录
$USER1$=/usr/local/nagios/libexec

# 自定义路径宏
$USER2$=/usr/local/nagios/custom-plugins

# SNMP 社区名(不建议明文存放,生产环境应使用加密)
$USER3$=public

# 邮件服务器
$USER4$=smtp.example.com

# 自定义凭据
$USER5$=monitoring_user
$USER6$=secure_password_here

4.4 CGI 配置

CGI 配置文件 cgi.cfg 控制 Web 界面行为:

# /usr/local/nagios/etc/cgi.cfg

# 主 CGI 配置
physical_html_path=/usr/local/nagios/share
url_html_path=/nagios
show_context_help=0

# 认证设置
use_authentication=1
use_ssl_authentication=0

# 默认用户权限
default_user_name=nagiosadmin

# 系统/进程信息访问权限
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin

# 命令执行权限
authorized_for_system_commands=nagiosadmin

# 全局主机/服务查看权限
authorized_for_all_hosts=nagiosadmin
authorized_for_all_services=nagiosadmin

# 只读用户(可添加监控查看用户)
authorized_for_all_host_commands=nagiosadmin
authorized_for_all_service_commands=nagiosadmin

五、用户权限设置

5.1 系统用户配置

Nagios 推荐使用专用的低权限用户运行:

# 创建 nagios 用户(编译安装时已创建)
sudo useradd -r -m -d /usr/local/nagios -s /bin/bash nagios

# 创建命令组
sudo groupadd nagcmd

# 添加用户到命令组
sudo usermod -a -G nagcmd nagios
sudo usermod -a -G nagcmd apache  # 或 www-data(Ubuntu)

# 设置目录权限
sudo chown -R nagios:nagios /usr/local/nagios/
sudo chgrp -R nagcmd /usr/local/nagios/var/rw/
sudo chmod 775 /usr/local/nagios/var/rw/
sudo chmod g+s /usr/local/nagios/var/rw/

5.2 目录权限详解

目录/文件所有者权限说明
/usr/local/nagios/nagios:nagios755主目录
/usr/local/nagios/bin/nagios:nagios755可执行文件
/usr/local/nagios/etc/nagios:nagios750配置文件(敏感)
/usr/local/nagios/libexec/nagios:nagios755插件目录
/usr/local/nagios/var/nagios:nagios775运行时数据
/usr/local/nagios/var/rw/nagios:nagcmd775命令管道
/usr/local/nagios/var/nagios.lognagios:nagios664日志文件
/usr/local/nagios/share/nagios:apache755Web 资源

5.3 sudo 权限配置

某些插件需要 root 权限才能执行系统检查:

# /etc/sudoers.d/nagios
# 允许 nagios 用户执行特定命令而无需密码

# 允许执行系统检查命令
nagios ALL=(ALL) NOPASSWD: /usr/sbin/dmidecode
nagios ALL=(ALL) NOPASSWD: /usr/bin/systemctl status *
nagios ALL=(ALL) NOPASSWD: /usr/bin/systemctl is-active *
nagios ALL=(ALL) NOPASSWD: /usr/sbin/smartctl *

# 允许执行自定义脚本
nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/custom_*

# 设置文件权限
Defaults:nagios !requiretty

5.4 Web 界面用户管理

# 添加管理员用户
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

# 添加普通查看用户
sudo htpasswd /usr/local/nagios/etc/htpasswd.users viewer1

# 添加只读用户(需要在 cgi.cfg 中配置权限)
sudo htpasswd /usr/local/nagios/etc/htpasswd.users readonly1

为只读用户配置权限:

# /usr/local/nagios/etc/cgi.cfg

# 添加只读用户到查看权限列表
authorized_for_all_hosts=nagiosadmin,viewer1,readonly1
authorized_for_all_services=nagiosadmin,viewer1,readonly1

# 不要将只读用户添加到命令执行权限列表
# authorized_for_all_host_commands=nagiosadmin,viewer1  # 错误!
authorized_for_all_host_commands=nagiosadmin

六、SELinux 配置

6.1 SELinux 概述

SELinux(Security-Enhanced Linux)是 Linux 内核的安全模块,可能会阻止 Nagios 的正常运行。

# 检查 SELinux 状态
getenforce
# 输出:Enforcing / Permissive / Disabled

# 查看详细状态
sestatus

6.2 SELinux 对 Nagios 的影响

受影响的功能典型症状原因
CGI 访问403 Forbiddenhttpd_t 无法访问 nagios 目录
插件执行Permission denied插件没有执行权限
命令管道Could not open command file管道文件权限不足
日志写入Cannot open log fileSELinux 限制文件写入
外部命令Command not found二进制文件没有执行权限

6.3 方案一:使用 SELinux 策略(推荐)

# 安装 SELinux 管理工具
sudo yum install -y policycoreutils-python-utils

# 为 Nagios 设置正确的 SELinux 上下文
sudo semanage fcontext -a -t httpd_sys_content_t "/usr/local/nagios/share(/.*)?"
sudo semanage fcontext -a -t httpd_sys_script_exec_t "/usr/local/nagios/sbin(/.*)?"
sudo semanage fcontext -a -t nagios_unconfined_plugin_exec_t "/usr/local/nagios/libexec(/.*)?"
sudo semanage fcontext -a -t nagios_var_run_t "/usr/local/nagios/var/rw(/.*)?"

# 应用上下文
sudo restorecon -Rv /usr/local/nagios/

# 允许 httpd 连接网络(用于 CGI 访问)
sudo setsebool -P httpd_can_network_connect 1

# 允许 httpd 发送邮件(通知功能)
sudo setsebool -P httpd_can_sendmail 1

# 允许 Nagios 执行插件
sudo setsebool -P nagios_run_sudo 1

# 查看 Nagios 相关的 SELinux 布尔值
getsebool -a | grep nagios

6.4 方案二:创建自定义 SELinux 策略

# 如果遇到 SELinux 拒绝,生成自定义策略模块

# 1. 查看 SELinux 拒绝日志
sudo ausearch -m avc -ts recent | grep nagios

# 或者
sudo cat /var/log/audit/audit.log | grep nagios | grep denied

# 2. 生成策略模块
sudo ausearch -m avc -ts recent | grep nagios | audit2allow -M nagios_custom

# 3. 安装策略模块
sudo semodule -i nagios_custom.pp

# 4. 验证
sudo semodule -l | grep nagios

6.5 方案三:临时禁用 SELinux(不推荐用于生产)

# 临时设置为宽容模式
sudo setenforce 0

# 永久禁用(需要重启)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 重启系统
sudo reboot

6.6 SELinux 排错流程

Nagios 功能异常
    │
    ▼
检查 SELinux 状态
    │
    ├─ Disabled → 不是 SELinux 问题
    │
    └─ Enforcing → 检查审计日志
                      │
                      ▼
               grep nagios /var/log/audit/audit.log
                      │
                      ├─ 无拒绝记录 → 不是 SELinux 问题
                      │
                      └─ 有拒绝记录 → 生成策略模块
                                          │
                                          ▼
                                    audit2allow -M nagios_fix
                                    semodule -i nagios_fix.pp

七、防火墙配置

7.1 firewalld(CentOS 7+)

# 开放 HTTP 端口
sudo firewall-cmd --permanent --add-service=http

# 开放 HTTPS 端口(可选)
sudo firewall-cmd --permanent --add-service=https

# 开放 NRPE 端口(被监控主机需要)
sudo firewall-cmd --permanent --add-port=5666/tcp

# 重载防火墙
sudo firewall-cmd --reload

# 验证规则
sudo firewall-cmd --list-all

7.2 ufw(Ubuntu)

# 开放 HTTP 端口
sudo ufw allow 80/tcp

# 开放 HTTPS 端口(可选)
sudo ufw allow 443/tcp

# 开放 NRPE 端口
sudo ufw allow 5666/tcp

# 启用防火墙
sudo ufw enable

# 验证规则
sudo ufw status verbose

7.3 iptables(传统方式)

# 开放 HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 开放 NRPE
sudo iptables -A INPUT -p tcp --dport 5666 -j ACCEPT

# 保存规则
sudo service iptables save
# 或
sudo iptables-save > /etc/sysconfig/iptables

八、验证安装

8.1 配置验证

# 验证配置文件
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

# 预期输出:
# Nagios Core 4.5.0
# Copyright (c) 2009-present Nagios Core Development Team
# ...
# Running pre-flight check on configuration data...
#
# Checking objects...
#     Checked 15 services.
#     Checked 2 hosts.
#     Checked 1 host groups.
#     Checked 0 service groups.
#     Checked 1 contacts.
#     Checked 1 contact groups.
#     Checked 24 commands.
#     Checked 5 time periods.
#     Checked 0 host escalations.
#     Checked 0 service escalations.
# Checking for circular paths...
#     Checked 2 hosts
#     Checked 0 service dependencies
#     Checked 0 host dependencies
#     Checked 5 timeperiods
# Checking global event handlers...
# Checking obsessive compulsive processor commands...
# Checking misc settings...
#
# Total Warnings: 0
# Total Errors:   0
#
# Things look okay - No serious problems were detected during the pre-flight check

8.2 服务状态检查

# 检查 Nagios 进程
ps aux | grep nagios

# 检查 Web 服务
systemctl status httpd  # CentOS
systemctl status apache2  # Ubuntu

# 检查端口监听
ss -tlnp | grep :80
ss -tlnp | grep :443

# 测试 Web 访问
curl -I http://localhost/nagios/

8.3 Web 界面访问测试

# 使用浏览器访问
# http://your-server-ip/nagios/

# 输入用户名和密码
# 用户名: nagiosadmin
# 密码: 之前设置的密码

# 或使用命令行测试
curl -u nagiosadmin:your_password http://localhost/nagios/cgi-bin/status.cgi

九、卸载与重装

9.1 编译安装的卸载

# 停止服务
sudo systemctl stop nagios
sudo systemctl stop httpd

# 删除安装文件
sudo rm -rf /usr/local/nagios/
sudo rm -f /etc/httpd/conf.d/nagios.conf

# 删除用户
sudo userdel -r nagios
sudo groupdel nagcmd

# 删除启动脚本
sudo rm -f /etc/init.d/nagios
sudo rm -f /etc/systemd/system/nagios.service

9.2 包管理器的卸载

# CentOS/RHEL
sudo yum remove nagios nagios-plugins-all

# Ubuntu/Debian
sudo apt-get remove --purge nagios4 nagios-plugins
sudo apt-get autoremove

十、常见问题

10.1 安装失败排查

错误信息可能原因解决方案
configure: error: Cannot find ssl headers缺少 openssl-develyum install openssl-devel
make: gcc: Command not found缺少 GCCyum install gcc
configure: error: Cannot find GD library缺少 gd-develyum install gd-devel
install: cannot create regular file权限不足使用 sudo 执行
nagios: error while loading shared libraries库文件缺失ldconfig 更新库缓存

10.2 启动失败排查

# 检查日志
tail -f /usr/local/nagios/var/nagios.log

# 检查配置
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

# 检查权限
ls -la /usr/local/nagios/var/rw/nagios.cmd
ls -la /usr/local/nagios/var/nagios.log

# 检查 SELinux
getenforce
sudo ausearch -m avc -ts recent | grep nagios

10.3 Web 界面无法访问

# 检查 Apache 配置
apachectl configtest

# 检查认证文件
ls -la /usr/local/nagios/etc/htpasswd.users

# 检查防火墙
sudo firewall-cmd --list-all

# 检查 SELinux 上下文
ls -Z /usr/local/nagios/share/

十一、注意事项

11.1 安装注意事项

注意事项说明
版本选择生产环境建议使用稳定版本,避免使用 beta 版
路径规划编译安装路径保持默认,避免后续配置问题
用户权限始终使用专用的低权限用户运行 Nagios
SELinux生产环境建议启用 SELinux,使用自定义策略
备份安装完成后备份配置文件

11.2 安全建议

建议实施方法
使用强密码htpasswd 设置 12 位以上复杂密码
限制访问 IPApache 配置 Allow from 限制
启用 HTTPS配置 SSL 证书
定期更新关注安全公告,及时升级
最小权限严格控制用户权限

十二、扩展阅读


十三、本章小结

本章详细介绍了 Nagios 的安装部署过程,关键要点:

  1. 编译安装适合生产环境,可以获得最新版本和完全控制
  2. 包管理器安装简单快捷,适合测试和快速验证
  3. 用户权限是安全的基础,必须正确配置
  4. SELinux 配置是常见问题源,需要根据实际情况处理
  5. 配置验证是启动前的必要步骤,确保配置无误

下一章第3章:配置文件结构 - 深入了解 Nagios 配置文件的组织结构和高级配置技巧。