私のサーバーはCentOS6を実行しています。ppp0として接続されたSprintブロードバンドデバイスがあります。この接続は再起動が必要になる傾向があるため、Nagiosで監視しようとしています(これはすでにネットワークの他の監視に使用されています)。このコマンドを使用してこのインターフェイスを介してpingを実行しようとするnagiosスクリプトが作成されています。
enter ping -c 1 -I ppp0 google.com | grep ttl
これをrootユーザーとして実行すると正常に機能し、単一のping応答の応答が返されるか、接続が切断されている場合は何も返されません。ただし、ユーザー「nagios」と同じコマンドを実行すると、次のエラーが発生します。
Warning: cannot bind to specified iface, falling back: Operation not permitted
Pingは、pingのeth0インターフェイスにフォールバックします。
インターフェイスの権限では、nagiosユーザーがそれを使用できないようです。このユーザーがこのインターフェースを介してpingできるようにするには、何を変更すればよいかわかりません。助言がありますか?ありがとう
Pingは生のパケットを書き込む必要があるため、rootアクセスが必要です。通常、pingでは、これを実現するためにsetuidビットが設定されます。たとえば、stat -c %a $(which ping)
でpingの許可を確認する場合。ほとんどのシステムは_4775
_を返します。先頭の4はsetuidビットです。これは、このプログラムを実行すると、ファイルを所有しているユーザーのuidの下で実行されることを示します。これが代わりに_755
_を返している場合。 chmod u+s $(which ping)
を実行すると、setuidビットを追加できます。
Linuxでは、推奨される方法はping
(または他のそのようなもの)に特別な機能を与えることです。これにより、setuidビットを介してroot権限で実行する際の落とし穴を回避できます(以下を参照)。
setcap cap_net_raw+ep /bin/ping
機能(POSIX 1003.1e、capabilities(7))は、スーパーユーザーのアクセス許可をきめ細かく制御できるため、rootユーザーの使用を回避できます。ソフトウェア開発者は、システムバイナリの強力なsetuid属性の使用を、より最小限の機能セットに置き換えることをお勧めします。多くのパッケージは、iputilsによって提供されるpingバイナリに使用されるCAP_NET_RAWなどの機能を利用します。これにより、たとえばpingは通常のユーザーによって実行され(setuidメソッドの場合と同様)、同時にpingの潜在的な脆弱性によるセキュリティへの影響を制限します。