บทนำ
ความสามารถของ Linux เป็นคุณลักษณะพิเศษในเคอร์เนล Linux ที่ให้สิทธิ์กระบวนการเฉพาะและสิทธิพิเศษที่สามารถเรียกทำงานแบบไบนารีที่สงวนไว้สำหรับกระบวนการที่ ID ผู้ใช้ที่มีประสิทธิภาพคือ 0 (ผู้ใช้รูทและผู้ใช้รูทเท่านั้นมี UID 0)
บทความนี้จะอธิบายถึงความสามารถที่มีอยู่การใช้งานและวิธีตั้งค่าและการลบออก โปรดทราบว่าการตั้งค่าความสามารถในการปฏิบัติการมีแนวโน้มที่จะลดความปลอดภัยของระบบของคุณ ดังนั้นคุณควรพิจารณาทดสอบระบบที่ไม่ใช่ผลิตภัณฑ์ก่อนใช้งานความสามารถในการผลิต
ข้อกำหนดเบื้องต้น
- ระบบ Linux ที่คุณมีสิทธิ์เข้าถึงรูท (ผ่านผู้ใช้รูทหรือผู้ใช้ที่มีสิทธิ์เข้าถึง sudo)
คำอธิบาย
โดยพื้นฐานแล้วเป้าหมายของความสามารถคือการแบ่งอำนาจของ 'รูท' ออกเป็นสิทธิพิเศษที่เฉพาะเจาะจงดังนั้นหากกระบวนการหรือไบนารีที่มีความสามารถอย่างน้อยหนึ่งถูกใช้ประโยชน์ความเสียหายที่อาจเกิดขึ้นจะถูก จำกัด เมื่อเปรียบเทียบกับกระบวนการเดียวกันที่ทำงานเป็นรูท
ความสามารถในการตั้งค่ากระบวนการและไฟล์ที่ปฏิบัติการได้ กระบวนการที่เกิดจากการเรียกใช้ไฟล์สามารถเพิ่มความสามารถของไฟล์นั้นได้
ความสามารถในการใช้งานบนลีนุกซ์นั้นมีมากมายและหลายอย่างได้เพิ่มเข้ามาตั้งแต่รีลีสดั้งเดิม บางส่วนของพวกเขามีดังนี้:
CAP_CHOWN
: ทำการเปลี่ยนแปลง ID ผู้ใช้และ ID กลุ่มของไฟล์
CAP_DAC_OVERRIDE
: แทนที่ DAC (การควบคุมการเข้าถึงตามอำเภอใจ) ตัวอย่างเช่น vto บายพาสการอ่าน / เขียน / ดำเนินการตรวจสอบสิทธิ์
CAP_KILL
: ข้ามการตรวจสอบสิทธิ์สำหรับการส่งสัญญาณไปยังกระบวนการต่างๆ
CAP_SYS_NICE
: เพิ่มความสวยงามของกระบวนการ ( คำอธิบายของความดีสามารถพบได้ที่นี่ )
CAP_SYS_TIME
: ตั้งค่าระบบและนาฬิกาฮาร์ดแวร์ตามเวลาจริง
man 7 capabilities
สำหรับรายการเต็มรูปแบบเรียกใช้
ความสามารถถูกกำหนดเป็นชุดคือ "อนุญาต", "สืบทอดได้", "มีผลบังคับใช้" และ "ล้อมรอบ" สำหรับเธรดและ "อนุญาต", "สืบทอดได้" และ "มีผลบังคับ" สำหรับไฟล์ ชุดเหล่านี้กำหนดพฤติกรรมที่ซับซ้อนที่แตกต่างกันคำอธิบายแบบเต็มอยู่นอกเหนือขอบเขตของบทความนี้
เมื่อตั้งค่าความสามารถในไฟล์เราจะใช้ "ได้รับอนุญาต" และ "มีประสิทธิภาพ" เกือบทุกCAP_DAC_OVERRIDE+ep
ครั้ง แจ้งให้ทราบ+ep
ซึ่งหมายถึงชุดดังกล่าวข้างต้น
การทำงานกับความสามารถของไฟล์
แพ็คเกจที่จำเป็น
มีสองเครื่องมือหลักที่มีgetcap
และsetcap
ที่ตามลำดับสามารถดูและตั้งค่าแอตทริบิวต์เหล่านี้
- บน Debian และ Ubuntu เครื่องมือเหล่านี้จัดทำโดย
libcap2-bin
แพ็คเกจซึ่งสามารถติดตั้งได้กับ:apt install libcap2-bin
- บน CentOS และ Fedora
libcap
จำเป็นต้องมีแพ็คเกจ:yum install libcap
- บน Arch Linux มีการจัดเตรียมโดย
libcap
:pacman -S libcap
ความสามารถในการอ่าน
หากต้องการดูว่าไฟล์มีชุดความสามารถใด ๆ คุณสามารถเรียกใช้getcap /full/path/to/binary
ตัวอย่างเช่น:
root@demo:~# getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
root@demo:~# getcap /usr/bin/rcp
/usr/bin/rcp = cap_net_bind_service+ep
หากคุณต้องการค้นหาความสามารถที่ตั้งค่าไว้แล้วในระบบของคุณคุณสามารถค้นหาทั้งระบบไฟล์ซ้ำโดยใช้คำสั่งต่อไปนี้:
getcap -r /
เนื่องจากความจริงที่ว่าระบบไฟล์เสมือน (เช่น/proc
) ไม่สนับสนุนการดำเนินการเหล่านี้คำสั่งด้านบนจะสร้างข้อผิดพลาดหลายพันข้อดังนั้นผลลัพธ์ที่ดีกว่าควรใช้สิ่งต่อไปนี้:
getcap -r / 2>/dev/null
การกำหนดและการลบความสามารถ
การตั้งค่าความสามารถโดยเฉพาะอย่างยิ่งในไฟล์, setcap "capability_string" /path/to/file
การใช้งาน
setcap -r /path/to/file
ในการลบความสามารถทั้งหมดจากแฟ้มใช้
สำหรับการสาธิตเราจะสร้างไฟล์เปล่าในไดเรกทอรีปัจจุบันให้ความสามารถแล้วลบออก เริ่มต้นด้วยสิ่งต่อไปนี้:
root@demo:~# touch testfile
root@demo:~# getcap testfile
คำสั่งที่สองไม่สร้างเอาต์พุตหมายความว่าไฟล์นี้ไม่มีความสามารถใด ๆ
ถัดไปตั้งค่าความสามารถสำหรับไฟล์:
root@demo:~# setcap "CAP_CHOWN+ep" testfile
root@demo:~# getcap testfile
testfile = cap_chown+ep
"CAP_CHOWN + ep" ถูกใช้เป็นตัวอย่าง แต่สามารถกำหนดได้ในลักษณะนี้
ตอนนี้ลบความสามารถทั้งหมดออกจากtestfile
:
root@demo:~# setcap -r testfile
root@demo:~# getcap testfile
อีกครั้งจะไม่มีผลลัพธ์เนื่องจาก "CAP_CHOWN + ep" ถูกลบ
ข้อสรุป
ความสามารถมีประโยชน์หลายอย่างและสามารถช่วยกระชับความปลอดภัยของระบบของคุณ หากคุณใช้บิต SUID บนไฟล์สั่งการของคุณให้พิจารณาแทนที่ด้วยความสามารถเฉพาะที่จำเป็น