ディレクトリを/usr/bin
一覧表示すると、 ping
赤地に黄色で表示されます。
このファイルには特別な機能はありません:
$ file /usr/bin/ping
/usr/bin/ping: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for
GNU/Linux 2.6.32, BuildID[sha1]=2508ea2a85b70c68967b3e6345541430f5317d5f,
stripped
$ stat /usr/bin/ping
File: '/usr/bin/ping'
Size: 62096 Blocks: 136 IO Block: 4096 regular file
Device: 802h/2050d Inode: 4457229 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:ping_exec_t:s0
Access: 2016-11-01 10:02:57.332925719 +0100
Modify: 2016-06-22 14:01:14.000000000 +0200
Change: 2016-07-10 23:41:59.623796126 +0200
Birth: -
によるとターミナル内のさまざまな色は何を意味しますか?、色の解釈をリストするスクリプトが見つかります。「赤地に黄色」は「ca」を意味します。
「ca」はどういう意味ですか? おそらく、このファイルは他の場所からハードリンクされている (/usr/bin/ping
そして/usr/ping
同じファイルである)ことを意味します。
PS 視聴中に疑問が浮かびましたDirty COW の説明ping
Ubuntu 上のコマンドは setuid root として表示されますが、これは奇妙に聞こえます。
答え1
これは、 がping
追加機能を持っていることを示します。
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
または(Fedora では最大 30):
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep
これping
により、 として実行せずに raw ソケットを開く (および ICMP パケットを送受信する) ことができますroot
。setcap(8)
そしてcapabilities(7)
詳細を教えてください。
歴史的には、ping
setuid でインストールされroot
、raw ソケットを使用できるように実行されていました。機能が使用可能になると、多くのディストリビューションは、権限に対するより細かい制御が望ましいと思われるため、代わりにそれらを使用するように切り替えました。ただし、Ubuntu では、インストーラーに問題があるようですなので、ping
setuidroot
でインストールされています(ケーパビリティコードは無効になっています)関連するメンテナースクリプト、Debianから来ており、ping
設定されている機能の使用もし可能なら)。
マンping
ページ要件を説明するしたがって:
ping
CAP_NET_RAW
1) プログラムが非エコークエリに使用される場合 (オプションを参照)、または 2) カーネルが非 raw ICMP ソケットをサポートしていない場合、または 3) ユーザーが ICMP エコーソケットを作成することが-N
許可されていない場合は、実行機能が必要です。プログラムは、set-uid ルートとして使用できます。
カーネル2.6.39以降では、プログラムがICMPエコーメッセージを送受信できるようにする別のメカニズム:net.ipv4.ping_group_range
これは、Fedora 31以降で、ping
追加機能なしで動作できるようにするために使用されます(特に、ルートレスコンテナ内)。setuid と機能なしで Fedora で ping はどのように機能しますか?詳細については。