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設定を設定することで修正しました。これで接続を維持できます。しかし、それは私の意見ではかなりいハックです。
http://silenzio.dk/pi/dhc.strace のスタックトレースに基づいて、プロセス26092の実行中に、行735で最初のSIOCSIFADDR: Permission denied
エラーが発生します:ifconfig eth2 inet 0 up
。 root
だけがifconfig
を上げることができるので、fork()
/exec()
のチェーンをトレースして、UIDの変更を探しましょう。それは次のことがわかります:
そのため、実行中の子プロセスに必要なルート権限がないため、エラーが発生します。なぜこれが起こるのですか? 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
が所有している必要があります)
Dhclientを実行すると、「dmesg」の出力は何を示しますか?
Hardyを実行している場合、AppArmorはデフォルトのインストールの一部です。 dhclientプロファイルが手に負えなくなった可能性があります。 「sudo aa-status」をチェックして、そこで何が起こっているのかを確認してください。
また、/ etc/network/interfacesファイルはどのように読み込まれますか? dhclientがやりたくないアドレスやルートなどが競合しているのでしょうか?
https://bugs.launchpad.net/ubuntu/+source/dhcp3/+bug/19740/comments/67 の状況の繰り返しではないことを確認するために、Sudo dpkg --configure -a
を実行してください=
これは実際にはUbuntu 8.04のバグです。いくつかのユースケースでは、nscdをインストールする必要があります(たとえば、openvpnを使用する場合)、またはdhclientは機能しません。これは、新しいUbuntuリリースでは発生しません。
そのパッケージが見つからない場合はnscdをインストールしてみます。これで動作しない場合は、libnss-dbもインストールします。
それが問題を解決するかどうかはわかりませんが、これらはトレースが見つけようとしているものであり、失敗します。