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

Nagios 监控运维完整教程 / 第2章:安装与部署

第2章:安装与部署

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


一、系统要求

1.1 硬件要求

环境类型 CPU 内存 磁盘 网络
测试环境 1 核 512 MB 10 GB 1 网卡
小型生产 2 核 2 GB 50 GB 1 网卡
中型生产 4 核 4 GB 100 GB 2 网卡(冗余)
大型生产 8 核+ 8 GB+ 200 GB+ 2 网卡(冗余)

1.2 软件要求

操作系统 版本 支持状态
CentOS 7 / 8 / Stream ✅ 推荐
Rocky Linux 8 / 9 ✅ 推荐
Ubuntu 18.04 / 20.04 / 22.04 ✅ 推荐
Debian 10 / 11 / 12 ✅ 支持
RHEL 7 / 8 / 9 ✅ 推荐
openSUSE 15.x ⚠️ 社区支持

1.3 依赖组件

组件 用途 是否必需
GCC C 编译器 编译安装必需
glibc C 标准库 必需
gd / gd-devel 图形库 图表功能必需
openssl-devel SSL 支持 HTTPS 检查必需
Apache / Nginx Web 服务器 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:nagios 755 主目录
/usr/local/nagios/bin/ nagios:nagios 755 可执行文件
/usr/local/nagios/etc/ nagios:nagios 750 配置文件(敏感)
/usr/local/nagios/libexec/ nagios:nagios 755 插件目录
/usr/local/nagios/var/ nagios:nagios 775 运行时数据
/usr/local/nagios/var/rw/ nagios:nagcmd 775 命令管道
/usr/local/nagios/var/nagios.log nagios:nagios 664 日志文件
/usr/local/nagios/share/ nagios:apache 755 Web 资源

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 Forbidden httpd_t 无法访问 nagios 目录
插件执行 Permission denied 插件没有执行权限
命令管道 Could not open command file 管道文件权限不足
日志写入 Cannot open log file SELinux 限制文件写入
外部命令 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-devel yum install openssl-devel
make: gcc: Command not found 缺少 GCC yum install gcc
configure: error: Cannot find GD library 缺少 gd-devel yum 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 位以上复杂密码
限制访问 IP Apache 配置 Allow from 限制
启用 HTTPS 配置 SSL 证书
定期更新 关注安全公告,及时升级
最小权限 严格控制用户权限

十二、扩展阅读


十三、本章小结

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

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

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