Dlaczego dhclient mówi: „SIOCSIFADDR: Odmowa zezwolenia”?

9

Napotkałem bardzo dziwny błąd na serwerze Ubuntu (8.04), nie mam pojęcia, dlaczego dhclient nie może ustawiać ustawień sieciowych! Nie jestem tym, który zainstalował serwer, więc nie wiem dużo o konfiguracji. Serwer służy tylko jako firewall / gateway (niestandardowy skrypt iptables), ma trzy nici do Internetu, jeden do LAN i jeden do DMZ. Teraz ISP zmienił ustawienia ze statycznego adresu IP na „statyczny” adres IP przypisany przez dhcp i naprawdę nie mogę go użyć.

Niestety nie mogę ustawić statycznie adresu IP, ponieważ dostawca Internetu zamyka moje połączenie po zakończeniu dzierżawy protokołu dhcp: o

To jest błąd, który otrzymuję: (a następnie po prostu się tam zawiesza ..)

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

na razie naprawiłem to, uruchamiając killall dhclient; dhclient eth2co godzinę, a następnie ustawiając statyczne ustawienia IP interfejsu, to wystarczy, aby połączenie pozostało aktywne! ale moim zdaniem jest to dość brzydki hack ...

LassePoulsen
źródło
1
strace -o /tmp/dhc$$ dhclient -d eth2powinien dostarczyć cennych informacji o niepowodzeniach połączeń. Tak, znam je wszystkie, ale zobaczenie argumentów może pomóc. Podejrzewam pewne dziwactwa ze sterownikiem eth2, być może moduł nie jest zsynchronizowany z jądrem.
msw
strace: paste.ubuntu.com/506269
LassePoulsen
btw: nic to „VT6102 [Rhine-II]” przy użyciu modułu jądra via_rhine.
LassePoulsen
Twoja strata została przerwana tuż przed przejściem do dobrej części. Pozwól mu działać dłużej, zanim naciśniesz Ctrl-C, a może dodaj -1opcję i poczekaj, aż zakończy działanie.
Karl Bielefeldt,
1
nie używam apparmor ani selinux .. Oto strace z -fwłączoną opcją: silenzio.dk/pi/dhc.strace
LassePoulsen

Odpowiedzi:

5

Na podstawie śladu stosu w http://silenzio.dk/pi/dhc.strace pierwszy SIOCSIFADDR: Permission deniedbłąd występuje na linii 735, podczas realizacji procesu 26092: ifconfig eth2 inet 0 up. Teraz rootmożna tylko ifconfigcoś poprawić, więc prześledźmy łańcuch fork()/ exec()i poszukaj zmian UID. Okazało się, że:

  1. proces 26092 jest dzieckiem 26090 (linia 689)
  2. proces 26090 działa z UID 101 i GID 102 (linie 355--358)
  3. proces 26090 próbuje ustawić swój identyfikator UID / GID z powrotem na 0, ale kończy się niepowodzeniem (wiersz 310)
  4. proces 26090 jest dzieckiem 26089 (linia 286)
  5. proces 26089 zmienił swój UID: GID na 101: 102 (linie 282--283)

Błędy występują, ponieważ wykonujący proces potomny nie ma niezbędnych uprawnień roota. Dlaczego to się dzieje? debian/changelogPlik w dhcp3-3.0.6.dfsgźródłach mówi:

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/.

Domyślam się, że call-dhclient-scriptstracił swój bit UID i dlatego nie działa z uprawnieniami roota, jak powinien. (Zgodnie z debian/dhcp3-client.postinstplikiem w źródłach, powinien on być własnością root:dhcpi mode 4754)

Riccardo Murri
źródło
Taki skomplikowany błąd i takie proste rozwiązanie! chmod u+s /lib/dhcp3-client/call-dhclient-scriptwykonał lewę!
LassePoulsen
2

Co pokazuje twój wynik „dmesg” po uruchomieniu dhclient?

Jeśli korzystasz z Hardy, AppArmor jest częścią domyślnej instalacji. Możliwe, że profil dhclient zwariował. Zaznacz „sudo aa-status”, aby zobaczyć, co się tam dzieje.

Ponadto w jaki sposób czyta się plik / etc / network / interfaces? Być może masz sprzeczne adresy, trasy itp., Z którymi dhclient nie chce się bawić?

Kees Cook
źródło
Na komputerze nie ma zainstalowanego pancerza aplikacji. A karta sieciowa jest skonfigurowana ze statycznym adresem IP w pliku / etc / network / interfaces. Nie powinno to stanowić problemu dla dhclienta do nadpisania po wywołaniu. Ale to nie ma znaczenia, ponieważ nie ma znaczenia, jeśli ustawię go jako dhcp w pliku / etc / network / interfaces. Jeśli to zrobię, interfejs jest po prostu „nieskonfigurowany”.
LassePoulsen
Jeśli możesz, wyślij linki do pastebin „sudo aa-status” i „cat / etc / network / interfaces”
Kees Cook,
1

Spróbowałbym zainstalować nscd, jeśli brakuje tego pakietu, a jeśli to nie działa, zainstaluj także libnss-db.

Nie jestem pewien, czy to rozwiąże twój problem, ale są to rzeczy, które próbuje znaleźć twój ślad i nie udaje się.

txwikinger
źródło
instalacja nscd i libnss-db nie pomaga.
LassePoulsen
1

To jest właściwie błąd w Ubuntu 8.04. W kilku przypadkach POTRZEBUJESZ mieć zainstalowanego nscd (np. Podczas korzystania z openvpn), inaczej dhclient nie będzie działał. Nie dzieje się tak w nowszych wersjach Ubuntu.

Mniess
źródło
To nie robi różnicy! instalacja nscd nie ma znaczenia, że ​​dhclient nie ustawia adresu IP,
maski