ディレクトリをリストするとき/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
は同じファイルです)
追伸 Dirty COWの説明 を見ているときに質問が発生しました。Ubuntuのping
コマンドがsetuid rootとして表示されており、奇妙に聞こえます。
これは、ping
に追加の機能があることを示しています。
_$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
_
または(Fedoraの場合):
_$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep
_
これにより、ping
をroot
として実行しなくても、未加工のソケットを開く(およびICMPパケットを送受信する)ことができます。
setcap(8)
および capabilities(7)
に詳細が記載されています。
歴史的に、ping
はsetuidとしてインストールされ、root
として実行され、rawソケットを使用できるようになりました。機能が使用可能になると、多くのディストリビューションが代わりにそれらを使用するように切り替わりました。それは、パーミッションに対して提供するきめ細かい制御が望ましいように思えるためです。しかし、Ubuntuでは 明らかにインストーラーに問題があります なので、ping
はまだインストールされていますsetuid root
(機能コードは 関連するメンテナーで無効になっています)スクリプト 、これはping
が構成されているDebianからのものです 機能を使用して 可能な場合)。
ping
マンページ その要件を説明 したがって、
ping
を実行するには_CAP_NET_RAW
_機能が必要1)プログラムが非エコークエリに使用される場合(_-N
_オプションを参照)、または2)カーネルが非raw ICMPをサポートしない場合ソケット、または3)ユーザーがICMPエコーソケットの作成を許可されていない場合。プログラムはset-uid rootとして使用できます。