ฉันกำลังทดลองกับความสามารถบน 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+ie
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 -aLinux 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 ทำ