我在个人Ubuntu服务器机器中有以下PHP代码:
$cmd = 'su testuser'; $descriptorspec = array( array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w') ); $pipes = array(); $process = proc_open($cmd, $descriptorspec, $pipes); fwrite($pipes[0], 'password\r'); fclose($pipes[0]); $string = array(stream_get_contents($pipes[1]), stream_get_contents($pipes[2])); proc_close($process); echo exec('whoami') . "\n"; print_r($string);
我从PHP得到这样的回答:
www-data Array ( [0] => [1] => su: must be run from a terminal )
很明显,我想改变活跃的用户,但是有没有办法从php中做到这一点?
su命令只会在当前用户所在的bashshell仍在运行时更改当前用户。即使要执行$cmd='bash-c“sudo su testuser”“(将按预期执行),在执行proc_close之前,您也只会更改当前用户,因此exec('whoami')将始终为您提供最初启动php脚本的用户的用户名。但是您可以使用粗体命令来执行一个bashshell,它将以testuser的身份执行,然后通过管道将命令传递给它。例如,如果使用管道“whoami”而不是“nirvana3105\r”,则whoami应返回“testuser”。希望有帮助。
请尝试此代码(将密码替换为您的密码):
<?php
$cmd = "sudo -S su testuser";
echo $cmd;
$desc = array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w'));
$pipes = array();
$process = proc_open($cmd, $desc, $pipes);
fwrite($pipes[0], "password\n");
fwrite($pipes[0], "whoami");
fclose($pipes[0]);
$string = array(stream_get_contents($pipes[1]), stream_get_contents($pipes[2]));
proc_close($process);
print_r($string);
?>
我使用的是一个安装了Ubuntu的云虚拟机。安装的Java版本为: 在编译java程序时,我必须使用两个jar:和。我使用的终端命令是: 使用将disco和sqlite jar添加到类路径中。 这将在目录中创建我的文件,而不会出现错误。这些JAR包含在目录中。 包含这部分代码,从头开始: 当我在终端中运行以下内容时,问题就开始了: 终端机显示我: 错误:出现JNI错误,请检查您的安装并在线程“ma
因此,我正在运行Sierra,当我在终端输入“r”或“r”时,我得到“-bash:r:command not found”。如果我在终端中键入“which r”,我不会得到任何输出。 以下是“echo$path”的输出:/versions/2.7/bin://usr/local/bin://bin://bin://sbin://sbin://sbin://users/samuelcolon/.rv
我想通过运行以下命令从Mac OSX终端运行/打开Visual Studio代码。我在这里找到了说明: https://code.visualstudio.com/docs/setup 显然我需要在我的文件中包含这一点,所以我做了,但没有用。 我在此处编辑了文件:
我已经使用cp编译了我的代码 导入com。mysql。jdbc。连接 导入com。mysql。jdbc。编制的报表 导入com。mysql。jdbc。声明 导入java。io。* 导入java。sql。DriverManager 导入java。sql。SQLException 导入java。util。ArrayList; 公共类HttpHeaderParser{ 这里有一些java字符串操作。然后
我有以下文件夹结构: null 当我运行Pycharm的fish.py时,它工作得非常好。但是,当我从终端运行fish.py时,我得到错误的模块。 我在终端中使用的命令:来自应用程序文件夹。 我已经研究了这里建议的解决方案:从不同的文件夹导入文件,将应用程序文件夹的路径添加到帮助中。但是,我想知道是否有其他方法可以使它工作,而不在中添加两行代码。这是因为我在/products目录中有许多脚本,不想
我有一个编辑文本。我希望这个编辑文本始终保持焦点和可写性。我怎么能每次都不碰它呢?因为条形码扫描器机器将数据连续发送到此应用程序。 我尝试了很多方法。但它们都不起作用。我可以设置键盘是可见的,但光标不在编辑文本上。