Giáp / usr / bin / ping Được hiển thị dưới dạng màu vàng-đỏ trong bảng màu bash Fedora mặc định - có nghĩa là gì?


32

Khi liệt kê thư mục /usr/bin, người ta sẽ thấy nó ping được hiển thị dưới dạng màu vàng-đỏ:

ping hiển thị màu vàng trên đỏ

Các tập tin không có tính năng đặc biệt:

$ 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: -

Theo các màu khác nhau có nghĩa là gì trong thiết bị đầu cuối? , nơi chúng ta có thể tìm thấy một tập lệnh để liệt kê các diễn giải màu sắc, "yellow-on-red" có nghĩa là "ca":

Màu sắc nhìn thấy trong sơ đồ màu bash mặc định của Fedora

"Ca" có nghĩa là gì? Có lẽ nó có nghĩa là tệp này được liên kết cứng từ nơi khác ( /usr/bin/ping/usr/pinglà cùng một tệp)

PS Câu hỏi xảy ra trong khi xem Giải thích về COW bẩn , trong đó pinglệnh trên Ubuntu được hiển thị dưới dạng root setuid, nghe có vẻ lạ:

ping gốc setuid

Câu trả lời:


51

Điều này cho thấy pingcó khả năng bổ sung:

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

hoặc thậm chí (trên Fedora):

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

Điều này cho phép pingmở một ổ cắm thô (và gửi và nhận các gói ICMP) mà không cần chạy như root.

setcap(8)capabilities(7)cung cấp thêm chi tiết.

Trong lịch sử, pingđã được cài đặt setuid để nó có thể chạy rootvà có thể sử dụng các ổ cắm thô; một khi các khả năng trở nên có thể sử dụng được, nhiều bản phân phối đã chuyển sang sử dụng những thứ đó thay vào đó, vì sự kiểm soát chi tiết hơn mà họ cung cấp đối với các quyền có vẻ thích hợp hơn. Mặc dù trong Ubuntu, có một số vấn đề rõ ràng với trình cài đặt , do đó pingvẫn được cài đặt setuid root(mã khả năng bị vô hiệu hóa trong tập lệnh bảo trì có liên quan , xuất phát từ Debian, nơi pingđược cấu hình bằng khả năng nếu có thể).

Các pingmanpage mô tả yêu cầu của nó như sau:

pingyêu cầu CAP_NET_RAWkhả năng được thực thi 1) nếu chương trình được sử dụng cho các truy vấn không có tiếng vang (Xem -Ntùy chọn) hoặc 2) nếu kernel không hỗ trợ ổ cắm ICMP không thô hoặc 3) nếu người dùng không được phép tạo tiếng vang ICMP ổ cắm. Chương trình có thể được sử dụng như root set-uid.


1
Cảm ơn Stephen. Kiến thức hệ thống của tôi còn yếu! Tôi thậm chí còn không biết các khả năng tồn tại và chúng đã ở đó kể từ kernel 2.2 ... ngày 26 tháng 1 năm 1999 . Theo capabilities(7)trang man, Không có tiêu chuẩn nào chi phối các khả năng, nhưng việc triển khai khả năng của Linux dựa trên tiêu chuẩn dự thảo POSIX.1e đã rút; xem tại đây
David Tonhofer

Ảnh chụp màn hình của anh ấy cho thấy root suid.
Joshua

1
@Joshua trong Ubuntu có, nhưng câu hỏi là về Fedora (ảnh chụp màn hình đầu tiên).
Stephen Kitt

2
Điều đáng nói là lý do root setuid trên một hệ thống khác là như nhau (để có thể gửi và nhận các gói ICMP) chỉ thông qua sự cho phép ít chi tiết hơn.
Kevin Reid

Cảm ơn @KevinReid, tôi đã thêm nó vào câu trả lời của mình. (Giải thích về Ubuntu phức tạp hơn một chút so với tôi nghĩ nó sẽ xảy ra!)
Stephen Kitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.