PING icmp open socket:操作はvserverで許可されていません


14

複数の仮想マシンで仮想サーバー環境を実行しています。単一のVMには次の問題があります。

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

$ ls -l $(which ping)
-rwsr-xr-x 1 root root 30736 2007-01-31 00:10 /bin/ping

$ whoami
root

$ mount
/dev/hdv1 on / type ufs (defaults)
none on /proc type proc (0)
none on /tmp type tmpfs (size=16m,mode=1777)
none on /dev/pts type devpts (gid=5,mode=620)

$ uname -a
Linux v-web1 2.6.27.55-vs2.3.0.36.9 #1 SMP Tue Apr 28 11:35:00 CEST 2015 i686 GNU/Linux

ホストマシン上およびそこにある他のすべてのVMホスト上で、Pingは正常に動作することに注意してください。

誰でも私を助けるアイデアがありますか?


ある/bin/pingセットuidを他のマシンには?このVMでTCP / IPが正しくセットアップされていますか?DNS、traceroute、HTTPなどの他の機能はありますか?
デビッドシュワルツ

2
iputils-pingを再インストールしようとしましたか?
ナビルブーレナン

別の情報が役立つ場合があります。これは、Apacheを実行する非常に生産性の高いマシンであり、1秒あたり約5〜7回のアクセスがあります。昨夜新しいハードウェアに移動しました。それ以来、MuninはPingが機能していないことを示しています。
rexkogitans

回答:


12

TL; DRバージョン:再インストール iputils-ping

私はそれが使用することが示唆されているオンラインを見ました

chmod u+s $( which ping );

ただし、これにより、ユーザーはプリロードとフラッドを変更できます。これにより、ユーザーはローカルマシン、別のマシン、またはネットワークのいずれかでサービス拒否を行うことができます。

@ nabil-bourenaneが提案したものを試し、再インストールiputils-pingすることで問題が解決し、SUIDビットが設定されていません。

username@server:~$ ls -l $( which ping );
-rwxr-xr-x 1 root root 44104 Nov  8  2014 /bin/ping

SUIDビットが設定されている場合、次のようになります

username@server:~$ ls -l $( which ping );
-rwsr-xr-x 1 root root 44104 Nov  8  2014 /bin/ping

すでにrootである場合、SUID rootバイナリはあまり変わりません。
ファルコンモモット

@FalconMomot、ソリューションを追加しました。
-rexkogitans

1

解決策は、Linuxシステム機能を設定して、ホストマシン上でrawソケットを許可することです。

これは非常にvサーバー固有の問題であるため、解決策は次の名前の単一行ファイルを作成することです/etc/vservers/VMNAME/bcapabilities

NET_RAW

VMを再起動します。


1
「そして、どのようにこれを達成しますか?」完全な答えとして役立ちます。
ILMostro_7

4年後、私は受け入れられた答えを私のものに変えました。それは本当に質問に答えているからです。これはv-serverの問題であり、ping実行可能ファイルのファイルモードとは関係ありません。
レックスコギタン

1

申し訳ありませんがコメントできません。この問題は、最小限のインストールで稼働中のシステムのアーカイブを抽出した後に私に打撃を与えました。

上記の答えはすべて機能します。しかし、@ Nabil Bourenaneと@Linxによって提案されたものがセキュリティのために好まれます。@rexkogitansのコメントに答えるために、ここでiputils-ping.postinst(/ var / lib / dpkg / info / ...)から引用します。

if command -v setcap > /dev/null; then
    if setcap cap_net_raw+ep /bin/ping; then
        chmod u-s /bin/ping
    else
        echo "Setcap failed on /bin/ping, falling back to setuid" >&2
        chmod u+s /bin/ping
    fi
else
    echo "Setcap is not installed, falling back to setuid" >&2
    chmod u+s /bin/ping
fi

これは基本的にiputils-pingを設定するときに、最初にsetcapを試し、それが失敗した場合はchmod u + sを使用することを示しています。これが、iputils-pingの再インストールが機能する理由です。


1
したがって、これは機能します:setcap cap_net_raw + ep / bin / ping
rlf

それは私のコメントではなく、私自身の質問に対する答えでした。コンテナ内から問題を解決することはできないため、インストール後のフックが何をしても意味がありません。
rexkogitans

確かにsetcap cap_net_raw+p $(which ping)、ルートとして修正します。このブログ投稿には徹底的な説明があります:Linux Capabilities and Ping
mivk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.