ฉันกำลังทดลองกับความสามารถบน Debian Gnu / Linux
ฉันได้คัดลอก / bin / ping ไปยังไดเรกทอรีการทำงานปัจจุบันของฉัน ตามที่คาดไว้มันไม่ทำงาน แต่เดิมเป็น setuid root
จากนั้นฉันก็ให้ความสามารถในการ ping น้อยที่สุด (ไม่ใช่รูท) ด้วยการทำsudo /sbin/setcap cap_net_raw=ep ./ping
และการ ping ของฉันก็เป็นไปตามที่คาดไว้
จากนั้นsudo /sbin/setcap -r ./ping
ให้ยกเลิกความสามารถนั้น ตอนนี้ไม่ทำงานตามที่คาดไว้
ตอนนี้ผมพยายามที่จะได้รับการทำงาน ping capsh
ใช้
capsh
ไม่มีสิทธิ์ดังนั้นฉันต้องเรียกใช้เป็นรูท แต่จากนั้นดร็อปรูทและใช้สิทธิ์อื่น ๆ ทั้งหมด
ฉันคิดว่าฉันต้องการsecure-keep-caps
เช่นกันนี่ไม่ได้จัดทำเป็นเอกสารcapsh
แต่อยู่ในคู่มือความสามารถ /usr/include/linux/securebits.h
ผมได้หมายเลขบิตจาก ดูเหมือนว่าถูกต้องเนื่องจากผลลัพธ์ของการ--print
แสดงบิตเหล่านี้จะถูกต้อง
ฉันเล่นซอเป็นเวลาหลายชั่วโมงจนฉันมีสิ่งนี้
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
อย่างไรก็ตามping
ข้อผิดพลาดด้วยping: icmp open socket: Operation not permitted
นี่คือสิ่งที่เกิดขึ้นเมื่อไม่มีความสามารถ นอกจากนี้ยังมี--print
การแสดงนี้ไม่พอเราต้องCurrent: =p cap_net_raw+i
e
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"
จะกำหนดความสามารถในการCurrent: = cap_net_raw+eip
นี้ถูกต้อง root
แต่ใบเราเป็น
แก้ไข-1
ฉันได้ลองแล้ว sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
สิ่งนี้ผลิต:
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
ข้อผิดพลาดแรกคาดว่าเป็นsecure-noroot: yes
แต่ที่สองไม่ได้Current: = cap_net_raw+eip
แก้ไข-2
ถ้าฉันใส่ไว้==
ก่อนหน้า--print
ตอนนี้ก็จะปรากฏCurrent: = cap_net_raw+i
ขึ้นเพื่ออธิบายข้อผิดพลาดก่อนหน้านี้ แต่ไม่ใช่ว่าทำไมเราถึงสูญเสียความสามารถเมื่อเปลี่ยนจากรูทฉันก็secure-keep-caps
ควรแก้ไขมัน
แก้ไข-3
จากสิ่งที่ฉันเห็นฉันสูญเสียประสิทธิผล (e) และได้รับอนุญาต (p) เมื่อเรียกใช้ exec สิ่งนี้คาดว่าจะเกิดขึ้น แต่ฉันคิดว่าการรักษาความปลอดภัยควรปิดกั้นการสูญหาย ฉันพลาดอะไรไปรึเปล่า.
แก้ไข-4
ฉันทำการค้นคว้าเพิ่มเติมและอ่านคู่มืออีกครั้ง ดูเหมือนว่าปกติe
และp
ความสามารถจะหายไปเมื่อ: คุณเปลี่ยนจากผู้ใช้root
(หรือนำไปใช้secure-noroot
ทำให้ผู้ใช้รูทปกติ) สิ่งนี้สามารถแทนที่ได้ด้วยsecure-keep-caps
; เมื่อคุณโทรexec
มาฉันจะบอกได้ว่านี่เป็นค่าคงที่
เท่าที่ฉันสามารถบอกได้มันทำงานได้ตามคู่มือ capsh
เท่าที่ผมสามารถบอกได้ว่าไม่มีทางที่จะทำอะไรที่เป็นประโยชน์กับไม่มี เท่าที่ผมสามารถบอกความสามารถในการใช้งานที่คุณจำเป็นต้องใช้งาน: exec
ใช้ความสามารถในไฟล์หรือมีความสามารถในการโปรแกรมทราบที่ไม่ได้ใช้ ดังนั้นจึงไม่มีเสื้อคลุมพิเศษ
ดังนั้นตอนนี้คำถามของฉันคือสิ่งที่ฉันขาดหายไปมีcapsh
ไว้เพื่ออะไร
แก้ไข-5
ฉันได้เพิ่มความสามารถรอบข้างคำตอบแล้ว อาจจะcapsh
สามารถใช้กับความสามารถที่สืบทอด แต่จะมีประโยชน์สิ่งเหล่านี้จะต้องมีการตั้งค่าในไฟล์ปฏิบัติการ ฉันไม่สามารถเห็นว่า capsh สามารถทำอะไรที่มีประโยชน์โดยไม่ต้องมีความสามารถในการล้อมรอบหรือเพื่อให้ความสามารถที่สืบทอดมา
รุ่น:
capsh
จากlibcap2-bin
เวอร์ชันแพ็คเกจ1:2.22-1.2
- ก่อนที่จะแก้ไข-3 ผมคว้าล่าสุด
capsh
จากgit://git.debian.org/collab-maint/libcap2.git
และเริ่มใช้มัน uname -a
Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
ผู้ใช้ที่ดินคือ 32 บิต
capsh
ในกรณีที่ไม่มีสภาพแวดล้อม (เหมือนเดิม) ฉันกำลังคิดถึงอะไร มันต้องมีประโยชน์
capsh
จาก repo ที่ดูแลรักษาร่วมกันจะไม่ให้“ ล่าสุด” แก่คุณcapsh
แพ็คเกจ Debian ยังไม่รองรับความสามารถรอบข้าง ต้นน้ำ 2.27 ทำ