Mengapa dhclient mengatakan: "SIOCSIFADDR: Izin ditolak"?

9

Saya mengalami kesalahan yang sangat aneh di ubuntu-server (8.04), saya tidak tahu mengapa dhclient tidak diizinkan untuk mengatur pengaturan jaringan! Saya bukan orang yang menginstal server di tempat pertama, jadi saya tidak tahu banyak tentang pengaturan. Server hanya digunakan sebagai firewall / gateway (skrip iptables khusus) itu punya tiga nic untuk internet, satu untuk LAN dan satu untuk DMZ. Sekarang ISP telah mengubah pengaturan dari ip statis ke ip "statis" yang ditetapkan melalui dhcp, dan saya benar-benar tidak dapat menggunakannya.

Sayangnya saya tidak bisa mengatur IP secara statis karena ISP menutup koneksi saya ketika leasing dhcp berakhir: o

Ini adalah kesalahan yang saya dapatkan: (dan kemudian hanya hang di sana ..)

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

untuk sekarang saya telah memperbaikinya dengan menjalankan killall dhclient; dhclient eth2setiap jam dan kemudian menetapkan pengaturan IP statis untuk antarmuka, ini cukup untuk menjaga koneksi tetap hidup! tapi itu hack yang cukup jelek menurut saya ..

LassePoulsen
sumber
1
strace -o /tmp/dhc$$ dhclient -d eth2harus menghasilkan informasi berharga tentang panggilan apa yang gagal. Ya, saya tahu semuanya, tetapi melihat argumennya mungkin membantu. Saya menduga beberapa keanehan dengan driver eth2, mungkin modul tidak sinkron dengan kernel.
msw
strace: paste.ubuntu.com/506269
LassePoulsen
btw: nic adalah "VT6102 [Rhine-II]" menggunakan modul kernel via_rhine.
LassePoulsen
Tali Anda terputus tepat sebelum sampai ke bagian yang baik. Biarkan berjalan beberapa saat lebih lama sebelum menekan ctrl-c, atau mungkin tambahkan -1opsi dan tunggu sampai keluar sendiri.
Karl Bielefeldt
1
saya tidak menggunakan apparmor atau selinux .. Ini adalah strace dengan -fopsi dihidupkan: silenzio.dk/pi/dhc.strace
LassePoulsen

Jawaban:

5

Berdasarkan jejak stack di http://silenzio.dk/pi/dhc.strace pertama SIOCSIFADDR: Permission deniedterjadi kesalahan pada baris 735, selama pelaksanaan proses 26.092: ifconfig eth2 inet 0 up. Sekarang hanya rootdapat melakukan ifconfigsesuatu, jadi mari kita melacak rantai fork()/ exec()dan mencari perubahan UID. Ternyata itu:

  1. proses 26092 adalah anak dari 26090 (baris 689)
  2. proses 26090 berjalan dengan UID 101 dan GID 102 (baris 355--358)
  3. proses 26090 mencoba mengatur UID / GID kembali ke 0, tetapi gagal (baris 310)
  4. proses 26090 adalah anak dari 26089 (baris 286)
  5. proses 26089 beralih UID: GID ke 101: 102 (baris 282--283)

Jadi, kesalahan terjadi karena proses eksekusi anak tidak memiliki hak akses root yang diperlukan. Mengapa ini terjadi? The debian/changelogfile dalam dhcp3-3.0.6.dfsgsumber mengatakan:

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

Dugaan saya adalah bahwa ia call-dhclient-scripttelah kehilangan bit set-UID-nya, dan karenanya tidak mengeksekusi dengan hak akses root seperti yang seharusnya. (Menurut debian/dhcp3-client.postinstfile di sumber, itu harus dimiliki oleh root:dhcpdan mode 4754)

Riccardo Murri
sumber
Kesalahan yang rumit dan solusi yang sangat sederhana! chmod u+s /lib/dhcp3-client/call-dhclient-scriptlakukan triknya!
LassePoulsen
2

Apa yang ditampilkan oleh output "dmesg" Anda saat menjalankan dhclient?

Jika Anda menjalankan Hardy, AppArmor adalah bagian dari pemasangan default. Mungkin saja profil dhclient sudah rusak. Centang "sudo aa-status" untuk melihat apa yang terjadi di sana.

Selain itu, bagaimana file / etc / network / interface Anda membaca? Mungkin Anda memiliki alamat, rute, dll yang saling bertentangan yang dhclient tidak ingin mainkan?

Kees Cook
sumber
Tidak ada aplikasi-baju besi yang terpasang di mesin. Dan NIC diatur dengan IP statis di file / etc / network / interfaces. Ini seharusnya tidak menjadi masalah bagi dhclient untuk ditimpa ketika dipanggil. Tetapi tidak masalah karena tidak ada bedanya jika saya menetapkannya sebagai dhcp di file / etc / network / interfaces. Jika saya melakukan antarmuka terus "tidak dikonfigurasi".
LassePoulsen
Jika Anda bisa, kirim tautan ke pastebins "sudo aa-status" dan "cat / etc / network / interfaces"
Kees Cook
1

Saya akan mencoba menginstal nscd jika paket itu hilang, dan jika tidak bekerja dengan ini, instal juga libnss-db.

Namun, tidak yakin apakah itu akan menyelesaikan masalah Anda, itulah hal-hal yang dicari jejak Anda dan gagal.

txwikinger
sumber
menginstal nscd dan libnss-db tidak membantu.
LassePoulsen
1

Ini sebenarnya adalah bug di Ubuntu 8.04. Untuk beberapa kasus penggunaan, Anda PERLU untuk menginstal nscd (mis. Ketika menggunakan openvpn) atau dhclient tidak akan berfungsi. Ini tidak terjadi pada rilis Ubuntu yang lebih baru.

mniess
sumber
Ini tidak membuat perbedaan! menginstal nscd tidak ada bedanya dengan dhclient yang tidak mengatur alamat ip, netmask, dll.
LassePoulsen