2009-07-13 32 views
1

我有一個應用程序需要能夠寫入任何用戶/當前主機首選項文件(這需要每個首選項實用程序參考的管理權限),並且還可以通過其plist啓用/禁用launchd代理(只能由root用戶寫入)。launchd守護程序是讀取/寫入Cocoa特權文件的最佳路徑嗎?

我使用SFAuthorizationView要求用戶在更改這些值之前以管理員身份進行身份驗證。

我試圖決定最好的方式來做這些值的實際改變。

廉價hackish選項似乎是使用AuthorizationExecuteWithPrivileges()mvdefaults,無論是通過BLAuthentication或創建類似的東西我自己。這樣做的缺點是沒有獲得我正在執行的任何命令行應用程序的返回值,以及我遇到的一些奇怪的深奧錯誤(例如在某些情況下獲得-60008錯誤)。很顯然,這是蘋果公司強烈建議的,但人們似乎確實這樣做,並取得了一些成功。

第二個最棘手的選擇似乎是整個創建一個助手應用程序與suid位設置和--self-repair選項在各地討論。這似乎是可能的,但像第三種選擇那樣可能不會少得多。

第三個選項是創建一個完全成熟的launchd守護程序,它將以root身份運行並通過套接字與我的應用程序進行通信。這看起來有點矯枉過正,可以讀取和寫入一些plist文件,但是我也可能在其他方面找到其他用途,並且它不會是我應用程序的唯一守護程序,所以看起來似乎不合理加上另一個。

我想爲我的目的修改這個sample code

我的兩個問題是:

  1. 是否launchd的守護進程選項似乎喜歡去這樣做的最佳路線,或者是有我缺少一個更省事?

  2. 有沒有其他人成功地使用該代碼作爲類似的東西的基礎,有沒有人看到我失蹤的任何明顯的問題?我已經在測試應用中成功地使用了它,但我很想聽聽你們對此的看法。

回答

2
  1. launchd肯定是要走的最好和最安全的方式:你需要一個安裝包,讓您的助手到位。除了編輯你想要定位的文件之外,確保你的幫手確實並且完全不能做任何事情。

  2. 沒有經驗的代碼,但它基於BetterAuthorizationSample,所以這是一個不錯的開始。

+0

感謝有關限制幫手範圍的建議。 安裝程序包不會是一個問題,因爲我需要一個不管。 – 2009-07-16 17:27:11

0

還有openauth API,它允許您打開需要root權限的文件。

相關問題