我有一个执行nagios
配置的python脚本。该脚本以具有完整sudo权限的用户身份运行(用户可以使用sudo运行任何命令,而无需密码提示)。在配置的最后一步是这样的:使用sudo权限运行单个命令的绝大多数pythonic方式
open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
NAGIOS_COMMAND_FILE
的仅是通过根可写的,所以这个命令应该由root运行。我可以想到两种实现方法(两种都不尽如人意):
- 以root身份运行整个脚本。我不喜欢这样做,因为脚本中的任何错误都将以完全的根权限执行。
- 将
open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
命令放入单独的脚本中,并使用subprocess
库通过sudo调用该脚本。我不喜欢创建一个额外的脚本只是运行一个命令。
我想没有改变运行的用户只是单个命令的方式,在我目前的剧本,还是我错了?
这是另一种选择,但我不想在系统配置文件中随意更改所有权,因为难以跟踪/复制(我的目标是能够轻松地将我的基础架构复制到其他服务器) 。如果无法将运行用户更改为单个命令,那么我宁愿以root身份运行整个脚本,而不是更改文件所有者。 – dangonfast 2012-08-13 10:37:04
否则,您可以将您的配置写入临时文件,然后使用pexpect将其作为root用户移动到正确的位置。但它可能涉及将密码写入纯文件中...... – 2012-08-13 10:50:48