Perché dhclient dice: "SIOCSIFADDR: autorizzazione negata"?


9

Ho riscontrato un errore molto strano su ubuntu-server (8.04), non ho idea del perché a dhclient non sia consentito configurare le impostazioni di rete! Non sono quello che ha installato il server in primo luogo, quindi non so molto sulla configurazione. Il server viene utilizzato solo come firewall / gateway (script iptables personalizzato) e ha tre nic per uno per Internet, uno per LAN e uno per DMZ. Ora l'ISP ha cambiato le impostazioni da ip statico a ip "statico" assegnato tramite dhcp, e non posso davvero usarlo.

Purtroppo non posso semplicemente impostare l'IP staticamente poiché l'ISP chiude la mia connessione quando termina il contratto di locazione dhcp: o

Questo è l'errore che ottengo: (e poi si blocca 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

per ora l'ho risolto eseguendo killall dhclient; dhclient eth2ogni ora e quindi impostando impostazioni IP statiche per l'interfaccia, questo è sufficiente per mantenere attiva la connessione! ma secondo me è un brutto trucco ...


1
strace -o /tmp/dhc$$ dhclient -d eth2dovrebbe fornire informazioni preziose su ciò che le chiamate non riescono. Sì, li conosco tutti, ma vedere gli argomenti può aiutare. Sospetterei qualche disprezzo con il driver eth2, forse il modulo non è sincronizzato con il kernel.
msw,


btw: nic è un "VT6102 [Reno-II]" che utilizza il modulo kernel via_rhine.
LassePoulsen,

Il tuo passo è stato interrotto prima di arrivare alla parte buona. Lascia che duri un po 'di più prima di premere Ctrl-C, o forse aggiungi l' -1opzione e attendi che esca da solo.
Karl Bielefeldt,

1
non uso apparmor o selinux .. Ecco una sequenza con l' -fopzione attivata: silenzio.dk/pi/dhc.strace
LassePoulsen

Risposte:


5

Basata sulla traccia stack http://silenzio.dk/pi/dhc.strace primo SIOCSIFADDR: Permission deniederrore si verifica nella riga 735, durante l'esecuzione del processo 26092: ifconfig eth2 inet 0 up. Ora è rootpossibile solo ifconfigqualcosa, quindi tracciamo la catena di fork()/ exec()e cerchiamo le modifiche all'UID. Si scopre che:

  1. il processo 26092 è un figlio di 26090 (riga 689)
  2. il processo 26090 viene eseguito con UID 101 e GID 102 (righe 355--358)
  3. il processo 26090 tenta di reimpostare UID / GID su 0, ma non riesce (riga 310)
  4. il processo 26090 è un figlio di 26089 (linea 286)
  5. il processo 26089 ha commutato il suo UID: GID su 101: 102 (linee 282--283)

Pertanto, gli errori si verificano perché il processo figlio in esecuzione non dispone dei privilegi di root necessari. Perché succede? Il debian/changelogfile nelle dhcp3-3.0.6.dfsgfonti 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/.

La mia ipotesi è che call-dhclient-scriptabbia perso il suo bit set-UID, e quindi non sta eseguendo con i privilegi di root come dovrebbe. (Secondo il debian/dhcp3-client.postinstfile nelle fonti, dovrebbe essere di proprietà root:dhcpe modalità 4754)


Un errore così complicato e una soluzione così semplice! chmod u+s /lib/dhcp3-client/call-dhclient-scriptfatto il trucco!
LassePoulsen,

2

Cosa mostra l'output di "dmesg" quando si esegue dhclient?

Se stai eseguendo Hardy, AppArmor fa parte dell'installazione predefinita. È possibile che il profilo dhclient sia andato in tilt. Controlla "sudo aa-status" per vedere cosa sta succedendo lì.

Inoltre, come viene letto il tuo file / etc / network / interfaces? Forse hai indirizzi, percorsi, ecc. In conflitto con cui dhclient non vuole giocare?


Non ci sono armature per app installate sulla macchina. E la NIC è configurata con IP statico nel file / etc / network / interfaces. Questo non dovrebbe essere un problema per dhclient da sovrascrivere quando viene chiamato. Ma non importa perché non fa differenza se lo imposto come dhcp nel file / etc / network / interfaces. Se lo faccio l'interfaccia continua ad essere "non configurata".
LassePoulsen,

Se è possibile, inviare collegamenti a pastebins di "sudo aa-status" e "cat / etc / network / interfaces"
Kees Cook,

1

Proverei a installare nscd se quel pacchetto manca e, se non funziona con questo, installa anche libnss-db.

Non sono sicuro se questo risolverà il tuo problema, tuttavia, queste sono le cose che la tua traccia sta cercando di trovare e non riesce.


l'installazione di nscd e libnss-db non aiuta.
LassePoulsen,


1

Questo è in realtà un bug in Ubuntu 8.04. Per diversi casi d'uso NECESSARIO avere nscd installato (ad esempio quando si utilizza openvpn) o dhclient non funzionerà. Questo non accade nelle versioni più recenti di Ubuntu.


Questo non fa differenza! l'installazione di nscd non fa alcuna differenza per il fatto che dhclient non imposta l'indirizzo IP, la maschera di rete ecc.
LassePoulsen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.