失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 关闭shell_exec php 使用shell_exec从PHP执行shell命令

关闭shell_exec php 使用shell_exec从PHP执行shell命令

时间:2021-11-18 21:11:13

相关推荐

关闭shell_exec php 使用shell_exec从PHP执行shell命令

我的论文中包括创建一个管理界面,其中一个

管理员可以批准要求访问权限的用户

OpenNebula.

经批准后,用户应加入OpenNebula(即它对应

命令oneadmin createuser username password). (More information

of the interface (section 4.2).)

我试图通过在a中执行shell命令来执行此操作

PHP文件.为什么这不起作用(下面只是一个具体的例子 – 不是我使用的一般代码)?

$execQuery = "/bin/su oneadmin postgres -c '/usr/bin/oneuser create test10 test10'";

shell_exec ($execQuery); //execute query in shell.

这也不行(即使我以oneadmin登录,当时

脚本由PHP执行):

shell_exec ("/usr/bin/oneuser create test10 test10");

当我在shell中键入该命令时,它可以工作.

我试图通过PHP和那些工作执行其他shell命令

很好,所以我想知道问题出在哪里.

我已经为所有用户提供了文件/usr/bin/oneuser rwx权限.

解决方法:

在php manual for shell_exec上,它显示该函数将输出作为字符串返回.如果您希望从您启动的程序输出,您需要像这样捕获:

$execQuery = "echo -n test_command";

$output = shell_exec($execQuery);

echo $output;

您的问题并未显示尝试捕获任何数据.如果你还确保在运行命令时连接stdout和stderr,你应该更好地了解发生了什么.要使用您的示例:

$output = shell_exec("/usr/bin/oneuser create test10 test10 2>&1");

var_dump($output);

这应该可以帮助你了解发生了什么.在Shadur suggests,似乎这些程序可能期望一个可以输入密码以便运行的交互式终端.即使不需要输入,他们也可能期望交互式shell.而且他说su在这种情况下并不好看.但是,有一个正确的工具.

您可以设置sudo,以便您的http用户可以在没有密码的情况下以用户名执行您的程序,但无法通过运行visudo或您用​​来编辑sudoers文件和添加此行的任何内容来执行任何其他操作:

http ALL=(username) /usr/bin/oneadmin

然后在php中你的命令看起来像这样:

$execQuery = "sudo -u username /usr/bin/oneadmin postgres -c '/usr/bin/oneuser create test10 test10'";

$out = shell_exec ("$execQuery 2>&1");

echo $out

标签:php,shell,shell-script

来源: https://codeday.me/bug/0814/1655978.html

如果觉得《关闭shell_exec php 使用shell_exec从PHP执行shell命令》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。