Tại sao dhclient nói: xông SIOCSIFADDR: Quyền bị từ chối?


9

Tôi đã gặp một lỗi rất kỳ lạ trên máy chủ Ubuntu (8.04), tôi không biết tại sao dhclient không được phép thiết lập cài đặt mạng! Tôi không phải là người đầu tiên cài đặt máy chủ, vì vậy tôi không biết nhiều về thiết lập. Máy chủ chỉ được sử dụng làm tường lửa / cổng (tập lệnh iptables tùy chỉnh), nó có ba nic một cho internet, một cho LAN và một cho DMZ. Bây giờ ISP đã thay đổi cài đặt từ ip tĩnh sang ip "tĩnh" được gán thông qua dhcp và tôi không thể thực sự sử dụng nó.

Đáng buồn là tôi không thể đặt IP tĩnh vì ISP đóng kết nối của tôi khi hợp đồng thuê dhcp kết thúc: o

Đây là lỗi tôi nhận được: (và sau đó nó chỉ bị treo ở đó ..)

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

bây giờ tôi đã sửa nó bằng cách chạy killall dhclient; dhclient eth2mỗi giờ và sau đó cài đặt cài đặt IP tĩnh cho giao diện, điều này là đủ để giữ kết nối trực tiếp! Nhưng theo tôi thì đó là một hack khá xấu xí ..


1
strace -o /tmp/dhc$$ dhclient -d eth2nên mang lại thông tin có giá trị về những gì cuộc gọi đang thất bại. Vâng, tôi biết tất cả trong số họ, nhưng nhìn thấy các đối số có thể giúp đỡ. Tôi nghi ngờ một số điều kỳ lạ với trình điều khiển eth2, có lẽ mô-đun không đồng bộ với kernel.
msw


btw: nic là "VT6102 [Rhine-II]" bằng cách sử dụng mô-đun hạt nhân via_rhine.
LassePoulsen

Bước đi của bạn đã bị gián đoạn ngay trước khi đến phần tốt. Hãy để nó chạy lâu hơn một chút trước khi nhấn ctrl-c, hoặc có thể thêm -1tùy chọn và đợi nó tự thoát.
Karl Bielefeldt

1
Tôi không sử dụng apparmor hoặc selinux .. Đây là một bước tiến với -ftùy chọn được bật: silenzio.dk/pi/dhc.strace
LassePoulsen

Câu trả lời:


5

Dựa trên dấu vết ngăn xếp tại http://silenzio.dk/pi/dhc.straceSIOCSIFADDR: Permission denied lỗi đầu tiên xảy ra ở dòng 735, trong khi thực hiện quy trình 26092 : ifconfig eth2 inet 0 up. Bây giờ chỉ rootcó thể ifconfigmột cái gì đó lên, vì vậy hãy theo dõi chuỗi fork()/ exec()và tìm kiếm các thay đổi UID. Hóa ra:

  1. quy trình 26092 là con của 26090 (dòng 689)
  2. tiến trình 26090 chạy với UID 101 và GID 102 (dòng 355--353)
  3. process 26090 cố gắng đặt UID / GID của nó về 0, nhưng không thành công (dòng 310)
  4. quy trình 26090 là con của 26089 (dòng 286)
  5. quá trình 26089 đã chuyển UID: GID của mình thành 101: 102 (dòng 282--283)

Vì vậy, các lỗi xảy ra do quá trình con thực thi không có các đặc quyền gốc cần thiết. Lý do tại sao điều này xảy ra? Các debian/changelogtập tin trong các dhcp3-3.0.6.dfsgnguồn nói:

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

Tôi đoán là call-dhclient-scriptđã mất bit-UID set và do đó không thực thi với quyền root như bình thường. (Theo debian/dhcp3-client.postinsttệp trong các nguồn, nó phải được sở hữu bởi root:dhcpvà chế độ 4754)


Lỗi phức tạp và một giải pháp đơn giản như vậy! chmod u+s /lib/dhcp3-client/call-dhclient-scriptđã lừa
LassePoulsen

2

Đầu ra "dmesg" của bạn hiển thị gì khi bạn chạy dhclient?

Nếu bạn đang chạy Hardy, AppArmor là một phần của cài đặt mặc định. Có thể là hồ sơ dhclient đã đi haywire. Kiểm tra "sudo aa-status" để xem những gì đang xảy ra ở đó.

Ngoài ra, tập tin / etc / mạng / giao diện của bạn đọc như thế nào? Có lẽ bạn có các địa chỉ, tuyến đường xung đột, v.v ... mà dhclient không muốn chơi với?


Không có áo giáp ứng dụng được cài đặt trên máy. Và NIC được thiết lập với IP tĩnh trong tệp / etc / network / giao diện. Điều này sẽ không có vấn đề gì để dhclient ghi đè lên khi nó được gọi. Nhưng nó không thành vấn đề bởi vì nó không có gì khác biệt nếu tôi đặt nó làm dhcp trong tệp / etc / network / giao diện. Nếu tôi làm giao diện chỉ là "không được cấu hình".
LassePoulsen

Nếu bạn có thể, hãy gửi các liên kết đến các pastebins của "sudo aa-status" và "cat / etc / network / interface"
Kees Cook

1

Tôi sẽ thử cài đặt nscd nếu gói đó bị thiếu và nếu nó không hoạt động với cái này, hãy cài đặt libnss-db.

Không chắc chắn nếu điều đó sẽ giải quyết vấn đề của bạn, tuy nhiên, đó là những điều mà dấu vết của bạn đang cố gắng tìm kiếm và nó đã thất bại.


cài đặt nscd và libnss-db không giúp được gì.
LassePoulsen


1

Đây thực sự là một lỗi trong Ubuntu 8.04. Đối với một số trường hợp sử dụng, bạn CẦN cài đặt nscd (ví dụ: khi sử dụng openvpn) hoặc dhclient sẽ không hoạt động. Điều này không xảy ra trong các bản phát hành Ubuntu mới hơn.


Điều này không tạo ra sự khác biệt! cài đặt nscd không có gì khác biệt với dhclient đó không đặt địa chỉ IP, netmask, v.v.
LassePoulsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.