ตอนนี้ El Capitan นั้น“ ไร้ค่า” แล้วมีวิธีใดบ้างที่จะทำให้ dtrace ทำงานได้?


21

ฉันพบว่า dtrace เป็นเครื่องมืออันล้ำค่าสำหรับการแก้ไขข้อบกพร่องและการแก้ไขปัญหาทุกประเภทไม่พูดถึงสคริปต์ชุดเครื่องมือ dtrace สองโหลที่จัดส่งโดย Appleซึ่งเป็นส่วนหนึ่งของ El Capitan

บน El Cap การใช้ dtrace มักส่งผลให้เกิดข้อผิดพลาดอย่างไม่สิ้นสุดทำให้ dtrace ทั้งหมดยกเว้นไร้ประโยชน์

คำตอบ:


18

การป้องกันความสมบูรณ์ของระบบใน 10.11 สามารถปิดใช้งานได้แม้ว่าจะไม่ใช่สิ่งที่คุณควรทำอย่างเบา ๆ

คุณสามารถปิดใช้งาน SIP ทั้งหมดโดยทำสิ่งต่อไปนี้:

  1. รีบูตเครื่อง mac ของคุณ
  2. กด⌘Rค้างไว้ขณะรีบูต
  3. จากเมนูUtilitiesให้เรียกใช้Terminal
  4. ป้อนคำสั่งต่อไปนี้
csrutil disable

อีกทางหนึ่งคุณสามารถเปิดใช้งาน SIP อีกครั้งในขณะที่ยังคงอนุญาตให้dtraceทำงานได้โดยการเรียกใช้สิ่งต่อไปนี้:

csrutil enable --without dtrace

โปรดทราบว่าเมื่อทำเช่นนั้นคุณจะได้รับคำเตือนต่อไปนี้:

นี่คือการกำหนดค่าที่ไม่รองรับซึ่งมีแนวโน้มที่จะแตกในอนาคตและปล่อยให้เครื่องอยู่ในสถานะที่ไม่รู้จัก

เมื่อคุณรีบูทแล้วdtraceจะทำงานได้เหมือนในโยเซมิตี


ทำได้ดีมาก - ฉันพลาดโพสต์นี้เมื่อตอบกระทู้อื่น :-) ฉันจะเสียบวิดีโอและบล็อกเซสชันของ Rich ใหม่อีกครั้ง : derflounder.wordpress.com/2015/10/01/…
bmike

2
สิ่งนี้ไม่เป็นความจริงเลย ด้วยการเปิดใช้งาน DTrace ผ่าน csrutil คุณสามารถเรียกใช้ DTrace ของเคอร์เนลได้ แต่เฉพาะในไบนารีที่ไม่มีการตั้งค่าการให้สิทธิ์แบบ จำกัด คุณไม่สามารถลบการตั้งค่าสถานะการให้สิทธิ์ที่ จำกัด แม้จะเป็น root โดยที่ SIP ทั้งหมดถูกปิด ซึ่งหมายความว่าด้วยการเปิดใช้งาน DTrace คุณสามารถ DTrace ไบนารีที่ไม่ใช่ระบบเท่านั้น อย่างไรก็ตามหากไบนารีที่ไม่ใช่ระบบใช้ shared-lib ที่ติดตั้งในโฟลเดอร์ระบบ (ซึ่งมีโปรแกรมจำนวนมาก) คุณไม่สามารถ DTrace นั้นได้ ดังนั้นวิธีเดียวที่จะทำให้ dtrace ทำงาน 'เหมือนที่เคยทำใน Yosemite' คือการทำสำเนาของโฟลเดอร์ระบบทั้งหมดของคุณและกำจัดมันออกไป
JJ

4

คัดลอกไบนารีไปยังไดเรกทอรีที่ไม่ "จำกัด " ตัวอย่างเช่น /tmp

csrutil disableไม่ทำงานสำหรับ dtruss ในระดับหนึ่ง แต่อย่างที่ @JJ พูดว่าchrootทำงานได้นี่เป็นแรงบันดาลใจให้ฉัน

ถึงกระนั้นฉันก็ไม่รู้ว่าทำไมมันถึงใช้ได้ อาจมีบางอย่างที่เกี่ยวข้องกับ "ไดเรคทอรีที่ได้รับการป้องกัน" ฉันเดา

นี่คือการทดสอบ:

CC@~ $ csrutil status
System Integrity Protection status: disabled.
CC@~ $ sudo dtruss /bin/echo
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
CC@~ $ cp /bin/echo /tmp
CC@~ $ sudo dtruss /tmp/echo

SYSCALL(args)        = return
thread_selfid(0x0, 0x0, 0x0)         = 46811 0
csops(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
issetugid(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
shared_region_check_np(0x7FFF51B6A918, 0x0, 0x7FFF51B6CA20)      = 0 0
stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF51B6BEA8, 0x7FFF51B6CA20      = 0 0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.