Warum sagt dhclient: "SIOCSIFADDR: Erlaubnis verweigert"?

9

Ich habe einen sehr seltsamen Fehler auf Ubuntu-Server (8.04) festgestellt. Ich habe keine Ahnung, warum dhclient die Netzwerkeinstellungen nicht festlegen darf! Ich bin nicht derjenige, der den Server überhaupt installiert hat, daher weiß ich nicht viel über das Setup. Der Server wird nur als Firewall / Gateway verwendet (benutzerdefiniertes Iptables-Skript). Er verfügt über drei NICs, eine für das Internet, eine für das LAN und eine für die DMZ. Jetzt hat der ISP die Einstellungen von statischer IP auf "statische" IP geändert, die über DHCP zugewiesen wurden, und ich kann sie nicht wirklich verwenden.

Leider kann ich die IP nicht einfach statisch einstellen, da der ISP meine Verbindung schließt, wenn die DHCP-Lease endet: o

Dies ist der Fehler, den ich bekomme: (und dann hängt es einfach da ..)

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

Im Moment habe ich es behoben, indem ich killall dhclient; dhclient eth2jede Stunde ausgeführt und dann statische IP-Einstellungen für die Schnittstelle festgelegt habe. Dies reicht aus, um die Verbindung aufrechtzuerhalten! aber es ist meiner Meinung nach ein ziemlich hässlicher Hack ..

LassePoulsen
quelle
1
strace -o /tmp/dhc$$ dhclient -d eth2sollte wertvolle Informationen darüber liefern, welche Anrufe fehlschlagen. Ja, ich kenne sie alle, aber die Argumente zu sehen kann helfen. Ich würde eine Kuriosität mit dem eth2-Treiber vermuten, vielleicht ist das Modul nicht mit dem Kernel synchron.
Msw
strace: paste.ubuntu.com/506269
LassePoulsen
Übrigens: Der Nic ist ein "VT6102 [Rhein-II]", der das Kernelmodul via_rhine verwendet.
LassePoulsen
Ihre Strace wurde unterbrochen, bevor Sie zum guten Teil kamen. Lassen Sie es eine Weile länger laufen, bevor Sie Strg-C drücken, oder fügen Sie die -1Option hinzu und warten Sie, bis es von selbst beendet wird.
Karl Bielefeldt
1
Ich benutze weder Apparmor noch Selinux. Hier ist eine Strace mit aktivierter -fOption: silenzio.dk/pi/dhc.strace
LassePoulsen

Antworten:

5

Basierend auf dem Stack-Trace unter http://silenzio.dk/pi/dhc.strace tritt der erste SIOCSIFADDR: Permission deniedFehler in Zeile 735 während der Ausführung des Prozesses 26092 auf : ifconfig eth2 inet 0 up. Jetzt rootkann nur noch ifconfigetwas geschehen, also verfolgen wir die Kette von fork()/ exec()und suchen nach UID-Änderungen. Es stellt sich heraus, dass:

  1. Prozess 26092 ist ein Kind von 26090 (Zeile 689)
  2. Prozess 26090 wird mit UID 101 und GID 102 ausgeführt (Zeilen 355-358)
  3. Der Prozess 26090 versucht, seine UID / GID auf 0 zurückzusetzen, schlägt jedoch fehl (Zeile 310).
  4. Prozess 26090 ist ein Kind von 26089 (Zeile 286)
  5. Prozess 26089 stellte seine UID: GID auf 101: 102 um (Zeilen 282-283)

Die Fehler treten also auf, weil der ausgeführte untergeordnete Prozess nicht über die erforderlichen Root-Berechtigungen verfügt. Warum passiert das? Die debian/changelogDatei in den dhcp3-3.0.6.dfsgQuellen sagt:

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

Ich vermute, dass call-dhclient-scriptdas Set-UID-Bit verloren gegangen ist und daher nicht wie vorgesehen mit Root-Rechten ausgeführt wird. (Laut der debian/dhcp3-client.postinstDatei in den Quellen sollte es Eigentum von root:dhcpund Modus sein 4754)

Riccardo Murri
quelle
So ein komplizierter Fehler und so eine einfache Lösung! chmod u+s /lib/dhcp3-client/call-dhclient-scripthat den Trick gemacht!
LassePoulsen
2

Was zeigt Ihre "dmesg" -Ausgabe, wenn Sie dhclient ausführen?

Wenn Sie Hardy ausführen, ist AppArmor Teil der Standardinstallation. Es ist möglich, dass das Dhclient-Profil durcheinander geraten ist. Überprüfen Sie "sudo aa-status", um zu sehen, was dort passiert.

Wie liest sich außerdem Ihre Datei / etc / network / interfaces? Vielleicht haben Sie widersprüchliche Adressen, Routen usw., mit denen dhclient nicht spielen möchte?

Kees Cook
quelle
Auf dem Computer ist keine App-Rüstung installiert. Die Netzwerkkarte wird mit einer statischen IP-Adresse in der Datei / etc / network / interfaces eingerichtet. Dies sollte für dhclient kein Problem sein, wenn es beim Aufruf überschrieben wird. Aber es spielt keine Rolle, weil es keinen Unterschied macht, ob ich es in der Datei / etc / network / interfaces als dhcp festlege. Wenn ich das tue, bleibt die Schnittstelle einfach "unkonfiguriert".
LassePoulsen
Wenn Sie können, senden Sie Links zu Pastebins mit "sudo aa-status" und "cat / etc / network / interfaces"
Kees Cook
1

Ich würde versuchen, nscd zu installieren, wenn dieses Paket fehlt, und wenn es damit nicht funktioniert, installieren Sie auch libnss-db.

Sie sind sich nicht sicher, ob dies Ihr Problem lösen wird. Dies sind jedoch die Dinge, die Ihr Trace zu finden versucht und die fehlschlagen.

txwikinger
quelle
Die Installation von nscd und libnss-db hilft nicht.
LassePoulsen
1

Dies ist eigentlich ein Fehler in Ubuntu 8.04. In einigen Anwendungsfällen muss nscd installiert sein (z. B. bei Verwendung von openvpn), oder dhclient funktioniert nicht. Dies ist in neueren Ubuntu-Versionen nicht der Fall.

mniess
quelle
Das macht keinen Unterschied! Die Installation von nscd macht keinen Unterschied, dass dhclient die IP-Adresse, die Netzmaske usw. nicht
festlegt