通过CGI(Python)运行sudo命令

时间:2014-01-21 07:14:41

标签: python cgi sudo

我正在使用Selenium为Web应用程序编写测试套件。

在此过程中,我需要测试应用程序的行为,以防某个服务正在运行。

我想创建一个cql调用Python脚本来打开和关闭该服务。

我知道cgi调用是在webserver(Apache)的上下文中,但是认为发出sudo调用是这样的:

import subprocess
import os
command = 'sudo -S launchctl unload /Library/LaunchAgents/com.my.daemon.plist'
pwd = 'pwd123'
test1 = subprocess.Popen( command, shell=True, stdin=subprocess.PIPE)
test1.communicate(input=pwd)
test2 = os.system( 'echo %s|%s' % (pwd,command) )

可以做到这一点,他们不会得到返回码256。

如果不接触Apache运行的上下文,我该怎么做才能执行此调用?

至于安全性:这只能在测试机器上运行。

4 个答案:

答案 0 :(得分:1)

这可能是一个路径问题..

您是否尝试过编写完整的路径:

command = '/usr/bin/sudo -S launchctl unload /Library/LaunchAgents/com.my.daemon.plist'

答案 1 :(得分:1)

命令应该是一个列表,而不是一个字符串。试试:

command = ['sudo', '-S', 'launchctl', 'unload', '/Library/LaunchAgents/com.my.daemon.plist']

答案 2 :(得分:1)

Apache运行的用户需要位于/ etc / sudoers文件中,或者属于sudo组,我想这通常不会。您还需要让它不要求在/ etc / sudoers

中配置的密码

对于Ubuntu,请查看以下内容:https://askubuntu.com/questions/7477/how-can-i-add-a-new-user-as-sudoer-using-the-command-line

https://askubuntu.com/questions/147241/execute-sudo-without-password

答案 3 :(得分:0)

不能以这种方式运行sudo - sudo需要一个控制终端才能运行。