2016-11-02 5 views
2

Добрый день, я пытаюсь реализовать веб-интерфейс, который будет управлять моей беспроводной сетью.Выполнение скрипта bash через php

Одна из операций - настроить мою карту в режиме монитора. довольно просто, если вы запустите эту команду:

bash prepareCard.sh wlan0 

и сценарий prepareCard.sh выглядит следующим образом:

#! /bin/bash 
IFACE=$1 
ifconfig $IFACE down 
iwconfig $IFACE mode monitor 
ifconfig $IFACE up 

Теперь я хочу, чтобы выполнить этот сценарий с помощью PHP скрипт:

$cmd = shell_exec("bash prepareCard.sh wlan0"); 

когда я проверяю, была ли карта установлена ​​в режим мониторинга, ничего! он все еще находится в режиме управления! Не могли бы вы рассказать мне, где я ошибся?

+0

Я не уверен. Проверьте, что ваш 'php-файл' и' prepareCard.sh' находятся в том же пути к папке. И попробуйте выполнить оболочку с помощью '$ cmd = shell_exec (" ./ prepareCard.sh wlan0 ");' – prasanth

+1

Проверьте, имеет ли пользователь, выполняющий php-скрипт, разрешения для запуска этих команд, я предполагаю, что они требуют запуска с привилегиями root. –

+0

@prasad Я тоже это проверил, оба файла находятся в одном каталоге, и я запускаю KALI linux, который по умолчанию использует пользователя root – PhoenixBlue

ответ

0

Предположим, что пользователь веб-сервер, на котором выполняется сценарий не имеет достаточных разрешений, вы можете попробовать этот способ, чтобы исправить это:

Используйте команду visudo редактировать /etc/sudoers и добавьте следующую строку:

ALL ALL=(root) NOPASSWD: /absolute/path/prepareCard.sh 

Обязательно установите для сценария разрешения 700, чтобы никто не мог его редактировать. Затем выполнить скрипт с sudo, как это:

$cmd = shell_exec("sudo /absolute/path/prepareCard.sh wlan0"); 

Это должно выполнить скрипт как корень без необходимости ввода пароля.

+0

ВАМ ЯВЛЯЕТСЯ ЖИЗНИ! БОЛЬШОЕ СПАСИБО!! – PhoenixBlue

0

Один хороший способ отладки BASH скриптов для установки режима отладки (либо путем передачи -x флага, чтобы колотить в вашем shell_exec вызова, запустив set -x или в притоне линии #!/bin/bash -x). Это показывает, что происходит во время выполнения сценария bash. В вашем случае я предлагаю первый случай, так как вы не знаете, загружается ли сценарий в первую очередь.

$cmd = shell_exec("bash -x prepareCard.sh wlan0"); 

После этого у вас должно быть больше в переменной $ cmd.