使用sudo权限运行单个命令的最具Python风格的方式
我有一个python脚本,它正在执行一些使用sudo权限运行单个命令的最具Python风格的方式,python,sudo,Python,Sudo,我有一个python脚本,它正在执行一些nagios配置。脚本以具有完全sudo权限的用户身份运行(用户可以使用sudo运行任何命令,而无需密码提示)。配置的最后一步是: open(NAGIOS_COMMAND_FILE, 'a').write(cmdline) NAGIOS\u命令\u文件只能由root用户写入,因此此命令应该由root用户运行。我可以想出两种方法来实现这一点(都不令人满意): 以root用户身份运行整个脚本。我不喜欢这样做,因为脚本中的任何错误都将以完全根权限执行 将打开(
nagios
配置。脚本以具有完全sudo权限的用户身份运行(用户可以使用sudo运行任何命令,而无需密码提示)。配置的最后一步是:
open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
NAGIOS\u命令\u文件
只能由root用户写入,因此此命令应该由root用户运行。我可以想出两种方法来实现这一点(都不令人满意):
打开(NAGIOS_COMMAND_文件'a')。在单独的脚本中写入(cmdline)
命令,并使用子流程
库调用该脚本,使用sudo。我不喜欢仅仅为了运行一个命令而创建一个额外的脚本我想在我当前的脚本中,仅仅通过一个命令无法更改正在运行的用户,还是我错了?为什么不向拥有所有sudo权限的用户授予对
NAGIOS_命令_文件的写入权限?为什么不向拥有所有sudo权限的用户授予对NAGIOS_命令_文件的写入权限?永远不要以root用户或具有完全sudo权限的用户身份运行web服务器。这不是一个pythonic的东西,它是一个“防止我的服务器被破坏”的东西
查看os.seteuid
,“最小特权原则”和mansudoers
,并将您的服务器作为常规的“httpd服务器”运行,其中“httpd服务器”具有sudoer写入NAGIOS\u命令\u文件的权限。然后确保写入命令文件的内容尽可能干净。永远不要以root用户或具有完全sudo权限的用户身份运行web服务器。这不是一个pythonic的东西,它是一个“防止我的服务器被破坏”的东西
查看os.seteuid
,“最小特权原则”和mansudoers
,并将您的服务器作为常规的“httpd服务器”运行,其中“httpd服务器”具有sudoer写入NAGIOS\u命令\u文件的权限。然后确保写入命令文件的内容尽可能干净。实际上可以为单个命令更改用户。
提供以任何用户身份登录服务器的方法。我相信它依赖于ssh连接。因此,您可以在python脚本中使用不同的用户连接到localhost,并执行所需的命令
无论如何,正如其他人已经指出的那样,最好允许运行脚本权限的用户执行这一命令,并避免依赖root来执行。实际上可以将用户更改为单个命令。
提供以任何用户身份登录服务器的方法。我相信它依赖于ssh连接。因此,您可以在python脚本中使用不同的用户连接到localhost,并执行所需的命令
无论如何,正如其他人已经指出的那样,最好允许运行脚本权限的用户执行这一命令,并避免依赖root来执行。我同意上面的帖子,要么将用户写入NAGIOS_命令_文件,要么将该用法添加到具有这些权限的组中,如nagcmd 我同意上面的帖子,要么给你的用户在NAGIOS_命令_文件上写perm,要么把这个用法添加到拥有这些权限的组中,比如nagcmd 这是另一种选择,但我不喜欢在系统配置文件中随机更改所有权,因为这很难跟踪/复制(我的目标是能够轻松地将我的基础结构复制到其他服务器)。如果无法仅为一个命令更改正在运行的用户,那么我更希望以root用户身份运行整个脚本,而不是更改文件所有者。否则,您可以将配置写入临时文件,然后使用pexpect
将其作为root用户移动到正确的位置。但它可能涉及将密码写入普通文件…这是另一种选择,但我不喜欢在系统配置文件中随机更改所有权,因为这很难跟踪/复制(我的目标是能够轻松地将我的基础结构复制到其他服务器)。如果无法仅为一个命令更改正在运行的用户,那么我更希望以root用户身份运行整个脚本,而不是更改文件所有者。否则,您可以将配置写入临时文件,然后使用pexpect
将其作为root用户移动到正确的位置。但它可能涉及在一个普通文件中写入密码。。。