Як відключити захист цілісності системи (SIP) AKA "без корінь" на macOs [OS X]


156

Apple представила System Integrity Protection , також відому як "без корінь", з ОС X 10.11, El Capitan. Я розумію, що це крок для загального захисту від зловмисного програмного забезпечення, але мені, як розробнику, потрібен доступ до запису до деяких файлів, які він блокує.

Як вимкнути цей захист?


2
Незважаючи на те, що ви можете виправити всі аспекти SIP, для цього є багато записів - пам’ятайте, що, компрометуючи систему, ви створюєте речі, які можуть не працювати на клієнтській машині, де SIP увімкнено, і користувачі не приймуть його вимикати.
Motti Shneor

5
@Motti Shneor - Однак у деяких випадках це потрібно вирішити лише для того, щоб мати доступ для запису, щоб встановити деякі SDK для цілей розвитку. Це не вимагає від клієнта того ж.
замовчуваннямNINJA

Я прийшов з фонових зображень Unix, намагаючись зрозуміти логіку безпроблемного: це тому, що комп'ютер, здебільшого, є одноосібною машиною, все буде встановлено в домашньому каталозі користувача, так що не потрібно возитися з системним каталогом наприклад / usr / share / vim /.
Kemin Zhou

Відповіді:


147

Документація Apple охоплює відключення SIP, про захист цілісності системи на вашому Mac та налаштування захисту цілісності системи .

У статті на lifehacker.com перераховані наступні кроки:

  1. Перезавантажте комп'ютер Mac у режим відновлення, перезавантаживши комп'ютер і утримуючи клавішу Command+, Rпоки на вашому екрані не з’явиться логотип Apple.
  2. Клацніть Утиліти> Термінал.
  3. У вікні Термінал введіть csrutil disableі натисніть Enter.
  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не позначений обмеженим. Я також чаунд /usr/local/рекурсивно. Але я продовжую бачити, як root приймає право на власність, /usr/local/binі /usr/local/shareце впливає на домашню мову. Це також робота СІП?
SaxDaddy

1
@SaxDaddy Поки /usr/localце не обмежено, ви можете легко виправити будь-які дозволи "нижче" цього каталогу. Homebrew фактично рекомендує запустити sudo chown -R $(whoami) /usr/local(під час входу в систему як користувач адміністратора), щоб виправити проблеми з дозволом.
nohillside

4
@SaxDaddy Ви використовуєте антивірус Sophos випадково? Існує відома проблема з Sophos, де вона змінює дозволи на ці каталоги. Відповідно до теми на форумах їх громад , це має бути вирішене в оновленому порядку, яке відбудеться "скоро".
ND Geek

1
@NDGeek: +1: Блискуче, дякую! Ви правильно це назвали. І я бачу, що SAV 9.4.1 (випущено 18nov15) вирішив проблему. Я встановив цю версію і підтвердив, що /usr/localтепер правильно встановлені дозволи.
SaxDaddy

1
@andro Прапор -O чи ще працювати в 10.11.6. Якщо це не працює для вас, це окреме питання, і вам слід задати нове запитання.
Майк Скотт

104

Можна відключити 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
Яке бажане багатство знань. Мені, можливо, доведеться подвоїтись на цю
суму

Я отримую помилку:csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
IgorGanapolsky

5
@IgorGanapolsky Прочитайте відповідь. ' відключити SIP, завантажившись до Recovery HD ' .
Цегла

13

Якщо мета справді просто відключити захист системної цілісності, тоді завантаження в розділ Recovery HD, як раніше було рекомендовано в інших відповідях тут, через Command+ ron boot - це не найшвидший спосіб зробити це.

Ви можете комбінувати завантаження одного режиму користувача із завантажувальним завантаженням HD у недокументованій комбінації клавіш запуску:

  • https://support.apple.com/en-us/HT204904 охоплює нормальне відновлення
  • утримуйте Command+ r+, sщоб перейти в режим одиночного відновлення користувача.

Це вводить вас просто в мінімальний мінімальну обстановку, яка потрібна для цього безпосередньо .


7

Було б безпечніше модифікувати /etc/pathsтак, що /usr/local/binпросто раніше usr/bin. Таким чином, ви можете виконувати свою розробку в межах, /usr/local/binне вимикаючи SIP.

Чисті установки ОС замовляли /etc/pathsтакий шлях з El Capitan, але якби ви модернізували ОС з Yosemite або раніше, вам доведеться змінити порядок шляху вручну.


@iconoclast Перед El Capitan загальною умовою було встановлення програм для usr/bin. Оскільки SIP перешкоджає цьому зараз, слід встановлювати програми usr/local/bin, які не обмежуються SIP. По- usr/local/binперше, користувачі можуть запускати програми, не вводячи абсолютний шлях до програми. Це має сенс? Вас бентежить щось інше?
user260467

Я завжди розумів, що це дуже погана практика нічого не ставити /usr/bin... але, мабуть, я мав би запитати: "як це відповідає на питання ОП?" Я спочатку припускав, що це було якимось чином, і що я просто не мав зв'язку. Але зараз я дуже сумніваюся, що це має якийсь зв’язок.
іконоборство

@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.
іконоборство

2

Якщо ви не можете потрапити в Recovery Partition для запуску csrutil disable(щоб відключити SIP ), спробуйте встановити аргументи завантаження за допомогою 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.