Pourquoi dhclient dit-il: «SIOCSIFADDR: autorisation refusée»?

9

J'ai rencontré une erreur très étrange sur ubuntu-server (8.04), je n'ai aucune idée pourquoi dhclient n'est pas autorisé à définir les paramètres réseau! Je ne suis pas celui qui a installé le serveur en premier lieu, donc je ne connais pas grand-chose à la configuration. Le serveur n'est utilisé que comme pare-feu / passerelle (script iptables personnalisé), il a trois nic pour Internet, un pour LAN et un pour DMZ. Maintenant, le FAI a changé les paramètres de l'IP statique en IP "statique" assigné via DHCP, et je ne peux pas vraiment l'utiliser.

Malheureusement, je ne peux pas simplement définir l'IP de manière statique, car le FAI ferme ma connexion à la fin du bail DHCP: o

C'est l'erreur que j'obtiens: (et puis ça se bloque juste là ..)

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

pour l'instant, je l'ai corrigé en exécutant killall dhclient; dhclient eth2toutes les heures, puis en définissant des paramètres IP statiques pour l'interface, cela suffit pour maintenir la connexion en direct! mais c'est un hack assez moche à mon avis ..

LassePoulsen
la source
1
strace -o /tmp/dhc$$ dhclient -d eth2devrait fournir des informations précieuses sur les appels qui échouent. Oui, je les connais tous, mais voir les arguments peut aider. Je soupçonne une certaine bizarrerie avec le pilote eth2, peut-être que le module n'est pas synchronisé avec le noyau.
msw
strace: paste.ubuntu.com/506269
LassePoulsen
btw: le nic est un "VT6102 [Rhine-II]" utilisant le module du noyau via_rhine.
LassePoulsen
Votre combat a été interrompu juste avant d'arriver à la bonne partie. Laissez-le fonctionner un peu plus longtemps avant d'appuyer sur ctrl-c, ou ajoutez peut-être l' -1option et attendez qu'elle se termine d'elle-même.
Karl Bielefeldt
1
je n'utilise pas apparmor ou selinux .. Voici une strace avec l' -foption activée: silenzio.dk/pi/dhc.strace
LassePoulsen

Réponses:

5

Sur la base de la trace de pile à http://silenzio.dk/pi/dhc.strace la première SIOCSIFADDR: Permission deniederreur se produit à la ligne 735, pendant l' exécution du processus 26092: ifconfig eth2 inet 0 up. Maintenant, seulement quelque chose rootpeut ifconfigremonter, alors traçons la chaîne de fork()/ exec()et recherchons les changements d'UID. Il se trouve que:

  1. le processus 26092 est un enfant de 26090 (ligne 689)
  2. le processus 26090 s'exécute avec UID 101 et GID 102 (lignes 355 à 358)
  3. le processus 26090 essaie de remettre son UID / GID à 0, mais échoue (ligne 310)
  4. le processus 26090 est un enfant de 26089 (ligne 286)
  5. le processus 26089 a changé son UID: GID en 101: 102 (lignes 282-283)

Par conséquent, les erreurs se produisent car le processus enfant en cours d'exécution n'a pas les privilèges root nécessaires. Pourquoi cela arrive-t-il? Le debian/changelogfichier dans les dhcp3-3.0.6.dfsgsources dit:

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

Je suppose que celui-ci call-dhclient-scripta perdu son bit set-UID et ne s'exécute donc pas avec les privilèges root comme il se doit. (Selon le debian/dhcp3-client.postinstfichier dans les sources, il devrait appartenir à root:dhcpet en mode 4754)

Riccardo Murri
la source
Une erreur si compliquée et une solution si simple! chmod u+s /lib/dhcp3-client/call-dhclient-scripta fait l'affaire!
LassePoulsen
2

Que montre votre sortie "dmesg" lorsque vous exécutez dhclient?

Si vous exécutez Hardy, AppArmor fait partie de l'installation par défaut. Il est possible que le profil dhclient soit devenu détraqué. Vérifiez "sudo aa-status" pour voir ce qui s'y passe.

De plus, comment lit votre fichier / etc / network / interfaces? Peut-être avez-vous des adresses, des itinéraires, etc. en conflit avec lesquels dhclient ne veut pas jouer?

Kees Cook
la source
Aucune armure d'application n'est installée sur la machine. Et la carte réseau est configurée avec une adresse IP statique dans le fichier / etc / network / interfaces. Cela ne devrait pas poser de problème pour dhclient d'écraser lors de son appel. Mais cela n'a pas d'importance car cela ne fait aucune différence si je le définis comme dhcp dans le fichier / etc / network / interfaces. Si je le fais, l'interface continue d'être "non configurée".
LassePoulsen
Si vous le pouvez, envoyez des liens vers des bacs de "sudo aa-status" et "cat / etc / network / interfaces"
Kees Cook
1

J'essaierais d'installer nscd si ce paquet est manquant, et si cela ne fonctionne pas, installez également libnss-db.

Je ne sais pas si cela résoudra votre problème, cependant, ce sont les choses que votre trace essaie de trouver et cela échoue.

txwikinger
la source
l'installation de nscd et libnss-db n'aide pas.
LassePoulsen
1

Il s'agit en fait d'un bogue dans Ubuntu 8.04. Pour plusieurs cas d'utilisation, vous DEVEZ avoir installé nscd (par exemple lorsque vous utilisez openvpn) ou dhclient ne fonctionnera pas. Cela ne se produit pas dans les nouvelles versions d'Ubuntu.

mniess
la source
Cela ne fait aucune différence! l'installation de nscd ne fait aucune différence car dhclient ne définit pas l'adresse IP, le masque de réseau, etc.
LassePoulsen