【发布时间】:2012-05-10 21:48:56
【问题描述】:
我正在尝试调试使用 NRPE 的 nagios 插件 (check_aacraid.py)。有问题的系统是一个新设置的 CentOS 6.2 文件服务器。
似乎给我带来麻烦的命令是:
for line in Popen(["/usr/bin/sudo", "/usr/bin/arcconf", "GETCONFIG", "1", "LD"],
stdin=PIPE, stdout=PIPE, close_fds=True).stdout:
如果我以“nagios”用户身份运行脚本,它可以正常工作。如果从 NRPE/XINETD 调用它会失败(NRPE 报告“无法读取输出” - usu 表示错误)。
我用strace观察了xinetd的输出,发现是这样的:
7706 execve("/usr/bin/sudo", ["/usr/bin/sudo", "/usr/bin/arcconf", "GETCONFIG", "1", "AD"], [/* 15 vars */]) = -1 EACCES (Permission denied)
我想弄清楚它是否有问题:
-蟒蛇
-sudo
-nagios
-xinetd
-其他
我已经解决了 sudo 的问题并完成了 std 的事情(注释掉 'requiretty',设置路径,使用 'NOPASSWD' 添加 nagios 用户)。还没发现问题。
其他命令通过 NRPE('check_user' 等)运行良好。
注意:这是一个已发布的、已建立的 nagios 插件。我在这个系统上做错了什么,导致它无法正常工作。
建议?
问题解答:
1) 如果我以“nagios”身份登录,我可以运行该应用程序。
2) 使用 'visudo' 我有这个条目:'nagios ALL=(ALL) NOPASSWD:ALL'
- 是的,它是一个安全漏洞。当我得到这个东西时,我会收紧它。
3) /usr/bin/sudo 的权限是---s--x--x。 2根root 215144 5月9日23:59 /usr/bin/sudo
看来 SELinux 是问题所在。当我 'echo 0 > /selinux/enforce' 时,应用程序运行正常。现在要弄清楚如何使用它而不是绕过它。 @Josh - 将此作为答案发布,我很乐意接受!
【问题讨论】:
-
可以在shell中使用sudo吗?
-
是 nagios 用户允许在没有密码的情况下以 root 身份运行此命令,
/etc/sudoers中应该有一条规则,如nagios ALL = NOPASSWD: /usr/bin/arcconf或类似...(或脚本正在运行哪个用户?) -
很明显,您在调用 exec 时收到了 permission denied 错误。这意味着 Python、Nagios 或 Xinetd 都不是问题。它确实表明
sudo的权限可能不正确。ls -l /usr/bin/sudo显示什么? -
是否启用了 SELinux?如果从 xinetd 执行 sudo 得到一个权限被拒绝的错误并且在 xinetd 之外执行它是成功的,那么看起来像 SELinux 之类的东西可能正在执行一个拒绝它的策略。