出現(xiàn) operation not permitted (操作沒權(quán)限),優(yōu)先想到的就是不是可執(zhí)行文件砾淌,或當(dāng)前用戶沒權(quán)限,
果斷執(zhí)行 :
chmod 777 file1
但發(fā)現(xiàn)加了權(quán)限之后仍然出現(xiàn)同樣的問題
重點(diǎn)來了:
簡單了解下 com.apple.quarantine 與 codesign 覆蓋簽名
對(duì)于一些安裝不了的 macOS app篱瞎,經(jīng)常使用這兩招:
xattr -r -d com.apple.quarantine file1 #主要是為了跳過公證檢查
codesign --sign - --force --deep file1 #重新簽名
查資料,一般會(huì)說刪除 com.apple.quarantine 屬性是為了繞過公證痒芝。
而覆蓋簽名俐筋,解釋大概是這樣的:如果用一大帶寬服務(wù)器個(gè)橫杠作為身份標(biāo)識(shí),那么特殊的(一種專門的严衬,臨時(shí)的)簽名會(huì)生效澄者,這種簽名其實(shí)是根本不使用身份標(biāo)識(shí),而是完全識(shí)別一個(gè)代碼實(shí)例请琳。
我看有些 macOS 軟件(特別是破解的)粱挡,有時(shí)候用 xattr 刪除 com.apple.quarantine 屬性后還是無法運(yùn)行,但是用 codesign 重簽名后俄精,就可以询筏。
我想問一下做 macOS app 開發(fā)的童鞋,這兩句具體有什么不同呀竖慧?特別是為什么有些軟件刪除那個(gè)屬性后不行嫌套,但重簽名后卻可以運(yùn)行,如果說刪除那個(gè)屬性是為了繞過公證圾旨,那重簽名又是什么呢踱讨?感覺簽名這個(gè)才是繞過公證呀,有點(diǎn)不太明白砍的。
當(dāng)下載的文件有 com.apple.quarantine 屬性時(shí)痹筛,就會(huì)觸發(fā) GateKeeper 和 Notarization 等檢查;換句話說如果文件沒有這個(gè) flag 的話挨约,系統(tǒng)就不會(huì)做如上檢查味混。
總結(jié)
1 不好使就來2产雹,2不好使就來3诫惭,3不好使估計(jì)只能 關(guān)閉SPI了
1崇众,chmod 777 file1
2, xattr -r -d com.apple.quarantine file1 # 遞歸刪除file1文件的com.apple.quarantine屬性
3, codesign --sign - --force --deep file1
關(guān)閉SPI
系統(tǒng)啟用了SIP(System Integerity Protection)導(dǎo)致root用戶也沒有修改權(quán)限杆勇,所以我們需要屏蔽掉這個(gè)功能.
(1)進(jìn)入恢復(fù)模式:關(guān)機(jī)狀態(tài)下,長按電源鍵直至進(jìn)入選項(xiàng)界面
(2)關(guān)閉SPI:進(jìn)入終端井誉,輸入csrutil disable
(3)重啟進(jìn)入正常模式瘟判,進(jìn)入終端怨绣,輸入csrutil status ,檢查狀態(tài)確保關(guān)閉成功拷获,顯示以下即可篮撑;
System Integrity Protection status: disabled.
注:修改完成后,要恢復(fù)SPI:進(jìn)入終端匆瓜,輸入csrutil enable赢笨。