機能とsetuidなしでpingが機能する理由

機能とsetuidなしでpingが機能する理由

私はそれから学んだここsetuid特権活動を制御する方法は2つありますcapability

しかし、私のコンピュータでプレイするとき、両方のpingメカニズムをバイパスするようです。

まず、マイコンピュータ/usr/bin/pingcap_net_raw利用可能で、次のものを使用していることを確認してくださいSOCK_RAW

$ ll /usr/bin/ping
-rwxr-xr-x 1 root root 72K Jan 31  2020 /usr/bin/ping

$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep

$ strace -e socket ping <some-ip>
socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 5

バイナリをコピーすると、その機能は削除されますが、それでも機能します。

$ cp /usr/bin/ping ~

$ ll ~/ping
-rwxr-xr-x 1 user user 72K Nov  4 16:54 /home/user/ping

$ getcap ~/ping
[empty result]

$ ~/ping <some-ip>
[it works]

私はとUbuntu 20.04を使用しています5.4.0-52-generic

ベストアンサー1

最近のLinuxシステムではpingの最も基本的な操作には権限は必要ありません。つまり、ICMPエコー要求メッセージを送信し、応答エコー応答メッセージを受信します。

Ubuntu 20.04には2つのping実装があります。デフォルト、開始iputils-ping、setcapがインストールされていますが、CAP_NET_RAWICMPエコーで動作し、権限は必要ありません。それから来るinetutils-pingsetuid ルートをインストールしましたが、権限なしで ICMP エコでも機能します。どちらも ICMP ソケットを使用し、以下を使用するための権限は必要ありません。

socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3

権限の有無にかかわらず、これらの実装ではnetlinkソケットを使用してデフォルトのpingを再現できませんでした。

おすすめ記事