我在 ubuntu-server (8.04) 上遇到了一个非常奇怪的错误,我不知道为什么 dhclient 不允许设置网络设置!我不是首先安装服务器的人,所以我对设置了解不多。该服务器仅用作防火墙/网关(自定义 iptables 脚本),它有三个网卡,一个用于 Internet,一个用于 LAN,一个用于 DMZ。现在 ISP 已将设置从静态 ip 更改为通过 dhcp 分配的“静态”ip,我无法真正使用它。
遗憾的是,我不能只静态设置 IP,因为 ISP 会在 dhcp 租约结束时关闭我的连接:o
这是我得到的错误:(然后它就挂在那里..)
root@fw:~# dhclient eth2
Internet Systems Consortium DHCP Client V3.0.6
Copyright 2004-2007 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied
SIOCSIFFLAGS: Permission denied
Listening on LPF/eth2/00:50:52:c1:a1:32
Sending on LPF/eth2/00:50:52:c1:a1:32
Sending on Socket/fallback
DHCPDISCOVER on eth2 to 255.255.255.255 port 67 interval 8
DHCPOFFER of 2.10.56.19 from 93.87.36.42
DHCPREQUEST of 2.10.56.19 on eth2 to 255.255.255.255 port 67
DHCPACK of 2.10.56.19 from 93.87.36.42
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied
SIOCSIFNETMASK: Permission denied
SIOCSIFBRDADDR: Permission denied
SIOCSIFFLAGS: Permission denied
SIOCADDRT: Operation not permitted
现在我已经通过killall dhclient; dhclient eth2
每小时运行一次然后为接口设置静态 IP 设置来修复它,这足以保持连接正常!但在我看来,这是一个非常丑陋的黑客攻击..
根据http://silenzio.dk/pi/dhc.strace的堆栈跟踪,第一个
SIOCSIFADDR: Permission denied
错误发生在第 735 行,在执行过程 26092: 期间ifconfig eth2 inet 0 up
。现在只能root
做ifconfig
一些事情了,所以让我们跟踪fork()
/的链exec()
并寻找 UID 的变化。事实证明:因此,发生错误是因为正在执行的子进程没有必要的 root 权限。为什么会这样?来源中的
debian/changelog
文件dhcp3-3.0.6.dfsg
说:我的猜测是它
call-dhclient-script
已经丢失了它的 set-UID 位,因此没有按照它应该的 root 权限执行。(根据debian/dhcp3-client.postinst
来源中的文件,它应该归root:dhcp
和模式所有4754
)当您运行 dhclient 时,您的“dmesg”输出会显示什么?
如果您正在运行 Hardy,则 AppArmor 是默认安装的一部分。dhclient 配置文件可能已经失控了。检查“sudo aa-status”以查看那里发生了什么。
此外,您的 /etc/network/interfaces 文件如何读取?也许您有 dhclient 不想使用的冲突地址、路由等?
如果该软件包丢失,我会尝试安装 nscd,如果它不适用于此,请安装 libnss-db。
不确定这是否会解决您的问题,但是,这些是您的跟踪试图找到的东西并且它失败了。
请运行
sudo dpkg --configure -a
以确保它不会重复https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/19740/comments/67中的情况这实际上是 Ubuntu 8.04 中的一个错误。对于一些需要安装 nscd 的用例(例如,使用 openvpn 时),否则 dhclient 将无法工作。这在较新的 Ubuntu 版本中不会发生。