bash-скрипт, использующий zenity, работает в терминале, но не в php shell_exec - PullRequest
0 голосов
/ 25 марта 2019

Я не знаком с zenity или shell-exec, поэтому, возможно, допустил глупую ошибку ...

Следующая командная строка работает в окне терминала Ubuntu;

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

Он выводит диалоговое окно с графическим интерфейсом для запроса пароля, а затем 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 от php и попытался сначала ввести эту команду из терминала:

xhost local:www-data

, но это не помогло.

Запуск, например, "ls" из shell_exec работает нормально.

Буду рад любым предложениям.

Ответы [ 3 ]

0 голосов
/ 26 марта 2019

@ danielsedoff Я создал файл "com.ubuntu.pkexec.nmap.policy" в папке / usr / share / polkit-1 со следующим содержимым:

<?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 голосов
/ 07 июня 2019

Вы можете попробовать это. Это поможет вам найти ошибки функции 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);

Попробуйте приведенный выше код.я добавил 2> & 1 в конце $ cmd.

0 голосов
/ 25 марта 2019

Я бы использовал это:

pkexec nmap -A 192.168.0.1-255

pkexec заменяет gksudo в более новых дистрибутивах.

...