使用zenity的bash脚本可在终端中工作,但不能在php shell_exec中工作

时间:2019-03-25 18:05:30

标签: php bash shell-exec

我不熟悉zenity或shell-exec,所以我可能犯了一个愚蠢的错误...

以下命令行可在Ubuntu终端窗口中使用;

PASSWD="$(zenity --password --title=Authentication)"; echo -e $PASSWD | sudo -S nmap -A 192.168.0.1-255;

它弹出一个GUI对话框,要求输入密码,然后nmap才能正确运行。

如果我将以下代码放在由Apache服务的本地计算机上的php文件中:

$network = '192.168.0.1-255';
$cmd = 'PASSWD="$(zenity --password --title=Authentication)"; echo -e $PASSWD | sudo -S nmap -A ' . $network;
echo $cmd;
$output3 = rtrim(shell_exec($cmd));
echo ($output3);

然后$ cmd输出为

PASSWD="$(zenity --password --title=Authentication)"; echo -e $PASSWD | sudo -S nmap -A 192.168.0.1-255 

但没有其他反应。

我看着run zenity from php 并尝试先从终端发出此命令:

xhost local:www-data

但这没有帮助。

例如,运行shell_exec中的“ ls”即可正常运行。

我欢迎任何建议。

3 个答案:

答案 0 :(得分:0)

我会用这个:

pkexec nmap -A 192.168.0.1-255

pkexec在较新的发行版中替换了gksudo。

答案 1 :(得分:0)

@danielsedoff 我在文件夹/ usr / share / polkit-1中创建了一个文件“ com.ubuntu.pkexec.nmap.policy”,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
  "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
  "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>

  <action id="com.ubuntu.pkexec.nmap">
    <defaults>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/nmap</annotate>
  </action>

</policyconfig>

我的php文件中的命令

pkexec --user root nmap -A 192.168.0.1-255

现在可以按我希望的方式工作,而无需用户的交互式授权。谢谢。

答案 2 :(得分:0)

您可以尝试一下 这将帮助您查找shell_exec函数错误:

向您添加2>&1命令

检查以下更改:

$network = '192.168.0.1-255';
$cmd = 'PASSWD="$(zenity --password --title=Authentication)"; echo -e $PASSWD | sudo -S nmap -A ' . $network.' 2>&1 ';
echo $cmd;
$output3 = rtrim(shell_exec($cmd));
echo ($output3);

试用上面的代码。我在$ cmd的末尾添加了2>&1。