bash 使用 zenity 的脚本在终端中有效,但在 php shell_exec 中无效
bash script using zenity works in terminal but not in php shell_exec
我不熟悉 zenity 或 shell-exec,所以我可能犯了一个愚蠢的错误...
以下命令行在 Ubuntu 终端 window 中工作;
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" 工作正常。
我欢迎任何建议。
我会用这个:
pkexec nmap -A 192.168.0.1-255
pkexec 在较新的发行版中替换了 gksudo。
@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
现在可以像我希望的那样工作,不需要用户的交互授权。谢谢
你可以试试这个
这将帮助您找到 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
我不熟悉 zenity 或 shell-exec,所以我可能犯了一个愚蠢的错误...
以下命令行在 Ubuntu 终端 window 中工作;
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" 工作正常。
我欢迎任何建议。
我会用这个:
pkexec nmap -A 192.168.0.1-255
pkexec 在较新的发行版中替换了 gksudo。
@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
现在可以像我希望的那样工作,不需要用户的交互授权。谢谢
你可以试试这个 这将帮助您找到 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