如何通过PHP/HTML提交表单修改Linux系统网卡接口的静态IP地址
网卡IP修改功能实现方案
1. 核心权限配置(必须先完成)
修改网卡属于Linux系统级操作,默认web服务运行用户(通常为www-data、apache、nginx)无对应权限,需要单独配置免密sudo权限,且要严格限制可执行命令范围,避免权限溢出:
- 执行
visudo编辑sudoers配置文件,添加如下内容(示例网卡为eth0/eth1,web运行用户为www-data,可根据实际情况替换):
www-data ALL=(ALL) NOPASSWD: /usr/bin/nmcli con mod eth0 ipv4.addresses *, /usr/bin/nmcli con up eth0, /usr/bin/nmcli con mod eth1 ipv4.addresses *, /usr/bin/nmcli con up eth1
- 配置完成后先手动执行一次网卡修改命令,确认命令可正常生效后再进行后续开发。
注意:不同发行版的网络管理工具不同,CentOS7+默认用NetworkManager的nmcli命令,Ubuntu20.04+默认用netplan,老版本Linux用ifcfg配置文件,可根据自己的系统替换对应可执行命令路径
2. 前端HTML页面代码
直接编写两个表单分别对应两个网卡,加基础IP格式校验:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>网卡IP配置工具</title> </head> <body> <h3>修改eth0网卡IP</h3> <form method="post" action="modify_ip.php"> <input type="hidden" name="interface" value="eth0"> <input type="text" name="ip" placeholder="格式示例:10.1.1.10/24" required pattern="((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\/(3[0-2]|[12]?\d)"> <button type="submit">提交修改</button> </form> <h3>修改eth1网卡IP</h3> <form method="post" action="modify_ip.php"> <input type="hidden" name="interface" value="eth1"> <input type="text" name="ip" placeholder="格式示例:192.168.1.20/24" required pattern="((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\/(3[0-2]|[12]?\d)"> <button type="submit">提交修改</button> </form> </body> </html>
输入IP必须带子网掩码后缀,否则网卡配置会失效
3. 后端PHP处理逻辑
编写modify_ip.php处理表单提交请求,严格做参数校验避免命令注入:
<?php // 允许修改的网卡白名单,禁止放开其他网卡权限 $allow_interfaces = ['eth0', 'eth1']; $interface = trim($_POST['interface'] ?? ''); $ip = trim($_POST['ip'] ?? ''); // 第一层校验:网卡合法性 if (!in_array($interface, $allow_interfaces)) { die("错误:不允许修改该网卡"); } // 第二层校验:IP格式合法性(后端二次校验,避免绕过前端校验) if (!preg_match('/((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\/(3[0-2]|[12]?\d)/', $ip)) { die("错误:IP格式不正确,请输入带掩码的合法IP,例如10.1.1.10/24"); } // 执行修改命令(以下为nmcli示例,netplan/ifcfg方案可自行替换对应命令) $exec_command = "sudo nmcli con mod {$interface} ipv4.addresses {$ip} ipv4.method manual && sudo nmcli con up {$interface}"; exec($exec_command, $output, $return_code); if ($return_code === 0) { echo "修改成功:{$interface} 网卡新IP为 {$ip}"; } else { echo "修改失败,错误详情:" . implode("<br>", $output); } ?>
4. 注意事项
- 该功能仅可在内网可信环境使用,绝对禁止暴露到公网,建议额外加HTTP基础认证或登录校验限制访问
- 如果你修改的是当前访问网页用的网卡IP,提交后会直接断开连接,需要用新IP重新访问页面
- 不要放开web用户的全量sudo权限,仅配置需要用到的网卡修改命令即可
内容的提问来源于stack exchange,提问作者serolx2
相关产品推荐
相关产品推荐

