我有一个python脚本正在执行一些nagios
配置。该脚本作为具有完全sudo权限的用户运行(用户可以使用sudo运行任何命令,无需密码提示)。配置的最后一步是:
open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
NAGIOS_COMMAND_FILE
只能由root写入,因此该命令应该由root运行。我可以想到两种实现这一目标的方法(两者都不令人满意):
open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
命令放在单独的脚本中,并使用subprocess
库通过sudo调用该脚本。我不喜欢创建一个额外的脚本只是来运行一个命令。我想在我当前的脚本中,没有办法在单个命令中更改正在运行的用户 ,或者我错了?
答案 0 :(得分:1)
为什么不对拥有所有sudo权限的用户授予NAGIOS_COMMAND_FILE
写入权限?
答案 1 :(得分:0)
从不,永远以root身份或具有完全sudo权限的用户身份运行Web服务器。这不是一个pythonic的事情,它是“让我的服务器免于被击中”的事情。
查看os.seteuid
,“最小权限原则”和man sudoers
,并将您的服务器作为常规“httpd-server”运行,其中“httpd-server”具有写入{{0}的sudoer权限1}}。然后确保你写入命令文件的内容尽可能干净。
答案 2 :(得分:0)
实际上可以为单个命令更改用户。 Fabric提供了一种以任何用户身份登录服务器的方法。我相信它依赖于ssh连接。因此,您可以使用python脚本中的其他用户连接到localhost并执行所需的命令。
http://docs.fabfile.org/en/1.4.3/api/core/decorators.html
无论如何,正如其他人已经预先确定的那样,最好允许运行脚本权限的用户执行这一命令,并避免依赖root执行。
答案 3 :(得分:0)
我同意上面的帖子,要么将您的用户写入NAGIOS_COMMAND_FILE写入权限,要么将该用途添加到具有这些权限的组中,例如nagcmd。