मैं MacOs पर सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP) AKA "रूटलेस" को कैसे निष्क्रिय करूँ [OS X]


156

Apple ने OS X 10.11, El Capitan के साथ सिस्टम इंटीग्रिटी प्रोटेक्शन , जिसे "रूटलेस" के रूप में भी जाना जाता है। मैं समझता हूं कि यह मैलवेयर के खिलाफ सामान्य सुरक्षा के लिए एक कदम है, लेकिन एक डेवलपर के रूप में मुझे कुछ फाइलों तक पहुंच की आवश्यकता है, जो इसे बंद कर देता है।

मैं इस सुरक्षा को कैसे अक्षम करूं?


2
भले ही आप सभी एसआईपी पहलुओं को ठीक कर सकते हैं, इसके लिए बहुत सारी प्रविष्टियाँ हैं - याद रखें कि सिस्टम से समझौता करके, आप ऐसे सामान का निर्माण कर रहे हैं जो आपके ग्राहक की मशीन पर नहीं चल सकता है, जहां एसआईपी चालू है, और उपयोगकर्ता इसे बंद करना स्वीकार नहीं करेंगे।
मोटी श्नोर

5
@ मोटी श्नोर - हालांकि, कुछ मामलों में विकास उद्देश्यों के लिए कुछ एसडीके स्थापित करने के लिए लिखने की पहुंच के लिए इसे चालू करने की आवश्यकता है। इससे क्लाइंट को ऐसा करने की आवश्यकता नहीं होगी।
डिफ़ॉल्ट नं।

मैं यूनिक्स बैकग्राउंड से आया हूं, जो रूटलेस के तर्क को समझने की कोशिश कर रहा है: क्या ऐसा इसलिए है क्योंकि कंप्यूटर में ज्यादातर सिंगल यूजर मशीन होने की संभावना है, सब कुछ यूजर होम डायरेक्टरी में इंस्टॉल किया जाएगा, ताकि सिस्टम डायरेक्टरी के साथ गड़बड़ करने की जरूरत न पड़े जैसे / usr / share / vim /।
केमिन झोउ

जवाबों:


147

एप्पल के प्रलेखन एसआईपी अक्षम करने, अपने मैक पर सिस्टम वफ़ादारी संरक्षण के बारे में और कॉन्फ़िगर प्रणाली वफ़ादारी संरक्षण

Lifehacker.com पर एक लेख इन चरणों को सूचीबद्ध करता है:

  1. अपने कंप्यूटर को पुनरारंभ करने और Command+ को Rतब तक दबाकर रखें जब तक कि Apple लोगो आपकी स्क्रीन पर दिखाई न दे।
  2. उपयोगिताएँ> टर्मिनल पर क्लिक करें।
  3. टर्मिनल विंडो में, टाइप करें csrutil disableऔर दबाएँ Enter
  4. अपने मैक को पुनरारंभ करें।

आप सत्यापित कर सकते हैं कि lsलंबी सूची फ़्लैगिंग को संशोधित करने के लिए कैपिटल O (और शून्य 0 नहीं) का उपयोग करके यह कमांड जारी करके कोई फ़ाइल या फ़ोल्डर प्रतिबंधित है :

ls -lO /System /usr 

एसआईपी लागू होने के संकेत देने के लिए प्रतिबंधित पाठ देखें।

डिफ़ॉल्ट रूप से (= SIP सक्षम), निम्नलिखित फ़ोल्डर प्रतिबंधित हैं ( Apple समर्थन पृष्ठ देखें ):

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

... और निम्नलिखित फ़ोल्डर नि: शुल्क हैं:

/Applications
/Library
/usr/local

1
मैं देख रहा हूं कि दौड़ना ls -lO /usr/localप्रतिबंधित नहीं है। मैंने भी बार-बार चाउंड किया है /usr/local/। लेकिन मैं देख रहा हूं कि रूट का मालिकाना हक है /usr/local/binऔर /usr/local/shareजो होमब्रे पर असर डालता है। क्या यह SIP का भी काम है?
सक्सैडडी

1
@SaxDaddy जब तक /usr/localप्रतिबंधित नहीं है, आप इस निर्देशिका को "नीचे" किसी भी अनुमति को आसानी से ठीक कर सकते हैं। होमब्रेव वास्तव sudo chown -R $(whoami) /usr/localमें अनुमति मुद्दों को ठीक करने के लिए (एक व्यवस्थापक उपयोगकर्ता के रूप में लॉग इन होने के दौरान) चलाने की सिफारिश करता है।
nohillside

4
@SaxDaddy क्या आप किसी संयोग से सोफोस एंटी-वायरस का उपयोग कर रहे हैं? सोफोस के साथ एक ज्ञात मुद्दा है जहां यह उन निर्देशिकाओं पर अनुमतियों को बदलता है। उनके सामुदायिक मंचों पर एक सूत्र के अनुसार , "जल्द ही" आउट होने के कारण इसे अपडेट में हल किया जाना चाहिए।
एनडी गीक

1
@NDGeek: +1: शानदार, धन्यवाद! आपने इसे सही ढंग से बुलाया। और मैं देख रहा हूँ कि SAV 9.4.1 (18nov15 को रिलीज़) ने इस समस्या को ठीक किया। मेरे पास वह संस्करण स्थापित है और यह पुष्टि करता है कि /usr/localअब अनुमतियाँ सही तरीके से सेट की गई हैं।
20

1
@andro -O ध्वज अभी भी 10.11.6 में काम करता है । यदि यह आपके लिए काम नहीं करता है, तो यह एक अलग मुद्दा है और आपको एक नया प्रश्न पूछना चाहिए।
माइक स्कॉट

104

रिकवरी एचडी को बूट करके और निम्न कमांड चलाकर एसआईपी को निष्क्रिय करना संभव है :

csrutil disable

यहां छवि विवरण दर्ज करें

csrutil enableकमांड में एक या एक से अधिक झंडे जोड़कर एसआईपी सुरक्षा को सक्षम करना और इसके पहलुओं को चुनिंदा रूप से अक्षम करना भी संभव है । उन्हें सेट करने के लिए सभी को रिकवरी से बूट होना चाहिए:

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 के बारे में अधिक जानकारी के साथ एक पोस्ट उपलब्ध है:

सिस्टम इंटीग्रिटी प्रोटेक्शन - ऐप्पल के सुरक्षा मॉडल में एक और परत जोड़ रहा है


5
क्या ज्ञान का स्वागत धन है। मैं इस इनाम :-) पर डबल डाउन करना पड़ सकता है
bmike

मुझे एक त्रुटि मिलती है:csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
इगोरगानपोलस्की 15

5
@IgorGanapolsky जवाब पढ़ें। ' रिकवरी एचडी को बूट करके एसआईपी को अक्षम करें '
ब्रिक

13

यदि लक्ष्य वास्तव में सिस्टम इंटिग्रिटी प्रोटेक्शन को अक्षम करना है, तो रिकवरी एचडी विभाजन में बूट करना जैसा कि पहले अन्य उत्तरों में यहां अनुशंसित है Command+ rबूट के माध्यम से ऐसा करने का सबसे तेज़ तरीका नहीं है।

आप एक अविभाजित स्टार्टअप कुंजी संयोजन में रिकवरी एचडी बूट के साथ एकल उपयोगकर्ता मोड बूट को जोड़ सकते हैं:

  • https://support.apple.com/en-us/HT204904 सामान्य पुनर्प्राप्ति को कवर करता है
  • एकल उपयोगकर्ता पुनर्प्राप्ति मोड में बूट करने के लिए Command+ r+ दबाए रखें s

यह आपको सीधे नंगे न्यूनतम वातावरण में मिलता है, जो सीधे इसके लिए आवश्यक है ।


7

इसे संशोधित करना सुरक्षित होगा /etc/pathsताकि /usr/local/binयह पहले ही हो जाए usr/bin। इस तरह आप /usr/local/binSIP को निष्क्रिय किए बिना अपना विकास कार्य कर सकते हैं ।

/etc/pathsएल कैपिटान के बाद से ओएस के स्वच्छ प्रतिष्ठानों ने इस तरह से आदेश दिया है , लेकिन यदि आप ओएस को योसेमाइट या उससे पहले से अपग्रेड कर रहे थे, तो आपको मैन्युअल रूप से पथ क्रम को संशोधित करना होगा।


एल कैपिटन से पहले @iconoclast, एक आम सम्मेलन में कार्यक्रमों को स्थापित करना था usr/bin। चूंकि एसआईपी अब इसे रोकता है, इसलिए प्रोग्राम को स्थापित किया जाना चाहिए usr/local/bin, जो एसआईपी द्वारा प्रतिबंधित नहीं है। usr/local/binपहले डालकर , उपयोगकर्ता प्रोग्राम को निरपेक्ष पथ पर टाइप किए बिना प्रोग्राम चला सकते हैं। इसका कोई मतलब भी है क्या? क्या आप किसी और चीज़ के बारे में भ्रमित हैं?
user260467

मैंने हमेशा कुछ भी डालने के लिए इसे बहुत बुरा अभ्यास समझा है /usr/bin... लेकिन मुझे लगता है कि मुझे जो पूछना चाहिए था वह है "यह ओपी का सवाल कैसे है?" मैं मूल रूप से यह मान रहा था कि यह किसी तरह से किया था , और मैं सिर्फ संबंध नहीं बना रहा था। लेकिन अब मुझे बहुत संदेह है कि इसका कोई संबंध है।
आइकनोकॉस्ट

@iconoclast मुझे लगता है कि एक डेवलपर का उल्लेख नहीं करना गैर-जिम्मेदाराना होगा क्योंकि वे वास्तव में केवल एक ऐप विकसित करने के लिए एसआईपी को अक्षम नहीं कर रहे होंगे।
user260467

6

यदि आपको सभी की आवश्यकता है / usr / स्थानीय तक पहुँचने के लिए, इस पृष्ठ पर एक नज़र डालें: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/El_Chitan_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
मिलती रहती है

यह लिंक मृत है: 404 त्रुटि।
iconoclast

2

आप में नहीं मिल सकता है वसूली विभाजन को चलाने के लिए csrutil disable(निष्क्रिय करने के लिए एसआईपी ), के साथ बूट आर्ग सेट करने का प्रयास nvramआदेश, जैसे

sudo nvram boot-args="rootless=0"

हालाँकि, यदि आपको निम्न त्रुटि मिली है:

nvram: चर सेट करने में त्रुटि - 'बूट-आर्ग': (iokit / सामान्य) की अनुमति नहीं है

तब यह काम नहीं करेगा। आपको अभी भी इसे पुनर्प्राप्ति / सुरक्षित मोड बूट करने की आवश्यकता है।

देख:


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

1
@mghicks उस मामले में, यह काम नहीं करेगा। मैंने जवाब अपडेट कर दिया है।
केनोरब

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.