я должен иметь возможность изменять 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) ""
есть ли способ решить эту проблему или другой инструмент, который я могу использовать для этого?
У меня была аналогичная проблема, и я рассматриваю следующее решение:
1) PHP-страница читается в IP, Netmask и шлюзе, проверяет правильность форматирования и является ли IP жизнеспособным и записывает его в текстовый файл
2) Cronjob, написанный в любом случае, ищет этот файл, и если он есть, он читает содержимое, анализирует его и вносит изменения
Это должно быть достаточно безопасным.
Я понял это. ответ заключался в том, чтобы добавить пользователя 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-адрес.