ฉันจะปิดการใช้งานการป้องกันความสมบูรณ์ของระบบ (SIP) AKA“ rootless” บน macOs [OS X] ได้อย่างไร


157

Apple ได้แนะนำการป้องกันความสมบูรณ์ของระบบหรือที่เรียกว่า "rootless" พร้อมด้วย OS X 10.11, El Capitan ฉันเข้าใจว่านี่เป็นขั้นตอนสำหรับการป้องกันมัลแวร์ทั่วไป แต่ในฐานะนักพัฒนาฉันต้องมีสิทธิ์เขียนเพื่อเข้าถึงไฟล์บางไฟล์ที่ถูกล็อคอยู่

ฉันจะปิดการใช้งานการป้องกันนี้ได้อย่างไร


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

5
@Motti Shneor - อย่างไรก็ตามในบางกรณีจำเป็นต้องมีการเปลี่ยนเพื่อให้สามารถเข้าถึงการเขียนเพื่อติดตั้ง SDK บางตัวเพื่อการพัฒนา สิ่งนี้จะไม่ต้องการให้ลูกค้าทำเช่นเดียวกัน
defaultNINJA

ฉันมาจากพื้นหลัง unix พยายามที่จะเข้าใจตรรกะของ rootless: มันเป็นเพราะคอมพิวเตอร์ส่วนใหญ่มีแนวโน้มที่จะเป็นผู้ใช้เครื่องเดียวทุกอย่างจะถูกติดตั้งในไดเรกทอรีบ้านของผู้ใช้เพื่อให้ไม่จำเป็นต้องยุ่งกับไดเรกทอรีระบบ เช่น / usr / share / vim /
Kemin Zhou

คำตอบ:


148

เอกสารของ Apple ครอบคลุม SIP ปิดใช้งานเกี่ยวกับระบบการป้องกันความซื่อสัตย์บน Mac ของคุณและการกำหนดค่าระบบป้องกันความซื่อสัตย์

บทความเกี่ยวกับ lifehacker.comแสดงขั้นตอนเหล่านี้:

  1. รีบูตเครื่อง Mac ของคุณเข้าสู่โหมดการกู้คืนโดยรีสตาร์ทคอมพิวเตอร์ของคุณและกดCommand+ Rจนกระทั่งโลโก้ Apple ปรากฏขึ้นบนหน้าจอ
  2. คลิกยูทิลิตี้> เทอร์มินัล
  3. ในหน้าต่าง terminal, พิมพ์และกดcsrutil disableEnter
  4. รีสตาร์ท Mac ของคุณ

คุณสามารถตรวจสอบว่าไฟล์หรือโฟลเดอร์ถูก จำกัด โดยการออกlsคำสั่งนี้โดยใช้ตัวพิมพ์ใหญ่ O (และไม่ใช่ศูนย์ 0) เพื่อแก้ไขการตั้งค่าสถานะรายการยาว:

ls -lO /System /usr 

ค้นหาข้อความที่ถูก จำกัดเพื่อระบุตำแหน่งที่ SIP ถูกบังคับใช้

โดยค่าเริ่มต้น (= เปิดใช้งาน SIP) โฟลเดอร์ต่อไปนี้ถูก จำกัด (ดูหน้าการสนับสนุนของ Apple ):

/System
/usr
/bin
/sbin
Apps that are pre-installed with OS X

... และโฟลเดอร์ต่อไปนี้ว่าง:

/Applications
/Library
/usr/local

1
ฉันเห็นจากการทำงานls -lO /usr/localไม่ได้ถูกทำเครื่องหมายว่าถูก จำกัด ฉัน chownd /usr/local/ซ้ำแล้วซ้ำอีก แต่ฉันก็ยังเห็นว่ารูตยอมรับความเป็นเจ้าของ/usr/local/binและ/usr/local/shareสิ่งที่ส่งผลต่อโฮมบรู นี่เป็นงานของ SIP ด้วยหรือไม่
SaxDaddy

1
@SaxDaddy ตราบใดที่/usr/localไม่ จำกัด คุณสามารถแก้ไขสิทธิ์ "ด้านล่าง" ไดเรกทอรีนี้ได้อย่างง่ายดาย Homebrew แนะนำให้เรียกใช้จริงsudo chown -R $(whoami) /usr/local(ในขณะที่กำลังเข้าสู่ระบบในฐานะผู้ดูแลระบบ) เพื่อแก้ไขปัญหาการอนุญาต
nohillside

4
@SaxDaddy คุณใช้ Sophos Anti-Virus หรือเปล่า? มีปัญหาที่ทราบกับ Sophos ที่จะเปลี่ยนการอนุญาตในไดเรกทอรีเหล่านั้น ตามเธรดบนฟอรัมชุมชนควรแก้ไขในการอัพเดตเนื่องจาก "เร็ว ๆ นี้"
ND Geek

1
@NGGeek: +1: ยอดเยี่ยมขอบคุณ! คุณเรียกมันถูกต้อง และฉันเห็นว่า SAV 9.4.1 (เปิดตัว 18nov15) แก้ไขปัญหาได้แล้ว ฉันติดตั้งเวอร์ชันนั้นแล้วและยืนยันว่า/usr/localตอนนี้มีการตั้งค่าการอนุญาตที่ถูกต้อง
SaxDaddy

1
@andro ธง -O ไม่ยังคงทำงานใน 10.11.6 หากไม่ได้ผลสำหรับคุณนั่นเป็นปัญหาแยกต่างหากและคุณควรถามคำถามใหม่
Mike Scott

105

เป็นไปได้ที่จะปิดใช้งาน SIP โดยการบูตไปที่Recovery HDและเรียกใช้คำสั่งต่อไปนี้:

csrutil disable

ป้อนคำอธิบายรูปภาพที่นี่

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

เปิดใช้งาน SIP และอนุญาตให้ติดตั้งส่วนขยายเคอร์เนลที่ไม่ได้ลงชื่อ

csrutil enable --without kext

ป้อนคำอธิบายรูปภาพที่นี่

เปิดใช้งาน SIP และปิดใช้งานการป้องกันระบบไฟล์

csrutil enable --without fs

ป้อนคำอธิบายรูปภาพที่นี่

เปิดใช้งาน SIP และปิดใช้งานข้อ จำกัด การดีบัก

csrutil enable --without debug

ป้อนคำอธิบายรูปภาพที่นี่

เปิดใช้งาน SIP และปิดใช้งานข้อ จำกัด DTrace

csrutil enable --without dtrace

ป้อนคำอธิบายรูปภาพที่นี่

เปิดใช้งาน SIP และปิดใช้งานข้อ จำกัด ในการเขียนไปยัง NVRAM

csrutil enable --without nvram

ป้อนคำอธิบายรูปภาพที่นี่

ฉันยังมีโพสต์พร้อมข้อมูลเพิ่มเติมเกี่ยวกับ SIP:

การป้องกันความสมบูรณ์ของระบบ - การเพิ่มเลเยอร์อื่นให้กับรูปแบบความปลอดภัยของ Apple


5
ช่างเป็นความรู้ที่ยินดีอย่างยิ่ง ฉันอาจจะต้องเพิ่มเงินรางวัลเป็นสองเท่า :-)
bmike

ฉันได้รับข้อผิดพลาด:csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
IgorGanapolsky

5
@IgorGanapolsky อ่านคำตอบ ' ปิดการใช้งาน SIP โดยการบูตที่จะกู้คืน HD '
Brick

13

หากเป้าหมายคือการปิดการใช้งานการป้องกันความสมบูรณ์ของระบบจริงๆแล้วการบูตเข้าไปในพาร์ติชัน Recovery HD ตามที่แนะนำไว้ก่อนหน้านี้ในคำตอบอื่น ๆ ที่นี่ผ่านทางCommand+ rในการบูตไม่ใช่วิธีที่เร็วที่สุดในการทำเช่นนี้

คุณสามารถรวมการบูตในโหมดผู้ใช้คนเดียวกับการบูต HD ในการรวมกันของคีย์การเริ่มต้นที่ไม่มีเอกสาร:

  • https://support.apple.com/th-th/HT204904ครอบคลุมการกู้คืนปกติ
  • กดปุ่มCommand+ r+ sเพื่อบู๊ตเข้าสู่โหมดการกู้คืนผู้ใช้เดี่ยว

นี้ทำให้คุณเพียงแค่เข้าไปในสภาพแวดล้อมขั้นต่ำเปลือยที่จำเป็นสำหรับการนี้โดยตรง


7

มันจะมีความปลอดภัยในการปรับเปลี่ยน/etc/pathsเพื่อให้เป็นเพียงก่อน/usr/local/bin usr/binวิธีนี้ทำให้คุณสามารถพัฒนางานของคุณได้/usr/local/binโดยไม่ต้องปิดการใช้งาน SIP

การติดตั้งที่สะอาดของระบบปฏิบัติการได้สั่งซื้อ/etc/pathsด้วยวิธีนี้ตั้งแต่ El Capitan แต่หากคุณอัพเกรดระบบปฏิบัติการจาก Yosemite หรือก่อนหน้านี้คุณจะต้องแก้ไขลำดับพา ธ ด้วยตนเอง


@iconoclast usr/binก่อนที่เอลแคปิการประชุมร่วมกันคือการติดตั้งโปรแกรม ตั้งแต่ SIP ป้องกันสิ่งนี้ในตอนนี้ควรติดตั้งโปรแกรมusr/local/binซึ่งไม่ถูก จำกัด โดย SIP โดยการใส่usr/local/binครั้งแรกผู้ใช้สามารถเรียกใช้โปรแกรมโดยไม่ต้องพิมพ์เส้นทางที่แน่นอนไปยังโปรแกรม มันสมเหตุสมผลหรือไม่ คุณสับสนเรื่องอื่นบ้างไหม?
user260467

ฉันเข้าใจอยู่เสมอว่ามันเป็นการฝึกฝนที่ไม่ดีที่จะใส่อะไรลงไปใน/usr/bin... แต่ฉันเดาว่าฉันควรถามว่า "คำตอบของคำถาม OP นี้เป็นอย่างไร" เดิมทีฉันสมมติว่ามันทำในบางวิธีและฉันก็ไม่ได้ทำการเชื่อมต่อ แต่ตอนนี้ฉันสงสัยมากว่ามันมีการเชื่อมต่อใด ๆ
iconoclast

@iconoclast ฉันคิดว่ามันจะไม่รับผิดชอบที่จะพูดถึงนักพัฒนาที่พวกเขาไม่ควรปิดใช้งาน SIP เพื่อพัฒนาแอพ
user260467

6

หากคุณต้องการเข้าถึง / usr / local ให้ดูที่หน้านี้: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Capitan_and_Homebrew.md

แนวคิดคือปิดใช้งาน SIP ชั่วคราวcsrutil disableเพิ่ม/usr/localใช้ใช้ chflags เพื่อตั้งค่าไดเรกทอรีนั้นเป็นแบบไม่ จำกัด

 sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local

แล้วเปิดใช้งาน SIP csrutil enableใช้

หาก/usr/localมีอยู่แล้วในเวลาที่คุณอัพเกรดไม่จำเป็นต้องมีสิ่งที่กล่าวมาข้างต้น คุณสามารถเรียกใช้

sudo chown -R $(whoami):admin /usr/local

ฉันได้รับข้อผิดพลาด:Read-only file system
IgorGanapolsky

ลิงค์นี้ตาย: ข้อผิดพลาด 404
iconoclast

2

หากคุณไม่สามารถเรียกใช้Recovery Partitioncsrutil disable (เพื่อปิดใช้งานSIP ) ให้ลองตั้งค่า boot args ด้วยnvramคำสั่งเช่น

sudo nvram boot-args="rootless=0"

อย่างไรก็ตามหากคุณมีข้อผิดพลาดดังต่อไปนี้:

nvram: ตัวแปรการตั้งค่าข้อผิดพลาด - 'boot-args': (iokit / common) ไม่ได้รับอนุญาต

จากนั้นมันจะไม่ทำงาน คุณยังต้องบูตมันเพื่อกู้คืน / เซฟโหมด

ดู:


nvram: Error setting variable - 'boot-args': (iokit/common) not permitted
mghicks

1
@mghicks ในกรณีนี้มันไม่ทำงาน ฉันได้อัพเดตคำตอบแล้ว
kenorb

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