dhclient为什么说:“ SIOCSIFADDR:权限被拒绝”?


9

我在ubuntu-server(8.04)上遇到了一个很奇怪的错误,我不知道为什么不允许dhclient设置网络设置!我不是首先安装服务器的人,所以我对设置了解不多。该服务器仅用作防火墙/网关(自定义iptables脚本),它具有三个NIC,一个用于Internet,一个用于LAN,一个用于DMZ。现在,ISP已将设置从静态ip更改为通过dhcp分配的“静态” ip,我无法真正使用它。

遗憾的是,由于dhcp租约结束时ISP会关闭我的连接,因此我不能仅静态地设置IP:

这是我得到的错误:(然后它就挂在那里了。)

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设置来解决此问题,这足以使连接保持活动状态!但我认为这是一个非常丑陋的hack ..


1
strace -o /tmp/dhc$$ dhclient -d eth2应该提供有关失败呼叫的有价值的信息。是的,我认识所有这些人,但是看到这些论点可能会有所帮助。我怀疑eth2驱动程序有些奇怪,也许模块与内核不同步。
msw


btw:nic是使用via_rhine内核模块的“ VT6102 [Rhine-II]”。
LassePoulsen

在达到最佳效果之前,您的跟踪已被中断。让它在按下ctrl-c之前运行一会儿,或者添加-1选项并等待其自行退出。
Karl Bielefeldt 2010年

1
我不使用apparmor或selinux。这是一个-f启用了选项的strace :silenzio.dk/pi/dhc.strace
LassePoulsen 2010年

Answers:


5

基于http://silenzio.dk/pi/dhc.strace上的堆栈跟踪SIOCSIFADDR: Permission denied,在执行过程26092的过程中,第一个 错误发生在第735行ifconfig eth2 inet 0 up。现在只能 root进行ifconfig一些操作,因此让我们跟踪fork()/ 的链 exec()并查找UID更改。事实证明:

  1. 处理26092是26090的子项(689行)
  2. 进程26090使用UID 101和GID 102运行(第355--358行)
  3. 进程26090尝试将其UID / GID设置回0,但失败(第310行)
  4. 进程26090是26089的子进程(286行)
  5. 进程26089将其UID:GID切换为101:102(第282--283行)

因此,发生错误是因为正在执行的子进程没有必要的root特权。为什么会这样?来源中的 debian/changelog文件显示dhcp3-3.0.6.dfsg

dhcp3 (3.0.1-2ubuntu4) breezy; urgency=low

  Derooted the DHCP client:
  * Added debian/patches/deroot-client.patch:
    - client/dhclient.c: After initialization, dro privileges to dhcp:dhcp and
      only keep CAP_NET_RAW and CAP_NET_BIND_SERVICE.
    - Add a setuid wrapper call-dhclient-script to call
      /etc/dhcp3/dhclient-script as root.
    - Install call-dhclient-script into /lib/dhcp3-client/.

我的猜测是,call-dhclient-script它失去了它的set-UID位,因此没有以应有的root特权执行。(根据debian/dhcp3-client.postinst源文件中的文件,该文件应归root:dhcpand模式所有4754


如此复杂的错误和如此简单的解决方案!chmod u+s /lib/dhcp3-client/call-dhclient-script做到了!
LassePoulsen

2

运行dhclient时,“ dmesg”输出显示什么?

如果您运行的是Hardy,则AppArmor是默认安装的一部分。dhclient配置文件可能已陷入困境。检查“ sudo aa-status”以查看发生了什么。

另外,您的/ etc / network / interfaces文件如何读取?也许您有dhclient不想玩的有冲突的地址,路由等?


机器上未安装任何应用程序防护。并在/ etc / network / interfaces文件中使用静态IP设置了NIC。对于dhclient来说,在被覆盖时应该没有问题。但这没关系,因为如果我在/ etc / network / interfaces文件中将其设置为dhcp,则没有区别。如果我这样做接口只是保持“未配置”。
LassePoulsen

如果可以,将链接发送到“ sudo aa-status”和“ cat / etc / network / interfaces”的
粘贴框

1

如果缺少该软件包,我将尝试安装nscd,如果此软件包不起作用,请同时安装libnss-db。

不知道这是否可以解决您的问题,但是,这些是您的跟踪试图查找但失败的东西。


安装nscd和libnss-db没有帮助。
LassePoulsen 2010年


1

这实际上是Ubuntu 8.04中的错误。在某些用例中,您需要安装nscd(例如,使用openvpn时)或dhclient无法使用。在较新的Ubuntu版本中不会发生这种情况。


这没有什么不同!安装NSCD使得该dhclient的无差异不设置IP地址,子网掩码等
LassePoulsen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.