web-dev-qa-db-ja.com

dhclientが「SIOCSIFADDR:Permission denied」と言っているのはなぜですか?

Ubuntu-server(8.04)で非常に奇妙なエラーに遭遇しました。なぜdhclientがネットワーク設定を許可されないのか分かりません!そもそもサーバーをインストールしたのは私ではないので、セットアップについてはあまり知りません。サーバーはファイアウォール/ゲートウェイ(カスタムiptablesスクリプト)としてのみ使用され、インターネット用、LAN用、DMZ用の3つのNICがあります。 ISPは、静的IPからdhcpを介して割り当てられた「静的」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を1時間ごとに実行し、インターフェイスの静的IP設定を設定することで修正しました。これで接続を維持できます。しかし、それは私の意見ではかなりいハックです。

9
LassePoulsen

http://silenzio.dk/pi/dhc.strace のスタックトレースに基づいて、プロセス26092の実行中に、行735で最初のSIOCSIFADDR: Permission deniedエラーが発生します:ifconfig eth2 inet 0 uprootだけが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が所有している必要があります)

5
Riccardo Murri

Dhclientを実行すると、「dmesg」の出力は何を示しますか?

Hardyを実行している場合、AppArmorはデフォルトのインストールの一部です。 dhclientプロファイルが手に負えなくなった可能性があります。 「sudo aa-status」をチェックして、そこで何が起こっているのかを確認してください。

また、/ etc/network/interfacesファイルはどのように読み込まれますか? dhclientがやりたくないアドレスやルートなどが競合しているのでしょうか?

2
Kees Cook

https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/19740/comments/67 の状況の繰り返しではないことを確認するために、Sudo dpkg --configure -aを実行してください=

1
jneves

これは実際にはUbuntu 8.04のバグです。いくつかのユースケースでは、nscdをインストールする必要があります(たとえば、openvpnを使用する場合)、またはdhclientは機能しません。これは、新しいUbuntuリリースでは発生しません。

1
mniess

そのパッケージが見つからない場合はnscdをインストールしてみます。これで動作しない場合は、libnss-dbもインストールします。

それが問題を解決するかどうかはわかりませんが、これらはトレースが見つけようとしているものであり、失敗します。

1
txwikinger