изменить IP-адрес сервера с помощью PHP - PullRequest
1 голос
/ 25 ноября 2011

Мне нужно иметь возможность изменить IP-адрес сервера с помощью PHP. я пытаюсь использовать ifconfig eth0 down в качестве пользователя www-data, чтобы убедиться, что он будет работать. до сих пор я избавился от проблемы с разрешениями в файле / var / run / network / ifstate, но теперь я получаю строку с отказом в разрешении, которая читает SIOCSIFFLAGS: Permission denied. Это можно обойти? если нет, то как изменить IP-адрес сервера на веб-странице?

php код:

//if the ip has changed, bring down the network interface and bring it up with the new IP
if($ipConf != $ip) {
    $ifdownSuccess = exec("ifconfig eth0 down", $downOutput, $downRetvar);
    $ifupSuccess = exec("ifconfig eth0 up ".$ip, $upOutput, $upRetvar);
    //TODO: check for ifupSucess and revert to old ip if the command failed
    var_dump($downOutput);
    var_dump($downRetvar);
    var_dump($ifdownSuccess);
    var_dump($upOutput);
    var_dump($upRetvar);
    var_dump($ifupSuccess);
}

возвращается:

array(0) { } int(127) string(0) "" array(0) { } int(127) string(0) ""

Есть ли способ обойти эту проблему с разрешениями или другой инструмент, который я могу использовать для этого?

Ответы [ 2 ]

3 голосов
/ 21 июня 2012

У меня была похожая проблема, и я рассматриваю следующее решение:

1) Страница php считывает IP-адрес, маску сети и шлюз, проверяет правильность форматирования, является ли IP-адрес жизнеспособным и записывает его втекстовый файл

2) Cronjob, записанный в любом месте, ищет этот файл, и, если он там есть, он читает содержимое, анализирует его и вносит изменения

Это должно бытьдостаточно безопасный.

1 голос
/ 25 ноября 2011

Я понял это. Ответ состоял в том, чтобы добавить пользователя www-data (или любого другого имени пользователя вашего сервера) в группу администраторов с помощью usermod -a -G admin www-data. если вы посмотрите на /etc/sudoers, вы заметите, что любой в этой группе может выполнять sudo команды без запроса пароля, используя sudo -n <command>. произвел быструю смену кода:

//if the ip has changed, bring down the network interface and bring it up with the new IP
if($ipConf != $ip) {
    $ifdownSuccess = exec("sudo -n ifconfig eth0 down", $downOutput, $downRetvar);
    $ifupSuccess = exec("sudo -n ifconfig eth0 up ".$ip, $upOutput, $upRetvar);
    //TODO: check for ifupSucess and revert to old ip if the command failed
    var_dump($downOutput);
    var_dump($downRetvar);
    var_dump($ifdownSuccess);
    var_dump($upOutput);
    var_dump($upRetvar);
    var_dump($ifupSuccess);
}

и я сейчас в бизнесе. смог подключиться по новому IP-адресу через SSH и просматривать веб-страницы также по новому IP-адресу.

...