Por que o dhclient está dizendo: “SIOCSIFADDR: permissão negada”?

9

Eu encontrei um erro muito estranho no ubuntu-server (8.04), não sei por que o dhclient não tem permissão para definir as configurações de rede! Não fui eu quem instalou o servidor, então não sei muito sobre a instalação. O servidor é usado apenas como firewall / gateway (script personalizado do iptables) e possui três nic's, um para Internet, um para LAN e outro para DMZ. Agora, o ISP alterou as configurações de IP estático para IP "estático" atribuído por meio do dhcp, e eu realmente não posso usá-lo.

Infelizmente, não posso simplesmente definir o IP estaticamente, pois o ISP fecha minha conexão quando a concessão dhcp termina:

Este é o erro que recebo: (e depois fica 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

por enquanto, eu o corrigi executando a killall dhclient; dhclient eth2cada hora e, em seguida, definindo as configurações de IP estático para a interface, isso é suficiente para manter a conexão ativa! mas é um truque bem feio na minha opinião ..

LassePoulsen
fonte
1
strace -o /tmp/dhc$$ dhclient -d eth2deve fornecer informações valiosas sobre quais chamadas estão falhando. Sim, eu conheço todos eles, mas ver os argumentos pode ajudar. Eu suspeitaria de alguma estranheza com o driver eth2, talvez o módulo esteja fora de sincronia com o kernel.
quer
strace: paste.ubuntu.com/506269
LassePoulsen
btw: o nic é um "VT6102 [Rhine-II]" usando o módulo do kernel via_rhine.
LassePoulsen 5/10/10
Seu traço foi interrompido antes de chegar à parte boa. -1Espere um pouco mais antes de pressionar ctrl-c, ou talvez adicione a opção e aguarde a saída por conta própria.
Karl Bielefeldt
1
eu não uso apparmor ou selinux .. Aqui está um strace com a -fopção ativada: silenzio.dk/pi/dhc.strace
LassePoulsen

Respostas:

5

Com base no rastreamento de pilha no http://silenzio.dk/pi/dhc.strace o primeiro SIOCSIFADDR: Permission deniederro ocorre na linha 735, durante a execução do processo 26092: ifconfig eth2 inet 0 up. Agora, apenas algo rootpode ifconfigacontecer, então vamos rastrear a cadeia de fork()/ exec()e procurar por alterações de UID. Acontece que:

  1. processo 26092 é um filho de 26090 (linha 689)
  2. o processo 26090 é executado com o UID 101 e o GID 102 (linhas 355--358)
  3. O processo 26090 tenta definir seu UID / GID de volta para 0, mas falha (linha 310)
  4. processo 26090 é um filho de 26089 (linha 286)
  5. O processo 26089 mudou seu UID: GID para 101: 102 (linhas 282--283)

Portanto, os erros ocorrem porque o processo filho em execução não possui os privilégios de root necessários. Por que isso acontece? O debian/changelogarquivo nas dhcp3-3.0.6.dfsgfontes diz:

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

Meu palpite é que call-dhclient-scriptperdeu seu bit set-UID e, portanto, não está executando com privilégios de root como deveria. (De acordo com o debian/dhcp3-client.postinstarquivo nas fontes, ele deve pertencer a root:dhcpe mode 4754)

Riccardo Murri
fonte
Um erro tão complicado e uma solução tão simples! chmod u+s /lib/dhcp3-client/call-dhclient-scriptfez o truque!
LassePoulsen 12/10/10
2

O que sua saída "dmesg" mostra quando você executa o dhclient?

Se você estiver executando o Hardy, o AppArmor faz parte da instalação padrão. É possível que o perfil do dhclient tenha dado errado. Verifique "sudo aa-status" para ver o que está acontecendo lá.

Além disso, como o seu arquivo / etc / network / interfaces é lido? Talvez você tenha endereços, rotas, etc. conflitantes, com os quais o dhclient não quer brincar?

Kees Cook
fonte
Não há armadura de aplicativo instalada na máquina. E a NIC é configurada com IP estático no arquivo / etc / network / interfaces. Isso não deve ser problema para o dhclient sobrescrever quando for chamado. Mas isso não importa, porque não faz diferença se eu o definir como dhcp no arquivo / etc / network / interfaces. Se eu fizer a interface continua sendo "desconfigurada".
LassePoulsen
Se você puder, envie links para pastas de "sudo aa-status" e "cat / etc / network / interfaces"
Kees Cook
1

Eu tentaria instalar o nscd se esse pacote estiver ausente e, se não funcionar, instale também o libnss-db.

Não tenho certeza se isso resolverá o seu problema, no entanto, essas são as coisas que seu rastreamento está tentando encontrar e falha.

txwikinger
fonte
instalar o nscd e o libnss-db não ajuda.
LassePoulsen 11/10/10
1

Este é realmente um bug no Ubuntu 8.04. Para vários casos de uso, você PRECISA ter o nscd instalado (por exemplo, ao usar o openvpn) ou o dhclient não funcionará. Isso não acontece nas versões mais recentes do Ubuntu.

mniess
fonte
Isso não faz diferença! instalar nscd não faz diferença para que dhclient não definir o endereço IP, máscara de rede etc.
LassePoulsen