1. 程式人生 > >SMJobBless官方Demo筆記

SMJobBless官方Demo筆記

uil 介紹 dem jacob install 窗口 root權限 IT t權限

SMJobBless是蘋果官方提供的用於“MacOS app獲取root權限”的demo。

具體思路

使用Security.framework和ServiceManagement.framework兩個庫,把需要root權限的操作封裝成一個進程,作為項目的子Target,把該子進程註冊LaunchdDaemon。

成為LaunchdDaemon後:

  • 子進程會被放在/Library/PrivilegedHelperTools
  • 相應的配置文件.plist被放在/Library/LaunchDaemons,Launchd加載該子進程會需要讀取該配置文件

更多介紹請見"參考資料1"

編譯SMJobBless

從官網下載SMJobBless源碼(下面"參考資料3"也有鏈接),具體操作Demo裏的ReadMe.txt也講述得比較清楚,只是由於新版本Xcode的編譯產物不再放在項目目錄裏,所以ReadMe.txt裏有一些步驟的路徑要做一些調整

  1. 在xcode先編譯項目

  2. 用終端進入項目根目錄,運行下面命令

    ./SMJobBlessUtil.py setreq <path-to-SMJobBlessApp.app> SMJobBlessApp/SMJobBlessApp-Info.plist SMJobBlessHelper/SMJobBlessHelper-Info.plist

    其中<path-to-SMJobBlessApp.app>可以在xcode左邊的Navigator的product下的編譯產物APP"右擊-Show in Finder"的到編譯產物的路徑。

    腳本運行成功後會輸出

    SMJobBlessApp/SMJobBlessApp-Info.plist: updated
    SMJobBlessHelper/SMJobBlessHelper-Info.plist: updated
  3. 在Xcode對項目Clean,然後再Build

  4. 終端在項目根目錄下執行

    ./SMJobBlessUtil.py check <path-to-SMJobBlessApp.app>

    沒有輸出任何東西即說明check通過。

  5. Run編譯產物APP,會彈出輸入賬號密碼的認證窗口,提示要"Install Helper";輸入密碼後,若Xcode打印出"Job is available!"的log,已經App的UI上有"The Helper Tool is available!",即說明Demo成功運行。

參考資料

  1. 通過ServiceManagement註冊LaunchdDaemon

  2. Apple官方論壇關於如何編譯SMJobBless的解析

  3. Apple官方Demo: SMJobBless

  4. Apple官方Demo: EvenBetterAuthorizationSample

    這個是SMJobBless進一步的Demo,結合Sand-box的特性。

  5. StackOverflow: AuthorizationExecuteWithPrivileges is deprecated

  6. StackOverflow: Writing a privileged helper tool with SMJobBless()

  7. Apple官方文檔: Authorization Services Programming Guide

Jacob Pan ( jacobpan3g.github.io/cn )

SMJobBless官方Demo筆記