1

我有一个执行某些nagios配置的 python 脚本。该脚本以具有完全 sudo 权限的用户身份运行(用户可以使用 sudo 运行任何命令,无需密码提示)。配置的最后一步是这样的:

open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)

只能由 root 写入,因此该NAGIOS_COMMAND_FILE命令应由 root 运行。我可以想到两种方法来实现这一点(都不能令人满意):

  1. 以 root 身份运行整个脚本。我不喜欢这样做,因为我的脚本中的任何错误都将以完全的 root 权限执行。
  2. open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)命令放在单独的脚本中,并使用subprocess库调用该脚本,使用 sudo。我不喜欢仅仅为了运行一个命令而创建一个额外的脚本。

我想在我当前的脚本中,没有办法为单个命令更改正在运行的用户,还是我错了?

4

4 回答 4

1

为什么不NAGIOS_COMMAND_FILE向拥有所有 sudo 权限的用户授予写入权限?

于 2012-08-13T10:30:39.120 回答
0

我同意上面的帖子,要么给你的用户对 NAGIOS_COMMAND_FILE 的写入权限,要么将该用途添加到具有这些权限的组中,比如 nagcmd。

于 2012-08-17T14:41:34.683 回答
0

实际上可以为单个命令更改用户。 Fabric提供了一种以任何用户身份登录服务器的方法。我相信它依赖于 ssh 连接。因此,您可以在 python 脚本中使用不同的用户连接到 localhost 并执行所需的命令。

http://docs.fabfile.org/en/1.4.3/api/core/decorators.html

无论如何,正如其他人已经精确的那样,最好允许运行脚本的用户执行这一命令,避免依赖root执行。

于 2012-08-13T11:03:32.043 回答
0

永远不要root 或具有完全 sudo 权限的用户身份运行 Web 服务器。这不是 pythonic 的事情,它是“让我的服务器不被 pwned”的事情。

查看os.seteuid“最小权限原则”,并将man sudoers您的服务器作为常规“httpd-server”运行,其中“httpd-server”具有 sudoer 写入权限NAGIOS_COMMAND_FILE。然后确保您写入命令文件的内容尽可能干净。

于 2012-08-13T10:50:58.837 回答