这几天在为nagios写一些自定义的插件,发现有些命令用nagios用户执行时权限不够。干脆把用户nagios添加进sudo组(即编辑文件/etc/sudoers),发现还要输入密码。
需要root权限只有一个办法就是用sudo
将DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
改为DISK_HEALTH=`/usr/bin/sudo $SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
(最后发现这时加sudo 并不是关键 关键是很行脚本时用sudo )
結果:sudo -u nagios ./check_disk_health.sh
Password:
需要输入密码 sudo不用输入密码的方法
修改sudo配置文件具体方法如下:
首先,在文件/etc/sudoers中,找到以下行:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
将用户添加进sudo组的方法是:在这一行后面添加以下一句:
nagios ALL=(ALL) ALL:ALL
如果需要用户nagios使用sudo命令时不输入密码,则是输入以下一句:
nagios ALL=(ALL) NOPASSWD:ALL
nagios ALL=(ALL) NOPASSWD:/usr/local/nagios/libexec/check_disk_health.sh
建议:最好进行sudo的一些控制,很多网方法就是nagios ALL=NOPASSWD:ALL
就这么简单,大家可以尝试一下。其实在/etc/sudoers文件中已经有提示了,只是平时没有注意看。所以以后多看看文件里头的注释还是很有用的。
还有一点,sudo命令默认是不能在后台运行的,如果需要在后台运行(比如nagios的被监控服务器端),就需要将/etc/sudoers文件中以下一行注释掉。
Defaults requiretty
权限调整后测试:
远程调用方法:./check_nrpe -H 192.168.0.56 -c check_disk_health.sh