¿Por qué dhclient dice: "SIOCSIFADDR: Permiso denegado"?

9

¡He encontrado un error muy extraño en ubuntu-server (8.04), no tengo idea de por qué dhclient no puede establecer la configuración de red! No soy quien instaló el servidor en primer lugar, así que no sé mucho sobre la configuración. El servidor solo se usa como firewall / gateway (script de iptables personalizado), tiene tres nic, uno para internet, uno para LAN y otro para DMZ. Ahora el ISP ha cambiado la configuración de ip estática a ip "estática" asignada a través de dhcp, y realmente no puedo usarla.

Lamentablemente, no puedo configurar la IP de forma estática ya que el ISP cierra mi conexión cuando finaliza el contrato de arrendamiento de dhcp: o

Este es el error que obtengo: (y luego simplemente se cuelga allí ...)

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

por ahora lo he solucionado ejecutando killall dhclient; dhclient eth2cada hora y luego configurando la configuración de IP estática para la interfaz, ¡esto es suficiente para mantener la conexión activa! pero es un truco bastante feo en mi opinión ...

LassePoulsen
fuente
1
strace -o /tmp/dhc$$ dhclient -d eth2debería proporcionar información valiosa sobre qué llamadas están fallando. Sí, los conozco a todos, pero ver los argumentos puede ayudar. Sospecharía algún inconveniente con el controlador eth2, tal vez el módulo no esté sincronizado con el núcleo.
msw
strace: paste.ubuntu.com/506269
LassePoulsen
por cierto: el nic es un "VT6102 [Rin-II]" que utiliza el módulo del núcleo via_rhine.
LassePoulsen
Tu tira se interrumpió justo antes de llegar a la parte buena. Deje que se ejecute un poco más antes de presionar ctrl-c, o tal vez agregue la -1opción y espere a que salga por sí solo.
Karl Bielefeldt
1
no uso apparmor o selinux .. Aquí hay una versión con la -fopción activada: silenzio.dk/pi/dhc.strace
LassePoulsen

Respuestas:

5

Con base en el seguimiento de pila en http://silenzio.dk/pi/dhc.strace la primera SIOCSIFADDR: Permission deniederror se produce en la línea 735, durante la ejecución del proceso 26092: ifconfig eth2 inet 0 up. Ahora solo rootpuede ifconfigaparecer algo, así que rastreemos la cadena de fork()/ exec()y busquemos cambios de UID. Resulta que:

  1. proceso 26092 es hijo de 26090 (línea 689)
  2. El proceso 26090 se ejecuta con UID 101 y GID 102 (líneas 355--358)
  3. El proceso 26090 intenta establecer su UID / GID nuevamente en 0, pero falla (línea 310)
  4. proceso 26090 es hijo de 26089 (línea 286)
  5. El proceso 26089 cambió su UID: GID a 101: 102 (líneas 282--283)

Por lo tanto, los errores se producen porque el proceso secundario en ejecución no tiene los privilegios de raíz necesarios. ¿Por qué pasó esto? El debian/changelogarchivo en las dhcp3-3.0.6.dfsgfuentes dice:

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

Supongo que call-dhclient-scriptha perdido su bit set-UID y, por lo tanto, no se está ejecutando con los privilegios de root como debería. (Según el debian/dhcp3-client.postinstarchivo en las fuentes, debería ser propiedad de root:dhcpy mode 4754)

Riccardo Murri
fuente
¡Qué error tan complicado y una solución tan simple! chmod u+s /lib/dhcp3-client/call-dhclient-script¡Hizo el truco!
LassePoulsen
2

¿Qué muestra su salida "dmesg" cuando ejecuta dhclient?

Si está ejecutando Hardy, AppArmor es parte de la instalación predeterminada. Es posible que el perfil de dhclient se haya vuelto loco. Verifique "sudo aa-status" para ver qué está sucediendo allí.

Además, ¿cómo se lee su archivo / etc / network / interfaces? ¿Quizás tienes direcciones, rutas, etc. en conflicto con las que dhclient no quiere jugar?

Kees Cook
fuente
No hay una armadura de aplicación instalada en la máquina. Y la NIC se configura con IP estática en el archivo / etc / network / interfaces. Esto no debería ser un problema para que dhclient sobrescriba cuando se llama. Pero no importa porque no hace ninguna diferencia si lo configuro como dhcp en el archivo / etc / network / interfaces. Si lo hago, la interfaz sigue siendo "desconfigurada".
LassePoulsen
Si puede, envíe enlaces a pastebins de "sudo aa-status" y "cat / etc / network / interfaces"
Kees Cook,
1

Intentaría instalar nscd si falta ese paquete, y si no funciona con esto, instale también libnss-db.

No estoy seguro de si eso resolverá su problema, sin embargo, esas son las cosas que su rastro está tratando de encontrar y falla.

txwikinger
fuente
instalar nscd y libnss-db no ayuda.
LassePoulsen
1

Esto es realmente un error en Ubuntu 8.04. Para varios casos de uso, NECESITA tener instalado nscd (por ejemplo, cuando usa openvpn) o dhclient no funcionará. Esto no sucede en las nuevas versiones de Ubuntu.

mniess
fuente
¡Esto no hace la diferencia! instalar nscd hace ninguna diferencia para que dhclient no configure la dirección IP, máscara de red, etc.
LassePoulsen