Com base no rastreamento de pilha em link , o primeiro
O erro SIOCSIFADDR: Permission denied
ocorre na linha 735, durante
execução do processo 26092: ifconfig eth2 inet 0 up
. Agora apenas
root
pode ifconfig
alguma coisa, então vamos traçar a cadeia de
fork()
/ exec()
e procure por alterações de UID. Acontece que:
- o processo 26092 é um filho de 26090 (linha 689)
- o processo 26090 é executado com o UID 101 e o GID 102 (linhas 355--358)
- o processo 26090 tenta definir seu UID / GID de volta para 0, mas falha (linha 310)
- o processo 26090 é filho de 26089 (linha 286)
- o processo 26089 mudou seu UID: GID para 101: 102 (linhas 282--283)
Assim, os erros ocorrem porque o processo filho em execução não tem
os privilégios de root necessários. Por que isso acontece? o
O arquivo debian/changelog
no dhcp3-3.0.6.dfsg
sources 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-script
perdeu seu bit set-UID e
portanto, não está executando com privilégios de root como deveria. (De acordo com
o arquivo debian/dhcp3-client.postinst
nas fontes, deve
ser de propriedade de root:dhcp
e modo 4754
)