使用PHP更改服务器的IP地址

时间:2011-11-25 16:35:52

标签: php linux ubuntu ifconfig

我需要能够使用PHP更改服务器的IP地址。我正在尝试将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 个答案:

答案 0 :(得分:3)

我遇到了类似的问题,正在考虑以下解决方案:

1)php页面读取IP,网络掩码和网关,检查格式是否正确以及IP是否可行并将其写入文本文件

2)用任何东西写的cronjob,查找该文件,如果它在那里,它会读取内容,解析它并进行更改

这应该足够安全。

答案 1 :(得分:1)

我发现了这一点。答案是将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);
}

我现在正在做生意。能够通过SSH连接新IP地址,并通过新IP查看网页。