dongzhuo0895
2011-11-25 16:35
浏览 295
已采纳

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

i need to be able to change the IP address of a server using PHP. i'm trying to use ifconfig eth0 down as the www-data user to make sure it will work. so far, i've gotten rid of a permissions issue on /var/run/network/ifstate file, but now i get a permission denied line that reads SIOCSIFFLAGS: Permission denied. is there a way around this? if not, how do you change the IP address of a server in a web page?

php code:

//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);
}

returns:

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

is there a way around this permissions issue or another tool i can use to do this?

图片转代码服务由CSDN问答提供 功能建议

我需要能够使用PHP更改服务器的IP地址。 我正在尝试使用 ifconfig eth0 down 作为 www-data 用户,以确保它能够正常工作。 到目前为止,我已经摆脱了/ var / run / network / ifstate文件的权限问题,但现在我得到了一个权限被拒绝的行,读取 SIOCSIFFLAGS:Permission denied 。 有没有解决的办法? 如果没有,你如何更改网页中服务器的IP地址?

php代码:

  //如果 ip已更改,关闭网络接口并使用新的IP 
if($ ipConf!= $ ip){
 $ ifdownSuccess = exec(“ifconfig eth0 down”,$ downOutput,$ downRetvar); 
  $ ifupSuccess = exec(“ifconfig eth0 up”。$ ip,$ upOutput,$ upRetvar); 
 // TODO:检查ifupSucess并在命令失败时恢复到旧ip 
 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条回答 默认 最新

  • dtrn74832 2011-11-25 17:24
    已采纳

    i figured this out. the answer was to add the www-data user (or whatever the name of your server user is) to the admin group with usermod -a -G admin www-data. if you take a look at /etc/sudoers, you'll notice that anyone in this group can perform sudo commands without a password prompt using sudo -n <command>. made a quick code change:

    //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);
    }
    

    and i'm now in business. was able to connect on the new IP address via SSH and view webpages via the new IP as well.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • doulangtiao4508 2012-06-21 18:58

    I had a similar problem and am considering the following solution:

    1) The php page reads in the IP, Netmask, and gateway, checking for proper formatting and whether the IP is viable and writes that to a text file

    2) A cronjob written in whatever, looks for that file, and if it is there, it reads in the contents, parses it, and makes the changes

    This should be sufficiently secure.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题