왜 dhclient가 "SIOCSIFADDR : 권한이 거부되었습니다"라고 말합니까?


9

우분투 서버 (8.04)에서 매우 이상한 오류가 발생했습니다. 왜 dhclient가 네트워크 설정을 할 수 없는지 모르겠습니다! 서버를 처음 설치 한 사람이 아니므로 설정에 대해 잘 모릅니다. 서버는 방화벽 / 게이트웨이 (사용자 정의 iptables 스크립트)로만 사용되며 인터넷 용 LAN, DMZ 용 3 개의 nic이 있습니다. 이제 ISP는 dhcp를 통해 할당 된 정적 IP에서 "정적"IP로 설정을 변경했으며 실제로는 사용할 수 없습니다.

슬프게도 dhcp 임대가 종료되면 ISP가 연결을 닫으므로 IP를 정적으로 설정할 수 없습니다.

이것은 내가 얻는 오류입니다 : (그리고 거기에 달려 있습니다.)

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

지금은 killall dhclient; dhclient eth2매시간 실행 한 다음 인터페이스에 고정 IP 설정을 설정하여 문제를 해결했습니다.이 연결을 유지하기에 충분합니다! 하지만 제 생각에는 꽤 못생긴 해킹입니다 ..


1
strace -o /tmp/dhc$$ dhclient -d eth2어떤 통화가 실패했는지에 대한 귀중한 정보를 제공해야합니다. 예, 나는 그들 모두를 알고 있지만 논쟁을 보는 것이 도움이 될 수 있습니다. eth2 드라이버에 약간의 의심이있을 것입니다. 아마도 모듈이 커널과 동기화되지 않았을 것입니다.
msw


btw : nic은 via_rhine 커널 모듈을 사용하는 "VT6102 [Rhine-II]"입니다.
LassePoulsen

좋은 부분에 도달하기 직전에 strace가 중단되었습니다. ctrl-c를 누르기 전에 시간이 더 오래 걸리도록하거나 -1옵션을 추가 하고 스스로 종료 될 때까지 기다리십시오.
Karl Bielefeldt

1
나는 apparmor 또는 selinux를 사용하지 않는다. 여기에 -f옵션이 설정된 strace 가있다 : silenzio.dk/pi/dhc.strace
LassePoulsen

답변:


5

http://silenzio.dk/pi/dhc.strace 의 스택 추적을 기반으로 SIOCSIFADDR: Permission denied프로세스 26092 : 735 행에서 첫 번째 오류가 발생합니다 ifconfig eth2 inet 0 up. 이제 뭔가 만 root할 수 ifconfig있으므로 fork()/ 체인을 추적하고 exec()UID 변경 사항을 찾으십시오. 그것은 밝혀졌습니다 :

  1. 프로세스 26092는 26090 (행 689)의 자식입니다.
  2. 프로세스 26090은 UID 101 및 GID 102 (행 355--358)로 실행됩니다.
  3. 프로세스 26090은 UID / GID를 다시 0으로 설정하려고하지만 실패합니다 (라인 310).
  4. 프로세스 26090은 26089의 자식 (라인 286)
  5. 프로세스 26089는 UID : GID를 101 : 102로 전환했습니다 (282--283 행).

따라서 실행중인 하위 프로세스에 필요한 루트 권한이 없기 때문에 오류가 발생합니다. 왜 이런 일이 발생합니까? 소스 의 debian/changelog파일 dhcp3-3.0.6.dfsg은 다음과 같습니다.

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

내 생각에 call-dhclient-scriptset-UID 비트가 손실되어 루트 권한으로 실행되지 않습니다. ( debian/dhcp3-client.postinst소스 의 파일에 따라 root:dhcp및 소유해야 합니다 4754)


이러한 복잡한 오류와 간단한 해결책! chmod u+s /lib/dhcp3-client/call-dhclient-script트릭을 했어!
LassePoulsen

2

dhclient를 실행할 때 "dmesg"출력은 무엇을 보여줍니까?

Hardy를 실행중인 경우 AppArmor는 기본 설치의 일부입니다. dhclient 프로파일이 완전히 사라 졌을 수 있습니다. 무슨 일이 일어나고 있는지 "sudo aa-status"를 확인하십시오.

또한 / etc / network / interfaces 파일은 어떻게 읽습니까? dhclient가 사용하고 싶지 않은 주소, 경로 등이 충돌하는 것 같습니다.


머신에 설치된 앱 아머가 없습니다. NIC는 / etc / network / interfaces 파일에 고정 IP로 설정되어 있습니다. 이것은 dhclient가 호출 될 때 겹쳐 쓰는 데 문제가되지 않습니다. 그러나 / etc / network / interfaces 파일에서 dhcp로 설정하면 아무런 차이가 없으므로 중요하지 않습니다. 내가 인터페이스를 "구성되지 않은"유지합니다.
LassePoulsen

가능하다면 "sudo aa-status"및 "cat / etc / network / interfaces"의 pastebins에 링크를 보내십시오
Kees Cook

1

해당 패키지가없는 경우 nscd를 설치하려고 시도하고이 패키지로 작동하지 않으면 libnss-db도 설치하십시오.

그래도 문제가 해결되는지는 확실하지 않지만 추적에서 찾으려고하는 오류입니다.


nscd 및 libnss-db를 설치해도 도움이되지 않습니다.
LassePoulsen


1

이것은 실제로 우분투 8.04의 버그입니다. 여러 유스 케이스의 경우 nscd를 설치해야합니다 (예 : openvpn 사용시) 또는 dhclient가 작동하지 않습니다. 최신 우분투 릴리스에서는 발생하지 않습니다.


이것은 차이가 없습니다! nscd를 설치하면 dhclient가 IP 주소, 넷 마스크 등을 설정하지 않는다는 점과 차이가 없습니다.
LassePoulsen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.