Bây giờ El Capitan là người không gốc rễ, có cách nào để dtrace hoạt động không?


21

Tôi đã tìm thấy dtrace là một công cụ vô giá để gỡ lỗi và khắc phục tất cả các vấn đề, chưa kể đến hai chục tập lệnh bộ công cụ dtrace được Apple vận chuyển như một phần của El Capitan.

Mặc dù trên El Cap, việc chạy dtrace thường dẫn đến vô số lỗi khiến cho dtrace trở nên vô dụng.

Câu trả lời:


18

Bảo vệ tính toàn vẹn hệ thống trong 10.11 có thể bị vô hiệu hóa, mặc dù đó không phải là điều bạn nên làm nhẹ nhàng.

Bạn có thể vô hiệu hóa SIP hoàn toàn bằng cách thực hiện như sau:

  1. Khởi động lại máy Mac của bạn
  2. Giữ ⌘R trong khi khởi động lại
  3. Từ menu Tiện ích , chạy Terminal
  4. Nhập lệnh sau
csrutil disable

Ngoài ra, bạn có thể bật lại SIP trong khi vẫn cho phép dtracehoạt động bằng cách chạy như sau:

csrutil enable --without dtrace

Lưu ý rằng khi làm như vậy bạn sẽ nhận được cảnh báo sau:

Đây là một cấu hình không được hỗ trợ, có khả năng bị hỏng trong tương lai và khiến máy của bạn ở trạng thái không xác định.

Khi bạn khởi động lại, dtracesẽ hoạt động như đã làm trong Yosemite.


Tốt lắm - tôi đã bỏ lỡ bài này khi trả lời các chủ đề khác :-) Tôi sẽ Video phiên tái cắm Rich và blog: derflounder.wordpress.com/2015/10/01/...
bmike

2
Điều này không hoàn toàn đúng. Với DTrace được kích hoạt thông qua csrutil, bạn có thể gọi DTrace của kernel - nhưng chỉ trên các tệp nhị phân không có cờ quyền hạn chế. Bạn không thể xóa cờ quyền hạn chế, ngay cả khi đã root, với tất cả SIP bị tắt. Điều này có nghĩa là với DTrace được bật, bạn chỉ có thể DTrace nhị phân không hệ thống. Tuy nhiên, nếu nhị phân không phải là hệ thống sử dụng lib-lib được cài đặt trong các thư mục hệ thống (điều mà rất nhiều chương trình thực hiện), bạn cũng không thể DTrace. Vì vậy, cách duy nhất để khiến dtrace hoạt động 'giống như đã làm trong Yosemite' là tạo một bản sao của tất cả các thư mục hệ thống của bạn và chroot nó
JJ

4

Sao chép nhị phân vào một thư mục không bị "hạn chế", ví dụ, /tmp

csrutil disablekhông làm việc cho dtruss ở một mức độ nào đó. Nhưng như @JJ nói chroothoạt động, điều này truyền cảm hứng cho tôi.

Tôi vẫn không biết tại sao điều này hoạt động. Nó có thể có một cái gì đó để làm với "thư mục được bảo vệ", tôi đoán.

Đây là bài kiểm tra:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.