Hoạt động không được phép khi root - El Capitan (vô hiệu hóa root)


236

Tôi đang cố gắng chuyển thứ gì đó sang / usr / bin trên OS X El Capitan. Tôi đã vô hiệu hóa rootless bằng các lệnh sau: sudo nvram boot-args="rootless=0"; sudo rebootnhưng tôi vẫn gặp lỗi tương tự:

MacBook-Air:~ Mark$ sudo cp class-dump /usr/bin
Password:
cp: /usr/bin/class-dump: Operation not permitted
MacBook-Air:~ Mark$ sudo mv class-dump /usr/bin
mv: rename class-dump to /usr/bin/class-dump: Operation not permitted

14
Tại sao bạn lại cố gắng đưa lớp kết xuất vào / usr / bin? Bổ sung cục bộ thuộc về / usr / local / bin, và rootless cho phép bạn đặt mọi thứ ở đó ...
Gordon Davisson

1
Chỉ cần tạo một bí danh trong ~ / .bash_profile và không frack với / usr / bin
Warren P

5
class-dump được sử dụng trực tiếp cho lập trình (công cụ kỹ thuật đảo ngược - trực tiếp để lập trình), vì vậy lý do đóng không hợp lệ. Bên cạnh đó, 28 sao, gần 40 câu hỏi và 90 câu trả lời có nghĩa là câu hỏi rất hữu ích.
Vive

kỹ thuật đảo ngược bởi vì nó được sử dụng để có được một danh sách các lớp?
marciokoko

Câu trả lời:


355

Nvm. Đối với bất kỳ ai khác có vấn đề này, bạn cần khởi động lại máy mac của mình và nhấn ⌘ + R khi khởi động. Sau đó vào Tiện ích> Terminal và nhập các lệnh sau:

csrutil disable
reboot 

Đây là kết quả của Bảo vệ toàn vẹn hệ thống. Thêm thông tin ở đây .

BIÊN TẬP

Nếu bạn biết những gì bạn đang làm và đã quen với việc chạy Linux, bạn nên sử dụng giải pháp trên vì nhiều hạn chế của SIP là một nỗi đau hoàn toàn.

Tuy nhiên, nếu bạn là người thích mày mò / noob / "poweruser" và không biết bạn đang làm gì, điều này có thể rất nguy hiểm và bạn nên sử dụng câu trả lời dưới đây .


2
@Chris, bạn sẽ cần khởi động lại với CMD + R một lần nữa, mở terminal và chạy csrutil enable; reboot. Lệnh không hoạt động trong chế độ bình thường không may.
Alexander Kachkaev

7
@AlexanderKachkaev Yep, đó là những gì tôi đã làm. Tôi chỉ muốn chỉ ra rằng mọi người nên kích hoạt lại sau khi thực hiện các thay đổi! Nếu không, bảo vệ toàn vẹn hệ thống bị vô hiệu hóa vĩnh viễn có thể dẫn đến các vấn đề nghiêm trọng.
Chris

9
Nó sẽ chỉ dẫn đến các vấn đề nghiêm trọng nếu bạn xóa / sửa đổi một cái gì đó bạn không nên xóa / sửa đổi. Nói cách khác, nếu bạn biết bạn đang làm gì, việc để nó bị vô hiệu hóa là hoàn toàn an toàn.
Clintm

16
Bất cứ ai sử dụng để chạy trên linux đều có thể muốn để điều này bị vô hiệu hóa. Đó là một cơn đau hoàn toàn ở mông.
mschuett

3
@Chris không có ý nghĩa gì khi tự còng tay vào ghế văn phòng của bạn để tránh bị xe đâm ... nói cách khác ... nếu bạn biết nhìn cả hai cách trước khi bạn băng qua đường ... thì hoàn toàn không an toàn tự còng tay vào ghế
Clintm

254

Giải pháp chính xác là sao chép hoặc cài đặt để /usr/local/binkhông /usr/bin. Điều này là do Bảo vệ toàn vẹn hệ thống (SIP) . SIP làm cho chỉ /usr/binđọc nhưng để lại /usr/locallà đọc-ghi.

SIP không nên bị vô hiệu hóa như đã nêu trong câu trả lời ở trên vì nó thêm một lớp bảo vệ chống lại phần mềm độc hại có quyền truy cập root. Dưới đây là một lời giải thích đầy đủ về những gì SIP làm và tại sao nó hữu ích.

Như được đề xuất trong câu trả lời này, người ta không nên vô hiệu hóa SIP (chế độ không root) "Không nên tắt chế độ không root! Cách tốt nhất là chỉ cài đặt công cụ tùy chỉnh thành" / usr / local "."


8
Điều này đã khắc phục vấn đề của tôi. Cảm ơn các liên kết! Không root hoặc vô hiệu hóa mọi thứ trong chế độ phục hồi có vẻ siêu nguy hiểm! Vui mừng tôi tìm thấy điều này.
caokey

1
Điều này không thực sự là mánh khóe đối với tôi - tôi đã có một số bí danh may mắn (ví dụ, trong trường hợp của tôi) javađối với các /usr/local/bin/javabí danh bashrc của tôi, sau khi tôi tạo liên kết thích hợp trong thư mục đó như câu trả lời này cho thấy.
Eli Albert

Câu trả lời này đã giải quyết vấn đề của tôi một cách hoàn hảo. Nó phải là câu trả lời được chấp nhận vì nó không yêu cầu sửa đổi hệ thống và không cần khởi động lại.
Stephan

Vì vậy, điều này không để lại rmbất cứ điều gì trong /usr/bin/? Tôi hiểu SIP có mục đích của nó, nhưng muốn loại bỏ một thực thi cụ thể.
Brad Solomon

1
Tôi có /usr/local/bintrong đường dẫn của mình và openssl 1.0.2n được liên kết chính xác với nhau /usr/local/bin/opensslnhưng mỗi khi tôi làm điều which opensslđó vẫn hiển thị phiên bản /usr/bin/opensslcũ hơn OpenSSL 0.9.8zh 14 Jan 2016. Làm cách nào để hệ thống của tôi thích /usr/local/bin/opensslcái này hơn cái kia?
Francisc0

15

Nếu bạn muốn kiểm soát /usr/bin/

Bạn sẽ cần phải khởi động lại hệ thống của bạn:

Ngay sau âm thanh khởi động, nhấn giữ Command-R để khởi động vào Hệ thống khôi phục

Nhấp vào menu Tiện ích và chọn Terminal

Nhập csrutil vô hiệu hóa và nhấn return

Nhấp vào menu và chọn Khởi động lại

Khi bạn đã cam kết thay đổi của mình, hãy đảm bảo bật lại SIP! Nó làm rất nhiều để bảo vệ hệ thống của bạn. (Các bước tương tự như trên trừ loại: csrutil enable)


0

Nếu sau khi gọi "csrutil bị vô hiệu hóa", lệnh của bạn vẫn không hoạt động, hãy thử với "sudo" trong terminal, ví dụ:

sudo mv geckodriver /usr/local/bin

Và nó nên hoạt động.

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.