私はそれから学んだここsetuid
特権活動を制御する方法は2つありますcapability
。
しかし、私のコンピュータでプレイするとき、両方のping
メカニズムをバイパスするようです。
まず、マイコンピュータ/usr/bin/ping
がcap_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_RAW
ICMPエコーで動作し、権限は必要ありません。それから来るinetutils-pingsetuid ルートをインストールしましたが、権限なしで ICMP エコでも機能します。どちらも ICMP ソケットを使用し、以下を使用するための権限は必要ありません。
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3
権限の有無にかかわらず、これらの実装ではnetlinkソケットを使用してデフォルトのpingを再現できませんでした。