web-dev-qa-db-ja.com

chrootでpingが機能しない

Chroot環境でpingコマンドを使用するにはどうすればよいですか?

$ ping 8.8.8.8
ping: icmp open socket: Operation not permitted

現在、CentOを使用していますが、理想的には、すべてのchroot環境で機能するソリューションが必要です。

2
kamal

Linuxでは、pingをrootとして実行する必要があります(生のIPソケットをバインドする必要があるため、通常のユーザーはUDPとTCPしか実行できません)。 setuidrootになるように設計されています。 chroot内のコピーがsetuidrootではないようです。権限を修正します。

chown root:root /bin/ping; chmod u+srwx,go=rx /bin/ping

Chrootには、setuid(またはsetgid)である必要のある他のコマンド、特にsuSudoがある場合があることに注意してください。

この回答は、jailのような制限のあるものではなく、chrootを想定していることに注意してください。

指摘されているように、pingには生のIPソケットをバインドするためのアクセス許可が必要です。従来、setuidは、通常のユーザーが使用できるようにするために使用されてきました。ただし、機能(POSIX 1003.1e、capabilities(7))を使用すると、最小限の機能セットを選択的に有効にして、潜在的な脆弱性によるセキュリティへの影響を制限できます。

pingには機能CAP_NET_RAWが必要です。バイナリへのパスが/usr/bin/pingであるとすると、ツールsetcapを使用して機能を設定できます。

setcap cap_net_raw+ep /usr/bin/ping

getcapを使用して、結果を確認します。

getcap /usr/bin/ping

出力は次のようになります

/ usr/bin/ping = cap_net_raw + ep

pingが機能するはずです。

3
wzhd

これらのバイナリがパスに存在する限り、chroot内でpingまたはgnuツールチェーンの他の部分を使用しても問題はありません。これらのコマンドにアクセスできない場合は、環境変数を確認する必要があります。

0
Rook