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

问题描述 投票:0回答:3

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

以下命令行在Ubuntu终端窗口中工作;

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

它会打开一个GUI对话框来询问密码,然后nmap正确运行。

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

$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”可以正常运行。

我欢迎任何建议。

php bash shell-exec
3个回答
0
投票

我会用这个:

pkexec nmap -A 192.168.0.1-255

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


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

现在按照我的希望工作,无需用户的交互授权。谢谢。


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。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.