Не могу выполнить ifconfig с php

Я не могу выполнить ifconfig с exec() в PHP на apache. Я могу выполнять все виды команд, включая список ip-адресов, но это отстой, поэтому мне действительно нужно иметь возможность выполнять ifconfig.

Я прочитал другие сообщения и убедился, что disable_functions = "" [пусто], но все равно не повезло (я перезапустил apache). Такое ощущение, что это какая-то проблема с правами доступа, поскольку все остальные команды работают нормально.

В первом файле я просто выполняю exec, а затем очищаю результат по своему желанию, и я совершенно уверен, что проблема не в этом, поскольку он отлично работает перед другими командами.

Первый файл

function execute($command){
  exec($command, $output);

  $output_array;                                    // each row contains a array representing all elements in a output row
  for ($i = 0; $i < sizeof($output); $i++){
    $tmp_array = explode(" ",$output[$i]);      
    $output_array[$i] = $tmp_array;
}
// clear the array from all ""
  $clean_array;                             
  for ($i = 0; $i < sizeof($output_array); $i++){
    $tmp;
    $index = 0;
    for ($j = 0; $j < sizeof($output_array[$i]); $j++){
        if (strlen($output_array[$i][$j]) > 0){
            $tmp[$index++] = $output_array[$i][$j];
        }
    }
    $clean_array[$i] = $tmp;
  }
  return $clean_array;

второй файл

include "../app_includes/application_functions.php";
$command = "ifconfig";
//$command = "ip addr list";
$arr = execute($command);
// print the result
for ($i = 0; $i < sizeof($arr); $i++){
    for ($j = 0; $j < sizeof($arr[$i]); $j++){
        echo $arr[$i][$j]." ";
    }
    echo "<br>";
}

РЕШЕНО: проблема была решена путем выполнения "/sbin/ifconfig" вместо только ifconfig


person Robert Erneborg    schedule 07.05.2014    source источник
comment
Я не уверен, что вы можете вызвать ifconfig в exec, если вы не указали его в своем php.ini.   -  person OpenStark    schedule 07.05.2014
comment
как бы мне его туда добавить, т.е. что я должен написать?   -  person Robert Erneborg    schedule 07.05.2014
comment
Вы пытались сделать в своей командной строке: su -u www-data -c /sbin/ifconfig? Каков результат?   -  person gafreax    schedule 07.05.2014
comment
@gafreax Никогда так не делай! Это может создать брешь в безопасности! Вам не нужно делать это   -  person OpenStark    schedule 07.05.2014
comment
@ThibaultM, почему это недостаток безопасности? Я не говорю делать это в php-скрипте! Во всяком случае, две вещи: во-первых, это точно так же, как php, который выполняет команду, во-вторых, если вы можете сделать su или sudo через вызов exec на php, это большой недостаток безопасности! Но отличается от того, что я говорю.   -  person gafreax    schedule 07.05.2014
comment
@gafreax приношу свои извинения, я думал, вы меняете права /sbin/ifconfig... Я слишком быстро прочитал...   -  person OpenStark    schedule 07.05.2014
comment
@ThibaultM нет проблем, меня всегда интересовала проблема безопасности, и мне интересно, чего я не знаю!   -  person gafreax    schedule 07.05.2014
comment
@gafreax согласен! Это лучший способ научиться   -  person OpenStark    schedule 07.05.2014


Ответы (1)


Обычный пользователь не может использовать ifconfig на некоторых Gnu/Linux, но может использовать /sbin/ifconfig. Так что попробуй это

<?php
$command="/sbin/ifconfig";
exec($command, $output);
?>

Чтобы быть уверенным в пути, запишите его в свой терминал.

whereis ifconfig
person OpenStark    schedule 07.05.2014