Почему dhclient говорит: "SIOCSIFADDR: В доступе отказано"?

Я столкнулся с очень странной ошибкой на ubuntu-server (8.04), я понятия не имею, почему dhclient не разрешено устанавливать настройки сети! Я не тот, кто устанавливал сервер в первую очередь, поэтому я не очень разбираюсь в настройке. Сервер используется только в качестве брандмауэра / шлюза (пользовательский сценарий iptables), у него есть три никеля, один для Интернета, один для локальной сети и один для DMZ. Теперь провайдер изменил настройки со статического ip на "статический", назначенный через dhcp, и я не могу его использовать.

К сожалению, я не могу просто установить IP-адрес статически, так как провайдер закрывает мое соединение, когда заканчивается аренда 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 для интерфейса, этого достаточно, чтобы поддерживать соединение! но это довольно уродливый хак на мой взгляд..

5 ответов

Решение

На основе трассировки стека на http://silenzio.dk/pi/dhc.strace первыйSIOCSIFADDR: Permission denied ошибка возникает в строке 735 при выполнении процесса 26092: 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)

Таким образом, ошибки возникают из-за того, что исполняемый дочерний процесс не имеет необходимых корневых привилегий. Почему это происходит?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:dhcp и режим 4754)

Что показывает ваш вывод "dmesg" при запуске dhclient?

Если вы используете 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.

Другие вопросы по тегам