macO에서 SIP (System Integrity Protection) AKA "루트리스"를 비활성화하는 방법 [OS X]


157

Apple은 OS X 10.11 인 El Capitan과 함께 "루트리스"라고도하는 시스템 무결성 보호 를 도입했습니다 . 나는 이것이 맬웨어에 대한 일반적인 보호 단계라는 것을 이해하지만 개발자는 잠그는 일부 파일에 대한 쓰기 권한이 필요합니다.

이 보호 기능을 어떻게 비활성화합니까?


2
모든 SIP 측면을 수정할 수는 있지만 여기에는 많은 항목이 있습니다. 시스템을 손상시킴으로써 클라이언트 시스템에서 실행되지 않을 수있는 물건을 만들고 있다는 것을 기억하십시오.
Motti Shneor

5
@Motti Shneor-그러나 경우에 따라 개발 목적으로 일부 SDK를 설치하기 위해 쓰기 액세스 권한을 갖도록 설정해야합니다. 이것은 클라이언트가 똑같이 할 필요가 없습니다.
defaultNINJA

나는 유닉스 배경에서 왔으며 루트가없는 논리를 이해하려고 노력했습니다. 컴퓨터가 대부분 단일 사용자 컴퓨터 일 가능성이 높기 때문에 모든 것이 사용자 홈 디렉토리에 설치되므로 시스템 디렉토리를 망칠 필요가 없습니다. / usr / share / vim /과 같은
Kemin Zhou

답변:


148

Apple의 설명서는 SIP 비활성화, Mac의 시스템 무결성 보호 정보시스템 무결성 보호 구성 에 대해 설명합니다 .

lifehacker.com의 기사 에는 다음 단계가 나열되어 있습니다.

  1. 컴퓨터를 재시동하고 화면에 Apple 로고가 나타날 때까지 Command+를 길게 눌러 Mac을 복구 모드로 재부팅하십시오 R.
  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/재귀 적으로 chownd했습니다 . 그러나 나는 루트가 소유권을 가지게 /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
@NDGeek : +1 : 훌륭합니다, 감사합니다! 당신은 그것을 올바르게 호출했습니다. 그리고 SAV 9.4.1 (18nov15 릴리스)이 문제를 해결 한 것으로 나타났습니다. 해당 버전을 설치했으며 /usr/local이제 권한이 올바르게 설정되었는지 확인했습니다 .
SaxDaddy

1
@andro -O 플래그 여전히 10.11.6에서 작동합니다. 그래도 문제가 해결되지 않으면 별도의 문제이므로 새로운 질문을해야합니다.
Mike Scott

105

Recovery HD 로 부팅 하고 다음 명령을 실행하여 SIP를 비활성화 할 수 있습니다 .

csrutil disable

여기에 이미지 설명을 입력하십시오

csrutil enable명령에 하나 이상의 플래그를 추가하여 SIP 보호를 활성화하고 측면을 선택적으로 비활성화 할 수도 있습니다 . 설정하려면 복구에서 부팅해야합니다.

SIP 사용 및 서명되지 않은 커널 확장 설치 허용

csrutil enable --without kext

여기에 이미지 설명을 입력하십시오

SIP 활성화 및 파일 시스템 보호 비활성화

csrutil enable --without fs

여기에 이미지 설명을 입력하십시오

SIP 활성화 및 디버깅 제한 비활성화

csrutil enable --without debug

여기에 이미지 설명을 입력하십시오

SIP 활성화 및 DTrace 제한 비활성화

csrutil enable --without dtrace

여기에 이미지 설명을 입력하십시오

NVRAM에 쓸 때 SIP를 활성화하고 제한을 비활성화합니다

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 답을 읽으십시오. ' 복구 HD로 부팅하여 SIP 비활성화 ' .
Brick

13

목표가 실제로 시스템 무결성 보호를 비활성화하는 것이라면 부팅시 Command+ r를 통한 다른 답변에서 권장하는 것처럼 복구 HD 파티션으로 부팅하는 것이 가장 빠른 방법 은 아닙니다 .

문서화되지 않은 시작 키 조합에서 단일 사용자 모드 부팅을 복구 HD 부팅과 결합 할 수 있습니다.

이것은 단지이에 필요한 최소한의 환경을 얻는다 직접 .


7

단지 이전의 수정 /etc/paths을하는 /usr/local/bin것이 더 안전 할 것 usr/bin입니다. 그렇게하면 /usr/local/binSIP를 비활성화하지 않고도 개발 작업을 수행 할 수 있습니다 .

/etc/pathsEl Capitan 이후로 OS를 새로 설치하면 이 방법으로 주문할 수 있지만 Yosemite 또는 이전 버전에서 OS를 업그레이드하는 경우 경로 순서를 수동으로 수정해야합니다.


@iconoclast El Capitan 이전의 일반적인 관례는에 프로그램을 설치하는 것이 었습니다 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

아이디어는 , add 를 사용 하여 SIP 를 일시적으로 비활성화하고 chflags를 사용하여 해당 디렉토리를 무제한으로 설정하는 것입니다csrutil disable/usr/local

 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

복구 파티션 을 실행 csrutil disable하여 SIP 를 비활성화 할 수없는 경우 다음 nvram명령을 사용 하여 boot args를 설정하십시오.

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.