“ / usr / bin / ping” แสดงเป็นสีเหลือง - แดงในโทนสีเริ่มต้นของ Fedora bash หมายความว่าอย่างไร


32

เมื่อรายชื่อไดเรกทอรี/usr/binหนึ่งเห็นว่า ping จะแสดงเป็นสีเหลืองบนสีแดง:

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

สีที่เห็นในแบบแผนทุบตีของ Fedora

"ca" หมายถึงอะไร? อาจหมายความว่าไฟล์นี้มีการเชื่อมโยงจากที่อื่น ( /usr/bin/pingและ/usr/pingเป็นไฟล์เดียวกัน)

ป.ล. คำถามที่เกิดขึ้นในขณะที่ดูExplaining Dirty COWซึ่งpingคำสั่งใน Ubuntu แสดงเป็นรูท setuid ซึ่งฟังดูแปลก ๆ :

ping setuid รูต

คำตอบ:


51

สิ่งนี้บ่งชี้ว่า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การเปิดซ็อกเก็ตดิบ (และส่งและรับแพ็กเก็ต ICMP) rootโดยไม่ต้องทำงานเป็น

setcap(8)และcapabilities(7)ให้รายละเอียดเพิ่มเติม

ในอดีตpingมีการติดตั้ง setuid เพื่อให้มันสามารถทำงานได้rootและสามารถใช้ซ็อกเก็ตดิบได้ เมื่อความสามารถใช้งานได้การกระจายจำนวนมากเปลี่ยนเป็นการใช้สิ่งเหล่านั้นแทนเนื่องจากการควบคุมที่ละเอียดยิ่งขึ้นที่พวกเขาเสนอให้กับสิทธิ์ดูเหมือนจะดีกว่า ใน Ubuntu นั้นมีปัญหากับตัวติดตั้งดังนั้นจึงpingยังคงติดตั้ง setuid root(รหัสความสามารถถูกปิดใช้งานในสคริปต์ของผู้ดูแลที่เกี่ยวข้องซึ่งมาจาก Debian ซึ่งpingมีการกำหนดค่าโดยใช้ความสามารถถ้าเป็นไปได้)

pingmanpage อธิบายถึงความต้องการของตนดังนี้:

pingต้องการCAP_NET_RAWความสามารถในการดำเนินการ 1) หากใช้โปรแกรมสำหรับการสืบค้นแบบ non-echo (ดู-Nตัวเลือก) หรือ 2) หากเคอร์เนลไม่รองรับซ็อกเก็ต ICMP ที่ไม่ใช่แบบดิบหรือ 3) หากผู้ใช้ไม่ได้รับอนุญาตให้สร้าง ICMP echo เบ้า. โปรแกรมอาจใช้เป็น root set-uid


1
ขอบคุณสตีเฟ่น ความรู้ระบบของฉันอ่อนแอ! ฉันไม่ได้รู้ว่าความสามารถในการดำรงอยู่และพวกเขาได้รับในที่นั่นตั้งแต่เคอร์เนล 2.2 ... 26 มกราคม 1999 ตามcapabilities(7)หน้า man, ไม่มีมาตรฐานควบคุมความสามารถ, แต่การใช้ความสามารถของ Linux ขึ้นอยู่กับการถอนมาตรฐาน POSIX.1e; ดูที่นี่
David Tonhofer

สแน็ปช็อตบนหน้าจอของเขาบ่งชี้ว่ารูท suid
Joshua

1
@Joshua ใน Ubuntu ใช่ แต่คำถามเกี่ยวกับ Fedora (ภาพหน้าจอแรก)
Stephen Kitt

2
มันอาจจะคุ้มค่าที่จะกล่าวถึงว่าเหตุผลสำหรับ setuid root ในระบบอื่นนั้นเหมือนกัน (เพื่อให้สามารถส่งและรับแพ็คเก็ต ICMP) เพียงแค่ได้รับอนุญาตอย่างละเอียด
Kevin Reid

ขอบคุณ @KevinReid ฉันได้เพิ่มคำตอบนั้นแล้ว (คำอธิบายของ Ubuntu นั้นซับซ้อนกว่าที่ฉันคิดไว้เล็กน้อย!)
Stephen Kitt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.