Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sudo权限运行单个命令的最具Python风格的方式_Python_Sudo - Fatal编程技术网

使用sudo权限运行单个命令的最具Python风格的方式

使用sudo权限运行单个命令的最具Python风格的方式,python,sudo,Python,Sudo,我有一个python脚本,它正在执行一些nagios配置。脚本以具有完全sudo权限的用户身份运行(用户可以使用sudo运行任何命令,而无需密码提示)。配置的最后一步是: open(NAGIOS_COMMAND_FILE, 'a').write(cmdline) NAGIOS\u命令\u文件只能由root用户写入,因此此命令应该由root用户运行。我可以想出两种方法来实现这一点(都不令人满意): 以root用户身份运行整个脚本。我不喜欢这样做,因为脚本中的任何错误都将以完全根权限执行 将打开(

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

open(NAGIOS_COMMAND_FILE, 'a').write(cmdline)
NAGIOS\u命令\u文件
只能由root用户写入,因此此命令应该由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用户移动到正确的位置。但它可能涉及在一个普通文件中写入密码。。。