我试图使用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。
答案 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会将颜色信息作为奇数字符返回,开关会阻止它。