題:
當啟動代理運行我的.plist文件時,為什麼會出現“文件的可疑所有權”錯誤?
Senseful
2010-10-18 03:00:41 UTC
view on stackexchange narkive permalink

我有一個配置為運行.plist文件的啟動代理,例如: /Library/LaunchAgent/foo.plist 。在此.plist中,它設置為在 LoginWindow Aqua 期間運行。

當我嘗試啟動計算機並進入登錄屏幕時,此plist應該運行,但在控制台中會出現以下錯誤:

launchctl:文件上的可疑所有權(跳過):/ Library / LaunchAgents / foo.plist

當我嘗試登錄非管理員帳戶時,會給出完全相同的錯誤消息。當我嘗試使用管理員帳戶登錄時,它可以正常工作。

老實說,我對Mac OS X的特權和權限了解不多。

要創建文件,我在admin帳戶上使用 sudo emacs 中打開了文件(例如,使用 su 命令,因為另一個帳戶沒有) t具有sudo特權),然後將其保存。

我需要使用哪個帳戶來創建文件,以便該文件適用於所有用戶?
是否需要使用sudo命令? >是否需要更改文件許可權(例如,使用 chmod )?
是否有一種簡便的方法來獲取現有文件並更改其所有權,而不必重新創建文件?
有人可以解釋為什麼會發生此錯誤嗎?

ls -l為/Library/LaunchAgent/foo.plist提供了什麼
@Mark:它提供了以下內容:-rw-r--r-@@ 1個管理人員653 Oct 17 14:31 / Library / LaunchAgents / foo.plist`
也可以強制加載(`-F`)。
五 答案:
Michiel de Mare
2010-10-18 19:49:49 UTC
view on stackexchange narkive permalink

如果plist由root擁有並且可由root以外的用戶寫入,則存在安全問題。

您可以使用 sudo chown root <filename> 將所有者更改為root。 ,然後使用 sudo chmod 644 <filename> 更改權限(添加了4個用於讀取訪問權限,2個用於寫入訪問權限,1個用於執行訪問權限。第一個數字用於所有者,第二個數字用於組,第三個給大家。)

這可行。我只是對為什麼必須將所有者更改為root感到困惑。 root是用於LaunchAgents的用戶嗎?
是的,我想是這樣。
我知道這是一篇較舊的文章,但這是一個不錯的答案!我更改了/system/library/launchdaemons/com.apple.mdnsresponder的權限,以嘗試蘋果推薦的修復程序,但是稍後嘗試加載該修復程序時,我會遇到上述錯誤。如上所述,更改所有者和權限是恢復我的Internet連接的唯一方法。謝謝!
現在面對同樣的問題並解決了。我發現文件的所有者會調用`launchctl`。我以普通用戶身份創建了文件,並使用sudo執行。因此,錯誤。因為root不是文件的所有者,所以不需要`sudo`。我沒有`sudo`就跑了,而且效果很好。
Chris Johnsen
2011-05-05 08:21:56 UTC
view on stackexchange narkive permalink

來自 launchctl(1)聯機幫助頁 load 子命令的描述:

注意每個用戶的配置文件(LaunchAgents)必須由加載它們的用戶擁有。所有系統範圍的守護程序(LaunchDaemons)必須由root擁有。配置文件不能為組或世界可寫的。出於安全原因,這些限制已經到位,因為允許對已啟動的配置文件進行寫操作就可以指定要啟動的可執行文件。

launchctl 具有多個“可疑…”消息。例如,10.6.7的 launchd 代碼在其 launchctl.c 中有三個此類消息(請參見功能 path_goodness_check )。

  1. 文件的可疑權限(跳過):<pathname>
  2. 文件的可疑所有權(跳過):<pathname>
  3. 可疑路徑。不是常規文件或目錄(跳過):<pathname>
  4. ol>

    為避免這些消息,路徑名必須是(#3)常規文件或目錄 1 sup >(或與之鍊接的符號)是(#1)由root或調用用戶擁有,並且(#2)不是“組”或“其他”可寫的(即 chmod go-w )。

    1 sup>沒有命名管道,塊/字符特殊設備節點,本地域套接字等。


    您的文件可能歸管理員所有用戶,因為您說您以該用戶身份登錄時未收到消息(在這種情況下,路徑名歸調用用戶所有)。
    要使路徑名對其他用戶有效,應該由root擁有。

    要安排此操作,請執行以下操作:

      sudo chown root /Library/LaunchAgent/foo.plist 
Matt Strange
2014-12-09 03:30:23 UTC
view on stackexchange narkive permalink

感謝您的回答(將所有者更改為root),這就是我所需要的。

要使它比“我也是”的帖子還要多...我是通過複雜的路徑到達這裡的:我收到一個Launchdaemon的“此API只能由在Aqua會話中運行的進程使用的API”錯誤。尋找答案後,我進入了 Apple關於守護程序和代理的技術說明,其中解釋瞭如何解決“ Aqua會話”錯誤,但這給我帶來了“可疑所有權”問題。這就是我到達這裡的方式,解決了我的最後一個問題。

也許將所有這些內容添加到此討論中將導致一些搜索引擎將該頁面鏈接到一個先驅性問題,從而節省了一些未來的冒險家時間。

注意,這應該是評論而不是答案。
我會發表評論,但我的聲譽不高。(難道不是可以低聲望地回答但不發表評論嗎?)
radha
2011-11-09 20:47:58 UTC
view on stackexchange narkive permalink

對於用戶擁有的〜/ Library / LaunchAgent中的文件,而不是root擁有的文件,請不要使用sudo,如果要這樣做,因為要從root用戶加載文件,因此必須更改所有權

Maximo Pech
2012-07-16 08:42:43 UTC
view on stackexchange narkive permalink

當人們不知道 pseudocode>的工作方式時,就會發生這種情況。要禁用用戶擁有的文件上的服務,只需調用 launchctl 而不使用 sudo



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...