เหตุใดจึงต้องพูดว่า:“ SIOCSIFADDR: การอนุญาตถูกปฏิเสธ”?


9

ฉันพบข้อผิดพลาดแปลก ๆ บน ubuntu-server (8.04) ฉันไม่รู้ว่าทำไม dhclient ไม่ได้รับอนุญาตให้ตั้งค่าเครือข่าย! ฉันไม่ใช่คนแรกที่ติดตั้งเซิร์ฟเวอร์ตั้งแต่แรกฉันเลยไม่ค่อยรู้เรื่องการตั้งค่ามากนัก เซิร์ฟเวอร์ใช้เป็นไฟร์วอลล์ / เกตเวย์ (สคริปต์ iptables แบบกำหนดเอง) เท่านั้นโดยมีสามนิกสำหรับอินเทอร์เน็ตหนึ่งสำหรับ LAN และอีกหนึ่งสำหรับ DMZ ตอนนี้ ISP ได้เปลี่ยนการตั้งค่าจาก ip แบบคงที่เป็น ip "คงที่" ที่กำหนดผ่าน dhcp และฉันไม่สามารถใช้งานได้จริง

น่าเศร้าที่ฉันไม่สามารถตั้งค่า IP แบบคงที่ได้เนื่องจาก ISP ปิดการเชื่อมต่อของฉันเมื่อสัญญาเช่า DHCP สิ้นสุดลง: o

นี่เป็นข้อผิดพลาดที่ฉันได้รับ: (และจากนั้นมันก็หยุดอยู่ตรงนั้น .. )

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 คือ "VT6102 [Rhine-II]" โดยใช้โมดูลเคอร์เนล via_rhine
LassePoulsen

strace ของคุณถูกขัดจังหวะก่อนที่จะเข้าส่วนที่ดี ปล่อยให้มันรันนานขึ้นก่อนกด ctrl-c หรืออาจจะเพิ่ม-1ตัวเลือกและรอให้มันออกเอง
Karl Bielefeldt

1
ฉันไม่ได้ใช้ apparmor หรือ selinux .. นี่คือ strace ที่มี-fตัวเลือกเปิดอยู่: silenzio.dk/pi/dhc.strace
LassePoulsen

คำตอบ:


5

ขึ้นอยู่กับกองติดตามที่http://silenzio.dk/pi/dhc.straceแรก SIOCSIFADDR: Permission deniedผิดพลาดเกิดขึ้นที่เส้น 735 ในระหว่างการดำเนินการของกระบวนการ ifconfig eth2 inet 0 up26092: ตอนนี้มีบางอย่างเท่านั้นที่ 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-scriptสูญเสียบิต set-UID ของตนและไม่ได้ดำเนินการด้วยสิทธิ์พิเศษเท่าที่ควร (ตามdebian/dhcp3-client.postinstไฟล์ในแหล่งข้อมูลควรเป็นเจ้าของroot:dhcpและโหมด4754)


ข้อผิดพลาดที่ซับซ้อนเช่นนี้และเป็นทางออกที่ง่าย! chmod u+s /lib/dhcp3-client/call-dhclient-scriptทำเคล็ดลับ!
LassePoulsen

2

เอาต์พุต "dmesg" ของคุณแสดงอะไรเมื่อคุณเรียกใช้ dhclient

หากคุณใช้งาน Hardy AppArmor เป็นส่วนหนึ่งของการติดตั้งเริ่มต้น เป็นไปได้ที่โปรไฟล์ dhclient ไปยุ่งเหยิง ทำเครื่องหมายที่ "sudo aa-status" เพื่อดูว่าเกิดอะไรขึ้นที่นั่น

นอกจากนี้ไฟล์ / etc / network / interfaces ของคุณจะอ่านอย่างไร บางทีคุณมีที่อยู่ที่ขัดแย้งเส้นทาง ฯลฯ ที่ dhclient ไม่ต้องการเล่นด้วย?


ไม่มีชุดเกราะแอพติดตั้งอยู่ในเครื่อง และ NIC ตั้งค่าด้วย IP แบบคงที่ในไฟล์ / etc / network / interfaces นี่ไม่ควรเป็นปัญหาสำหรับ dhclient ที่จะเขียนทับเมื่อมันถูกเรียก แต่มันไม่สำคัญเพราะมันสร้างความแตกต่างถ้าฉันตั้งเป็น dhcp ในไฟล์ / etc / network / interfaces ถ้าฉันทำอินเทอร์เฟซก็แค่ "ไม่ได้กำหนดค่า"
LassePoulsen

หากทำได้ให้ส่งลิงค์ไปยัง pastebins ของ "sudo aa-status" และ "cat / etc / network / interfaces"
Kees Cook

1

ฉันจะลองติดตั้ง nscd ถ้าแพ็คเกจนั้นหายไปและหากมันไม่สามารถใช้งานได้ให้ติดตั้ง libnss-db ด้วย

ไม่แน่ใจว่าจะแก้ปัญหาของคุณอย่างไรสิ่งเหล่านี้คือสิ่งที่ร่องรอยของคุณพยายามค้นหาและล้มเหลว


การติดตั้ง nscd และ libnss-db ไม่ได้ช่วยอะไร
LassePoulsen

1

โปรดเรียกใช้sudo dpkg --configure -aเพื่อให้แน่ใจว่าไม่ใช่การซ้ำซ้อนของสถานการณ์ในhttps://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/19740/comments/67


ไม่มีโชค! dpkg --configure -aไม่ได้ทำอะไรเลย (ไม่มีแพ็คเกจที่จำเป็นต้องกำหนดค่า)
LassePoulsen

1

นี่เป็นข้อผิดพลาดจริง ๆ ใน Ubuntu 8.04 สำหรับการใช้งานหลายกรณีคุณจำเป็นต้องติดตั้ง nscd (เช่นเมื่อใช้ openvpn) หรือ dhclient จะไม่ทำงาน สิ่งนี้จะไม่เกิดขึ้นใน Ubuntu รุ่นใหม่


นี่ไม่ได้สร้างความแตกต่าง! การติดตั้ง nscd ไม่ทำให้ dhclient นั้นไม่ได้ตั้งค่าที่อยู่ IP, netmask เป็นต้น
LassePoulsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.