Почему 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. Оказывается, что:
- процесс 26092 - это потомок 26090 (строка 689)
- процесс 26090 выполняется с UID 101 и GID 102 (строки 355--358)
- процесс 26090 пытается установить свой UID/GID обратно на 0, но не удается (строка 310)
- процесс 26090 - это потомок 26089 (строка 286)
- процесс 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.