Чому dhclient говорить: "SIOCSIFADDR: Дозвіл відмовлено"?


9

Я натрапив на дуже дивну помилку на ubuntu-сервері (8.04), я не маю поняття, чому dhclient не може встановлювати мережеві настройки! Я не той, хто встановив сервер в першу чергу, тому я не знаю багато про налаштування. Сервер використовується лише як брандмауер / шлюз (спеціальний сценарій iptables), у нього є три нік для Інтернету, один для локальної мережі та один для DMZ. Тепер ISP змінив налаштування з статичного ip на "статичний" 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 для інтерфейсу, цього достатньо, щоб зв’язок жив! але, на мою думку, це дуже некрасивий злом ..


1
strace -o /tmp/dhc$$ dhclient -d eth2має отримати цінну інформацію про те, які дзвінки не відповідають. Так, я знаю їх усіх, але бачити аргументи може допомогти. Я б підозрював якийсь диваку з драйвером eth2, можливо, модуль не синхронізований з ядром.
msw


btw: nic є "VT6102 [Rhine-II]", використовуючи модуль ядра via_rhine.
LassePoulsen

Ваша страза була перервана безпосередньо перед тим, як дійти до доброї частини. Перед тим, як натиснути клавішу ctrl-c, запустіть її деякий час або, можливо, додайте -1параметр і почекайте, поки він вийде самостійно.
Карл Білефельдт

1
я не використовую apparmor або selinux. Ось ця напруга з -fувімкненою опцією: silenzio.dk/pi/dhc.strace
LassePoulsen

Відповіді:


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він втратив свій біт встановленого UID, і тому не виконує кореневі привілеї як слід. (Згідно з debian/dhcp3-client.postinstфайлом у джерелах, він повинен бути власником root:dhcpта режимом 4754)


Така складна помилка і таке просте рішення! chmod u+s /lib/dhcp3-client/call-dhclient-scriptзробив трюк!
LassePoulsen

2

Що показує ваш вихід "dmesg", коли ви запускаєте dhclient?

Якщо у вас працює Hardy, AppArmor є частиною встановлення за замовчуванням. Цілком можливо, що профіль dhclient перейшов у сірий спосіб. Перевірте "sudo aa-status", щоб побачити, що там відбувається.

Крім того, як читається файл / etc / network / interface? Можливо, у вас є конфліктні адреси, маршрути тощо, з якими dhclient не хоче грати?


На машині не встановлено додатка-броні. І NIC встановлюється зі статичним IP-адресою у файлі / etc / network / interface. Це не повинно бути проблемою для перезапису dhclient, коли він викликається. Але це не має значення, оскільки це не має значення, якщо я встановлю його як dhcp у файлі / etc / network / interfaces. Якщо я роблю, інтерфейс просто не налаштовується.
LassePoulsen

Якщо ви можете, надішліть посилання на пасти з "sudo aa-status" та "cat / etc / network / interface"
Kees Cook

1

Я б спробував встановити nscd, якщо цього пакету немає, і якщо він не працює з цим, встановіть також libnss-db.

Не впевнений, чи це вирішить вашу проблему, однак, це ті речі, які ваш слід намагається знайти, і це не вдається.


встановлення nscd та libnss-db не допомагає.
LassePoulsen


1

Це насправді помилка в Ubuntu 8.04. Для декількох випадків використання Вам НЕОБХІДНО встановити nscd (наприклад, при використанні openvpn) або dhclient не працюватиме. У нових версіях Ubuntu цього не відбувається.


Це не має значення! встановлення nscd не має значення для того, що dhclient не встановлює ip-адресу, мережну маску тощо
LassePoulsen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.