ไม่อนุญาตการดำเนินการเมื่ออยู่บนรูท - El Capitan (ปิดใช้งานรูท)


236

ฉันกำลังพยายามย้ายบางสิ่งไปยัง/ usr / binบน OS X El Capitan ฉันได้ปิดการใช้งาน rootless โดยใช้คำสั่งต่อไปนี้: sudo nvram boot-args="rootless=0"; sudo rebootแต่ฉันได้รับข้อผิดพลาดเดียวกัน:

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
เหตุใดคุณจึงพยายามใส่ class-dump ใน / usr / bin เพิ่มเติมในพื้นที่อยู่ใน / usr / local / bin และรากช่วยให้คุณสามารถนำสิ่งที่มี ...
กอร์ดอน Davisson

1
เพียงสร้างนามแฝงใน ~ / .bash_profile และอย่าหงุดหงิดกับ / usr / bin
Warren P

5
class-dump ใช้สำหรับการเขียนโปรแกรมโดยตรง (เครื่องมือวิศวกรรมย้อนกลับ - สำหรับการเขียนโปรแกรมโดยตรง) ดังนั้นเหตุผลของการปิดจึงไม่ถูกต้อง นอกจากนี้ 28 ดาวเกือบ 40 upvotes คำถามและ 90 upvotes ตอบคำถามหมายความว่าคำถามนี้มีประโยชน์
Vive

วิศวกรรมย้อนกลับเพราะมันใช้สำหรับรับรายการคลาส?
marciokoko

ที่เกี่ยวข้อง: apple.stackexchange.com/questions/339862/…
Melebius

คำตอบ:


355

nvm สำหรับคนอื่นที่มีปัญหานี้คุณต้องรีบูตเครื่อง mac และกด⌘ + Rเมื่อบูทเครื่อง จากนั้นไปที่Utilities> Terminalและพิมพ์คำสั่งต่อไปนี้:

csrutil disable
reboot 

นี่คือผลลัพธ์ของการป้องกันความสมบูรณ์ของระบบ ข้อมูลเพิ่มเติมที่นี่

แก้ไข

หากคุณรู้ว่าคุณกำลังทำอะไรและคุ้นเคยกับการใช้งานลีนุกซ์คุณควรใช้วิธีแก้ปัญหาข้างต้นเนื่องจากข้อ จำกัดSIPหลายอย่างนั้นเป็นความเจ็บปวดอย่างสมบูรณ์

แต่ถ้าคุณเป็นนักประดิษฐ์ / Noob / "poweruser"และไม่ทราบว่าสิ่งที่คุณกำลังทำอยู่นี้อาจเป็นอันตรายมากและคุณจะดีกว่าการใช้คำตอบดังต่อไปนี้


2
@ Chris, คุณจะต้องรีบูตกับ CMD + R csrutil enable; rebootอีกครั้งเปิดสถานีและเรียกใช้ คำสั่งไม่ทำงานในโหมดปกติโชคไม่ดี
Alexander Kachkaev

7
@AlexanderKachkaev ใช่นั่นคือสิ่งที่ฉันทำ ฉันแค่ต้องการชี้ให้เห็นว่าทุกคนควรเปิดใช้งานอีกครั้งหลังจากทำการเปลี่ยนแปลง! มิฉะนั้นการป้องกันความสมบูรณ์ของระบบจะถูกปิดใช้งานอย่างถาวรซึ่งอาจนำไปสู่ปัญหาร้ายแรง
Chris

9
มันจะนำไปสู่ปัญหาร้ายแรงหากคุณลบ / แก้ไขสิ่งที่คุณไม่ควรลบ / แก้ไข กล่าวอีกนัยหนึ่งถ้าคุณรู้ว่าคุณกำลังทำอะไรอยู่มันปลอดภัยอย่างยิ่งที่จะปิดการใช้งาน
Clintm

16
ใครก็ตามที่ใช้งานบน linux อาจต้องการปิดการใช้งานนี้ มันเป็นความเจ็บปวดที่สมบูรณ์ในตูด
mschuett

3
@Chris มันไม่สมเหตุสมผลที่จะใส่กุญแจมือกับเก้าอี้สำนักงานของคุณเพื่อหลีกเลี่ยงการถูกรถชน ... กล่าวอีกนัยหนึ่ง ... ถ้าคุณรู้วิธีที่จะดูทั้งสองก่อนที่คุณจะข้ามถนน ... มันปลอดภัยอย่างสมบูรณ์ไม่ เพื่อใส่กุญแจมือตัวเองไปที่เก้าอี้
Clintm

254

วิธีที่ถูกต้องคือการคัดลอกหรือติดตั้งไป/usr/local/binไม่ได้/usr/binนี้เป็นเนื่องจากระบบป้องกันความซื่อสัตย์ (SIP) SIP ทำให้เป็นแบบ/usr/binอ่านอย่างเดียว แต่ปล่อย/usr/localเป็นอ่านเขียน

SIPไม่ควรปิดการใช้งานตามที่ระบุไว้ในคำตอบข้างต้นเพราะจะเป็นการเพิ่มการป้องกันอีกชั้นสำหรับมัลแวร์ที่เข้าถึงรูท นี่คือคำอธิบายที่สมบูรณ์เกี่ยวกับสิ่งที่ SIP ทำและทำไมจึงมีประโยชน์

ตามที่แนะนำในคำตอบนี้ไม่ควรปิดใช้งาน SIP (โหมด rootless) "ไม่แนะนำให้ปิดใช้งานโหมด rootless แนวทางปฏิบัติที่ดีที่สุดคือการติดตั้งข้อมูลที่กำหนดเองเป็น" / usr / local "เท่านั้น


8
นี่เป็นการแก้ไขปัญหาของฉัน ขอบคุณสำหรับลิงค์! การไม่รูทหรือปิดการใช้งานในโหมดการกู้คืนนั้นอันตรายมาก! ดีใจที่พบสิ่งนี้
caokey

1
นี่ไม่ใช่เคล็ดลับสำหรับฉัน - ฉันมีนามแฝงโชค (ตัวอย่างเช่นในกรณีของฉัน) javaไปยัง/usr/local/bin/javaนามแฝง bashrc ของฉันหลังจากที่ฉันสร้างลิงก์ที่เหมาะสมในโฟลเดอร์นั้นตามคำแนะนำนี้
อีไลอัลเบิร์ต

คำตอบนี้แก้ปัญหาของฉันได้อย่างสมบูรณ์แบบ ควรเป็นคำตอบที่ยอมรับเนื่องจากไม่จำเป็นต้องดัดแปลงระบบและไม่ต้องรีบูต
เตฟาน

ดังนั้นสิ่งนี้จะไม่ทิ้งrmสิ่งใดไว้ในนี้/usr/bin/หรือไม่? ฉันเข้าใจว่า SIP มีจุดประสงค์ แต่ต้องการลบไฟล์ที่เรียกใช้งานได้หนึ่งรายการ
แบรดโซโลมอน

1
ฉันมี/usr/local/binในเส้นทางของฉันและ openssl 1.0.2n นั้นเชื่อมโยงอย่างถูกต้อง/usr/local/bin/opensslแต่ทุกครั้งที่ฉันwhich opensslยังคงแสดงให้เห็นว่าเวอร์ชันใดเป็นเวอร์ชัน/usr/bin/opensslเก่ากว่า OpenSSL 0.9.8zh 14 Jan 2016ฉันจะทำให้ระบบของฉันชอบ/usr/local/bin/opensslมากกว่าอีกอันหนึ่งได้อย่างไร
Francisc0

15

หากคุณต้องการควบคุม /usr/bin/

คุณจะต้องรีบูทระบบของคุณ:

หลังจากเสียงบู๊ตกด Command-R ค้างเพื่อบู๊ตเข้าสู่ระบบการกู้คืน

คลิกเมนู Utilities และเลือก Terminal

พิมพ์ csrutil ปิดใช้งานแล้วกด return

คลิกเมนู and และเลือกรีสตาร์ท

เมื่อคุณยืนยันการเปลี่ยนแปลงให้แน่ใจว่าได้เปิดใช้งาน SIP อีกครั้ง! การปกป้องระบบของคุณทำได้มากมาย (ขั้นตอนเดียวกับข้างต้นยกเว้นประเภท: เปิดใช้งาน csrutil)


0

หากหลังจากเรียก "csrutil ที่ปิดใช้งานแล้ว" ยังคงคำสั่งของคุณไม่ทำงานให้ลองด้วย "sudo" ในเทอร์มินัลตัวอย่างเช่น:

sudo mv geckodriver /usr/local/bin

และมันควรจะทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.