【问题标题】:python: unable to call sudo using Popen?python:无法使用 Popen 调用 sudo?
【发布时间】: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 之类的东西可能正在执行一个拒绝它的策略。

标签: python centos nagios


【解决方案1】:

听起来 SELinux 是个问题。如果从 xinetd 执行 sudo 得到一个权限被拒绝错误并且在 xinetd 之外执行它是成功的,那么似乎 SELinux 之类的东西可能正在执行一个拒绝它的策略。

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 2014-04-09
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多