web-dev-qa-db-ja.com

インターフェイスを介したPingのアクセス許可

私のサーバーは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できるようにするには、何を変更すればよいかわかりません。助言がありますか?ありがとう

3
dw.emplod

Pingは生のパケットを書き込む必要があるため、rootアクセスが必要です。通常、pingでは、これを実現するためにsetuidビットが設定されます。たとえば、stat -c %a $(which ping)でpingの許可を確認する場合。ほとんどのシステムは_4775_を返します。先頭の4はsetuidビットです。これは、このプログラムを実行すると、ファイルを所有しているユーザーのuidの下で実行されることを示します。これが代わりに_755_を返している場合。 chmod u+s $(which ping)を実行すると、setuidビットを追加できます。

2
stew

Linuxでは、推奨される方法はping(または他のそのようなもの)に特別な機能を与えることです。これにより、setuidビットを介してroot権限で実行する際の落とし穴を回避できます(以下を参照)。

setcap cap_net_raw+ep /bin/ping

Archlinux Wikiから

機能(POSIX 1003.1e、capabilities(7))は、スーパーユーザーのアクセス許可をきめ細かく制御できるため、rootユーザーの使用を回避できます。ソフトウェア開発者は、システムバイナリの強力なsetuid属性の使用を、より最小限の機能セットに置き換えることをお勧めします。多くのパッケージは、iputilsによって提供されるpingバイナリに使用されるCAP_NET_RAWなどの機能を利用します。これにより、たとえばpingは通常のユーザーによって実行され(setuidメソッドの場合と同様)、同時にpingの潜在的な脆弱性によるセキュリティへの影響を制限します。

1
h0tw1r3