我有一个权限问题,这让我很抓狂。我正尝试使用插件“check_asterisk_peers”在 arch linux 虚拟机上监控 asterisk。我已经安装了 NRPE(Nagios 远程代理)。nrpe.cfg 的相关部分是:
command[check_users]=/usr/lib/monitoring-plugins/check_users -w 5 -c 10
command[check_asterisk_peers]=/usr/lib/monitoring-plugins/check_asterisk_peers -p monika_gigaset
以下是我得到的结果:
/usr/lib/monitoring-plugins/check_nrpe -H 10.10.10.10 -c check_users
USERS OK - 2 users currently logged in |users=2;5;10;0
现在,这告诉我 NRPE 运行正常,并且所有权限都设置正确。
如果我只是运行插件(不调用 check_nrpe),我会得到:
aag ~ $ /usr/lib/monitoring-plugins/check_asterisk_peers -p monika_gigaset
CRITICAL: Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
但是如果我使用 sudo 运行它,它可以正常工作(由此我得出结论,该插件以非 root 身份运行时没有足够的权限):
aag ~ $ sudo /usr/lib/monitoring-plugins/check_asterisk_peers -p monika_gigaset
OK: monika_gigaset
但是,如果我运行星号插件,我会得到:
aag ~ $ /usr/lib/monitoring-plugins/check_nrpe -H 10.10.10.10 -c check_asterisk_peers
CRITICAL: Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
如果我用 sudo 运行它,也会发生同样的事情:
aag ~ $ sudo /usr/lib/monitoring-plugins/check_nrpe -H 10.10.10.10 -c check_asterisk_peers
CRITICAL: Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
我确信问题出在权限上,但我无法解决它。 sudoers 文件(摘录)内容如下:
root ALL=(ALL) ALL
http ALL = NOPASSWD: /usr/sbin/asterisk -rx database *
nrpe ALL=(ALL) NOPASSWD: /usr/sbin/service,/usr/lib/monitoring-plugins/check_asterisk_peers
asterisk ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
%admins ALL= (ALL) ALL
Defaults targetpw # Ask for the password of the target user
ALL ALL=(ALL) ALL # WARNING: only use this together with 'Defaults targetpw'
任何提示都将不胜感激!我的诊断是插件“check_asterisk_peers”没有联系 asterisk(以 root 身份运行)的权限,但我不明白如何授予它适当的权限。
答案1
正确的解决方案:
在 /etc/asterisk/asterisk.conf 中将套接字的所有者更改为
[files]
astctlpermissions = 0660
astctlowner = asterisk
astctlgroup = asterisk
并将 nrpe 或 nagios 用户(您可以在 nrpe.cfg 中看到您使用的用户)添加到 asterisk 组。
答案2
根据手册页对于该插件,您需要使用 sudo 命令运行该插件,因此当您使用 sudo 运行该插件时会获得成功的结果。
我已为您突出显示了该页面上的说明:
要授予 nagios 用户执行脚本的权限,请在 /etc/sudoers 文件中尝试以下命令:
nagios ALL=(ALL) NOPASSWD: /path/to/plugins/directory/check_asterisk_peers
然后使用 sudo 调用插件:
/path/to/sudo check_asterisk_peers
答案3
我最终设法通过向 nrpe 及其组授予 NOPASSWD 来解决问题。但是安全性并不理想,并且可能会受益于更严格的调整。以下是 sudoers 的相关部分:
root ALL=(ALL) ALL
http ALL = NOPASSWD: /usr/sbin/asterisk -rx database *
nrpe ALL=(ALL) NOPASSWD: ALL
asterisk ALL=(ALL) ALL
%admins ALL= (ALL) NOPASSWD: ALL
%wheel ALL=(ALL) NOPASSWD: ALL
%sudo ALL=(ALL) NOPASSWD: ALL