第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 的安装部署过程,关键要点:
- 编译安装适合生产环境,可以获得最新版本和完全控制
- 包管理器安装简单快捷,适合测试和快速验证
- 用户权限是安全的基础,必须正确配置
- SELinux 配置是常见问题源,需要根据实际情况处理
- 配置验证是启动前的必要步骤,确保配置无误
下一章:第3章:配置文件结构 - 深入了解 Nagios 配置文件的组织结构和高级配置技巧。