2016-10-01 4 views
1

Xcode에서 게이트 키퍼에 의해 차단되는 "명령 줄 도구"대상 (앱 번들이 아님)이 있습니다. 필자는이 도구를 PostCheck 주소록 플러그인의 간단한 설치 프로그램으로 수년 동안 사용해 왔습니다.Mac OS 게이트 키퍼 서명 된 명령 줄 도구 차단

2012 년에 Apple 개발자 ID로이 도구에 서명하여 게이트 키퍼에 의해 차단되지 않고 모든 것이 잠시 동안 잘 이루어 지도록했습니다. 나는 이제 macOS Sierra (10.12)가 현재 차단되고 있으며 테스트 중에 10.11.6에서도 차단된다는 사실을 발견했습니다. (내가 말을 막았을 때, 사용자는 경고 대화 상자에서 옵션을받는 대신 '열림'을 선택해야한다는 것을 의미합니다.) 10.11.2에서도 여전히 잘 작동합니다! - Mac OS X 10.11.4에는 비 응용 프로그램 번들이 서명 되었더라도 차단 된 버그가 있었지만이 문제는 10.11.5에서 수정 된 것 같습니다. 아마도 그게 관련이 있을까요?

Sierra에서 Xcode 8로 실행 파일을 다시 컴파일하고 다시 서명 해 보았습니다. Info.plist를 바이너리에 임베드 해보려고했는데 (전에는하지 않았었다). 디버깅 대 릴리스 구성에서 문제가 발생한 경우에 대비하여 단순히 "빌드"보다는 보관을 시도했습니다.

codesign --verify --verbose <executable> 
<executable>: valid on disk 
<executable>: satisfies its Designated Requirement 

그리고이 :

spctl --assess --verbose <executable> 
<executable>: rejected (the code is valid but does not seem to be an app) 
source=matched cdhash 

그리고이 : 나는

이있다 ... 내 실행 파일을 확인하는 방법을 검색 이틀 겉으로는 상반되는 결과를 제대로 서명 보냈다

spctl -a -v --raw <executable> 
<executable>: accepted 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>assessment:authority</key> 
    <dict> 
     <key>assessment:authority:flags</key> 
     <integer>0</integer> 
     <key>assessment:authority:source</key> 
     <string>allowed cdhash</string> 
     <key>assessment:authority:weak</key> 
     <true/> 
    </dict> 
    <key>assessment:cserror</key> 
    <integer>-67002</integer> 
    <key>assessment:remote</key> 
    <true/> 
    <key>assessment:verdict</key> 
    <true/> 
</dict> 
</plist> 

제 생각에는 명령 줄 실행 파일이 su라는 것을 알지 못합니다. 유효한 Apple 개발자 ID로 서명 한 후 모양이 바뀌 었습니다. 그리고 어쨌든 나는 아무것도 할 수없는 macOS 문제 인지도 모른다. 또한 명령 행 도구와 코드 서명 문제 모두에 대해 Google에 매우 어렵고 명령 행 Unix 실행 파일에 서명하는 코드와 실제로 관련된 것을 찾습니다.

여기에 어떤 일이 벌어지고 있는지에 대한 통찰력에 감사드립니다. 감사!

+0

'--strict' 옵션을'codesign'과 함께 사용해보세요. 또한'-t open' 옵션을'spctl'과 함께 사용하십시오. 실행 파일을 더블 클릭하면 실제로 실행되지 않고, 문서로 터미널에 전달되고 터미널은 명령으로 경로를 실행하기 때문에 시도하십시오. 그게 "애플 리케이션이 아닌 것 같다"문제를 해결할 수도 있습니다. '-v'를 여러 번 지정하여 자세한 정보를 늘릴 수도 있습니다. '--ignore-cache'를 사용하여 파일을 새로 평가하는지 확인하십시오. –

+0

FWIW, 오류 cserror -67002는 errSecCSNotAppLike입니다 (이는 큰 놀라움이 아닙니다). 필자는 본질적으로 명령 줄 도구가 포함 된 응용 프로그램 번들을 만들고 번들에 서명하여이를 "수정"했습니다. 그런 다음 명령 줄 도구를 실행하여 foo로 참조해야했습니다.app/Contents/MacOS/foo. 훌륭한 사용자 경험은 아니지만 내 요구에 부합합니다. – dmaclach

답변

2

는 내 질문에 대답하기 싫어하지만, 경우에 사람이 같은 문제를 통해 제공 :

이 솔루션은 서명 된 디스크 이미지보다는 zip 파일에서 명령 행 도구를 배포하는 것입니다.

10.11.4로 테스트를 마쳤으며 문제가 발생한 시점을 확인했습니다. (필자는 부적절한 테스트를 진행 했음에 틀림 없다.) OS X은 단순히 내가 서명 한 방법과 상관없이 유닉스 커맨드 라인 툴을 더블 클릭하는 것을 단순히 차단한다. 아마도 대부분의 명령 줄 도구가 Terminal.app 내에서 실행되기 때문에 최선의 방법 일 것입니다.

시에라에게 게이트 키퍼의 새로운 경로 무작위 화 기능을 사용하려면 서명 된 DMG가 필요했습니다.