通过php以root权限运行Python文件

时间:2015-02-28 20:18:50

标签: python

我试图使用php索引

运行带有root访问权限的Python文件 在PHP中

有:

passthru('python /home/register/register.py '. $_POST['username'] . ' example.com ' . $_POST['password'] . ' ' . $_POST['email'] . ' ' . $ip . ' 1 2>&1');

在Python文件中有:

os.popen("sudo -u root -p password /sbin/ejabberdctl register %s %s %s" % (user,domain,password)).read()

有没有用Python登录root用户的命令然后执行命令:ls或mkdir

日Thnx。

2 个答案:

答案 0 :(得分:1)

from subprocess import PIPE,Popen

p = Popen(["sudo", "-s", "-S"], stdin=PIPE, stdout=PIPE, universal_newlines=True)

p.stdin.write("password\n")
p.stdin.write("mkdir foo\n")
p.stdin.write("id -u")

要查看输出使用通信:

from subprocess import PIPE,Popen

p = Popen(["sudo", "-s", "-S"], stdin=PIPE, stdout=PIPE, universal_newlines=True)

p.stdin.write("password\n")
p.stdin.write("ls -la\n")
p.stdin.write("/usr/bin/pip list\n")
p.stdin.write("id -u")
print(p.communicate()[0])

但是要确定你知道你正在运行什么命令。

答案 1 :(得分:0)

我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互(如果需要,可以是用户:apache / www-data或root)。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

//Setting the second argument in getShell():
//true will return a shell with root
//false will return a shell with the php execution user
$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);

$return1  = $shell->exeCmd("mkdir -p /some/path");
$return2  = $shell->exeCmd("ls --color=none /some/path");

注意ls命令有一个名为--color = none的开关,这是必需的,因为bash shell会将颜色信息作为奇数字符返回,开关会阻止它。